问题描述
我有一个微服务应用程序,它有多个在 ASG 中运行的实例。所有这些应用程序都维护一些内部状态。此应用程序公开 Actuator 端点以刷新其状态。我有一些在本地运行的应用程序。场景是,在某些事件中,我想调用在 AWS 中运行的应用程序的那些 Actuator 端点来刷新它们的状态。问题是,如果我调用 LoadBalanced url,那么调用只会转到一个实例。所以,我正在考虑以下解决方案。
- 使用 SQS 并让本地应用程序发布和 AWS 应用程序使用该消息。但这里也只有一个实例会收到消息。
- 使用 SNS 但侦听器基于 http/s,因此 URL 将保持不变,因此我认为只有一个实例会收到消息。 (AFAIK)
还有其他解决办法吗?请提出建议。
谢谢
解决方法
使用 SNS 但侦听器基于 http/s,因此 URL 将保持不变,所以我 认为只有一个实例会收到消息。 (AFAIK)
当使用 SNS 时,每个服务器都会订阅 SNS 主题,当每个服务器订阅时,它会向 SNS 提供其直接的 HTTP(s) URL(而不是负载均衡器 URL)。当 SNS 收到一条消息时,它会将其发送到当前订阅的每个服务器。我不确定 SNS 是否会以您的应用程序需要的正确格式向执行器端点提交请求。
,您可能可以考虑多种解决方案,包括不需要更改代码的解决方案。例如,在您的本地应用程序和包含您的 ASG 的 VPC 之间建立 VPN 连接,这将允许您通过其唯一的私有 IP 地址调用每台机器的刷新端点。
虽然这可能不符合您的用例,但如果您必须严格限制每个端点的刷新调用次数为 1 次。您必须对您的软件和负载平衡器的循环行为进行试验。