关于具有高可用性的pub / sub体系结构的建议

时间:2013-06-12 23:50:23

标签: architecture messaging publish-subscribe high-availability

这似乎是一个非常普遍的问题,但我还是找不到答案。假设我有一个发布/订阅基础结构,并且解决方案的一个组件必须在接收有关该主题的消息时采取措施(每个消息应该只采取一次操作)。同样重要的是,组件具有高可用性,并具有主动 - 主动语义以实现负载平衡。

使用P2P消息传递模式,通过运行多个消费者监听同一队列的实例来实现这一目标非常容易。但是,对于pub / sub,每个使用者实例都会收到自己的消息副本,因此可能会多次执行相同的操作。

我正在考虑的方法是使用单独的组件,它将以主动 - 被动模式运行,并通过将消息转发到队列将pub / sub转换为P2P(它可能是另一个代理,甚至可能是Redis)。在翻译器的两个实例之间将是一个心跳消息,只要活动实例因任何原因断开连接,就会允许被动实例订阅主题。

另一种选择是在所有活动实例之间建立共享存储,并且只要一个实例开始处理消息,它就会在存储中指示这一点,因此其他实例只会丢弃处理消息。我担心这会导致许多争用问题,从而使主动 - 主动配置的好处变为无效。

我正在寻找关于其他方法的建议,或者可能对我列出的方法进行改进。

1 个答案:

答案 0 :(得分:1)

有点不清楚您对制作人(pub / sub)有什么保证。它能支持持久订阅吗?

对于您的可用性要求,第一种解决方案可能更可行。实施领导者选举协议是一个非常难以解决的问题。我建议使用像Zookeeper这样的现有解决方案。无论你如何选择这样做,你都需要至少3名成员参加领导人选举。例如。 3 Zookeeper节点。

数据库锁定选项将导致您的延迟,并再次满足您需要设置群集的可用性要求。