分布式数据库中的水平扩展是指通过向系统添加更多机器或节点来处理增加的工作负载,而不是升级单个服务器的硬件。这种方法将数据和处理分散到多个服务器上,使数据库能够管理更大容量的请求、存储或计算任务。与通过增加 CPU 或 RAM 等资源来提高单个服务器容量的垂直扩展不同,水平扩展通过分散负载来应对增长,使其成为需要高可用性或处理不可预测流量的系统的首选策略。
水平扩展的关键机制是 分片(sharding),即将数据分成更小的子集(分片),并存储在不同的节点上。每个分片独立运行,减少争用并实现并行处理。例如,用户数据库可以按地理区域划分记录,一个分片处理北美,另一个处理欧洲。查询路由层或中间件(如 MongoDB 的分片集群或 Apache Cassandra 基于令牌的分布)将请求导向相应的分片。这种设置提高了读/写吞吐量,因为操作不再受单个机器的瓶颈限制。然而,分片引入了复杂性,例如确保数据分布均衡以及处理跨分片事务,这可能需要应用程序级逻辑或专门的数据库功能。
水平扩展在云环境中尤为重要,在云环境中按需添加节点与弹性基础设施相符。例如,Amazon DynamoDB 会自动将数据分布到各分区,并通过调整节点数量来扩展容量。虽然这种方法增强了容错性(节点故障只会影响其分片)并支持线性可伸缩性,但也需要仔细设计。开发者必须选择适当的分片键以避免热点,并为分布式事务中的最终一致性做计划。一致性哈希(Cassandra 中使用)等工具有助于在添加或移除节点时保持数据分布均衡。总的来说,水平扩展是构建弹性、高性能数据库的基础技术,但需要在复杂性和运维开销方面做出权衡。