当前位置: 首页 > 工具软件 > PhxPaxos > 使用案例 >

(笔记)微信自研生产级paxos类库PhxPaxos实现原理介绍

谷梁浩思
2023-12-01

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标志,通过单端口实现多个状态机的并行。

 类似资料: