一致性

Paxos算法

Paxos是一种基于消息传递且具有高度容错特性的一致性算法。

参与角色:

  • Proposer: 倡议者可以提出提案以供投票表决

  • Acceptor:提案接收者,并可以进行投票表决

  • Learner:提案接受者,没有投票权

条件:

  1. 一个Acceptor必须批准它收到的第一个提案

  2. 如果一个提案[M,V]被选定后,那么之后任何Proposer产生的编号更高的提案,其Value值都为V

算法陈述:

Paxos算法需要一个类似于两阶段提交的执行过程。

阶段一:

  1. Proposer选择一个提案编号N,然后向Acceptor的某个超过半数的子集成员发送编号为M的Prepare请求。

  2. 如果一个Acceptor收到一个编号为M的Prepare请求,且编号N大于该Acceptor已经响应的所有Prepare请求的编号,那么它就会将它已经批准过的最大编号的提案作为响应反馈给Proposer,同时该Acceptor会承诺不会再批准任何编号小于N的提案。

阶段二:

  1. 如果Proposer收到来自半数以上Acceptor对其发出编号为N的Prepare请求的响应后,那么它就会发送一个针对[N,V]提案的Accept请求给半数以上的Acceptor。注意:V就是收到的响应中编号最大的提案的值,如果响应中不包含任何提案,那么V就由Proposer自己决定。

  2. 如果Acceptor收到一个针对[N,V]提案的Accept请求,只要该Acceptor没有对编号大于N的Prepare请求做出过响应,它就接受该提案。

ZAB协议

所有事务请求必须由一个全局唯一的服务器来协调处理,这样的服务器被称为Leader服务器,而余下的其他服务器则成为Follower服务器。Leader服务器负责将一个客户端事务请求转换成一个事务Proposal(提议),并将Proposal分发给集群中所有的Follower服务器。之后Leader服务器需要等待所有Follower服务器的反馈,一旦超过半数的Follower进行了正确的反馈后,那么Leader就会再次向所有的Follower服务器分发Commit消息,要求其将前一个Proposal进行提交。

Last updated