Azure Cosmos DB for MongoDB 基于 vCore 的服务提供垂直和水平缩放群集的功能。 虽然计算群集层和存储磁盘在功能上相互依赖,但计算和存储的可伸缩性和成本是分离的。
垂直缩放提供以下优势:
- 应用程序团队不一定能够明确地以逻辑方式将其数据分片。 此外,逻辑分片是按集合定义的。 在包含多个未分片集合的数据集中,通过数据建模对数据进行分区的方式很快就会变得繁琐。 只需纵向扩展群集即可避免逻辑分片的需要,同时满足应用程序不断增长的存储和计算需求。
- 垂直缩放不需要数据重新均衡。 物理分片的数量保持不变,只会增加群集的容量,而不会对应用程序产生影响。
- 纵向扩展和缩减是不会导致停机的操作,因此不会对服务造成中断。 不需要进行应用程序更改,稳定状态的操作可以不受干扰地继续执行。
- 计算资源也可以在活动较低的已知时段内缩减。 同样,纵向缩减避免了在更少物理分片之间重新平衡数据的需要,并且是不会导致停机的操作,因此不会对服务造成中断。 在此处,纵向缩减群集后也不需要进行应用程序更改。
- 最重要的是,计算和存储可以独立扩展。 如果需要更多核心和内存,则可以按原样保留磁盘大小,并且可以纵向扩展群集层。 同样,如果需要更多存储和 IOPS,则可以按原样保留群集层,并且可以独立扩展存储大小。 如果需要,可以单独缩放计算和存储,以便单独针对每个组件的要求进行优化,而没有任何一个组件的弹性要求会影响另一个组件。
最终,应用程序增长到垂直扩展已经不够的地步。 工作负载要求可能会超过最大群集层的容量,最终需要更多的分片。 Azure Cosmos DB for MongoDB 基于 vCore 的产品/服务中的水平缩放提供以下优势:
- 逻辑分片数据集不需要用户干预来平衡基础物理分片中的数据。 服务会自动将逻辑分片映射到物理分片。 添加或删除节点时,数据库中的数据在幕后会自动重新平衡。
- 请求会自动路由到拥有所查询数据的哈希范围的相关物理分片。
- 异地分布式群集具有同质的多节点配置。 因此,逻辑分片到物理分片的映射在群集的主区域和副本区域中是一致的。
计算和内存资源 对于 Azure Cosmos DB for MongoDB 的基于 vCore 的服务中的读取操作影响大于对磁盘 IOPS 的影响。
- 读取操作首先查看计算层中的缓存,如果无法从缓存中检索数据,再回到磁盘。 对于每秒读取操作率较高的工作负载,通过纵向扩展群集层来获取更多 CPU 和内存资源可以提高吞吐量。
- 除了读取吞吐量之外,每次读取操作涉及大量数据的工作负载也可以从缩放群集的计算资源中受益。 例如,内存更多的群集层有利于在每个文档中包含更大的有效负载,并且每个响应可以包含更多的较小文档。
与计算资源的 CPU 和内存容量相比,磁盘 IOPS 对 Azure Cosmos DB for MongoDB 基于 vCore 的服务中的写入操作的影响更大。
- 写入操作始终将数据持久保存到磁盘(此外还会将数据持久保存到内存中以优化读取)。 IOPS 更高的较大磁盘提供更高的写入吞吐量,尤其是在大规模运行时。
- 服务支持为每个分片使用最多 32 TB 的磁盘,每个分片的 IOPS 更高,因此有利于写入繁重型工作负载,尤其是在大规模运行时。
如前所述,存储和计算资源在计费和预配方面是分离的。 虽然它们作为一个内聚的单元运行,但它们可以独立缩放。 可为 M30 群集层预配 32 TB 磁盘。 同样,可为 M200 群集层预配 32 GB 磁盘,以优化存储和计算成本。
通常,使用基于 vCore 的模型的 NoSQL 数据库将每个物理分片的存储限制为 4 TB。 Azure Cosmos DB for MongoDB 基于 vCore 的服务通过 32 TB 磁盘提供高达 8 倍的容量。 对于存储繁重型工作负载,为每个物理分片预配 4 TB 存储容量需要大量的计算资源才能保持满足工作负载的存储要求。 计算的开销比存储更高,由于服务的容量限制而过度预配计算会导致成本快速膨胀。
假设某个存储繁重型工作负载具有 200 TB 数据。
每个分片的存储大小 | 维持 200 TB 容量所需的最小分片数量 |
---|---|
4 TiB | 50 |
32 TiB | 7 |
计算要求随着磁盘的增大而急剧下降。 虽然可能需要提供超过最小数量的物理分片才能保持满足工作负载的吞吐量要求,但即使将分片数量增加一倍或三倍,也比使用包含较小磁盘的 50 个分片群集更加经济高效。
在存储繁重型方案中,直接应对计算成本问题的方法是将数据“分层”。 事务数据库中的数据仅限为最常访问的“热”数据,而大量“冷”数据则分离到冷存储。 这会导致操作变得复杂。 性能也是不可预测的,取决于所要访问的数据层。 此外,整个系统的可用性取决于热数据存储和冷数据存储的综合复原能力。 使用 vCore 服务中的大型磁盘时,无需分层存储,因为存储密集型工作负荷的成本会最小化。