
在鼴鼠王國中,「蚯蚓漢堡」以連鎖經營聞名。為了慶祝周年慶,總部宣布每位會員可以領取一條「限量金箔紀念蚯蚓」。然而,地底下的通訊隧道(網路)經常因為地殼變動或其他動物的挖掘而坍方。身為分店經理,你必須在 CAP 定理的三角難題中做出選擇,確保紀念蚯蚓的發放活動能夠順利地進行。
一、 CAP 的三大核心:鼴鼠的經營守則
1. C (Consistency) 一致性:帳目不能錯
- 鼴鼠視角: 如果小鼴鼠在台北店領走了最後一條紀念蚯蚓,那麼台南店的儲藏室清單必須「同步瞬間更新」為 0。
- 核心價值: 不管客人在哪家分店詢問,得到的答案必須完全相同且最新。這就像「銀行帳本」,差一條蚯蚓都不行!
2. A (Availability) 可用性:服務不能停
- 鼴鼠視角: 不管櫃檯的鼴鼠店員能不能聯絡上總部,只要有客人上門領蚯蚓,就必須給出回應。
- 核心價值: 系統必須隨時可用。這就像「社交媒體」或「線上遊戲」,就算資訊稍微有延遲,例如按讚數沒有即時更新,也不能中斷服務而影響到客戶的使用者體驗。
3. P (Partition Tolerance) 分區容錯性:隧道斷了,店還是要開
- 鼴鼠視角: 萬一台北到台南的通訊隧道坍方了(網路斷線),分店不能直接宣布暫停營業,必須想辦法繼續營運。
- 核心價值: 這是分散式系統的必備特質。在現實世界中,網路故障(P)是必然會發生的(隧道隨時可能坍方),因此分散式系統必須具備分區容錯性(P),這樣連鎖店才能在隧道中斷時繼續運行。 既然 P 是必選項,而 CAP 三者無法同時滿足,鼴鼠經理就只能在「保 C(一致性)」或「保 A(可用性)」之間二選一。
- 小補充:CA 系統(同時保證一致性和可用性)只存在於「只有一家店的鼴鼠小吃攤」(單機資料庫),因為沒有分店就不需要擔心隧道坍方!
二、 現實的取捨:當隧道坍方時...
當通訊中斷(P 發生)時,各分店的鼴鼠經理會分裂成兩派經營哲學:
CP 陣營:寧可關門,也要正確
有此傾向的選手:MongoDB, Redis, HBase
- 策略: 如果分店無法聯繫上總部確認剩餘數量,經理會下令:「為了防止超發紀念蚯蚓,本店暫停領取服務!」
- 優點: 絕對不會發生「只有 100 條卻發出 101 條」的尷尬情況。
- 缺點: 斷網期間,客人可能會因領不到蚯蚓而客訴,大幅影響使用者體驗,可用性(A)直接歸零。
AP 陣營:寧可算錯,也要服務
有此傾向的選手:Cassandra, DynamoDB
- 策略: 即使聯繫不上總部,經理還是會說:「沒關係,先發給客人!」等隧道修好後,我們再比對各店領取紀錄。
- 優點: 客人永遠能領到蚯蚓,體驗極佳,可用性(A)滿分。
- 缺點: 可能會發生「超發」的情況(不一致),或者分店在接受客戶的預約訂單後才發現庫存不足等問題,事後需要鼴鼠會計師辛苦地進行人工校對(在人類社會中,通常是透過程式自動比對資料),以在最終達到一致性(C)。
然而,專業的鼴鼠經理知道,這個世界並非只有黑與白。現代資料庫(如 MongoDB 或 DynamoDB)通常提供「可調整的一致性等級」(tunable consistency),而非只能在 CP 和 AP 之間二選一,而是可以根據不同業務場景進行客製化調整。
三、經理的抉擇,該選擇哪種設計?
鼴鼠經理的經驗告訴我們:沒有完美的資料庫,只有最符合當下需求的選擇,不同的業務需要不同的策略。根據我們剛才的討論,兩大陣營的使用情境可以歸納如下:
1. AP 陣營 (可用性優先):玩家體驗與社交互動
當目標是「流暢度」及「使用者體驗」,且「錯誤成本低」時,AP 是首選。
- 遊戲戰鬥與虛擬寶物: 海底電纜經常會被鯊魚咬斷,而在線上遊戲中,讓玩家能夠繼續玩(A)比精確同步虛擬寶物數量(C)更重要。多發一份數位資料的成本極低,卻能換來玩家的好評,而如果發生玩到一半斷線的情形,工程師的祖宗十八代可能都會被憤怒的玩家挖出來。
- 社交媒體按讚: 台北的朋友在發文後馬上獲得 10 個讚,即使同一時間高雄的朋友看到的是 0 個讚也沒關係,因為按讚數不需要「即時絕對精確」。系統會追求「最終一致性」,等網路修好後再把讚數更新到一致即可。
2. CP 陣營 (一致性優先):金錢交易與關鍵資料
當目標是「絕對正確」且「錯誤成本極高」時,必須選 CP。
- 銀行帳戶與 ATM: 金融餘額不能有絲毫偏差。如果因為斷網導致帳戶透支(C 出錯),可能會引發法律風險與信任危機。在這種情況下,寧願讓 ATM 暫停服務(犧牲 A),也不能讓錢錢消失不見。
- 醫療與身分紀錄: 像是血型、過敏史或門診預約,一旦出現錯誤可能危害生命,這類系統通常也會傾向保證資料的唯一正確性。
四、下集預告:PACELC 定理
鼴鼠經理的旅程還沒結束!
你可能會問:「如果隧道沒有坍方,鼴鼠經理還需要做選擇嗎?」 問得好!即使在風平浪靜的日子裡,鼴鼠經理還是得在「快速回應客人(低延遲)」和「等所有分店確認(一致性)」之間做出抉擇。
下一篇文章,我們將探討 PACELC 定理——CAP 定理的延伸版本,敬請期待。

















