同步写即为强一致性,Quorum写为最终一致性。
问题描述
为了保证数据安全性,分布式存储在承诺用户写成功之前,必须保证多份副本持久化。假如需要等待最慢副本完成,在遇到有单机网络时延抖动、磁盘IO毛刺的场景下,可能会导致客户端时延上涨,用户写毛刺明显。Quorum 旨在优化存储写时延, 降低最慢副本长尾(毛刺)对写的影响。
名词解释
Quorum:同时写多个副本,多数副本返回写成功即返回用户成功。三副本场景有时也称为2-3
异步。
全同步:跟Quorum对应,即全部副本都返回,才返回用户写成功。
lag副本:指同时写多副本时,较慢的副本。在时延上的表现为长尾或毛刺。
NWR模型
Amazon Dynamo的NWR模型,把CAP的选择权交给了用户,让用户自己选择CAP中的哪两个。
N
代表N
个副本(replication),W
代表写入数据时至少要写入W
份副本才认为成功,R
表示读取数据时至少要读取R
份副本。对于R
和W
的选择,要求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。