即使在流量突然激增或查询消耗过多资源的情况下,现代应用程序也需要保持可用。MongoDB Atlas 是专为高可用性而设计的,但实际上,可用性不仅限于应对托管故障或副本集选举。它还取决于集群在需求超过其安全处理能力时的表现。
上周,我们宣布将智能工作负载管理 (IWM) 在 MongoDB 9.0 中实现 GA。IWM 是一项托管可用性功能,即使在超负荷的情况下也能让 Atlas 集群保持响应和可预测性。IWM 可以排队处理瞬时峰值,保持短时间运行操作和长时间运行操作的稳定,并在无需任何应用程序更改的情况下保护集群健康。
过载事件的发生往往比基础设施的扩展速度更快。即使启用了 自动伸缩,预配额外容量也需要时间。在流量激增与增加新容量之间,如果每个请求都受到同样对待且客户端进行积极重试,集群可能会变得不稳定。IWM 旨在通过维护集群健康、优化性能并将原本不可预测的服务中断转化为可控、可观察的事件来缩小这一差距。
在 Coinbase,交易量会在几分钟内激增,我们的系统必须能够实时扩展,否则客户就会感受到差异。智能工作负载管理让我们确信,在交易高峰窗口,我们的集群仍能保持响应。
”对于持续过载,客户可以选择使能够“负载削减”(Load Shedding)来拒绝多余的操作。IWM 有助于在流量激增时管理压力或在添加容量时进行管理;它不会增加容量或取代自动伸缩和容量规划。
图 1.智能工作负载管理可提供自适应,确保集群维持响应速度和可预测性。

在容量跟上时管理工作负载压力
流量高峰和占用大量资源的操作可能会导致需求增加速度快于基础设施扩展的速度。即使使能够了自动伸缩功能,预配额外的容量也需要时间。在集群已处于繁忙状态时,激进的客户端重试可能会增加压力。
IWM 可帮助管理该期间的工作负载压力。无论是否使能够自动伸缩,它都可以工作:当使能够了自动伸缩时,IWM 会在容量在线时帮助保持集群稳定;如果没有使能够,IWM 将以集群的预配容量托管工作。对于持续或不断增长的需求,仍可能需要增加容量。
IWM 如何应对工作负载压力
当集群健康时,IWM 实际上是隐形的。当需求超过集群安全处理能力时,IWM 会分阶段管理压力:
- 它限制传入的工作并排队多余的请求: 默认情况下,IWM 会对多余的请求进行排队,而不是主动拒绝它们。这有助于缓冲瞬时峰值,尽管在资源受限时,排队的请求可能需要更长的时间才能完成。排队会改变工作处理的时间,而不是应用程序最终要求集群完成的工作量。
- 它有助于保持短时间运行的操作持续进行: 短时间运行的操作(如典型的读取或写入)与长时间运行的操作(如大型报告查询)对集群的要求不同。当资源受限时,IWM 会确保短时间运行的操作持续进行,同时以更保守的方式管理长时间运行的操作。
- 它有助于管理资源压力:内存碎片化、缓存不平衡和存储耗尽都可能破坏健康集群的稳定性。当 IWM 检测到不健康的模式时,它会调整集群内存和缓存管理;当存储使用率达到临界水平时,它可以在允许读取的同时暂停新的写入。
这些保护有助于在过载期间维护集群运行状况。它们不会使容量变得无限,也不会替代良好的索引、容量规划或自动伸缩。
默认保护和可选的负载卸载
IWM 的默认保护功能在运行 MongoDB 9.0 的符合条件的专用 Atlas 集群上无需额外费用启用。它们不需要更改应用程序或升级驱动程序。默认情况下,IWM 管理过载而不主动拒绝多余的工作。
负载限制是一个单独的、可选的持续过载控制功能。如果使能够了此功能,它可以拒绝多余的操作,而您的应用程序会将这些拒绝视为过载错误。运行 MongoDB 9.0 的符合条件的 M30+ 专用副本集 Atlas 集群可免费获得负载限制功能。
默认的 IWM 保护功能适用于任何 MongoDB 驱动程序。如果您使能够了负载限制,请使用支持的 背压感知驱动程序,以便您的应用程序可以解释过载信号并应用带退避的限时重试。在启用负载限制之前,请检查支持的驱动程序矩阵。
图 2。 默认(排队)设置与负载限制设置之间的区别。
.png)
通过可观测性了解 IWM 干预措施
在 Atlas 中,查看操作速率限制和连接速率限制指标,了解已排队、已拒绝的操作或连接。启用负载削减后,被拒绝的操作会出现在“操作速率限制”下。配置或查看 IWM 警报条件以追踪相关的 IWM 活动,并检查操作日志中与 IWM 相关的事件。总之,这些 Atlas 界面可帮助您评估压力是否持续,以及是否需要查看工作负载模式或增加容量。 了解详情:有关 Atlas 中 IWM 可观测性的信息。
对于正在评估可选负载脱落功能的团队,Atlas 还提供了一项测试,以验证驱动程序兼容性、应用程序对过载错误的处理以及在生产环境中依赖该控制之前的操作可见性。在活动测试或开发集群上测试时,Atlas 会随机拒绝一小部分操作,而不考虑负载。团队可以在指标图表中跟踪被拒绝的操作,并在测试结束后查看结果。由于应用程序在测试期间可能会遇到过载错误,因此团队应仅使用这些测试来验证客户端行为。团队不应在生产集群上运行测试。了解如何测试负载脱落。
有关 IWM 行为以及如何应对过载的详细信息,请参阅 IWM 文档。
入门
确认您的集群是运行 MongoDB 9.0 的符合条件的专用 Atlas 集群。
确定自动伸缩是否应在持续过载期间增加容量。IWM 有助于在容量在线时管理压力;它不会取代自动伸缩或容量规划。
如果您使能够负载脱落 (Load Shedding),请检查支持的驱动程序矩阵,并确认您的应用程序使用带有退避策略的绑定重试机制。
查看 Atlas 可观察性仪表盘,了解 IWM 何时介入以及哪些工作负载受到影响。
未来
准备好让您的集群在过载事件期间更加可预测了吗?阅读 IWM 文档,探索 Atlas 自动伸缩,或注册 MongoDB Atlas 以立即开始构建。