Atlas Infinite 将计算和存储分成两个独立的层。计算节点运行查询、事务和聚合。存储层可持久存储您的数据,并维护多个副本以高可用性。 MongoDB独立于计算层管理存储层,因此扩展和恢复操作无需移动或复制数据运行。
下图展示了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)故障或重新启动时接管)。在公共预览期间,您可以再添加最多五个节点以进行工作负载隔离性,因此节点总数最多可达七个。您添加的节点只能提供服务读取服务。您可以添加以下节点类型:
只读节点为来自操作工作负载的读取提供服务。
分析节点将分析查询与操作工作负载隔离开来。
公共预览版的Atlas无限集群不支持搜索节点。
计算节点不会投票选出主节点 (primary node in the replica set)。存储层协调故障转移,而不是集群节点之间的选举。当主节点 (primary node in the replica set)发生故障或重新启动时,备用节点将成主节点 (primary node in the replica set)。存储层使每个计算节点都可以随时使用最近的数据。
读取偏好的工作方式与在Atlas Core集群上相同。您可以使用所有读取偏好(read preference)模式和预定义的副本集标签。
应用程序的驾驶员设置读取偏好(read preference)。驾驶员默认值为 primary,因此应用应用程序会将每次读取都发送到主节点 (primary node in the replica set),除非您更改读取偏好(read preference)。
一个Atlas Infinite集群有一个备用节点。当您的应用程序从主节点 (primary node in the replica set)节点以外的节点读取时,这些读取将转到该备用节点,除非您添加只读节点或分析节点并设立不同的读取偏好(read preference)。使用以下建议:
要从多个节点为应用程序的操作读取提供服务,请添加只读节点。只读节点以除
primary之外的任何读取偏好(read preference)提供服务读取服务,因此您添加的每个节点都提供部分流量的服务。要在备用节点和只读节点之间分配这些读取,设立读取偏好(read preference)设置为secondaryPreferred。这样可以防止应用程序从主节点 (primary node in the replica set)读取数据,并避免单个备用节点过载。在Atlas Core集群上,多个从节点分布这些读取而无需添加节点。
备份、恢复和时间点恢复在存储层进行操作。要学习;了解备份和恢复,请参阅恢复Atlas无限集群。
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集群支持的值,以便应用程序的写入关注继续工作。
在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,写入将无限期等待并阻塞您的应用程序。
|服务|始终适用
j: true。在Atlas确认之前,存储层会将每次写入在节点内存之外。应用程序的j设置对此行为没有影响。
Atlas无限集群和Atlas Core 集群的写关注在以下方面有所不同:
在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
在Atlas Infinite集群上, oplog集合local.oplog.rs 不提供服务复制,因为复制是在存储层处理的。该集合为变更流和一些需要有限历史记录的内部函数提供服务。该集合计入集群的存储数据。
复制不使用oplog集合。在Atlas Infinite集群上,复制发生在存储层, Atlas也将oplog集合
local.oplog.rs存储在存储层。每个节点都从存储层读取,因此加入或重新加入集群的节点不能落后于oplog window。要学习;了解更多信息,请参阅复制和故障转移。oplog集合如何影响数据大小和费用。 oplog集合记录对集群的每次写入。 oplog集合会计入集群中存储的数据和存储成本,与Atlas Core集群相同。 Atlas为持续云备份保留的历史记录是备份成本的一部分。该历史记录不计入集群存储。要学习;了解更多信息,请参阅MongoDB Atlas无限集群成本。
运营经验
您的应用程序无需更改代码即可在Atlas Infinite 上运行。 Atlas Infinite 使用MongoDB传输协议,因此您的应用程序使用MongoDB驱动程序和其他连接方法连接到Atlas Infinite集群。您还可以使用MongoDB编程工具访问权限和管理集群。