当写入压力和数据规模增长时,MongoDB通常通过分片集群(Sharded Cluster)解决横向写扩展问题,但同时引入了较高的运维复杂度。PolarDB MySQL版多主集群(Limitless)基于共享存储实现多写多读,在文档数据库(兼容MongoDB协议)场景下提供免数据搬迁的横向写扩展能力。本文介绍Limitless多主架构的原理、与MongoDB分片架构的对比以及适用场景。
多主集群(Limitless)的文档数据库兼容能力目前处于灰度阶段,如您有相关需求,请提交工单与我们联系。
背景
文档数据库(兼容MongoDB协议)的默认部署形态为一主多读架构,使用体验上与MongoDB副本集(Replica Set)相近。但在实现机制上,PolarDB MySQL版具备天然优势:
读写(RW)/只读(RO)节点共享底层数据,只读节点延迟极低
存储层支持按量弹性扩容。更详细的对比可参阅与自建MongoDB对比与什么是文档数据库(兼容MongoDB协议)。
随着写入压力和数据规模增长,副本集架构面临明显瓶颈:只有单个主节点承担写入负载、每个成员保存全量数据、扩容手段局限于增加读能力而无法扩展写入。
MongoDB通常通过分片集群(Sharded Cluster)解决横向写扩展问题:数据按分片键划分为多个范围,分布到不同Shard上。然而,分片架构在获得写扩展能力的同时,也引入了显著的运维复杂度—增删Shard依赖Balancer进行Chunk迁移与再均衡,迁移耗时取决于数据量、分布和限流策略,且迁移期间可能影响在线负载。
PolarDB Limitless多主架构

为解决一写多读架构下的写入瓶颈,PolarDB MySQL版支持了多主集群(Limitless)。集群内多个读写(RW)节点共享PolarStore中的数据文件,代理层根据数据库或数据对象的访问点,将请求路由到对应的RW节点。
不同库或集合可以分布到不同读写(RW)节点并行写入,从而实现集群级多写。同一个库或集合在同一时刻仍由一个读写(RW)节点负责写入。扩缩容或负载调度时,系统主要切换访问点和路由关系,无需在计算节点之间搬迁数据文件。
在文档数据库兼容场景下,应用继续使用标准MongoDB驱动和统一集群地址接入,由代理层完成协议转换和请求路由,应用无需感知多主拓扑。
与MongoDB分片架构的对比
MongoDB通过分片集群(Sharded Cluster)实现写扩展:由mongos路由、Config Server和多个Shard(每个Shard通常为3副本的副本集)组成,数据按分片键(Shard Key)切分为Chunk分布到各Shard。PolarDB MySQL版多主架构基于共享存储实现多写多读,在达到写扩展目标的同时,架构与运维复杂度更低:
对比维度 | MongoDB分片痛点 | PolarDB多主架构的优势 |
扩容 | 依赖Balancer做Chunk迁移与再均衡,大数据量耗时久,可能影响在线负载。 |
|
缩容 | 需先迁空整只Shard,流程长、风险高。 | 将库/集合归属到少量读写(RW)节点后直接缩减,无数据搬迁。 |
架构组件 | mongos+Config Server+多Shard(每Shard为副本集),组件多、运维重。 | 单集群单地址:统一代理层+多读写(RW)节点+共享存储,路由与元数据管理内建,无需额外部署运维组件。 |
资源和成本 | 每Shard需独立副本集,计算、存储、高可用资源随Shard数量线性叠加。 |
|
跨节点查询 | 跨分片查询(scatter-gather)及聚合在mongos层汇聚。 | 全局只读节点提供跨读写(RW)节点统一查询入口,无需另建汇聚集群和同步链路。 |
数据均衡 | Balancer窗口、jumbo Chunk、孤立文档等长期运维负担。 | 无Balancer、无Chunk:调度即归属切换,不存在数据再均衡或孤立数据问题。 |
高可用 | Shard故障依赖副本集选主,需常备冗余节点。 | 多主互备:读写(RW)节点故障后其上库/集合秒级切换至其他低负载读写(RW)节点,高可用与成本兼顾。 |
核心优势和能力
能力 | 说明 |
线性写扩展 | 最多63个读写(RW)节点并发写入,吞吐随节点数近似线性增长。 |
多主互备 | 无需专用备节点,任意读写(RW)故障后其库/集合秒级切换至其他低负载读写(RW)。 |
弹性调度 | 库/集合归属动态调整:高峰分摊热点,低谷收拢缩容。 |
全局聚合读 | 全局只读节点跨读写(RW)统一查询,支撑跨租户/跨集合分析视图。 |
零业务改造 | 标准MongoDB驱动直连,路由与拓扑对业务完全透明。 |
Serverless能力 | 可与Serverless能力叠加。读写(RW)节点按负载自动伸缩,按量付费,进一步降本和提升稳定性。 |
适用场景
以下场景通常需要借助MongoDB分片集群解决写入扩展问题。PolarDB Limitless多主架构在同等场景下,以更低的架构与运维复杂度实现相近甚至更优的扩展效果。
SaaS多租户:按“一租户一库”组织数据。MongoDB分片通过Shard分布实现租户隔离,但租户迁移需Chunk搬迁,耗时长、易抖动。PolarDB Limitless下,迁移仅切换归属、不搬数据,做到秒级迁移、零抖动,有效避免其他租户问题。
IoT/日志类高并发写入:按业务域拆分集合并发写入。MongoDB分片依赖Balancer再均衡应对热点,响应滞后。PolarDB Limitless下,热点集合秒级调度至低负载读写(RW),写入吞吐随节点数近似线性增长。
游戏全球服/分区分服:开服高峰分散各服库、末期合服降本。MongoDB分片合服需Chunk搬迁与节点下线,流程长、风险高。PolarDB Limitless下,合服仅切换归属、不搬迁数据,对在线玩家零感知,运维成本和风险大幅降低。
电商大促等波峰波谷业务:MongoDB分片需在分片键设计阶段预判热点,大促扩容依赖Chunk迁移预热,弹性以小时甚至天计。PolarDB Limitless下,分钟级扩容读写(RW)并分发热点集合,大促后快速收拢—弹性从“天级压缩到分钟级”。
总结
PolarDB Limitless多主架构通过共享存储+多读写(RW)节点+统一代理层,在保持MongoDB兼容性的前提下,实现了免数据搬迁的横向写扩展。相比传统MongoDB分片集群,架构更简洁、运维更轻量、弹性更敏捷。