SQS流量平衡

时间:2016-07-18 17:46:37

标签: amazon-sqs continuous-deployment

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

我想保持旧堆栈消耗95%的消息而新消息只占5%,所以我可以进行实时测试。当我有信心时,新版本很好,我关闭旧堆栈并使新版本消耗100%的事件。

我现在看到的唯一解决方案是在应用程序端实现一些功能,例如一些REST端点,以控制它应该尝试读取的SQS消息的数量。 但是,可能存在针对此问题的一些其他解决方案/工具。 (事实上​​,有几个应用程序,所以如果我能解决这个问题而不涉及所有这些问题,那就太棒了)

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

感谢

1 个答案:

答案 0 :(得分: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%,那么你就行了。