数据库扩展 NLogN

什么是数据库扩展?

数据库扩展是指增加数据库容量以处理不断增长的工作负载(例如更多的查询、更大的数据集或更多的并发用户)的过程。

主要目标是确保数据库在需求增加时保持性能、可靠性和可用性。

数据库扩展主要有两种类型:

  • ⬆️ 垂直扩展(扩大规模)
  • 水平扩展(分片)
  • Vertical Scaling and Horizontal Scaling

    🤔 为什么我们需要数据库扩展?

    假设您当前的数据库服务器可以处理高达**每秒 1000 个查询 (QPS)**。如果您的网站流量因新功能发布或人气增加而激增,会发生什么情况?如果不进行扩展,您的数据库最终会在负载下崩溃。

    扩展可确保您的数据库能够满足应用程序不断增长的需求,平衡数据分布,优化资源并保持成本效率。

    ❓为什么不直接使用主从复制?

    如果您熟悉主从复制,您可能会认为它消除了扩展的需要。(如果不熟悉,请查看我关于数据库复制 NLogN👈 的博客文章以了解更多信息)。虽然复制对于扩展读取和提供容错能力很有效,但它并不能解决所有挑战:

  • 写入瓶颈:复制不会提高写入容量,因为所有写入仍必须发送到主服务器
  • 热点:频繁访问的数据可能会使特定节点过载
  • 扩展限制:复制无法满足全局流量分配需求
  • 🛠️ 数据库扩展的类型

    1.⬆️ 垂直扩展(扩大规模)

    垂直扩展涉及通过添加更多硬件(例如额外的**CPU**、**RAM**或**存储**)来升级现有的数据库服务器。

    为什么我们不能继续添加更多硬件?

  • 成本高:高端服务器的价格成倍增加
  • 硬件限制:主板上 RAM 插槽数量有限 CPU 核心和线程数量受限
  • 单点故障:一台服务器造成严重风险
  • 可扩展性上限:硬件改进有物理限制
  • 2.➡️ 水平扩展(分片)

    水平扩展涉及将数据分布到多台服务器以分担负载。每台服务器(或**分片**)存储数据的唯一子集。

    分片如何工作?

    数据根据**分片键**分配到服务器。例如:

  • 使用像 user_id % 4 这样的哈希函数来确定哪个分片处理特定的用户数据
  • 分片 0 存储结果为 0 的用户的数据,依此类推
  • Showing how data is directed towards shards

    分片的好处

  • 在多台服务器上均匀分配负载
  • 允许通过添加更多分片进行无限扩展
  • 分片的挑战

  • 重新分片数据:达到容量上限时,将数据重新分配到新的分片中
  • 名人问题:特定分片的流量不成比例
  • 连接和非规范化:执行跨分片连接存在困难
  • 复杂的应用程序逻辑:应用程序必须正确路由查询
  • 📋 何时选择复制与扩展?

  • 使用复制来处理读取繁重的工作负载和容错能力
  • 使用扩展来应对不断增长的流量和写入密集型工作负载
  • 🎯 结论

    扩展数据库对于支持快速增长的数据流量和确保高可用性至关重要。无论您选择垂直扩展还是水平扩展,决策都取决于您的特定需求和增长预测。

    🔮 接下来

    请继续关注我们下一篇关于**消息队列**和**数据中心**的博客,这两种技术都可以减少延迟并提高应用程序性能!