【问题标题】:SQS traffic balancingSQS流量均衡
【发布时间】:2016-07-18 17:46:36
【问题描述】:

我有一个应用程序,它正在从 Amazon SQS 读取事件。我遇到的问题是,当我部署一个较新的应用程序版本时,它会连接到同一个队列,所以有两个堆栈——旧的和新的一个正在消耗消息。

我想保持旧堆栈消耗 95% 的消息,而新堆栈只消耗 5%,这样我就可以进行实时测试。当我确信新版本没问题时,我关闭旧堆栈并让新堆栈消耗 100% 的事件。

我现在看到的唯一解决方案是在应用程序端实现一些功能,例如一些 REST 端点,以控制它应该尝试读取多少 SQS 消息。 但是,对于这个问题,可能还有其他一些解决方案/工具。 (其实有好几个应用程序,所以如果我能在不接触所有应用程序的情况下解决这个问题,那就太好了)

一般而言,您如何处理新版本部署和从 SQS 读取?

谢谢

【问题讨论】:

    标签: amazon-sqs continuous-deployment


    【解决方案1】:

    假设有两个应用程序堆栈:S1 需要处理 90% 的消息,S2 需要处理 10%。

    这是他们可以做的:

    • 它们将有两种配置:n_messages_to_getn_messages_to_process。对于 S1,值将分别为 10 和 9。分别用于 S2、10 和 1。
    • 每个都将从 SQS 获取 n_messages_to_get,但只处理其中的 n_messages_to_process

    您还可以考虑在 DynamoDB 之类的数据库中进行此配置,这样您就不必在需要拨号或拨号时部署代码。

    假设:

    • S1 和 S2 处理消息的时间大致相同。
    • 您可以容忍两者处理的消息数量存在一定偏差。例如,如果 S1 处理 87% 的消息,S2 处理 13% 的消息,你就可以了。

    【讨论】:

    • 将此标记为正确答案,因为这似乎是唯一可行的解​​决方案。最后,正如@ketan 所描述的那样,我最终在应用程序端使用配置值实现了此功能
    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 2021-07-19
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多