为什么说 TiDB 在线扩容对业务几乎没有影响

💡 原文中文,约2800字,阅读约需7分钟。
📝

内容提要

本文讨论了分布式数据库在线扩容的挑战,比较了一般分布式数据库和TiDB的扩容机制。一般分布式数据库需要重新平衡数据分布,可能影响系统可用性和IO消耗。相比之下,TiDB的存算分离架构使得扩容对业务影响较小。

🔎

延伸解读

扩容机制差异:从数据重分布到副本迁移

一般分布式数据库扩容时,需根据分布键重新计算哈希并搬迁大量数据,可能锁表并消耗大量IO,影响业务可用性。TiDB采用Multi Raft协议,扩容时通过增加副本、迁移Leader等步骤实现,数据搬迁以Region为单位,且支持流控,避免了对业务的大规模阻塞。

存算分离架构如何降低扩容影响

TiDB的存算分离架构允许计算层和存储层独立扩容。计算层TiDB Server无状态,扩容只需增加节点并调整负载均衡,不影响现有业务;存储层TiKV扩容通过副本迁移和Leader均衡实现,过程中虽有IO消耗,但流控机制可动态调整,确保对业务影响极小。

在线扩容的实际影响与应对

尽管TiDB扩容对业务影响很小,但并非完全无影响。TiKV扩容时复制Region会产生额外IO,可能对性能有轻微影响,但TiDB提供流控机制可动态调整复制速度。Leader切换时间短,且TiDB能通过内部重试保证业务正常执行,因此整体影响可控。

❓

Q&A

为什么一般分布式数据库在线扩容会影响业务?

一般分布式数据库扩容时需要重新平衡数据分布,导致大量数据搬迁,产生高IO消耗,可能影响系统可用性。例如Greenplum早期版本在重分布时会锁表,导致表不可读写。

一致性哈希算法如何减少扩容时的数据搬迁?

一致性哈希算法不再使用节点编号取模,而是将数据和节点映射到一个圆环上。增加节点时,只影响圆环上相邻节点之间的部分数据,从而减少数据搬迁量,降低网络和磁盘IO。

TiDB的存算分离架构如何支持在线扩容?

TiDB的存算分离架构将计算层(TiDB Server)和存储层(TiKV/TiFlash)分离,可以独立扩容。计算层无状态,扩容简单;存储层基于Multi Raft协议,扩容时通过副本迁移和Leader均衡实现,对业务影响小。

TiKV扩容的具体步骤是什么?

TiKV扩容步骤包括:1. 增加TiKV节点;2. PD调度确定迁移Region;3. 复制Region到新节点;4. 删除多余Region;5. 重新均衡Leader。整个过程通过流控和内部重试确保业务几乎不受影响。

TiDB扩容时如何保证对业务几乎没有影响?

TiDB通过流控机制动态调整复制速度,减少IO消耗;Leader切换时间短,且TiDB能通过内部重试保证业务正常执行。因此,扩容对业务几乎无影响。

TiDB计算层扩容为什么简单?

TiDB Server节点无状态,不持久化数据,每个节点对等。扩容时只需增加节点,并修改负载均衡组件将连接分发到新节点,完全不影响现有业务。

🏷️

标签

➡️

继续阅读