【问题标题】:Notify all EC2 instances running in ASG通知在 ASG 中运行的所有 EC2 实例
【发布时间】:2021-03-15 02:50:43
【问题描述】:

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

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

还有其他解决方案吗?请提出建议。

谢谢

【问题讨论】:

  • 您可以使用从位于 VPC 中的 API 网关调用的 Lambda,首先列出 ASG 中的所有实例,然后连接到每个实例并交付有效负载(需要您设置正确的安全性组)。

标签: amazon-web-services spring-boot microservices amazon-sqs amazon-sns


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可能可以考虑多种解决方案,包括不需要更改代码的解决方案。例如在您的本地应用程序和包含您的 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 次。您必须对您的软件和负载均衡器的循环行为进行试验。

    【讨论】:

      猜你喜欢
      • 2018-05-13
      • 1970-01-01
      • 2020-05-08
      • 2021-03-14
      • 1970-01-01
      • 2020-12-29
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多