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

MongoDB Atlas Infinite: 架构

Atlas Infinite 将计算与存储分离为两个独立的层。计算节点运行您的查询、事务和聚合。存储层持久存储您的数据,并维护多个副本以实现高可用性。MongoDB 独立于计算层托管存储层,因此扩展和恢复操作运行无需移动或复制数据。

下图展示了 Atlas Infinite 如何融入 Atlas,跨越应用程序、计算和存储层,下方是 Atlas 管理界面。

Atlas Infinite 架构:应用程序、计算和 Atlas 托管的存储层,以及 Atlas 管理界面。

如何将 Atlas Infinite 计算和存储集成到 Atlas 应用程序和管理堆栈

计算节点是运行查询、事务和聚合的层。由于计算节点与存储解耦,您可以独立于存储扩展计算容量。您可以随着需求的增长增加计算容量,并在需求下降时将其扩展。如果您启用自动伸缩,Atlas 会为您调整计算资源。

在公共预览版中,Atlas 会将您的计算节点部署在集群区域内的不同可用区中。

Atlas Infinite 中的存储层可确保应用程序数据的持久性,并维护多个副本以实现高可用性。借助 Atlas Infinite,MongoDB 将存储作为独立层进行托管,与运行应用程序工作负载的计算节点分离。存储层负责处理复制、提供读取服务并提供持续备份,独立于计算层。当您扩展集群层,或者当计算节点发生故障且 Atlas Infinite 执行故障转移时,应用程序的数据仍可在存储层中用于提供查询服务。MongoDB 不会将其复制到新的计算节点。

Atlas Infinite 将每个集群隔离在存储层中。Atlas 使用 X.509 证书对存储层内的通信进行内部流量相互身份验证。

由于存储层是共享的,每个客户数的数据都使用唯一的密钥进行加密,这些密钥绝不会在客户数之间共享。存储层将这些密钥与计算节点分开管理,因此每个计算节点都可以解密其接收到的数据。要学习;了解Atlas如何加密Atlas Infinite 数据,请参阅Atlas静态加密概述。

一个Atlas Infinite集群有两个可选举计算节点:一个主节点 (primary node in the replica set)(用于写入)和一个备用节点(另一个可选举节点,在主节点 (primary node in the replica set)故障或重新启动时接管)。在公共预览期间,您最多可以添加五个只读节点和分析节点以进行工作负载隔离性。这样,您的集群总共最多有七个计算节点。您可以添加以下节点类型:

  • 只读节点为操作工作负载的读取请求提供服务。

  • 分析节点将分析查询与您的操作工作负载隔离开来。

  • 搜索节点运行MongoDB Search 和MongoDB Vector Search 工作负载。搜索节点与集群的计算节点是分开的,并且不计入五个节点的限制。

计算节点不参与主节点 (primary node in the replica set) 的选举。存储层负责协调故障转移,而不是在集群的节点之间进行选举。当主节点 (primary node in the replica set) 发生故障或重启时,备用节点将成为主节点 (primary node in the replica set)。存储层确保每个计算节点都能随时访问您的最新数据。如果故障转移中断了索引构建,构建会自动恢复。

读取偏好(read preference)的工作方式与在 Atlas Core 集群上相同。您可以使用所有 读取偏好(read preference)模式和预定义的副本集标签。

应用程序的驱动程序设置读取偏好(read preference)。驱动程序默认值为 primary,因此除非您更改读取偏好(read preference),否则您的应用程序会将每次读取发送到主节点 (primary node in the replica set)。

Atlas Infinite 集群具有一个备用节点。当您的应用程序从主节点 (primary node in the replica set) 以外的节点读取数据时,这些读取操作会发送到该备用节点,除非您添加了只读节点或分析节点并设置了不同的读取偏好(read preference)。请遵循以下建议:

  • 若要从多个节点为应用程序的操作读取提供服务,请添加只读节点。只读节点可以提供除 primary 之外的任何读取偏好(read preference)的读取服务,因此您添加的每个节点都会分担部分流量。要将这些读取操作分配到备用节点和只读节点,请设置 secondaryPreferred 的读取偏好(read preference)。这可以使应用程序的读取操作远离主节点 (primary node in the replica set),并避免使单个备用节点过载。在 Atlas Core 集群上,多个从节点(secondary node from replica set)无需添加节点即可分散这些读取。

  • 为了将工作负载(例如分析)与应用程序的操作读取隔离开来,请添加分析节点或只读节点,并使用预定义的副本集标签将查询定向到这些节点。

  • 为了让每个节点有更多的容量来提供读取服务,请扩展集群层。

备份、恢复和时间点恢复在存储层运行。要了解备份和恢复,请参阅 恢复 Atlas Infinite 集群。

写关注(write concern)描述了您从 MongoDB 请求的写入操作确认级别。

本节介绍了 Atlas Infinite 集群上的默认写关注(write concern)、Atlas 如何处理每个写关注(write concern)字段,以及写关注(write concern)与 Atlas Core 集群的区别。

在 Atlas Infinite 集群上,存储层会存储并复制您的数据,一旦存储层捕获到您的写入,Atlas 就会确认该写入。

在 Atlas Infinite 集群上,默认写关注(write concern)为 w: "majority"。您的应用程序在连接字符串中或针对单个写入操作设置写关注(write concern)。您无法在 Atlas 用户界面中更改默认设置。

Atlas 接受您的应用程序发送的任何写关注(write concern),并在必要时将其修改为 Atlas Infinite 集群支持的值,以便您的应用程序的写关注(write concern)可以持续工作。

在 Atlas Infinite 集群上,Atlas 对写关注(write concern)字段的处理方式如下:

  • 您的应用程序可以通过以下方式设置写入确认级别 w:

    • 如果您的应用程序未设置 w,Atlas 将应用默认值 w: "majority"。在 Atlas Infinite 集群上,"majority" 指的是存储层中的大多数,而不是集群节点中的大多数。Atlas 绝不会回滚 w: "majority" 写入。

    • 如果您的应用程序将 w 设置为 0 或 1,Atlas 将应用您的应用程序设置的值。w: 0 请求不需要确认。w: 1 写入的返回速度比 w: "majority" 写入快,但在极少数故障情况下,Atlas 可能会回滚它。

    • 如果您的应用程序将 w 设置为 2 或任何大于 2 的数字,Atlas 将应用 w: "majority"。

  • 您的应用程序可以使用以下方式设置时间限制: wtimeout (连接字符串中的 wtimeoutMS),以毫秒为单位。wtimeout 应用于 w: "majority" 写入,包括使用默认的写入:

    • 如果您的应用程序设置了 wtimeout,则当写入达到 wtimeout 限制时,Atlas 无法确认的写入将返回写关注(write concern)错误。

    • 如果您的应用程序未设置 wtimeout,则写入操作将无限期等待并阻塞您的应用程序。

  • Atlas 始终应用 j: true在 Atlas 确认写入之前,存储层会将每次写入持久化到节点内存之外。您的应用程序的 j 设置对此行为没有影响。

Atlas Infinite 集群和 Atlas Core 集群之间的写关注(write concern)存在以下差异:

  • 在 Atlas Infinite 集群上,您可以将 w 设置为 0、1 或 "majority"。对于 w: 1 和 w: "majority",存储层会提供您的 ACID 一致性保证写入。对于 w: 0,存储层不会确认您的写入。在 Atlas Core 集群上,您还可以将 w 设置为一个数字,这会请求来自相应数量节点的确认。

  • 在 Atlas Infinite 集群上,Atlas 始终应用 j: true,并且您无法禁用日志确认。在 Atlas Core 集群上,您可以使用 j: false 关闭日志确认。

在 Atlas Infinite 集群上,oplog 集合 local.oplog.rs 不提供服务复制功能,因为复制是在存储层处理的。该集合为变更流和一些需要有限历史记录的内部功能提供服务。该集合计入集群的存储数据。

  • 复制不使用 oplog 集合。在 Atlas Infinite 集群上,复制发生在存储层,Atlas 也会在那里存储 oplog 集合 local.oplog.rs。每个节点都从存储层读取数据,因此加入或重新加入集群的节点不会落后于 oplog window。要了解更多信息,请参阅复制和故障转移。

  • oplog 集合用于提供服务变更流和内部功能。local.oplog.rs 提供服务 变更流 和一些需要有限历史记录的内部功能。保留窗口决定了中断的变更流可以恢复到过去的时间点,但并不控制您可以将集群本身恢复到多远的时间点。为此,请使用时点还原。

  • Atlas 保留条目的时长。Atlas 会将每个 oplog 条目至少保留最短的 oplog 保留窗口时长。一旦条目超过该窗口,Atlas 就会将其删除。在 Atlas Infinite 和 Atlas Core 中,默认的最短 oplog 保留窗口为 24 小时。您可以在 Additional Settings 中设置最短 oplog 保留窗口,以确定集群保留的历史记录量。

  • oplog 集合如何影响数据大小和费用。oplog 集合记录对集群的每次写入。oplog 集合计入集群中存储的数据和存储费用,与 Atlas Core 集群相同。Atlas 为 连续云备份 保留的历史记录属于备份费用的一部分。该历史记录不计入集群存储。要了解详情,请参阅MongoDB Atlas Infinite 集群费用。

您的应用程序无需更改代码即可在 Atlas Infinite 上运行。Atlas Infinite 使用 MongoDB 传输协议,因此您的应用程序使用 MongoDB 驱动程序和其他连接方法连接到您的 Atlas Infinite 集群。您还可以使用 MongoDB 编程工具访问和管理集群。