Sophia Iroegbu 2022-06-09
数据可扩展性(Data Scalability)
数据可扩展性是指数据库通过添加或删除数据,以应对不断变化的需求的能力。通过这种方式,数据库能够与软件同步增长。
借助扩展(Scaling),数据库可以动态调整系统资源的容量,以支持应用程序不断变化的使用需求。
数据库有两种扩展方式:
- 水平扩展(Scale-out)
- 垂直扩展(Scale-up)
在本文中,我们将分别介绍这两种扩展方法,并讨论各自的优缺点,以帮助你做出合适的选择。
水平扩展(Horizontal Scaling)
这种扩展方式通过增加更多的数据库节点来处理增加的工作负载。它不是通过增强单个服务器的能力,而是通过分散负载来减轻单台服务器的压力。
当你需要更多容量时,只需向集群中添加更多服务器。这种方法也被称为“向外扩展(Scaling out)”。
水平扩展的优点:
- 升级简单
- 实施容易且成本较低
- 提供灵活、可扩展的工具
- 扩展能力理论上无上限——可无限添加服务器实例
- 升级数据库非常方便:只需向服务器集群中添加一个新节点即可
水平扩展的缺点:
- 代码中的任何 bug 在多节点环境下会变得更复杂,更难调试和理解
- 授权许可费用较高,因为你需要为每个新增节点购买许可证
- 数据中心成本显著增加,因为需要更多空间、冷却和电力支持
何时使用水平扩展?
如果你的应用服务超过一千名用户,建议采用水平扩展。当服务器接收到大量并发请求时,多个服务器可以协同工作,系统不会轻易崩溃。
垂直扩展(Vertical Scaling)
垂直扩展通过提升单台机器的资源容量(如内存、存储、CPU 等)来增强性能,所有资源都集中在同一个逻辑服务器上。
这是传统的数据库扩展方法,也被称为“向上扩展(Scale-up)”。
垂直扩展的优点:
- 数据中心的空间、冷却和电力成本更低
- 软件成本效益高
- 易于使用和实施——管理员可以轻松管理和维护
- 资源配置灵活
垂直扩展的缺点:
- 虽然初始成本较低,但每次升级都需要支付新的授权许可费用
- 高端服务器硬件价格昂贵
- 升级存在物理上限——无法无限提升单机性能
- 通常受限于单一数据库厂商,迁移困难,甚至可能需要从头开始
何时使用垂直扩展?
如果你的应用对数据一致性要求极高,垂直扩展是更好的选择。
此外,如果你不想操心服务器之间的负载均衡问题,垂直扩展也是理想方案。
垂直扩展与水平扩展的区别
| 对比项 | 垂直扩展 | 水平扩展 |
|---|---|---|
| 授权成本 | 较低 | 较高(需为每个节点授权) |
| 扩展方式 | 增强单台服务器的资源 | 增加更多服务器节点 |
| 数据存储 | 所有数据位于单个节点,通过多核扩展 | 数据被分片(partitioning),每个节点只存一部分 |
| 负载均衡 | 无需负载均衡(单服务器) | 需要负载均衡机制 |
| 故障点 | 存在单点故障风险 | 多节点冗余,无单点故障 |
| 通信速度 | 快(进程内通信) | 较慢(依赖网络调用,如 RPC) |
| 数据一致性 | 强一致性(所有数据在同一服务器) | 一致性较难保证(跨节点同步复杂) |
| 硬件限制 | 受限于单机性能上限 | 可线性扩展,几乎无上限 |
如何为你的应用选择合适的扩展方式?
在决定采用哪种扩展策略时,你需要权衡以下关键因素:
1. 负载均衡(Load Balancing)
- 垂直扩展:单服务器,无需负载均衡。
- 水平扩展:必须部署负载均衡器,确保请求均匀分配到各节点。
2. 故障点(Point of Failure)
- 水平扩展:多服务器架构,一台宕机不影响整体服务,系统更具弹性。
- 垂直扩展:单点故障风险高,一旦服务器宕机,整个系统将离线。
3. 速度(Speed)
- 垂直扩展:由于所有操作都在同一台服务器内部完成(进程间通信),速度更快。
- 水平扩展:节点间需通过网络通信(如远程过程调用 RPC),延迟更高,速度较慢。
4. 数据一致性(Data Consistency)
- 垂直扩展:所有数据集中存储,天然保证强一致性。
- 水平扩展:数据分布在多个节点,实现一致性(如 CAP 定理中的 C)更具挑战性。
5. 硬件限制(Hardware Limitations)
- 水平扩展:可随用户量线性扩展,几乎无上限。
- 垂直扩展:受限于单台服务器的物理极限(CPU、内存、I/O 等)。
建议:在做决策前,列出每种方案的优缺点清单,结合你的业务需求、预算、技术栈和未来增长预期进行综合评估。
结论
在云计算模型中,可扩展性指的是快速、即时地增加或减少 IT 资源的能力。了解水平扩展与垂直扩展的工作原理至关重要,因为这直接关系到你的数据库和服务器管理效率。
快速回顾:
- 垂直扩展:通过增强单台服务器的资源来提升处理能力。
- 水平扩展:通过添加新节点来分担分布式工作负载。
- 水平扩展更适合用户量大、需要高可用性的场景。
- 垂直扩展在速度和数据一致性方面表现更优。
感谢阅读!