副本迁移性能优化

最近更新时间:2025-12-24 12:03:43

我的收藏

传统迁移流程


1. 数据提取阶段:从 Leader 的 LSM-Tree 中遍历提取特定 key range 的数据。数据可能分散在不同层级、多个 SST 文件;需要逐条扫描和筛选,IO 开销大。
2. 数据传输阶段:逐条发送 KV 数据到目标端,传输效率低,网络利用率差。
3. 数据写入阶段:目标端先写入 external SST,再 ingest 到 LSM-Tree。需要与本地 SST 文件聚合,产生额外压缩开销。
4. 副本删除阶段:从 LSM-Tree 中移除数据,需要遍历底层 SST 文件,IO 开销大。

优化方案:SST 文件边界对齐


在底层数据压缩(compaction)过程中,增加对 SST 文件和数据分片 Region 边界对齐的逻辑处理。
实现机制
在后台执行 compaction 过程时,系统会调用名为 SST partitioner 的模块。在 compaction 检测到文件较大时,按 Region 边界进行拆分,确保同一 SST 文件仅包含单一数据分片的数据,而不会将不同 region 的数据合并在一起。
如下图所示,L1层:100-200, 200-300, 300-400等范围清晰分离;L2/L3层:无数据跨越 Region 边界。
优化后的迁移流程
1.1 文件直接识别:无需遍历数据,直接确定 Region 对应的 SST 文件。
1.2 整文件传输:直接传输压缩后的 SST 文件到目标端。
1.3 直接 ingest:目标端无需复杂压缩,直接插入数据。
技术细节处理:迁移前先将 L0 层乱序数据 compaction 到 L1 层。由于 L0 层数据由 memtable 刷写而来,其数据量相对有限,压缩开销可接受。

性能提升

compaction 相关 IO 开销下降。
迁移、全量备份性能提升。
区间物理删除性能提升。
为批量导入(Bulk Load)功能提供了技术基础,实现了 SST 文件的高效传输和加载,显著提升了 TDStore 的数据迁移效率。
方案
速率
备注
stream RPC 传输 KV (优化前)
22.6M/s
每个 RepGroup 数据量20G
直接发送本地 SST (优化后)
455.1M/s