如何在接收器关闭时备份消息?

时间:2018-01-30 18:07:33

标签: architecture high-availability failover fallback

我们正在集思广益,在以下场景中会有一个好的行为:

  • 我们有~30台服务器,每秒发布约300条消息

  • 水槽偶尔会下降,但我们不知道何时及多久

  • 服务器处于自动缩放组中,可以在任何位置取下它们 时间(即我们无法在服务器中保存/存储未发布的消息 本地)

在此方案中,如果接收器关闭,发布商的建议行为是什么?

更具体的问题是:

  1. 建议的故障转移辅助存储是什么? - 文件系统,数据库,队列

  2. 应该是什么故障转移行为

  3. 在接收器重新启动后恢复消息的好策略是什么

1 个答案:

答案 0 :(得分:0)

第一种方法:我建议的东西并不完全是你正在寻找的答案。 我的情况非常相似。但是,如果服务器向接收器发送消息失败(因为接收器已关闭),则允许将消息发送到接收器(在我的情况下为NServiceBus)中保留消息。我的服务器也是自动缩放方案的一部分。但我正在使用AWS并且允许终止生命周期挂钩(基本上允许在某些条件未满足时推迟终止),所以我用它们尝试推迟终止,直到所有消息都成功发送(服务器有一个促进这个的API)通过AWS lambda函数)。如果它超时,那么我们将拍摄服务器的快照,然后恢复消息。

第二种方法:这更多地围绕使您的消息队列(即接收器)高度可用。现在,我认为从服务器到接收器的消息传递可能由于多种原因而失败(可能是服务器驱动程序错误或服务器有一些内部错误等,或者连接到接收器的线路已损坏!)因此系统发送消息必须是能够存储消息。对于基于消息的分布式系统,具有故障安全消息发送方和高可用接收方是绝对必要的。因此,如果你必须努力使你的水槽高度可用;您可以通过将其置于负载均衡器后面并使用多个服务器或在发送消息时选择辅助接收器的非常规方式(这很容易导致服务器内部问题)来使您的接收器高度可用。不完全是你的答案,但这个Kafka架构文件会给你的食物提供思想https://www.infoq.com/articles/apache-kafka