SQS流量均衡

SQS traffic balancing

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

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

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

一般情况下,您如何处理新版本部署和从 SQS 读取?

谢谢

假设有两个应用程序堆栈: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%,你就没问题了。