使用 Amazon DocumentDB 运行的 MongoDB 兼容数据库 - 设计模式与扩展

在 MongoDB 兼容的 DocumentDB 中选定实例类,通过 Elastic Clusters 的分片确保可扩展性。还介绍备份策略。

DocumentDB 的特性与 MongoDB 的差异

DocumentDB 是提供 MongoDB 兼容 API 的托管文档数据库。可以直接使用 MongoDB 的驱动程序、ODM(Mongoose 等)和管理工具(mongosh、Compass)。不过,其内部架构与 MongoDB 不同,采用了与 Aurora 类似的存储引擎。存储在 3 个 AZ 中复制 6 份副本,以 10 GB 为单位自动扩展(上限在引擎版本 8.0 起为 256 TiB,在更早的版本中为 128 TiB)。DocumentDB 是全托管的服务,因此 MongoDB 的副本集和分片的运维不由用户自己管理。另一方面,MongoDB 的部分功能(客户端字段级加密、$graphLookup 的部分模式等)不受支持,因此迁移前需要验证兼容性。

实例设计与扩展

DocumentDB 实例类的一个例子是使用 Graviton2、面向内存的 db.r6g。主实例处理写入,最多 15 个只读副本分散读取。只读副本还作为故障转移目标发挥作用,在主实例发生故障时自动提升。对于大规模的工作负载,使用 Elastic Clusters。Elastic Clusters 根据分片键自动分散数据,支持 PB 规模的数据和每秒数百万次的吞吐量。分片键关系到性能,因此选择基数高且符合查询模式的字段。

备份与高可用性

DocumentDB 自动将连续备份保存到 S3,可以在最多 35 天内以秒为单位恢复到任意时间点。手动快照可以不受保留期限制地保存,通过跨区域复制支持 DR。在多可用区部署中,主实例和只读副本部署在不同的 AZ,AZ 故障时的故障转移通常在 30 秒以内完成。使用全球集群时,可以在最多 5 个区域中部署只读副本,在区域故障时将其他区域的副本提升为主实例。复制延迟通常低于 1 秒。

DocumentDB 的费用

DocumentDB 的费用由实例时长、存储和 I/O 构成。db.r6g.large 每小时约 0.277 美元(每月约 199 美元)(截至 2026 年 8 月)。存储每 GB 每月约 0.10 美元,I/O 在 Standard 集群中每 100 万次请求约 0.20 美元。I/O-Optimized 集群的存储单价高约 25%,但不收取 I/O 费用,因此在 I/O 多的工作负载中总费用有时会下降。Elastic Clusters(分片)每 vCPU 小时约 0.1386 美元,根据分片数进行扩展。

数据建模与索引设计

DocumentDB 是面向文档的数据库,可以将相关的数据汇总到 1 个文档中灵活地表示。在设计中,以应用程序如何读写数据为起点,判断嵌入和引用哪种合适。将经常一起读取的数据嵌入 1 个文档后读取次数会减少,因此嵌入的范围根据文档的大小来决定。对用于检索条件的字段创建适当的索引,确保查询性能。索引多了会增加写入的成本,因此根据实际的查询模式只保留必要的索引。

读取扩展与副本

DocumentDB 可以采用将负责写入的主实例与负责读取的副本分离的架构。在读取负载高的工作负载中,通过添加副本分散读取,可以提高吞吐量。有一种设计是在应用程序端将需要最新值的读取分配给主实例,将可以容许一定延迟的读取分配给副本。处理大量连接时,将连接放入池中重复使用,减少建立连接的开销。根据读写的特性分配负载,是可扩展运维的基础。

从 MongoDB 迁移

DocumentDB 与 MongoDB 兼容,可以直接使用许多现有的驱动程序和工具。迁移时,首先确认所使用的 MongoDB 版本和功能在 DocumentDB 中是否受支持。部分功能有时不受支持,因此在迁移前确认应用程序没有使用这些功能。数据迁移时,利用能够在持续捕获变更的同时进行切换的迁移服务,可以减少停机时间。迁移后,测试能否达到预期的查询性能,并根据需要调整索引和配置,为生产做好准备。

安全与运维监控

DocumentDB 部署在 VPC 内,在网络层面控制访问。通信使用 TLS 加密,存储的数据也加密保护。确定数据库凭证的处理方式并加以管理,将访问权限限定在必要的范围内。启用审计功能后,可以记录执行了哪些操作,追踪非法操作。在运维方面,使用将性能可视化的机制,找出慢查询和资源瓶颈,带来改善。结合备份,建立持续确认安全性、可用性和性能的运维体制。

总结

DocumentDB 是通过 MongoDB 兼容 API 以托管方式运行文档数据库的服务。存储在 3 个 AZ 中保留 6 份副本,通过 Elastic Clusters 支持大规模的工作负载。从 MongoDB 迁移时先确认兼容性,迁移后可以把副本集和分片的运维交给 AWS。

参考资料(AWS 官方)

本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。

如本页内容与官方文档不一致,请以官方文档为准。

分享