Paxos作用
Paxos用来在多个节点间确定并只确定一个不可变变量的取值。(一旦确定后就不可以更改)
基本概念
- 系统内部由多个Acceptor组成,也就是参与决议的一方,用于存储和管理变量。
- 系统外部有多个提议者Proposer可以任意并发调用API,向系统提交不同的提议。
- Proposer发起的每项提议分别用一个ID标识,提议可表示为(ID, value)。
- ID是一个比较大小的值,比如可以用当前时间戳。
- 访问权:Paxos的第一阶段要使用新生成的ID去获取访问权,第二阶段使用这个代表访问权的ID以及对应的值去提议。
规定
- acceptor可以接受(accept)不止一项提议,当多数(quorum) acceptor接受一项提议时该提议被确定(chosen)。(提议是否确定只有proposer知道,也就是通过第一阶段的返回值来了解,acceptor是不知道自己接受的提议确定了没有的)
- 如果一项值为v的提议被确定,那么后续只确定值为v的提议。(也就是只有ID可以改)
- 如果一项值为v的提议被确定,那么proposer后续只发起值为v的提议。
- 对于提议(n,v),acceptor的多数派S中,如果存在acceptor最近一次(即ID值最大)接受的提议的值为v’,那么要求v = v’;否则v可为任意值。(也就是如果acceptor中已经有接受提议的,那选择其中ID最大的提议值作为本次提议的value;如果都没有接受提议,那就按照自己原本的提