容错/高可用性生产者



我正在使用消息队列开发分布式生产者/消费者系统。我对平行化感兴趣的部分是它的消费者方面,我对此感到满意。

然而,我不知道该怎么处理制片人。我一次只需要运行一个生产者,因为我的系统的生产部分的负载不太高,但我想要一种可靠的管理方式,比如启动、停止、重新启动,主要是监控它,这样,如果生产者主机出现故障,另一个主机可以启动。

如果它有帮助的话,我对我的消费者算法很满意,它可以排队处理工作,因为它可以容错一段时间,并在停机期间处理发生的事情。

我相信有一些工具或至少是已知的模式可以做到这一点,而不是重新发明轮子。

我使用的是rabbitmq,但可以使用activemq,甚至可以在需要时重构为storm或类似的东西,到目前为止,我的代码并不复杂。

经过几周的思考,我想到了最简单的解决方案,实际上我对此非常满意,所以我会分享它,以防你觉得它有用,或者如果你认为有任何缺点,我会指出,到目前为止,它似乎运行良好。

我在我的数据库中创建了一个最简单的表,名为heartbeat,其中有一个名为ts的时间戳字段,它意味着始终只有一行。

我每5分钟启动一次所有潜在的生产者(quartz),如果ts字段比现在()早,他们会更新表——5分钟。因为更新调用被阻塞,所以我不会有数据库线程问题。现在,如果更新返回>0,则意味着它实际上修改了ts的值,然后我执行实际的生产代码(队列作业)。如果更新返回0,则它没有修改表,因为其他人在不到5分钟前修改了表,因此该生产者在5分钟后再次检查之前不会做任何事情。

显然,5分钟的值是可配置的,这允许进行非常巧妙的升级,只需进行一些小的更改,就可以同时执行几个生产者,如果我有这种需要的话。

最新更新