代码之家  ›  专栏  ›  技术社区  ›  user782220

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

  •  3
  • user782220  · 技术社区  · 11 年前

    假设在下图中,中间的消息队列出现故障。发件人仍然可以使用其他消息队列发送消息。

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

    类似地,如果接收方在消息队列向其传递消息后死亡,会发生什么情况?发送方如何知道接收方是否满足了其预期请求?

    enter image description here

    1 回复  |  直到 11 年前
        1
  •  7
  •   Recurse    11 年前

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

    这是计算机科学中一个非常著名、非常常见的问题的例子。从技术上讲,它被认为是“解决了”,因为我们知道答案;然而,简而言之:严格来说,你所要求的是不可能的。您可以设计一些协议,使您能够实现消息已经(或尚未)传递的任何级别的置信度,前提是置信度<1.0.

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

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

    推荐文章