我们最初的设计存在问题
Posted: Sat Feb 22, 2025 5:25 am
2019 年末的一天,我们收到了大量短信发送请求。我们将所有这些请求都发送给了我们的一家提供商,但结果发现他们无法处理负载并开始出现故障。我们的系统切换到了另一家提供商,但结果发现,突然 黎巴嫩 WhatsApp 号码 发送大量流量导致他们也开始返回错误。我们的提供商可能需要时间来扩展以处理我们发送给他们的突然负载。
我们如何提高弹性
我们更改了 Notify,使其以大约 50/50 的比例向两个提供商发送流量。发送一条短信时,Notify 将随机选择一家提供商。这应该可以降低向我们的提供商发送大量他们无法处理的意外流量的可能性。
我们还改变了处理提供商错误的方式。如果提供商给我们 500-599 HTTP 响应代码,我们会将其负载份额减少 10 个百分点(从而将其他提供商的负载份额增加 10 个百分点)。如果最后一分钟已经减少了份额,我们就不会再减少份额。
我们还决定,如果提供商传递消息的速度很慢(以与以前相同的方式衡量),我们将减少其负载份额 10 个百分点。同样,如果份额在最后一分钟已经减少,我们将不会减少。
重要的是,我们要等待一分钟,然后再允许另一个 500-599 HTTP 响应代码再次减少该提供商的流量份额。这意味着,只是一个小的瞬间,例如一秒钟内五个 500-599 HTTP 响应,不会太快将所有流量切换到另一个提供商。
我们如何提高弹性
我们更改了 Notify,使其以大约 50/50 的比例向两个提供商发送流量。发送一条短信时,Notify 将随机选择一家提供商。这应该可以降低向我们的提供商发送大量他们无法处理的意外流量的可能性。
我们还改变了处理提供商错误的方式。如果提供商给我们 500-599 HTTP 响应代码,我们会将其负载份额减少 10 个百分点(从而将其他提供商的负载份额增加 10 个百分点)。如果最后一分钟已经减少了份额,我们就不会再减少份额。
我们还决定,如果提供商传递消息的速度很慢(以与以前相同的方式衡量),我们将减少其负载份额 10 个百分点。同样,如果份额在最后一分钟已经减少,我们将不会减少。
重要的是,我们要等待一分钟,然后再允许另一个 500-599 HTTP 响应代码再次减少该提供商的流量份额。这意味着,只是一个小的瞬间,例如一秒钟内五个 500-599 HTTP 响应,不会太快将所有流量切换到另一个提供商。