title: 分布式共识算法:Paxos
tag:
- paxos
- blockchain
- 分布式共识算法
categories: - 分布式共识算法
1.paxos应用场景
没有恶意节点,但可能由于网络延迟或crash导致某些节点不能正常收到消息。
paxos要解决的问题是:
将所有节点都写入同一个值,且被写入后不再更改。
paxos需要满足的两个条件
-
Safety
只有一个值可能被选中。
服务器永远不会知道一个值被选中,除非它真的被选中。 -
Liveness
一些提议的值最终有一个会被选中 。
如果一个值被选中,最终会被其他服务器知道 。
2.节点种类
- proposers:提出提案,提案信息包括提案编号和提议的value
- acceptor:收到提案后可以接受提案,若提案获得多数派的acceptor的接受,则提案被称为被批准(chosen)
- learners: 只能“学习”chosen的提案
在paxos算法中,有以下几点需要注意:
- value只有在被proposers提出后才能被批准(未被批准的决议称为“提案”proposal)
- 在一次Paoxs算法执行实例中,只chosen一个value
- learners只能学习chosen的value
3.算法的基本理论
(这部分非常难以理解,可以先看后面的章节,再回过来理解这一章的内容)
主要有3个约束
条件1:Acceptor必须accept它接收到的第一个决议
条件2:如果一个提案(n,v)chosen,那么之后所有chosen的提案(编号更高)包含的value都是v。
acceptor有多个,proposer向一组acceptor提出提案(提案是< 编号,value >对)。
- promise: Acceptor对proposer承诺,如果没有比你提出的提案的编号更大的提案,我就accpet你提出的提案