Monzo采用定向流量削减策略应对移动应用引发的踩踏效应

Monzo应对流量高峰的解决方案

Monzo开发了一种应对平台在突发高负载情况下可能导致的服务中断的解决方案。该解决方案能够在不影响用户体验的情况下,将读取流量减少近50%,整体准确率达到90%。

背景与挑战

Monzo的银行平台主要通过移动应用与数百万用户互动。然而,流量高峰可能会使平台不稳定。这种高峰可能是由定期推送通知或特定时间功能(如“提前发薪”)引起的。尽管Monzo团队通过主动扩展确保平台有足够的容量来处理“提前发薪”事件,但突发的流量高峰仍然构成重大风险。

问题的严重性

Monzo的工程师Jacob Moxham解释了“踩踏效应”对平台稳定性的威胁。当大量用户在极短时间内打开应用时,如果平台没有做好准备,可能会耗尽缓冲容量,导致共享基础设施过载,引发大规模中断。

解决方案的探索

Monzo应用在打开或收到推送通知时会预取数据以确保信息的即时更新。团队怀疑这些请求大多返回相同的数据。通过在边缘代理部署额外日志记录,发现约70%的请求在24小时内返回相同数据。

为了消除“浪费”的请求,工程师们首先尝试创建一个“变更API”,返回最常用和昂贵端点的最后更新时间。移动应用会查询新的变更API,仅在上次调用后有变化时请求数据。然而,由于实时数据丰富和复杂的数据流更新,这种方法难以提供准确的最后更新时间戳。

最终解决方案

团队决定采用一种成本效益更高的临时解决方案,仅在平台承受突发高负载时激活。他们确定了三个特征来决定是否忽略请求:

  1. 响应计算时间
  2. 数据预取的触发原因
  3. 移动应用打开的时间

工程师们重新利用API端点返回的Etag HTTP头,包含响应哈希和最后计算时间。移动应用在预取数据时发送If-None-Match HTTP头,包含之前返回的Etag值和其他两个特征的自定义头。基于头中的元数据,边缘代理中的负载削减策略决定是否忽略请求并返回304(未修改)状态码,或返回计算后的响应。

实施与效果

团队通过在影子模式中部署新策略进行试验,比较请求元数据与实际结果。在所有策略激活的情况下,平台能够削减近50%的GET请求,整体准确率达到90%。工程师报告称,用户体验没有明显影响,相比影响整个平台的大规模中断,少数用户看到过时数据是可以接受的。

总结

Monzo通过创新的负载削减策略,有效应对了突发流量高峰,显著减少了读取流量,同时保持了平台的高可用性和用户体验。

阅读 27
0 条评论