看了《从paxos到zookeeper》里面paxos协议的讲解,推导过程太复杂。记录一下paxos协议的内容网络
协议用于分布式数据一致性,分为三种角色,proposer、acceptor、learner。proposer向accepor集合提出议案[Mn, Vn], accepor批准议案,即肯定那个议案为最终结果,learner主要同步结果, 相似master - slave中的slave分布式
两个阶段:同步
阶段一:ast
1. proposer提出议案[Mn, Vn],发送给prepare大部分的accepor节点zookeeper
2. acceptor节点收到prepare请求,承诺不批准比Mn更小的提案。若是批准其余提案Vx,返回Vx循环
阶段二:请求
1. proposer收到大部分acceptor响应,发送accept请求。若是没有Vx返回,发送[Mn, Vx]给acceptor。若是有Vx返回,发送[Mn, Vn]通信
2. acceptor收到accept请求,批准提案[Mn, Vn]或者[Mn, Vx]数据
备注,为了不死循环能够使用主proposer给acceptor发送提案协议
learner同步提案
方式一:
全部的acceptor m个给learner n个发送提案, 网络通讯次数m * n
方式二:
全部的acceptor给主learner发送提案, 主learn同步给其余learner, m + n - 1(单点故障)
方式三:
全部acceptor m给一个learner x集合同步提案, 集合learner在给剩余learn同步 m * x + x * (n - x) = x * ( m + n - x)