蚯蚓漢堡的全球擴張之路:從 CAP 到 PACELC 定理

更新 發佈閱讀 5 分鐘
vocus|新世代的創作平台

在鼴鼠王國中,經營一家「全球連鎖」的漢堡店並不簡單。在上一篇文章我們討論過,當通訊隧道(網路)坍方時,經理必須在 一致性 (C) 可用性 (A) 之間做抉擇。但現實是:隧道有 99.99 % 的時間都是通的!那麼專門處理網路斷線的 CAP 定理 還有用嗎?

當然!當隧道正常時,優秀的鼴鼠經理知道,這就是 PACELC 定理 登場的時候。

什麼是 PACELC 定理?

我們可以把這個很難記的字串拆解成兩段邏輯:P-A-CE-L-C

小技巧:PACELC 的念法是「pass-elk」(像是「通過麋鹿」)

第一部分:P-A-C(當隧道坍方時...)

這就是上回介紹的經典 CAP 定理。當分區 (Partition) 發生,通訊中斷時,需要選擇:

  • 選 A (Availability):紐約店聯繫不上台南總部,但為了不讓客人失望,店面照常營業,繼續賣漢堡!
  • 選 C (Consistency):紐約店聯繫不上台南總部,為了怕帳目出錯,直接掛上「暫停營業」的告示牌。

第二部分:E-L-C(否則,當隧道正常時...)

Else (否則),當隧道暢通無阻時,經理的煩惱變成要選擇「速度」或者「品質」:

  • 優先 L (Latency):追求低延遲(速度),接受短暫不一致。客人點完餐,紐約店立刻給貨,然後在背景慢慢發信通知全球分店更新庫存, 通常幾秒到幾分鐘內就會同步完成(最終一致性)。
  • 優先 C (Consistency):追求強一致性(品質),接受較高延遲。客人點完餐,紐約店必須先打跨國電話即時確認全球帳本都同步好了,才敢把賣出一份漢堡給客人。

實戰演練:限量「黃金蚯蚓」的抉擇

身為一名優秀的鼴鼠經理,要如何根據不同商品調整經營陣營?

1. PA / EL 陣營:追求極致速度的「普通漢堡」

  • 情境: 如果只是普通的蚯蚓漢堡,經理可以決定,只要紐約店確認賣出,不需要等台南總部回覆,就直接給客人漢堡,因為蚯蚓漢堡的庫存有很多,即使帳本有個一兩份的誤差也沒關係。這就是用「一致性風險」換取「低延遲」。
  • 經營學: 隧道斷了要繼續賣 (PA),隧道正常時結帳更要快 (EL)。
  • 代表: 社交媒體、線上遊戲等。這類系統追求使用者的最佳體驗,快比準重要。

2. PC / EC 陣營:守護誠信的「限量黃金蚯蚓」

  • 情境: 全球限量 100 份,如果客戶已經預訂好,但最後因為庫存不足而必需取消,公司將名譽掃地。因此,經理可以決定,即使客戶的結帳時間會拉長,也要確保有足夠的庫存後,才會賣出一份「限量黃金蚯蚓」。
  • 經營學: 紐約店聯繫不上台南總部,為了怕帳目出錯, 拒絕接受新訂單 (PC),但仍然可以查詢舊資料。只有等隧道修好,才恢復正常營業,但仍要慢慢確認庫存 (EC)。​
  • 代表: 傳統金融資料庫、秒殺購物系統等。由於本來就是限量商品,客戶買不到會感到預期中的失望,但「買到卻被取消訂單」會非常憤怒!

全球系統大多是 PA / EL ?

你可能會問:「為什麼 Facebook 或 Google 之類的跨國服務,用起來都像是 PA / EL?」 答案是:物理限制

當你的漢堡分店開在美國與台灣,光速傳輸雖然快但也是有極限的。例如,一次跨太平洋的 RTT(Round Trip Time)大約在 150ms-200ms,因此若選擇 EC,表示每一次資料更新都要等待這段物理延遲。如果為了追求 EC (正常時保一致),台灣人按個讚都要等美國伺服器回傳確認,就為了等按讚數 + 1,那每個人都會滑臉書滑到想摔手機。

因此,全球規模的系統通常實踐 「最終一致性」

「現在先讓在台灣的你(L/速度)即時地換好大頭貼,雖然美國的朋友現在(E/正常時)還沒看到,但放心,幾秒鐘後他們就會看到最新的照片(最終一致性)!」


結語

當下一次在搶票、訂飯店、或者只是漫無目的地刷Threads,看到畫面上出現轉圈圈時,我們可以思考:畫面背後的這位鼴鼠經理,他的經營策略是什麼?他要的是快?還是準?他為什麼這樣選?

