分布式 系列 Quorum算法

Posted by lichao modified on January 5, 2021

同步写即为强一致性,Quorum写为最终一致性。

问题描述

为了保证数据安全性,分布式存储在承诺用户写成功之前,必须保证多份副本持久化。假如需要等待最慢副本完成,在遇到有单机网络时延抖动、磁盘IO毛刺的场景下,可能会导致客户端时延上涨,用户写毛刺明显。Quorum 旨在优化存储写时延, 降低最慢副本长尾(毛刺)对写的影响。

名词解释

Quorum:同时写多个副本,多数副本返回写成功即返回用户成功。三副本场景有时也称为2-3异步。

全同步:跟Quorum对应,即全部副本都返回,才返回用户写成功。

lag副本:指同时写多副本时,较慢的副本。在时延上的表现为长尾或毛刺。

NWR模型

Amazon Dynamo的NWR模型,把CAP的选择权交给了用户,让用户自己选择CAP中的哪两个。

N代表N个副本(replication),W代表写入数据时至少要写入W份副本才认为成功,R表示读取数据时至少要读取R份副本。对于RW的选择,要求W+R>N

优化写性能(AP)

当需要优化写性能(写多读少)的时候,可以配置 W = 1 (写完一个副本就成功,其他的副本就异步去慢慢复制都可以),如果N=3,那么根据公式W+R>N,则R = 3(读取数据的时候需要读3个副本以判断数据是否有冲突)。 这种情况只要写任何节点成功就认为成功,但是读的时候必须从所有的节点都读出数据。

优化读性能(CP)

当需要优化读性能(读多写少)的时候,可以配置 W=N(写完所有的副本才成功,只能同步复制),根据公式W+R>N,则 R=1(只需读一个副本即可)。这种情况任何一个节点读成功就认为成功,但是写的时候必须写所有三个节点成功才认为成功。

满足AC

写单副本,读写性能会比较好。想满足 Consistency和 Availability 就只有单副本。当然损失了Partition tolerance。