分布式paxos算法

前言

paxos用于保证分布式系统中, 各个节点的数据一致性问题

算法的组成部分

在该算法中, 分为 提议者, 接收者, 学习者 三种角色

提议者: 其实就是客户端, 用来向分布式系统中发送数据

接收者: 其实就是分布式系统的节点, 它们不仅要接收提议者的数据, 还要保证每个节点的数据都一致

学习者: 用来做数据冗余, 可以看作是分布式系统中的 slave 节点

假设不使用任何数据一致性算法

因为要保证所有节点的数据一致, 所以提议者每次有新的数据时都要向所有的接收者发送一份.

首先假设接收者一旦接收到提议者的数据就保存下来, 如果此时有多个提议者在发送数据, 而且存在网络波动, 那么它们的数据到达的时间将是乱序的, 那么肯定会造成各个接收者上最后保存下来的数据不尽相同, 来自于各个提议者, 此时分布式系统就处于数据不一致的境地.

使用paxos算法

paxos算法, 为了解决分布式系统各个节点的数据一致性问题

提议者向接收者写数据的过程分为两个阶段, 准备接收

准备阶段

各个提议者都产生一个编号发给各个接收者, 各个接收者都选最大的编号给予响应, 因为编号越大代表数据越新

接收阶段

发送了小编号的提议者自然没有收到接收者的响应, 那么瞬间就明白了自己的数据不是最新的, 也就是本次写数据失败.

而对于发送了最大编号的提议者, 它将会收到大部分接收者的响应, 也就是收到大部分节点说 "大, 你这个大, 我们存你的数", 然后这个最大编号提议者就把自己的值发送给所有的接收者

接收者一看, 是这个最大编号对应的值, 就保存下来, 此时所有提议者节点都保存了最新的值 , 它们的数据是一致的

最后学习者也默默地备份下这个值, 如果此时接收者中少数还没更新到最新值, 就由学习者发给它最新的值保存下来.

paxos流程的通俗理解

paxos算法能够保持所有节点数据一致性的本质在于, 第一次的响应是用来确定最后要用哪个值, 然后没说上话的提议者一看不是自己就不再写数据了, 第二阶段就只剩下被选中的提议者, 相当于它干掉了其他提议者, 最后把自己的值写到各个节点.

分成两个步骤的目的就是单独用第一个步骤确定最后要的, 到第二步时才真正进行写数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容