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

时间:2015-08-22 22:54:11

标签: notifications publish-subscribe broadcast amazon-sqs

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

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

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

目前我有一个基于第三方的解决方案 - 我正在使用0MQ发布/订阅服务器。但我正在寻找AWS提供的一些开箱即用的解决方案。

谢谢, Vovan

3 个答案:

答案 0 :(得分:6)

想到的开箱即用的AWS解决方案是创建一个SNS主题,然后对于每个实例,当实例启动时,它将创建自己的SQS队列并将队列订阅到SNS主题,以便您发布到SNS的每条消息的each individual queue gets a broadcast copy

您希望取消订阅并在实例终止时删除这些队列,这可以通过lifecycle hooks完成。

如果您不想使用服务器来管理生命周期挂钩的处理(将启动或终止事件发布到SNS或SQS),您可以创建AWS API Gateway端点来触发AWS Lambda函数,然后使用https将API网关端点订阅到SNS主题,以处理Lambda中的清理任务,无需服务器。

这几项服务一起工作,可能听起来有点复杂,但价格便宜,几乎不需要维护或注意。

答案 1 :(得分:0)

我发现的另一个解决方案是使用Amazon Kinesis。这里的含义是每个用户必须维护它自己的检查点才能只接收最近的通知。

答案 2 :(得分:0)

我意识到这是一个老话题,但是我想分享我的经验。 Kinesis的节流速度为5次读取/秒。因此,如果您有10个节点以1 /秒的速率轮询流中的事件,那么您将一直处于节流状态。 Kinesis似乎主要是针对只有少数读者的大量写作,这并不适合广播到许多节点的用例。