PBFT(拜占庭容错)
基于拜占庭将军问题,一致性的确保主要分为这三个阶段:预准备(pre-prepare)、准备(prepare)和确认(commit)。流程如下图所示:
![971366-43e9a641f22f4faf.png](https://i-blog.csdnimg.cn/blog_migrate/634189a55c8101430ba2c5be40810722.png)
20170704120008446.png
其中C为发送请求端,0123为服务端,3为宕机的服务端,具体步骤如下:
- Request:请求端C发送请求到任意一节点,这里是0
- Pre-Prepare:服务端0收到C的请求后进行广播,扩散至123
- Prepare:123,收到后记录并再次广播,1->023,2->013,3因为宕机无法广播
- Commit:0123节点在Prepare阶段,若收到超过一定数量的相同请求,则进入Commit阶段,广播Commit请求
5.Reply:0123节点在Commit阶段,若收到超过一定数量的相同请求,则对C进行反馈
代码实现
package m