[英]AWS: Broadcast notifications for multiple worker processes running on multiple instances
我在 Amazon EC2 中有多个应用程序实例,每个实例都运行多个工作进程。 我想要的是每个工作进程都订阅一些通知(例如配置更改)。 这个通知基本上应该是广播消息,所以一旦它被发送 -每个工人都会收到它。
我知道 SQS 不支持消息广播。 查看类似的问题/线程,我看到了使用 SNS 而不是 SQS 的建议。 由于以下原因,我不确定这对我有用:
目前我有一个基于第三方的解决方案——我正在使用 0MQ 发布/订阅服务器。 但我正在寻找 AWS 提供的一些开箱即用的解决方案。
谢谢,沃万
想到的现成的AWS解决方案将是创建一个SNS主题,然后对于每个实例,在实例启动时,它将创建自己的SQS队列,并将该队列订阅SNS主题,这样, 每个单独的队列都可以获得您发布到SNS的每个消息的广播副本 。
您需要取消订阅并在实例终止时删除这些队列,这可以通过生命周期钩子完成。
如果您不想使用服务器来管理生命周期挂钩的处理(将启动或终止事件发布到SNS或SQS),则可以创建一个AWS API Gateway终端节点来触发AWS Lambda函数,然后订阅该API使用https到SNS主题的网关端点,无需服务器即可处理Lambda中的清理任务。
这是几项服务一起工作,听起来可能有些复杂,但价格却非常便宜,几乎不需要维护或维护。
我发现的另一种解决方案是使用Amazon Kinesis,这意味着每个订阅者必须维护自己的检查点才能仅接收最新通知。
我意识到这是一个老话题,但是我想分享我的经验。 Kinesis的节流速度为5次读取/秒。 因此,如果您有10个节点以1 /秒的速率轮询流中的事件,那么您将一直处于节流状态。 Kinesis似乎主要是针对只有少数读者的大量写作,这并不适合广播到许多节点的用例。
Redis 是一个方便的解决方案,用于向所有订阅者广播一个主题的消息。 它很方便,因为它可以用作快速原型制作的 docker 容器,但 AWS 也提供它作为多节点集群的托管服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.