SQS流量均衡
SQS traffic balancing
我有一个应用程序,它正在从 Amazon SQS 读取事件。我遇到的问题是,当我部署一个较新的应用程序版本时,它连接到同一个队列,所以有两个堆栈——旧的和新的一个在消费消息。
我想让旧堆栈消耗 95% 的消息,而新堆栈只消耗 5%,这样我就可以进行实时测试。当我确信新版本没问题时,我关闭旧堆栈并让新堆栈消耗 100% 的事件。
我现在看到的唯一解决方案是在应用程序端实现一些功能,例如一些 REST 端点,以控制它应该尝试读取多少 SQS 消息。
但是,可能还有一些其他 solutions/tools 可以解决此问题。 (其实有好几个应用,所以如果我能在不接触所有应用的情况下解决这个问题就好了)
一般情况下,您如何处理新版本部署和从 SQS 读取?
谢谢
假设有两个应用程序堆栈:S1,需要处理 90% 的消息,S2 需要处理 10%。
这是他们可以做的:
- 它们将有两种配置:
n_messages_to_get
和 n_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%,你就没问题了。
我有一个应用程序,它正在从 Amazon SQS 读取事件。我遇到的问题是,当我部署一个较新的应用程序版本时,它连接到同一个队列,所以有两个堆栈——旧的和新的一个在消费消息。
我想让旧堆栈消耗 95% 的消息,而新堆栈只消耗 5%,这样我就可以进行实时测试。当我确信新版本没问题时,我关闭旧堆栈并让新堆栈消耗 100% 的事件。
我现在看到的唯一解决方案是在应用程序端实现一些功能,例如一些 REST 端点,以控制它应该尝试读取多少 SQS 消息。 但是,可能还有一些其他 solutions/tools 可以解决此问题。 (其实有好几个应用,所以如果我能在不接触所有应用的情况下解决这个问题就好了)
一般情况下,您如何处理新版本部署和从 SQS 读取?
谢谢
假设有两个应用程序堆栈:S1,需要处理 90% 的消息,S2 需要处理 10%。
这是他们可以做的:
- 它们将有两种配置:
n_messages_to_get
和n_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%,你就没问题了。