几个服务节点都说自己是对的,客户端该信谁?
在日常后端系统里,这个问题通常没有这么极端。Redis 主从、ZooKeeper、etcd、Nacos、数据库复制,更多遇到的是机器宕机、网络抖动、磁盘故障、进程重启。节点一般不会故意骗你,它只是没响应、响应慢,或者暂时和集群断开了。
拜占庭将军问题讨论的是更麻烦的一类情况:系统里有节点会表现得不可预测,甚至可能给不同对象发送互相矛盾的信息。
这就是它在分布式系统里的价值。古代军事故事只是表达手段,真正要讲的是“在不可靠成员中达成一致”。
如果你正在学习 Raft、ZAB、ZooKeeper、etcd 这类常见协调系统,需要先区分两类故障模型:它们通常处理的是崩溃故障和网络分区,不假设节点恶意撒谎;拜占庭问题讨论的是更强的故障模型。想看非拜占庭场景里的共识,可以继续读 Raft 算法详解 和 ZAB 协议详解。
2023/8/7大约 20 分钟
