数据库扩展是不断增长的应用程序面临的根本挑战。无论您是启动新的应用程序还是经历增长,都有两种主要的扩展策略:
纵向扩展— 使用额外资源升级单个服务器。
水平扩展— 将工作负载分布到多台服务器上。
虽然垂直扩展可以立即缓解资源分配问题,但当扩展是一个因素时,水平扩展是一种更可持续、更灵活的方法。
随着应用程序的增长,传统的数据库扩展迫使人们在性能、复杂性和费用之间进行艰难的权衡。MongoDB通过其分片架构支持水平扩展,该架构将数据和工作负载分布在多个称为分片的服务器上。如果您正在进行扩展,则必须主动考虑分片以确保无缝增长。
MongoDB 的分片集群架构提供了几种扩展数据库的策略:
尽早开始使用分片集群,即使只有一个分片,以使您的应用程序面向未来。
在分片之间移动未分片的集合,以隔离工作负载、支持多租户架构、符合地理要求、优化成本并降低集合密度。
当特定集合的分片接近资源限制或存储大小超过 3 TB 时,对这些集合进行分片。
当应用程序程序模式发生变化并且分片的集合的好处不再大于成本时,取消对集合的分片。
您可以使用这些灵活的扩展功能来优化性能并控制成本,同时保持应用程序的单个连接点。
横向扩展策略
在分片集群中,每个分片都是一个副本集。多个分片作为同一集群的一部分运行。您的应用程序通过连接到mongos透明地访问所有资源,从而处理将请求路由到正确位置的复杂性。
在分片集群中分配工作负载有两种主节点 (primary node in the replica set)方法:
将集合移至专用分片 — 将整个集合分配给特定分片,通过战略性分配工作负载来优化性能。
将集合分区到多个分片 — 使用分片键将单个集合分割到多个分片,从而更均匀地分布数据以实现可扩展性。
这些方法可以单独使用,也可以组合使用,具体取决于您的要求。