分布式系统中的通信难题与解决方案
1. 两将军问题引入
想象一座被围困的城市,城墙内防御固若金汤,直接进攻几乎注定失败。城外有两支军队成功切断了城市的补给线,两位将军按兵不动,看着城市在封锁下逐渐虚弱。但仅一支军队进攻是不够的,进攻会被击退,进攻方军队会被消灭,剩下的军队也无法维持封锁,很快会被击溃。只有东西两支军队协同进攻,才能攻克这座城市。
现在假设你是西边军队的将军,东边的伙伴与你被敌军领土隔开,无法直接通信,只能派信使穿越危险地带,但信使可能会丢失消息、被杀或被俘。你必须用不可靠的通信方式构建可靠的通信方法。
当你判断城市已足够虚弱,进攻时机已到,你会准备军队,并派信使告知东边将军你将在早上进攻。若信使安全到达,东边将军会开始准备并与你一同进攻,这样进攻很可能成功。
2. 预先安排的协议
为确保消息被接收,你让东边将军派信使确认收到消息。若在早上前收到确认,你可自信地发起进攻,因为你知道东边将军已收到消息并会参战;若未收到确认,你会取消进攻,因为你不确定最初的信使是否成功送达。
但这个协议对东边将军来说并不保险。假设你是东边将军,收到西边将在早上进攻的消息后,你有足够时间准备军队并按协议回复确认。若确认消息到达西边将军处,进攻将按计划进行。
3. 减少不确定性的尝试
3.1 增加信使数量
原协议不够完善,你尝试不同策略改进。首先是增加信使数量,派两个信使比派一个信使,两条消息都丢失的概率更低,但这个概率不会为零。即便增加到三个、四个甚至更多信使,消息全部丢失的概率会趋近于零,但永远不会达到零,所以无法通过增加信使数量确保消息被接收。
超级会员免费看
订阅专栏 解锁全文
1024

被折叠的 条评论
为什么被折叠?



