PBFT(拜占庭容错)
基于拜占庭将军问题,一致性的确保主要分为这三个阶段:预准备(pre-prepare)、准备(prepare)和确认(commit)。流程如下图所示:
其中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进行反馈
代码实现
1 | package main |
如何运行:开启4个终端,eg:go run main.go Apple …
然后在浏览器输入:http://localhost:1112/req?warTime=1234