PBFT共识算法核心思想

PBFT基于状态机副本机制,每个节点有当前的状态(state),如果每个正常的节点都执行顺序的相同请求,那么正常的节点将保持状态一致。

1.通过主节点分配顺序的序号,并且将请求发送给其他节点。(pre-prepare)

2.为防止主节点作恶,给不同的节点发送序号不同,或者信息不一致。通过节点之间互相交互信息保证序号和信息一致。(prepare)

3了防止主节点作恶,通过timeout机制来切换主节点,切换主节点的过程需要保证节点的状态一致(可能在上个view中有一些节点执行了,有一些没有执行),需要commit阶段和新主的条件来保证。(commit)(quorum)。

提示:进行commit阶段的原因是,如果没有这个阶段,在prepare阶段之后直接执行,可能在view-change的时候一些节点还没有执行。而在选主的时候主节点收到2f+1个节点的view_change消息就会切换成功,如果在之前的view对一个消息m达成共识,有一个节点执行了这个消息的操作,在新的view选出来之后,因为存在错误的节点,主节点并不能确认之前已经执行的消息在新的view中还能形成2f+1的多数派,所以可能造成有些节点执行了,有些节点没有执行。导致整个集群状态的不一致。

你可能感兴趣的:(PBFT共识算法核心思想)