上一篇文章主要聊了Basic Paxos算法,而Multi-Paxos并不是一种算法,是一种算法思想。具体就是Basic Paxos解决的是对一个值达成共识。而后者是通过执行多次的Basic Paxos算法就多个值达成一致。具体的落地实现有Raft。
Muti-Paxos的问题
在Basic Paxos中,其实就是两个步骤,一个是准备请求,第二部就是接受请求。
但是如果Multi-Paxos是通过执行多次的Basic Paxos来完成的,那么整个过程中其实没有办法保证准备请求和接受请求前后的顺序一致性。
从而可能导致有一半以上的阶段不会返回结果。
第二个就是因为整个过程中是在分布式环境下,所以需要进行网络通信,所以多次的请求和准备,比较耗费性能,延迟大。
领导者
通过引入一个领导者,作为唯一的提议者。但是领导者就需要通过Basic Paxos算法进行选举。
优化流程
当领导者趋于稳定的时候,我们可以通过省掉准备阶段,直接进入接受阶段。在很大程度上可以减少往返的消息数,提升性能,降低延迟。
Chubby的实现
Chubby的实现其实主要包含以下几点
- 引入leader节点作为唯一的提议者,并且通过Basic Paxos算法进行投票选举产生。主节点通过不选序租的方式。
- 当主节点稳定的时候,省掉准备阶段。
- 成员变更,可以保证节点变更的时候集群稳定运行。
- 实现强一致性。读写都在主节点上。
但是这样就会导致主节点的并发性能不会太高。因为主节点同时承担的读和写,写block会导致读的block。