兰伯特提出的Paxos算法包括2个部分:
- 一个是Basic Paxos算法,描述的是多节点之间如何就某个值(提案value)达成共识
- 另一个是Multi-Paxos思想,描述的是执行多个Basic Paxos实例,就一系列值达成共识
1、Basic Paxos
一个分布式集群由节点A、B、C组成,提供只读KV存储服务。创建只读变量的时候,必须要对它进行赋值,而且这个值后续没办法修改。因此一个节点创建只读变量后就不能再修改它了,所以所有节点必须要先对只读变量的值达成共识,然后所有节点再一起创建这个只读变量
当有多个客户端访问这个系统,试图创建同一个只读变量,客户端1试图创建值为3的X,客户端2试图创建值为7的X,这样如何达成共识,实现各节点上X值的一致呢?

1)、Basic Paxos中的三种角色
在Basic Paxos中,有提议者(Proposer)、接受者(Acceptor)、学习者(Learner)三种角色,他们之间的关系如下:

- 提议者(Proposer):提议一个值,用于投票表决。集群中收到客户端请求的节点是提议者
- 接受者(Acceptor):对每个提议的值进行投票,并存储接受的值。集群中所有节点都在扮演接受者的角色,参与共识协商,并接受和存储数据
一个节点可以身兼多个角色。如下图,一个3节点的集群,1个节点收到了请求,那么该节点将作为提议者发起二阶段提交,然后这个节点和另外2个节点一起作为接受者进行共识协商

- 学习者(Learner):被告知投票的结果,接受达成共识的值,存储保存,不参与投票的过程。一般来说,学习者是数据备份节点,比如Master-Slave模型中的Slave,被动地接受数据,容灾备份
这3种角色在本质上代表的是3种功能:
- 提议者代表的是接入和协调功能,收到客户端请求后,发起二阶段提交,进行共识协商
- 接受者代表投票协商和存储数据,对提议的值进行投票,并接受达成共识的值,存储保存
- 学习者代表存储数据,不参与共识协商,只接受达成共识的值,存储保存
2)、如何达成共识
在B

最低0.47元/天 解锁文章
7083

被折叠的 条评论
为什么被折叠?



