前幾天不斷提到取捨、選擇、犧牲、放棄、追求......等行為,到底取什麼捨什麼?
以社群媒體的情境來考慮,用戶會期望可以隨時隨地滑手機看到好友們的新動態。如果暫時性的看到舊資料像是按讚數量差了兩個人沒什麼大不了,下次重新整理看到新的資料就好。但每個用戶每天都在發大量的照片、文章或限動因此需要可以穩定應付資料量成長的資料庫,不難理解設計系統時的選擇。
另一種情境,如果今天存款戶頭出現「暫時性」的舊金額,問題就大條了。如果我戶頭原本有10000元,信用卡扣款扣了3000元,然而ATM卻以為我的戶頭還有10000元,於是我就領了10000元現金走,這是不可接受的狀況,如果因此系統慢有時會需要下線進入維護升級期間導致無法使用,那就之後再使用吧!
CAP 理論的 CAP 分別代表 Consistency、Availability 和 Partition Tolerance,當今天資料分布在多台設備時,這三個特性只能同時滿足兩個,不可能全滿足。
若符合 CA,表示所有的節點間都要持續連線,彼此之間同步資料到一致的狀態才可回應,這表示當其中一個節點無法進行同步時,系統就無法回應,代表整個系統都不可用。
若符合 AP,其實就是之前提到的 BASE 特性,部分節點無法與其他節點連線進行同步時該節點仍可繼續提供服務,只是有可能取不到最新的資料。
若符合 CP,則可以達到 ACID 特性,無法使用的節點會被切分出去,在其他正常節點完成同步達成強一致性後回應,但被切分出去的節點變為不可用狀態。
因此在設計系統時必須考量到應用的情境,來決定 CAP 三者要捨棄哪一項,才會是最符合需求的方案。