
AWS 最近为其 Amazon Simple Queue Service(SQS)引入了所谓的公平队列,该功能可以减轻多租户系统中“嘈杂邻居”的影响。公司将这一功能描述为增强应用程序的弹性并简化操作。
SQS是 AWS 中的一个完全托管的消息队列服务,使开发人员能够轻松地解耦和扩展微服务、分布式系统和无服务器应用程序。队列可以充当缓冲区,允许服务以自己的速度异步处理工作。然而,在多租户架构中,当一个租户成为嘈杂邻居时,它会通过过度使用系统资源来影响其他租户。AWS 计算博客的作者解释说:
常规队列首先传递旧消息,这增加了此类场景中所有租户的消息驻留时间。当邻居吵闹时,Amazon SQS 公平队列可以帮助其他租户保持较低的驻留时间。这是透明的,不需要更改现有的消息处理逻辑。用户定义系统中的租户,Amazon SQS 负责处理复杂的协调工作,以减轻噪声对邻居的影响。
根据文档,当单个租户大量使用资源时,Amazon SQS 公平队列会将其视为嘈杂邻居,并为其他租户优先处理消息。这确保了更安静的租户(B、C、D)的驻留时间较短,而租户 A 的消息驻留时间更高,直到积压工作被清除。
正如 Enlear 的技术负责人 Chameera Dulanga 在 LinkedIn 上强调的,这种新能力意味着开发人员现在“无需复杂的重构,就能同时获得标准队列和 FIFO 队列的最佳组合——高性能和组级公平。”
99X 的高级技术负责人 Sidath Munasinghe 进一步强调这一功能的重要性,他在 LinkedIn 上写道:
Amazon SQS 现在支持公平队列——这是一个强大的增强功能,解决了多租户环境中经典的“嘈杂邻居”问题。当一个客户端用大量或长时间处理消息淹没共享队列时,它可能会造成其他客户端的延迟。有了公平队列,SQS 智能地平衡租户间的消息流,确保没有单个发送者占主导地位,并为每个人保持一致的服务品质。最好的部分是,你可以通过简单地设置消息组 ID 来从这个功能中受益。

(来源:AWS 计算博客文章)
要开始使用 Amazon SQS 公平队列,开发人员需要通过向他们的消息中添加租户标识符(MessageGroupId)来启用该功能,这允许在不更改消费者代码的情况下自动应用新的公平功能。此外,他们可以使用 Amazon CloudWatch 指标来监控公平队列的行为,这些指标区分嘈杂和安静的消息组,从而帮助识别潜在的队列公平问题。Contributor Insights 可以通过分析与消息处理相关的应用程序日志输出,进一步帮助定位导致负载增加的特定租户。
虽然“噪声邻居”问题是多租户云环境中的一个常见挑战,但 AWS 的 SQS 公平队列引入了一种直接的、队列级的机制来减轻其影响。其他主要的云提供商,如带有服务总线的微软 Azure 和带有 Pub/Sub 的谷歌 cloud,也提供了解决方案,尽管通常是通过不同的架构模式或功能。例如,Azure Service Bus通常通过以下策略来解决噪音邻居:为每个租户部署单独的队列或主题,利用优质层来通过弹性扩展消息单元来实现更强的隔离,或者使用客户端速率限制和分区来实现消息亲和性。类似地,Google Cloud Pub/Sub在设计上提供了自动扩展和每条消息的并行性,本质上有助于分配负载并减少单个高容量生产者的影响。然而,这不同于 SQS 公平队列的显式机制。与 SQS 的方法不同,这些平台通常依赖更明确的架构决策或由开发人员进行外部控制,以确保租户的公平性并防止资源垄断。SQS 的方法可以降低噪音租户的优先级,从而为更安静的租户维持较低的驻留时间。
最后,希望在多租户解决方案中利用公平队列的开发人员可以查看Amazon SQS开发人员指南。此外,GitHub上有一个示例。
原文链接:
评论