留言
avatar-img
dizzydog的沙龍
4會員
19內容數
親愛的訪客您好!我是 dizzydog,一位熱衷於前端技術的工程師。這個部落格是我的數位筆記本,記錄著我在程式開發路上的各種發現、挑戰與突破。我相信「輸出」是最有效的學習方式,透過清晰地表達所學,不僅能加深自己的理解,也能幫助其他走在相同道路上的開發者。 歡迎您在這裡探索以及交流。
dizzydog的沙龍的其他內容
2026/03/17
本文以「蚯蚓漢堡」連鎖店為例,透過故事說明 CAP 定理的三大核心:一致性(C)、可用性(A)與分區容錯性(P)。當網路中斷時,系統必須在 C 與 A 之間取捨,形成 CP 與 AP 兩種設計策略。文章並結合實務案例,說明不同業務場景下的選擇原則。
Thumbnail
2026/03/17
本文以「蚯蚓漢堡」連鎖店為例,透過故事說明 CAP 定理的三大核心:一致性(C)、可用性(A)與分區容錯性(P)。當網路中斷時,系統必須在 C 與 A 之間取捨,形成 CP 與 AP 兩種設計策略。文章並結合實務案例,說明不同業務場景下的選擇原則。
Thumbnail
2026/02/26
1莫耳鼴鼠同時搶蚯蚓會發生什麼事?本文用鼴鼠王國的「儲藏室管理條例」,帶你秒懂資料庫的ACID特性!從靈異事件(髒讀、幻讀)到門牌防禦系統(共享鎖、排它鎖),再到恐怖的死鎖僵局,一次搞懂為什麼銀行轉帳不會出錯、搶票系統為何要排隊。
Thumbnail
2026/02/26
1莫耳鼴鼠同時搶蚯蚓會發生什麼事?本文用鼴鼠王國的「儲藏室管理條例」,帶你秒懂資料庫的ACID特性!從靈異事件(髒讀、幻讀)到門牌防禦系統(共享鎖、排它鎖),再到恐怖的死鎖僵局,一次搞懂為什麼銀行轉帳不會出錯、搶票系統為何要排隊。
Thumbnail
2026/02/11
這篇文章以鼴鼠的居住環境比喻SQL與NoSQL資料庫的差異,詳細解釋兩者的優缺點、一致性問題,以及在MongoDB中的應用策略,幫助讀者理解如何根據需求選擇最適合的資料庫。
Thumbnail
2026/02/11
這篇文章以鼴鼠的居住環境比喻SQL與NoSQL資料庫的差異,詳細解釋兩者的優缺點、一致性問題,以及在MongoDB中的應用策略,幫助讀者理解如何根據需求選擇最適合的資料庫。
Thumbnail
看更多
你可能也想看
Thumbnail
※ 為什麼我們需要 Transaction? 當我們談到 Transaction(交易)時,指的是一組不可分割的 SQL 操作。這些操作結果只能成功或失敗,以確保資料庫的一致性和完整性。Transaction 是資料庫操作中的一個「邏輯單位」,包含多個操作步驟。如果其中任何一個步驟失敗,整個 Tr
Thumbnail
※ 為什麼我們需要 Transaction? 當我們談到 Transaction(交易)時,指的是一組不可分割的 SQL 操作。這些操作結果只能成功或失敗,以確保資料庫的一致性和完整性。Transaction 是資料庫操作中的一個「邏輯單位」,包含多個操作步驟。如果其中任何一個步驟失敗,整個 Tr
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
Thumbnail
※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
Thumbnail
聚合函數 可以對資料的筆數、平均、最大、最小和加總的運算,提供查詢結果:如下表示: COUNT(Column):計算筆數,「*」是統計紀錄數。 AVG(Column):計算欄位平均值。 MAX(Column):計算欄位最大值。 MIN(Column):計算欄位最小值。 SUM(Colum
Thumbnail
聚合函數 可以對資料的筆數、平均、最大、最小和加總的運算,提供查詢結果:如下表示: COUNT(Column):計算筆數,「*」是統計紀錄數。 AVG(Column):計算欄位平均值。 MAX(Column):計算欄位最大值。 MIN(Column):計算欄位最小值。 SUM(Colum
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
※ 功能: 刪除表格中的資料。 ※ 語法: DELETE ON DELETE CASCADE DELETE JOIN ※ DELETE • 語法 : DELETE FROM table_name WHERE condition FROM 後面接上表格的名字:這是想要刪除資料的表
Thumbnail
※ 功能: 刪除表格中的資料。 ※ 語法: DELETE ON DELETE CASCADE DELETE JOIN ※ DELETE • 語法 : DELETE FROM table_name WHERE condition FROM 後面接上表格的名字:這是想要刪除資料的表
Thumbnail
本文彙整了一些關於 SQL 效能優化的技巧,提供讀者更快的資料處理方案。包括如何清空資料表、獲取最新資料、總和資料時的可能問題以及評估 SQL 語句效能的方法。通過合理的指令使用,能夠大幅提升查詢效率並降低錯誤發生的機率。適合資料庫管理者和程式開發者作為參考。
Thumbnail
本文彙整了一些關於 SQL 效能優化的技巧,提供讀者更快的資料處理方案。包括如何清空資料表、獲取最新資料、總和資料時的可能問題以及評估 SQL 語句效能的方法。通過合理的指令使用,能夠大幅提升查詢效率並降低錯誤發生的機率。適合資料庫管理者和程式開發者作為參考。
Thumbnail
已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
Thumbnail
已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
Thumbnail
多條件查詢 AND運算子 SELECT *​ FROM your_table_name WHERE column1 LIKE '_value1%' AND column2 = number​2 OR運算子 SELECT *​ FROM your_table_name WHERE colu
Thumbnail
多條件查詢 AND運算子 SELECT *​ FROM your_table_name WHERE column1 LIKE '_value1%' AND column2 = number​2 OR運算子 SELECT *​ FROM your_table_name WHERE colu
Thumbnail
查詢範圍 指定欄位 SELECT column1, column2, column3,... FROM your_table_name 不重複欄位 SELECT DISTINCT column1 FROM your_table_name 欄位別名 SELECT column1 A
Thumbnail
查詢範圍 指定欄位 SELECT column1, column2, column3,... FROM your_table_name 不重複欄位 SELECT DISTINCT column1 FROM your_table_name 欄位別名 SELECT column1 A
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News