2 有2个属性:长length、宽width

Quorum的定义如下:假设有N个副本,更新操作wi在W个副本中更新成功之后,才认为此次更新操作wi成功,把这次成功提交的更新操作对应的数据叫做:“成功提交的数据”。对于读操作而言,至少需要读 R 个副本才能读到此次更新的数据,其中,W+R>N ,即 W 和 R 有重叠,一般,W+R=N+1。

N = 存储数据副本的数量

W = 更新成功所需的副本

R = 一次数据对象读取要访问的副本的数量

扫描二维码关注公众号,回复: 10963619 查看本文章

Quorum就是限定了一次需要读取至少N+1-w的副本数据,听起来有些抽象。

举个例子,我们维护了10个副本,一次成功更新了三个,那么至少需要读取八个副本的数据,可以保证我们读到了最新的数据。

Quorum 的应用

Quorum机制无法保证强一致性,也就是无法实现任何时刻任何用户或节点都可以读到最近一次成功提交的副本数据。

Quorum 机制的使用需要配合一个获取最新成功提交的版本号的 metadata 服务,这样可以确定最新已经成功提交的版本号,然后从已经读到的数据中就可以确认最新写入的数据。

Quorum 是分布式系统中常用的一种机制,用来保证数据冗余和最终一致性的投票算法,在 Paxos、Raft 和 ZooKeeper 的 Zab 等算法中,都可以看到 Quorum 机制的应用。

Paxos算法的相关概念

在 Paxos 协议中,有三类节点角色,分别是 Proposer、Acceptor 和 Learner,另外还有一个 Client,作为产生议题者。 技术图片

上述三类角色只是逻辑上的划分,在工作实践中,一个节点可以同时充当这三类角色。

Proposer 提案者

Proposer可以有多个,在流程开始时,Proposer提出议案,也就是value,所谓value,在工程中可以是任何操作,比如 “修改某个变量的值为某个新值”,Paxos协议中统一将这些操作抽象为value。

不同的Proposer可以提出不同的甚至矛盾的value,比如某个Proposer提议“将变量X设置为1”,另一个 Proposer 提议 “将变量 X 设置为 2”,但对同一轮 Paxos 过程,最多只有一个 value 被批准。

Acceptor 批准者

在集群中,Acceptor 有 N 个,Acceptor 之间完全对等独立,Proposer 提出的 value 必须获得超过半数(N/2+1)的 Acceptor 批准后才能通过。

Learner 学习者

Learner 不参与选举,而是学习被批准的 value,在Paxos中,Learner主要参与相关的状态机同步流程。

这里Leaner的流程就参考了Quorum议会机制,某个value需要获得W=N/2+1的Acceptor批准,Learner需要至少读取N/2+1个Accpetor,最多读取 N 个 Acceptor 的结果后,才能学习到一个通过的 value。举个例子:

我有10个Accpetor,至少读取6个相同的value,最多读取10个相同的value。也就是选取票数最多的结果。

Client 产生议题者

Client 角色,作为产生议题者,实际不参与选举过程,比如发起修改请求的来源等。 Proposer 与 Acceptor 之间的交互

Proposer与Acceptor之间的交互

Paxos 中,proposer提交给Acceptor,由Acceptor达成一致选取最终的value,然后告诉Learner最终的value。

猜你喜欢

转载自www.cnblogs.com/app574/p/12735306.html
2
>&2
α2