两阶段提交 & 三阶段提交
两段式提交(2PC 、Two-Phase Commit)
既然实际系统中很难保证强一致,便只能通过两段式提交分成两个阶段,先由Proposer(提议者)发起事物并收集Acceptor(接受者)的返回,再根据反馈决定提交或中止事务。
第一阶段:Proposer发起一个提议,询问所有Acceptor是否接受;
第二阶段:Proposer根据Acceptor的返回结果,提交或中止事务。如果Acceptor全部同意则提交,否则全部终止。
两阶段提交方案是实现分布式事务的关键;但是这个方案针对无反馈的情况,除了“死等”,缺乏合理的解决方案。 Proposer在发起提议后宕机,阶段二的Acceptor资源将锁定死等。如果部分参与者接受请求后异常,还可能存在数据不一致的脑裂问题。
三段式提交(3PC、Three-Phase Commit)
为了解决2PC的死等问题,3PC在提交前增加一次准备提交(prepare commit)的阶段,使得系统不会因为提议者宕机不知所措。接受者接到准备提交指令后可以锁资源,但要求相关操作必须可回滚。
但3PC并没有被用在我们的工程实现上,因为3PC无法避免脑裂,同时有其他协议可以做到更多的特性又解决了死等的问题。
共识算法
无许可拜占庭算法
PoW
PoS
Casper
DPOS
Algorand
ADA
Conflux
许可拜占庭算法
PBFT
HoneyBadger
HashGraph
Ripple
小蚁共识算法
PoET (Proof of Elapsed Time)
Sumeragi (Iroha)
Tendermint
非拜占庭算法
Paxos
Raft
待整理
DPOS
简介:
Under normal operation block producers take turns producing a block every 3 seconds. Assuming no one misses their turn then this will produce the longest possible chain. It is invalid for a block producer to produce a block at any other time slot than the one they are scheduled for.
容错率:1/3
疑问:
- 3s出一个块,那么21个代表是怎么对3s这个间隔产生共识的,因为每个代表的时间戳不一定达到了共识。
对DPOS的各种攻击
- Minority Fork
- Double Production by Disconnected Minority
- Network Fragmentation
- Double Production by Connected Minority
- Last Irreversible Block
- Lack of Quorum of Producers
- Corruption of Majority of Producers
Transactions as Proof of Stake 股权证明的交易 (TaPoS)
需要每一个交易包含最近一个区块头的哈希值。这个哈希值有两个目的:
- 防止不包含区块引用的交易在分叉时重放发生;
- 通知网络对应的用户和他们的股份当前在某个具体的分叉上。
随着时间的推移,所有的用户直接确认区块链,在这一链条上难以伪造假的链条,因为假的链条根本无法从合法链条上迁移交易。