知识卡片

NWR协议保证多副本一致性的数学条件

专业/工作 · 556.a

内容

NWR(Quorum仲裁)用三个数字描述副本一致性的取舍:N是副本总数,W是一次写操作至少要成功更新多少份副本才算写成功,R是一次读操作至少要读多少份副本才算读成功。只要W+R>N,任何一次读操作读到的副本集合和任何一次写操作更新过的副本集合必然存在交集,也就保证不会读到一份完全没被最新写入触达的旧数据;再进一步,只要W>N/2,就能保证任意两次写操作不会同时成功写入完全不重叠的副本集合,从而避免并发写冲突。Swift默认N=3、W=2、R=2,恰好满足W+R>N=4>3。发散:NWR把”一致性”从一个模糊的定性描述变成了一组可以精确计算和调节的数字——想要更强的读一致性就调高R,想要更快的写就调低W,只要不等式仍然成立,具体怎么在读写性能之间分配就是一个可以按业务场景自由调节的旋钮,而不是非此即彼的选择。

参考来源

《Linux开源存储全栈详解从Ceph到容器存储》第8章《OpenStack存储》