优化 Amazon Simple Queue Service (SQS) 以提升速度和扩展性 新闻博
  • 17

优化亚马逊简单队列服务SQS的速度与规模

by Jeff Barr于2024年6月26日在亚马逊简单队列服务SQS发布。

关键要点

亚马逊简单队列服务SQS的新协议显著减少了延迟,提高了容量,并降低了能耗。新的二进制框架协议支持多个请求通过单一连接进行多路复用,提升系统效率。服务处理能力提高,能同时处理更多的请求,性能显著改善。

在经历了几轮公开测试之后,我们在2006年发布了亚马逊简单队列服务Amazon SQS。近二十年后,这项全托管服务仍是微服务、分布式系统与无服务器应用的基本构件,能够在高峰时处理超过每秒1亿条消息。

因为总有更好的方法,我们持续探索提升性能、安全性和内部效率的方法。当我们找到改善方案时,我们会仔细保留现有行为,通常将新旧系统并行运行以便进行效果对比。

今天我想和您分享我们最近对亚马逊SQS所做的改进,以减少延迟、增加车队容量、缓解即将到来的可扩展性瓶颈,并降低能耗。

苹果加速器永久免费版

改进SQS

像许多AWS服务一样,亚马逊SQS是通过一组内部微服务实现的。今天我们专注于其中的两个:

客户前端 客户端前端接收、认证和授权API调用,例如[CreateQueue](https//docsawsamazoncom/AWSSimpleQueueService/latest/APIReference/APICreateQueuehtml)和[SendMessage](https//docsawsamazoncom/AWSSimpleQueueService/latest/APIReference/APISendMessagehtml)。然后将每个请求路由到存储后端。

存储后端 该内部微服务负责持久化发送到标准非FIFO队列的消息。采用基于单元的模型,每个单元中的集群包含多个主机,每个客户队列分配给一个或多个集群,而每个集群负责多个队列:

优化 Amazon Simple Queue Service (SQS) 以提升速度和扩展性 新闻博

连接 旧与新

最初的实现通过每个请求在这两个服务之间建立连接。每个前端必须连接到多个主机,这就需要连接池,并且存在一个硬性限制,即同时打开的连接数量。虽然在面对这样的挑战时,简单地增加硬件资源可能有效,但这并非总是最佳解决方案。这种方法只是将问题的“拐点”推迟,并未有效利用资源。

在仔细考虑了几种长期解决方案后,亚马逊SQS团队发明了一种新型的专有二进制框架协议,以便在客户前端和存储后端之间进行通信。该协议通过单一连接复用多个请求和响应,使用128位ID和校验和来防止交叉通话。此外,服务器端加密为队列数据提供了额外的保护层,防止未经授权的访问。

效果显著!

该新协议在今年初投入生产,截至目前已经处理了7449万亿次请求。可扩展性瓶颈问题已被消除,我们也在寻找将这一新协议应用于其他方式的可能性。

在性能上,新协议平均降低了11的数据平面延迟,而在P90指标上则降低了174。此外,这一变化使得使用SQS的其他服务也受益良多。例如,通过亚马逊简单通知服务Amazon SNS发送的消息现在在“内部”的时间减少了10。最后,由于协议的变更,现有的SQS主机包含混合的X86和Graviton实例现在可以处理比之前多出178的请求。

未来展望

我希望您喜欢对亚马逊SQS实施情况的这一小窥视。如有任何评论,请告诉我,我会看看能否分享更多相关故事。

Jeff

Jeff Barr

Jeff Barr是AWS的首席传播官。他在2004年创建了这个博客,并自那以来几乎不断地撰写文章。