通知在 ASG 中运行的所有 EC2 实例

问题描述

我有一个微服务应用程序,它有多个在 ASG 中运行的实例。所有这些应用程序都维护一些内部状态。此应用程序公开 Actuator 端点以刷新其状态。我有一些在本地运行的应用程序。场景是,在某些事件中,我想调用在 AWS 中运行的应用程序的那些 Actuator 端点来刷新它们的状态。问题是,如果我调用 LoadBalanced url,那么调用只会转到一个实例。所以,我正在考虑以下解决方案。

  1. 使用 SQS 并让本地应用程序发布和 AWS 应用程序使用该消息。但这里也只有一个实例会收到消息。
  2. 使用 SNS 但侦听器基于 http/s,因此 URL 将保持不变,因此我认为只有一个实例会收到消息。 (AFAIK)

还有其他解决办法吗?请提出建议。

谢谢

解决方法

使用 SNS 但侦听器基于 http/s,因此 URL 将保持不变,所以我 认为只有一个实例会收到消息。 (AFAIK)

当使用 SNS 时,每个服务器都会订阅 SNS 主题,当每个服务器订阅时,它会向 SNS 提供其直接的 HTTP(s) URL(而不是负载均衡器 URL)。当 SNS 收到一条消息时,它会将其发送到当前订阅的每个服务器。我不确定 SNS 是否会以您的应用程序需要的正确格式向执行器端点提交请求。

,

您可能可以考虑多种解决方案,包括不需要更改代码的解决方案。例如,在您的本地应用程序和包含您的 ASG 的 VPC 之间建立 VPN 连接,这将允许您通过其唯一的私有 IP 地址调用每台机器的刷新端点。

然而,更简单地说,if you're using an AWS Classic ELB or ALB,than repeated calls to the load balancer url should hit each machine running your application if enough calls to the refresh endpoint are made.

虽然这可能不符合您的用例,但如果您必须严格限制每个端点的刷新调用次数为 1 次。您必须对您的软件和负载平衡器的循环行为进行试验。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...