paxos协议
看了《从paxos到zookeeper》里面paxos协议的讲解,推导过程太复杂。记录一下paxos协议的内容
协议用于分布式数据一致性,分为三种角色,proposer、acceptor、learner。proposer向accepor集合提出议案[Mn, Vn], accepor批准议案,即确定那个议案为最终结果,learner主要同步结果, 类似master - slave中的slave
两个阶段:
阶段一:
1. proposer提出议案[Mn, Vn],发送给prepare大部分的accepor节点
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)