gpt4 book ai didi

design-patterns - 需要以高可用的顺序消费消息

转载 作者:行者123 更新时间:2023-12-04 07:04:39 25 4
gpt4 key购买 nike

是否有一种标准的设计模式我可以利用它来按顺序使用队列中的消息,但又具有高可用性?

当然,我可以根据帐号的最后一位数字将负载分成单独的队列(顺序仅对每个帐户很重要)这为我提供了可扩展性,但是如果主机处理以“2”结尾的帐号失败,例如,我需要一些东西来承担这个负担。

我认为这种处理有一个标准模式。不幸的是,我无法使消息幂等,因为队列源是由于来自第三方的集成。

非常感谢任何想法。

最佳答案

即使这是几天前的事,也不得不回答一个以“幂等”一词为特征的问题。不要认为这里一定有设计模式,但我有办法。

我会按照您的建议使用单独的工作队列以可扩展的方式处理消息。脑死亡的简单排序阅读器将从第三方队列读取消息并将消息发送到适当的工作队列。

Working Queues

高可用性部分将与工作队列读取器一起出现。其中每一个都有一个好友队列阅读器。每个队列阅读器都会定期向其伙伴发送心跳消息。如果好友没有收到消息(或一定数量的消息),它将:

  1. 开始处理它现在死去的好友的队列以及它自己的队列
  2. 将死队列读取器通知系统管理员

为了防止两个读者打同一个队列,当一个死队列被复活时,它会首先与它的伙伴重新建立心跳。一旦伙伴确认它不再处理复活的队列阅读器的原始队列上的消息,复活的阅读器将重新开始工作。

Queue Failover

您可以通过增加群组中好友的数量来获得更多冗余,或者让队列读者在其原始好友死亡时建立新好友,但这会在读者死亡或返回时增加更多复杂性。

一种方法是为每个队列设置一个 token 。读者只有在拥有 token 时才能读取队列。每个读者将开始拥有一个 token 并向所有其他读者广播心跳。心跳将包括读取器当前正在处理的队列的所有标记。这将为所有读者提供整个系统的图片,而无需集中授权。当读者注意到 token 在特定时间范围内未被广播时,如果出现以下情况,它将索取 token :

  1. 在幸存的读者中拥有最少数量的标记
  2. 或者在平局的情况下,在 token 数量最少的幸存读者中拥有最低的 ID#。

一旦获得 token ,它将开始处理队列,并向系统管理员发送通知。

当阅读器重新上线时,它将聆听心跳并重建其系统图片。然后它将确定哪个读者有:

  1. token 最多
  2. 或者在平局的情况下,具有最高 ID# 的读者

复活的读者将在其他读者列表中声明最后一个标记。一旦其他阅读器确认声明并且不再处理由 token 表示的队列,恢复的阅读器将再次开始处理队列。

这种方法的一个可能优势是不需要一对一的读者到队列关系。它允许您创建任意数量的有意义的队列,并找到相应数量的可以处理负载的读取器。

关于design-patterns - 需要以高可用的顺序消费消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30193169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com