繁体   English   中英

AWS:为在多个实例上运行的多个工作进程广播通知

[英]AWS: Broadcast notifications for multiple worker processes running on multiple instances

我在 Amazon EC2 中有多个应用程序实例,每个实例都运行多个工作进程。 我想要的是每个工作进程都订阅一些通知(例如配置更改)。 这个通知基本上应该是广播消息,所以一旦它被发送 -每个工人都会收到它。

我知道 SQS 不支持消息广播。 查看类似的问题/线程,我看到了使用 SNS 而不是 SQS 的建议。 由于以下原因,我不确定这对我有用:

  • 应用程序实例是自动缩放组的一部分,因此可以动态添加和删除它们。 在这种情况下,一旦实例终止,我没有看到任何明确的方法来取消订阅每个工作人员(每个实例我有多个工作人员),这意味着我将在一段时间后以死订户的混乱结束。
  • 用于订阅的协议也不清楚。 HTTP 端点看起来是唯一的选择,这意味着我的每个工作人员都应该在自己的端口上运行 HTTP 服务器。 看起来我应该只监听实例公共 IP,这又增加了一层复杂性和不安全性。

目前我有一个基于第三方的解决方案——我正在使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM