对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

Atlas 可扩展性指导

自动伸缩功能使集群能够根据实时使用情况自动调整其层级和/或存储容量。Atlas使用互补的自动伸缩机制:

  • 响应式自动伸缩会分析当前 CPU 和内存利用率,根据持续的高或低资源使用率来 trigger 扩展事件。响应式自动伸缩会在工作负载发生变化后发生,并同时处理升级和缩减。

  • 预测性自动伸缩使用机器学习根据历史使用模式预测未来的扩展需求,并尝试在预测的周期性工作负载负载峰值到来之前进行扩展。预测性自动伸缩适用于符合条件的集群,且仅支持升级。缩减仍处于被动状态。

请参阅集群层级扩展,详细学习;了解Atlas在什么情况下向上或向下扩展集群节点。您还可以指定集群可自动扩展到的最大和最小集群大小范围,以保证最低性能或控制成本。如果扩展会导致层级超出指定的大小范围, Atlas通常不会扩展集群,但如果磁盘需要,集群层和存储可能会并行扩展。如果内存或 CPU 使用量超过扩展层级的容量, Atlas也不会扩展。

自动伸缩最适合稳定增长或下降的应用程序负载和周期性工作负载模式。对于意外的一次性流量峰值,例如产品发布或史无前例的事件,请以编程方式进行预扩展。响应式自动伸缩引入了限制延迟以防止应用程序影响,而预测性自动伸缩仅处理重复出现的模式。

推荐的部署拓扑中引用的Atlas部署模板为您提供了水平和垂直扩展选项。具体来说,分片可将数据分发到大量机器上,当没有单个服务器可以处理您的工作负载时,分片非常有用。分片遵循无共享架构,这是一种分布式计算架构,其中没有任何节点相互股票任何资源。请参阅选择分片键以学习;了解有关理想分片键选择的更多信息,该选择允许MongoDB在整个集群中均匀分布文档,同时促进常见查询模式。此外,请参阅性能最佳实践:分片,学习;了解关键分片策略,例如范围分片、哈希分片和分区分片。

您可以通过Atlas控制平台 GUI、 Atlas管理API或 IaC 工具(例如Atlas Kubernetes Operator、 MongoDB和 Atlas)将Atlas 集群升级到下一个可用的Atlas层级。 HashiCorp Terraform 或Atlas CLI。请参阅Atlas自动化基础架构预配指南以学习;了解更多信息。更改Atlas层级(无论是升级还是缩减)都可以实现零停机。层级以滚动方式更改,其中包括选举一个从节点(secondary node from replica set)作为替代节点,将该从从节点(secondary node from replica set)提升为新的主节点 (primary node in the replica set),然后恢复或替换故障节点以确保集群尽快返回到其目标配置。横向扩展根据管理员动作在部署后发生,可以通过编程脚本触发。某些集群模板需要分片的集群。从MongoDB版本 8.0 开始,您可以使用嵌入式配置服务器来降低与小型分片的集群上的配置服务器相关的成本。

Atlas 中的低 CPU 选项有助于那些需要更多内存但不需要太多处理能力的应用程序。与相同集群大小的常规层级相比,此可为实例提供一半的 vCPU,从而降低内存密集型但不依赖 CPU 的工作负载的成本。

数据层级和存档使您能够以低成本存储存档数据,同时仍然可以查询实时集群数据,这对于长期记录保留特别有用。为了优化此过程,MongoDB 建议您使用简单、可配置的规则来自动化数据存档。请参阅存档数据,了解有关您可以在存档规则中指定的标准的更多信息。在数据保留不是优先级的情况下,Atlas 提供了根据日期标准自动删除未使用数据的选项。对于不经常访问的数据,TTL 索引是特殊的单字段索引,会在指定时间段后或设定的时钟时间自动从TTL集合中删除文档。对于像日志、会话信息或事件数据等只需在有限时间内保留的数据,这一功能特别有用。要创建 TTL 索引,您可以在包含日期值的字段上定义索引,并指定以秒为单位的生存时间。

Atlas还为您提供了Performance Advisor等自动化工具,通过添加或删除索引或更改客户端的查询结构来识别和优化低效查询。您可以遵循性能优化顾问的可行建议来提高查询性能,从而减少不必要的计算时间和资源消耗。 此外,您还可以利用Atlas提供的智能索引建议,进一步提高数据检索效率,最大限度地减少数据库操作所需的资源。

对于单区域部署,重点关注优化单个云区域内性能的垂直扩展策略:

  • 为计算和存储启用自动伸缩,以处理流量的逐渐增加,而无需手动干预。

  • 当您的数据集超过单个服务器的容量(即使在单个地区内)时,请使用分片在多个分片之间分配负载。

  • 对于不需要高处理能力的内存密集型工作负载,建议考虑低 CPU 实例选项。

  • 为历史数据实现数据分层和存档,以降低存储费用,同时保持查询功能。

  • 使用Performance Advisor监控查询性能并实现推荐的索引以优化资源利用率。

  • 对于一次性事件,例如产品发布或空前的流量峰值,请在事件之前以编程方式预扩展集群。自动伸缩依赖于重复出现的周期性工作负载,或依赖于工作负载发生更改后的响应,这两种方式可能都不适合您的情况。

对于多区域和多云部署,实现考虑地理分布和跨云复杂性的扩展策略:

  • 在距离用户最近的地区配置只读副本,以减少延迟并按地理位置分配读取工作负载。

  • 使用区域分片根据地理或逻辑边界对数据进行分区,确保数据的局部性和合规性要求。

  • 实施具有本地读写功能的全球集群,以优化跨区域性能,同时保持数据一致性。

  • 监控区域之间的网络延迟,并调整副本优先级,以确保最佳的故障转移行为。

  • 在跨多个区域实现自动伸缩时,请考虑跨区域数据传输成本的影响。

  • 根据区域使用模式和费用优化策略,在不同区域使用不同的集群层。

  • 实现区域特定的备份和归档策略,以符合数据驻留要求。

以下建议适用于所有部署范式。

对于开发和测试环境,请勿启用自动伸缩计算和自动伸缩存储。这可以节省您在非生产环境中的成本。

对于测试和生产环境,我们建议您:

  • 启用计算和存储的自动伸缩。 当您启用自动伸缩时,Atlas 会自动结合使用响应式和预测性自动伸缩来扩展您的集群。 响应式自动伸缩根据当前的资源使用情况触发。 预测性自动伸缩会分析历史使用模式,并在其预测的周期性需求高峰出现之前主动扩展您的集群。 对于这两种方法,向下伸缩均保持响应式。 要了解更多信息,请参阅集群层的预测性自动伸缩。

  • 如果您使用 IaC 工具,请利用设置忽略自动伸缩造成的资源漂移。示例,在 Terraform 中,如果 disk_gb_enabled 为 true, Atlas将自动扩展和缩小磁盘大小。这将导致返回的 disk_size_gb 值可能与 Terraform 配置中指定的值不同,如果随后应用计划而没有注意到这一点,Terraform 会将集群磁盘大小扩展回原始 disk_size_gb 值。为防止出现这种情况,请使用 use_effective_fields = true。

  • 同样,在 Terraform 中,如果 compute_enabled 为 true,则Atlas将自动扩展到提供的最大值,并缩减到最小值(如果提供)。这将导致返回的 provider_instance_size_name 值可能与 Terraform 配置中指定的值不同,如果随后应用计划而没有注意到这一点,Terraform 会将集群扩展回原始的 instanceSizeName 值。为防止出现这种情况,请使用 use_effective_fields = true。use_effective_fields = true。

提示

有关在所有支柱上实施我们建议的 Terraform 示例,请参阅Github中的以下示例之一:

以下示例支持使用 Atlas自动化工具自动扩展计算和存储。

这些示例还应用其他推荐的配置,包括:

  • 集群层已为开发/测试环境设置为 M10。使用集群大小指南了解适合应用程序大小的推荐集群层。

  • 单区域,3 节点副本集/分片部署拓扑结构。

我们的示例交替使用 AWS、 Azure和 Google Cloud。您可以使用这三个云提供商中的任何一个,但必须更改地区名称以匹配云提供商。要学习;了解云提供商及其地区,请参阅云提供商。

注意

在使用 Atlas CLI 创建资源之前,您必须:

对于您的开发和测试环境,为节省成本,已禁用自动扩展计算和存储。

有关此示例的更多配置选项和信息,请参阅创建 Atlas 集群。