一致性模型
一致性描述了在竞争性变化中读者看到的值和顺序。正确的模型选择是不变量的严谨性,潜伏性,可用性和成本(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开始,严格选择需要的地方,在可能的地方更弱,不要忘记客户保证、法定人数、时钟和可观察性。有能力的模型组合提供了规模、可预测性和可持续性--而不牺牲商业真理和用户信任。