AWS:在多个实例上为多个工作进程 运行 广播通知
AWS: Broadcast notifications for multiple worker processes running on multiple instances
我在 Amazon EC2 中有多个应用程序实例,每个实例 运行 有几个工作进程。我想要的是每个工作进程都订阅一些通知(例如配置更改)。这个通知基本上应该是广播消息,所以一旦它被发送 - 每个 工作人员都会收到它。
我知道SQS不支持消息广播。通过类似 questions/threads 我看到了使用 SNS 而不是 SQS 的建议。由于以下原因,我不确定这是否适合我:
- 应用程序实例是自动缩放组的一部分,因此可以动态添加和删除它们。在这种情况下,一旦实例终止,我没有看到任何明确的方法来取消订阅每个工作人员(每个实例我有多个工作人员),这意味着我将在一段时间后以死订户的混乱结束。
- 用于订阅的协议也不清楚。 HTTP 端点看起来是唯一的选择,这意味着我的每个工作人员都应该 运行 在自己的端口上使用 HTTP 服务器。看起来我应该只监听实例 public IP,这又增加了一层复杂性和不安全性。
目前我有一个基于第三方的解决方案——我正在使用 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 看起来主要用于只有少数读者的大量写入,这不太适合广播到许多节点的用例。
我在 Amazon EC2 中有多个应用程序实例,每个实例 运行 有几个工作进程。我想要的是每个工作进程都订阅一些通知(例如配置更改)。这个通知基本上应该是广播消息,所以一旦它被发送 - 每个 工作人员都会收到它。
我知道SQS不支持消息广播。通过类似 questions/threads 我看到了使用 SNS 而不是 SQS 的建议。由于以下原因,我不确定这是否适合我:
- 应用程序实例是自动缩放组的一部分,因此可以动态添加和删除它们。在这种情况下,一旦实例终止,我没有看到任何明确的方法来取消订阅每个工作人员(每个实例我有多个工作人员),这意味着我将在一段时间后以死订户的混乱结束。
- 用于订阅的协议也不清楚。 HTTP 端点看起来是唯一的选择,这意味着我的每个工作人员都应该 运行 在自己的端口上使用 HTTP 服务器。看起来我应该只监听实例 public IP,这又增加了一层复杂性和不安全性。
目前我有一个基于第三方的解决方案——我正在使用 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 看起来主要用于只有少数读者的大量写入,这不太适合广播到许多节点的用例。