在分布式消息队列中实现容错

时间:2013-02-20 03:15:04

标签: message-queue distributed distributed-system fault-tolerance

在下图中假设中间消息队列失败。发件人仍然可以使用其他邮件队列发送邮件。

但是如果消息队列在收到消息后死亡会发生什么。发件人如何知道邮件是否已发送给接收者,以决定是否重新发送不同的邮件队列?

类似的情况如果接收器在消息队列向其发送消息后死亡会发生什么?发件人如何知道接收者是否已完成其预期请求?

enter image description here

1 个答案:

答案 0 :(得分:6)

作为起点,您需要阅读http://en.wikipedia.org/wiki/Two_Generals%27_Problem

这是计算机科学中一个非常着名且非常普遍的问题。从技术上讲,它被认为是“已解决”,因为我们知道答案;然而,短篇小说是:你所要求的是(严格地说)不可能的。如果置信度<1.0,您可以设计一些协议,使您可以实现消息已经(或尚未)传递的任何置信水平。

在实践中,使用两阶段和三阶段分布式事务协议的变体,以及各种重传和重新同步回退。具体取决于实施。

通常选择是允许重复的可能性并要求接收方做出适当的回应。这是TCP做出的选择,如果你想到它正在试图找到同一问题的合理答案。