TL;DR - 当一个副本被杀死时,具有 4-5 个公证节点的 BFT 集群会停止。
我运行了公证人演示,Raft 集群(有 3 个公证人节点)表现如预期 - 当我杀死领导者时,会有选举,公证人集群继续提供可靠的服务。
我希望在运行 BFT 集群(有 4 个公证节点)时也会发生同样的事情——杀死其中一个副本不应阻止集群提供可靠的公证服务。但是,会发生以下情况:
1)启动BFT公证集群
2)我可以使用 10 笔交易进行公证gradlew samples:notary-demo:notarise
3) 停止集群中的一个副本
4) 尝试使用 10 笔交易进行公证gradlew samples:notary-demo:notarise
5)等待几分钟,没有任何反应(交易未经公证)
6)所有剩余的副本终端不断填充re-connecting to replica 1 at /127.0.0.1:11010
为了安全起见,我决定在集群中添加另一个公证节点。但是,没有任何变化——有 5 个公证节点,杀死其中一个节点会使集群停止运行。
我研究了 BFT SMaRt 的工作原理,但据我所知,只要有足够的工作副本(N >= 3f + 1),它就应该能够容忍任何故障(包括崩溃停止)。
我在这里缺少什么吗?我期望的行为是否不合理 - 具有 4-5 个公证节点的 BFT 集群能够容忍 1 个节点死亡?还是 Corda 的问题?