注意
本页适用于Atlas Infinite 和Atlas Core。
Overview
即使在流量激增和昂贵的查询消耗的资源超过预期的情况下,现代应用程序也必须保持可用。智能工作负载管理 (IWM) 是MongoDB Atlas托管的可用性功能,即使在过载情况下也能保持集群的响应能力和可预测性。
当集群收到的操作数量超过其资源的进程能力时,就会发生过载。过载的发展速度可能超过基础架构的扩展。即使启用自动伸缩, Atlas需要时间来预配额外容量。这将打开一个窗口,在此期间,如果以相同方式处理所有操作,集群可能会变得不稳定。 IWM 通过实时监控工作负载峰值和资源压力并对其做出反应来关闭该窗口。
IWM 是Atlas应用于运行MongoDB 9.0 或更高版本的所有专用集群的过载保护系统。 IWM 包括以下保护:
Atlas根据集群的层级、拓扑结构、 MongoDB版本和减负载配置,将这些保护的子集应用于每个集群。要学习;了解更多信息,请参阅集群和版本要求。
始终在线的保护
始终在线保护是Atlas用来吸收过载和保持可用性的一组设立IWM 保护。这些保护始终在运行,即使禁用了负载卸载也是如此,并且您无法将其关闭。要学习;了解哪些保护应用于您的集群,请参阅集群和版本要求。
入口队列: Atlas在集群中的每个
mongod进程上运行入口请求速率限制器,这决定了每个进程允许执行操作的速度。当流量峰值超过集群的预留容量时,速率限制器会将多余的传入操作添加到入口队列,而不是让它们与运行的操作争夺资源。如果资源使用率居高不下,则速率限制器会以较慢的速度接纳操作,因此会有更多操作在队列中等待。仅当您在集群上启用了负载减少时,速率限制器才会拒绝操作。如果您的集群启用了响应式自动伸缩, Atlas会根据排队操作的速率来确定何时扩展集群。 Atlas将此速率报告为操作速率限制: Atlas指标中的排队操作。要学习;了解更多信息,请参阅Atlas如何扩展集群层。
执行控制优先级: Atlas在背景作业和昂贵的查询之前运行关键的读取和写入以及内部集群活动(例如选举)。在压力下, Atlas会首先减慢成本高昂、长时间运行或低优先级的操作。
缓存逐出和内存调优: Atlas可调整集群使用内存和逐出缓存数据的方式。当内存不足时,集群会以受控方式减慢速度,而不是运行内存或重复清除最需要的数据。
写入阻塞:在Atlas Core 集群上,如果主节点 (primary node in the replica set)节点的可用磁盘空间严重不足, Atlas会阻止副本集上的写入操作。 Atlas继续提供服务读取服务,同时阻止写入。阻止的写入操作包括删除操作,因为删除文档会暂时增加已用磁盘空间。在分片的集群上, Atlas仅阻止路由到受影响分片的写入。
节点的总磁盘大小决定了Atlas应用的阈值。下表列出了每个磁盘大小范围的阈值:
总磁盘大小阈值8 GiB 至 20 GiB
当可用磁盘空间降至 600 MiB 以下时, Atlas会阻止写入。当可用磁盘空间超过 900 MiB 时, Atlas会解锁写入。
20 GiB 至 1.25 TiB
当可用磁盘空间降至总磁盘大小的 4% 以下时, Atlas会阻止写入。当可用磁盘空间超过磁盘总大小的 6% 时, Atlas会解锁写入。
1.25 TiB 或更大
当可用磁盘空间降至 50 GiB 以下时, Atlas会阻止写入。当可用磁盘空间超过 75 GiB 时, Atlas会解锁写入。
当Atlas阻止写入时, Atlas日志会返回
MongoServerError,指示写入已被阻止。错误代码和原因取决于集群的特征兼容性版本(FCV):对于具有FCV 9.0 或更高版本的集群,日志会返回类似于以下内容的
MongoServerError:Replica set writes blocked, reason: InsufficientDiskSpace。对于FCV早于 9.0 的集群,日志会返回类似于以下内容的
MongoServerError:User writes blocked, reason: DiskUseThresholdExceeded。
在Atlas Infinite 集群上,当副本集上的逻辑数据大小接近集群的最大存储限制时, Atlas会阻止写入。要学习;了解有关Atlas无限集群存储限制的更多信息,请参阅管理Atlas无限集群上的存储。
减载
负载卸载是一种 IWM 保护,它会尽早拒绝传入的数据库操作,以限制其对集群的影响。与 IWM 始终在线的保护不同,卸载是可选的,因此您可以控制Atlas是否将其应用于集群。启用后,只有在持续过载期间,在其他保护措施无法释放足够压力后,才会启用减载功能。
作为 IWM 始终在线保护的一部分, Atlas在集群中的每个 mongod进程上运行入口请求速率限制器。此速率限制器允许操作以受控速率进入进程,并将任何高于此速率的操作请求添加到该进程的入口队列中。
启用“甩负载”后, Atlas会限制集群中每个 mongod进程的入口队列的大小。如果操作在进程队列已满时到达, Atlas会拒绝该操作,并显示过载错误。这可以防止队列在持续过载期间变得太大。
禁用减载后, Atlas不会限制集群中任何 mongod进程的入口队列的大小,也不会拒绝任何比速率限制器的准入速率更快的操作。在持续过载期间,每个 mongod进程继续向其队列添加无限数量的操作,因此操作需要更长的时间才能完成。
如果您的集群启用了响应式自动伸缩, Atlas会根据“减负载”拒绝的操作速率来确定何时扩展集群。 Atlas在Atlas指标的操作速率限制下将此速率报告为 Rejected Operations。要学习;了解更多信息,请参阅Atlas如何扩展集群层。
配置负载卸载
减负载仅适用于运行MongoDB 9.0 或更高版本的 M30+副本集集群。默认下, Atlas会将“甩负载”设置的值设为 Atlas
Managed,这样Atlas就能控制集群“甩负载”的有效状态。在MongoDB 9.0 上,该状态为Disabled。
要在集群上配置 Load Shedding,请使用Atlas用户界面或Atlas Administration API:
集群和版本要求
智能工作负载管理 (IWM)在运行MongoDB 9.0 或更高版本的所有专用集群上处于活动状态。 IWM 在免费集群或 Flex 集群上不可用。
当 IWM 在集群上处于活动状态时, Atlas会根据集群的层级、拓扑结构、 MongoDB版本和减载配置应用 IWM 保护的子集。下表列出了Atlas对MongoDB 9.0 及更高版本上集群层和拓扑结构的每个组合应用的保护:
注意
MongoDB 9.0 版本要求的例外情况。
以下 IWM 保护在运行9.0 之前的MongoDB版本的集群上处于活动状态:
写入阻止在运行MongoDB 8.0 或更高版本的
M10+集群上处于活动状态。连接速率限制在运行以下MongoDB版本的
M10和M20集群上处于活动状态:7.0.23 及更高版本的 7.0.x
8.0.12 及更高版本的 8.0.x
8.1.2 及更高版本的 8.1.x
监控 IWM
Atlas提供多个可观察性界面,显示 IWM 保护集群的时间以及Atlas延迟或拒绝的操作: