0.原文地址
1.Paxos算法简介
Paxos算法是一个分布式一致算法,也就是在异步,荡机,失联的复杂网络环境下仍然能够保证读写的一致性。在实现上本质上也是一种两阶段提交的机制,在算法里有接受者,提议者和学习者三种角色。提议者提出读写请求,接收者对请求进行许可性判断,学习者直接学习(更新)值。Paxos算法相对于经典的两阶段提交,generalize了leader这个角色,使用接受者进行了替代。但是Paxos算法也是基于以下几个assumption的,1)被大多数接受者通过的提议没法再变更(保证问题的可解性)2)采用竞争的方式获得提议权,序号最大享有优先权(保证解的唯一性)。
2.架构设计实现
2.1实例构成一个Paxos基本单元
一个实例(在多台机器上同时运行的进程组)包含若干proposer和Accptor,横向分布在不同机器上,可以内部实现一致性,确定一个值。
2.2有序的确定多个值
用一个递增的id标识不同实例,依次确定一个值。
2.3引入状态机机制
状态机保证不同机器上实例之间的同步,保证最终确认的值是一致的。
2.4引入Paxos Group
首先在一台机器上,将accptor,learner,proposer,state machine打包到一个进程中,并拥有唯一的实例ID,然后将每台机器上拥有同样实例ID的进程看成一个Paxos Group。相比较2.1,是将原本accptor,learner,proposer,stated machine等多个进程实现,压缩成了一个。
2.5异步通信机制
1)Paxos消息是有去无回的。
2)Network IO用来进行网络间的进程通信。
3)外部请求Request直接输入到Proposer里面,由Proposer尝试确定一个值。
4)APL响应并处理paxos消息。
3.微信的优化部分
3.1使用点对点的流式协议进行快速学习
这里简单来说就是进行数据同步更新时,采用流水线的方式,迅速将数据从镜像主机copy下来。
3.2支持Checkpoint以及对PaxosLog的自动清理
之所以需要PaxosLog是因为要保证状态的一致性,使用镜像主机进行PaxosLog的备份,并使用检查点确定从何处进行数据恢复。
3.3同时运行多个paxos group
通过group id标志不同的group,给paxos消息增加一个group id标志,通过单端口实现多个状态机的并行。