You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sloppy Quorum能否保证强读一致性?我的推理是否有误?

关于Sloppy Quorum一致性的疑问与推理分析

在《Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable and Maintainable Systems》一书中,关于Sloppy Quorum有如下描述:

然而,这意味着即使w + r > n,你也无法确保读取到某个键的最新值,因为最新值可能暂时被写入到n个节点之外的某些节点中。

我无法理解这段话的含义,下面以客户端为键“K1”写入不同值为例进行分析:

假设配置

  • 副本数:N=3
  • 写入成功前需确认的节点数:W=2
  • 读取成功前需接收的响应数:R=2
  • 可用节点:A、B、C、D、E

满足W+R>N。初始状态下,A、B、C节点中存储键值对(K1,V1)。

写入与读取场景分析

随后假设A、B节点故障,(K1,V1)从C复制到D和E(因N=3),之后客户端在Sloppy Quorum配置下写入(K1,V2)。我的理解是,为避免像Strict Quorum配置那样阻塞写入操作,我们会使用C、D、E节点来写入并复制(K1,V2),且需要其中2个节点的确认。假设收到了C和D的确认,写入成功。

现在另一个客户端要读取K1的值,需要2个响应,存在三种情况:

  1. C和D先响应:我们肯定能得到(K1,V2),因为这两个节点已确认写入(K1,V2)
  2. C和E先响应:可能得到两个(K1,V2),也可能在复制到E未完成时,得到C返回的(K1,V2)和E返回的(K1,V1)。后者可通过Vector Clock等版本算法解决冲突,只要系统能处理冲突就能确保得到(K1,V2)(这种冲突在Strict Quorum配置中也可能出现,并非Sloppy Quorum导致)
  3. D和E先响应:情况与上述C和E的情况相同。

由此我认为,只要系统能处理冲突(这也是Strict Quorum配置需处理的),Sloppy Quorum系统就能保证强读一致性,返回(K1,V2),但这与书中描述不符。我的推理是否存在问题?

【2024年12月31日编辑】:数月后重读该问题,我想将“随后假设A、B节点故障,客户端在Sloppy Quorum配置下写入(K1,V2)”修改为“随后假设A、B节点故障,(K1,V1)从C复制到D和E(因N=3),之后客户端在Sloppy Quorum配置下写入(K1,V2)”,以便明确E后续可能返回(K1,V1)的原因。


内容的提问来源于stack exchange,提问作者Yas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:03:20