2016-07-18 46 views
0

我有一个应用程序,即从亚马逊SQS读取事件。我遇到的问题是,当我部署一个更新的应用程序版本时,它会连接到相同的队列,所以有两个堆栈 - 旧消息和新消息。SQS流量平衡

我想保持原来的堆栈消耗的消息说,只有5%的新的95%,所以我可以做现场测试。当我有信心,新版本没有问题时,我关闭旧堆栈并使新堆栈消耗100%的事件。

唯一的解决办法,我现在看到的是落实在应用方面的一些功能,例如一些REST端点,以控制它应该多少SQS消息尝试读取。 但是,可能有一些其他解决方案/工具来解决这个问题。 (其实,有几个应用程序,所以如果我能解决这个问题,而不触及所有的人,这将是巨大的)

一般来说,你如何应对新版本的部署和SQS读书?

感谢

回答

0

假设有两个应用程序堆栈: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%,那么你会好的。