区块链核心算法解析 第二章
容错问题和paxos算法
定义2.1 计算机网络中所有计算机均为节点(在c/s模式下,两者均为节点)
模型2.2 节点可以本地运算,也可以向其他节点发送消息
算法2.3 朴素的客户端/服务器算法:客户端每次向服务器发送一条命令
模型2.4 存在消息丢失,不保证消息传给接收者
算法2.5 带确认的客户端/服务器算法:客户端发送命令后,服务器每收到一条命令,都发送一条确认信息,若客户端在合理时间内未收到服务器确认信息,则重新发送命令
模型2.6 消息传输花费时间不同
定理2.7 算法2.5在多个服务器和多个客户端运行,服务器接收到的命令顺序可能是不同的,这会导致不一致的状态
定义2.8 对于一组节点所有节点以相同顺序执行一个命令序列,则这组节点实现了状态复制
算法2.9 所有客户端向串行化器发送命令,一次一条;串行化器将命令逐条发给所有服务器;一旦串行化器收到所有确认信息,通知客户端命令被执行;
(风险:串行化器必须保持通畅)
算法2.10 2PL和2PC
(风险:所有服务器都要畅通)
paxos:
定义2.11 票:即弱化的锁,可重新发布可以过期
算法2.12 朴素的基于票的协议
算法2.13 paxos
引理2.14 若已存在一个被选中的propose(t,c),则对于后续的每一个propose(t',c'),c'=c
(用反证法可以证明,设t'为所有在t之后发布的提案中最小的票号,只有一种情况客户端不采纳c,即有服务器接受了另一提案propose(t*,c*),但由于t<t*<t',t'不为所有在t之后发布的提案中最小的票号,即不成立)
定理2.15 如果一条命令被某些服务器执行,那么所有服务器都会执行c