您的位置:首页 > 其它

Basic-Paxos原理

2016-04-04 20:12 183 查看

Basic-Paxos

//参考paxos made sample

核心是一致性协议算法.

问题

假定一个集合中的提案者可以产生一项决议. 一致性算法保证在提案者中只有一个提案可以形成决议. 如果没有提案形成决议, 那么就不应该有提案内容被提案者学习; 如果有提案形成决议, 那么提案者应该学习提案内容.

要满足以下三个条件:

已经被提案的值才可能被决议

只有一个提案值可以形成决议

提案者决不会学习一个没有形成决议的提案, 除非改提案已经形成决议

一致性算法中定义三种角色: proposers(提案者), acceptors(接受者), and learners(学习者).

假定这些角色可以正常通讯, 非拜占庭场景.

每个角色可以任意速度处理, 可能由于错误停止, 也可能重新开始. 因为所有角色在提案决议后可能失败而重新开始, 所有角色失败而重新开始后一些信息是可以被记住的.

信息可以任意长时间传输, 可以重复, 可以丢失, 但不会损坏.

决议

提案者可以给集合内的接受者发送提案, 当超过多数的接受者响应时才可形成提案决议.

P1. 接受者必须接受其接收到的第一个提案

在这个条件下, 同一时间不同的提案者可能会产生不同内容的提案, 可能导致所有的接受者接收了一个提案, 但没有任何一个提案形成多数派.

假定提案包括提案ID和提案内容, 我们允许多个提案可以被选择, 但是需要保证所有决议的提案都必须有相同的提案内容. 这得益于下面的条件.

P2. 如果提案内容为v的提案被选择, 那么任何高ID的提案内容都是v

因为提案ID是有序的, 条件P2保证只有一个提案内容会被选择.

P2a. 如果提案内容为v的提案被选择, 那么任何被接受者接受的高提案ID的提案内容也是v

P2b. 如果提案内容为v的提案被选择, 那么任何提案者发布的高ID提案内容都是v

P2c. 对任何的提案内容v, 提案ID为n来说, 如果提案发出, 那么多数接受者组成的集合S, S中没有接受者接受任何提案ID<n的提案, 或者S中的接受者接受了所有提案中提案ID<n提案内容为v的提案)

换句话说, 提案者要求任何接受者不能接受任何提案ID<n的提案.

第一阶段Prepare:

P1a. 提案者发送提案请求

提案者生成一个全局唯一且递增的提案ID(n), 并且向集群内所有接受者发送prepareRequest(这里无需携带提案内容, 只需要携带提案ID)

P1b. 接受者应答提案请求

应答者会做出两个承诺, 一个应答.

两个承诺:

承诺不再应答提案ID<=n的prepareRequest

承诺不再应答提案ID<n的acceptRequest

一个应答:

返回接受者已经应答的提案中提案ID最大的提案.

第二阶段Accept:

P2a. 提案者发送提案应答

如果提案者接收到了集群中大多数接受者响应的prepareRequest(ID=n), 那么提案者可以向集群内的所有接受者发送acceptRequest(提案ID为n, 提案内容为v), 提案内容可以是提案中被接受的提案ID最大的提案内容, 或者自己可以随意决定提案内容.

P2b. 接受者应答提案应答

如果接受者接收到提案ID为n的acceptRequest, 除非接受者已经应答了提案ID>n的acceptRequest, 否则接受者将会应答该提案应答.


提案者是可以产生多个提案的, 每一个都追从协议

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: