【问题标题】:AWS SQS - setup for horizontal scalingAWS SQS - 水平扩展设置
【发布时间】:2021-03-31 04:12:50
【问题描述】:

我正在使用 AWS SQS,因此我的两个应用程序(我们称它们为应用程序 1 和应用程序 2)可以相互交互。到目前为止,应用程序 1 正在向队列发送消息,而应用程序 2 正在侦听和处理从应用程序 1 发送的消息。流程是客户端(reactJS 应用程序)向应用程序 1 发送 http 请求,应用程序 1 将消息转发到应用程序 2使用 AWS SQS,然后应用程序 2 通过 websockets 向所有其他用户/客户端广播某些消息(这里重要的是所有 websocket 连接都在应用程序 2 中)

但是,在过去,我需要实现应用程序 2 的水平缩放(我正在运行应用程序 2 的 2 个实例),现在 websocket 连接是分开的,一些 websocket 连接在应用程序 2 的实例 1 上,一些 websocket 连接是在应用 2 的实例 2 上。所以最近我面临的挑战是应用 1 将消息发送到队列,然后只有应用 2 的一个实例读取消息。

所以我的问题是应用程序 2 的两个实例是否都有可能读取 SQS 消息,或者有其他方法来处理这种情况?提前致谢!

【问题讨论】:

    标签: node.js amazon-web-services websocket amazon-sqs horizontal-scaling


    【解决方案1】:

    据我了解,fan-out(还有更多信息 here)架构可以解决您的问题。在架构中,您的应用程序 1 将向 SNS 主题而不是 SQS 队列发送消息。然后您将订阅 两个 SQS 队列 到该主题,以便每个实例都有自己的主题。这样,消息将在应用 2 的两个实例中广播两个。

    如果您无法将初始 SQS 更改为 SNS,则需要将 SQS 中的消息重新广播到 SNS,例如,使用 lambda 函数。

    架构也非常可扩展,因为当您添加第三个实例时,您只需添加第三个 SQS 队列。

    【讨论】:

      猜你喜欢
      • 2019-06-02
      • 2021-09-30
      • 2011-08-05
      • 2017-12-25
      • 1970-01-01
      • 2014-01-25
      • 2018-08-21
      • 2013-10-17
      • 1970-01-01
      相关资源
      最近更新 更多