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

AWS: Broadcast notifications for multiple worker processes running on multiple instances

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

我知道SQS不支持消息广播。通过类似 questions/threads 我看到了使用 SNS 而不是 SQS 的建议。由于以下原因,我不确定这是否适合我:

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

谢谢, 沃文

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

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

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

这是多项服务协同工作,听起来可能有点复杂,但成本非常低,几乎不需要维护或关注。

我想出的另一种解决方案是使用 Amazon Kinesis.The 这里的含义是每个订阅者都必须维护自己的检查点以仅接收最新的通知。

我知道这是一个旧线程,但我想分享我的经验。 Kinesis 有一个 5 reads/sec 油门。因此,如果您有 10 个节点以每秒 1 次的速度轮询流中的事件,您将处于持续的节流状态。 Kinesis 看起来主要用于只有少数读者的大量写入,这不太适合广播到许多节点的用例。