一致性模型
一致性描述了在競爭性變化中讀者看到的值和順序。正確的模型選擇是不變量的嚴謹性,潛伏性,可用性和成本(PACELC)之間的平衡。下面-模型及其應用的實用手冊。
1)「嚴格」模型
線性(線性可變性,Strong)
行為好像所有操作都是以尊重真實時間的某種統一順序立即執行的。
優點:一個簡單的心理模型,對金錢和獨特性是安全的。
缺點:法定人數/領導者→ p95/p99的增長,特別是在區域間。
Yuzkeiss:資產負債表,嚴格限制的庫存,獨特的名稱/密鑰。
Sequential consistency
所有線程都看到相同的操作順序,但實際時間順序並不必要。略微弱於linearizable,很少直接暴露在產品中。
Serializable(事務序列化)
等效於某些串行事務順序(而非單個操作)。
優點:在查詢/表中復雜不變量的正確性。
缺點:成本更高(阻塞/轉化/沖突驗證)。
Yuzkeiss:復雜的鞭打,一致性的重新計票,庫存。
Snapshot Isolation (SI)
每個事務都會讀取不變的時間快照;條目在「相同字符串」上發生沖突,但寫作skew是可能的。
優點:快速無鎖讀取,穩定報告。
缺點:不可序列化,陷阱寫作skew(例如:值班醫生)。
Yuzkeys:分析,報告,大多數CRUD沒有剛性不變量。
2)會期及因果保證
Read-Your-Writes (RYW)
錄音後的客戶總是會在隨後的閱讀中看到它。
優點:良好的UX(形式→確認)。
缺點:本地保修,非全局保修。
Monotonic Reads / Writes
讀數不會「回滾」。一個客戶端的條目按發送的順序應用。
Causal Consistency(因果關系)
如果操作依賴於另一個(A → B),則每個人都在B之前看到A。
優點:直觀的sots-fids,評論。
缺點:更難路由和因果關系標記(矢量時鐘)。
Yuzkeiss:通訊,聯合編輯,事件提要。
3)弱和混合模型
Bounded Staleness
讀數可能不超過Δ t或N版本。
優點:可預測的UX,區域間良好的權衡。
缺點:不能防止記錄沖突。
Eventual Consistency
隨著時間的流逝,所有副本都收斂。命令和延遲不能保證。
優點:最低潛伏率/成本,高可用性(AP)。
缺點:需要顯式merge (CRDT/域規則)。
Yuzkeys:緩存,fids,度量,喜歡,nen關鍵參考書。
4)類型異常及其含義
骯臟的讀取:讀取未讀取的數據。
非重復讀數:事務中的相同讀數會產生不同的值。
Phantom:在重新查詢時,將出現/消失符合謂詞的字符串。
Write Skew(在SI中):兩個事務讀取相交的不變量並寫下不同的行,從而違反了「總和必須≥ 1」的條件。
失落更新:記錄「掩蓋」競爭對手的變化。
5)定額和讀/寫水平
許多存儲允許設置「R」/「W」級別(讀/寫副本的數量)。
法定人數(R+W> N)給出了「交叉」和對最新條目的強讀保證。
W=1,R=1 →低延遲,但舊數據是可能的。
調音:關鍵操作是高「W」(或領導者),其他操作是低「R」的速度。
Read-repair/Hinted手持有助於在背景中獲得一致性。
6)時鐘和順序: 我們如何「理解」因果關系
Lamport clocks:部分事件順序。
Vector clocks:捕獲因果關系,允許檢測沖突。
Hybrid/TrueTime方法:限制集群中時鐘的散布,以排序事務和邊站。
Version: 「version/ts+actor」 for merge;在CRDT中,是封閉的半群(可交換/冪等)。
7) CRDT和域名merge
CRDT(聚合/復制數據類型)可保證收斂而無需協調:G-Counter,OR-Set,LWW-Register,Map,文本OT/WOOT變體。
有用時:喜歡,多個標簽,購物車,文檔。
局限性:為特定域實體提出正確的「合並」語義。
8)與CAP/PACELC的通信
多區域中的嚴格模型(Linearizable/Serializable)→潛伏期增長的CP(PACELC:選擇C並支付L)。
弱/混合模型→ AP和/或低L,但需要混合/沖突混合。
混合體:用於不變量+AP投影/讀取緩存的CP內核。
9)型號選擇: 支票單
1.不變量:什麼不能被破壞?(唯一性,平衡,限制)。
2.區域性:記錄/讀取在哪裏?(本地/全球)。
3.潛伏期SLO: p95/p99用於關鍵路徑?
4.協調價格:準備支付區域間法定人數?
5.沖突: 是否存在確定性問題,或者是否需要協調員?
6.UX期望:RYW/monotonic/causal對客戶很重要?
7.可觀察性:如何衡量差/沖突/過時程度?
8.Folbacks:網絡分離(P)會發生什麼?是否僅讀取/本地記錄/隊列?
10)快速食譜
付款/余額:Linearizable/Serializable,領導者+法定人數,短時間;讀取RYW。
Profile/fid:causal/Bounded staleness+緩存;喜歡/計數器的CRDT;作者的RYW。
搜索/分析:SI/Read Committed,異步投影,事件索引。
全球SaaS:Geo partitioning;「家庭記錄」-CP,報告/目錄-AP。
聯合編輯:因果/事件+CRDT/OT;保存「歷史」。
11)一致性可觀察性
Lag度量標準:「replication_lag」,「staleness_age_ms」(p50/p95/p99)。
沖突:沖突比例,平均解決時間。
法定人數:「R/W」法定人數的成功,區域間路徑的時間表。
客戶端保修:RYW/monotonic-會話預告標簽。
12)典型錯誤
要求Strong「無處不在」,沒有商業基礎,→潛伏和成本的爆炸。
雙寫到不同的區域,沒有傳奇/CRDT →幻影和不變量損失。
忽略UX中的RYW/單調性 →新發送的「丟失」數據。
不跟蹤緩存/投影過時→「永恒」差異。
考慮不周的商品→意想不到的損失/價值。
13)迷你建築基準
寫核心(CP):領導者,法定記錄,SLO和taymout,雜誌。
閱讀平面(AP):實例化視圖、TTL緩存、閱讀修復。
客戶端:sticky-session/會話保修 (RYW/monotonic),版本標簽。
沖突引擎:CRDT/域規則,手動解決隊列。
監測:瀉湖,沖突,過時閱讀的比例。
結論
一致性模型是數據,延遲和可訪問性之間的工程合同。從不變量和SLO開始,嚴格選擇需要的地方,在可能的地方更弱,不要忘記客戶保證、法定人數、時鐘和可觀察性。有能力的模型組合提供了規模、可預測性和可持續性--而不犧牲商業真理和用戶信任。