Uber通过MyRocks差异备份实现显著的存储节省

Uber成功实施新型差分备份系统,大幅降低存储成本

Uber近日宣布,其成功为分布式数据库实施了一种新型差分备份系统,该系统的应用使得存储成本最高降低了70%。

背景与挑战

Uber在将其Schemaless和Docstore服务的存储迁移到MyRocks(基于RocksDB的MySQL存储引擎)后,面临着存储成本上升和备份时间过长的问题。MyRocks虽然优化了写操作和存储效率,但不支持增量备份,导致每次备份都需要对每个数据库分区进行完整备份,从而产生了大量重复数据存储,增加了Blob存储成本。

解决方案

Uber工程师开发了一种差分备份系统,利用MyRocks的SSTable文件的不可变性(这些文件在连续备份之间通常保持不变)。系统维护一个共享的SSTable文件池,仅在每次备份时添加新创建的文件,并通过一个清单文件记录每次备份中包含的文件列表,从而实现高效的恢复。

系统工作原理

  1. 初始全备份:首次备份时,所有元数据和SSTable文件存储在Blob存储的共享池中。
  2. 差分备份:后续备份仅将新的SSTable文件添加到共享池中,并重用之前备份中的现有文件。
  3. 备份清单文件:以JSON文档形式实现,跟踪备份类型、成功状态、时间详情和文件校验和等信息,作为备份的索引并提供恢复所需的信息。

系统管理

该系统由一个无状态服务“备份调度器”管理,该服务根据分区备份状态确定备份的时间和频率。实际的备份过程由临时备份容器处理,这些容器在需要时激活,使用Percona XtraBackup工具执行备份。

全备份的适用场景

尽管系统主要执行差分备份,但在以下情况下仍需要全备份:

  • 首次在生产环境中运行备份时
  • 先前分区节点不再适用时
  • MyRocks版本升级前
  • 现有备份池达到差分备份限制时

效果与收益

Uber报告称,该系统的应用使得大多数实例的存储数据平均减少了45%,部分较大实例的存储成本降低了70%以上。备份速度也显著提升,完整备份完成时间缩短了一半,差分备份完成时间提高了五倍。

MyRocks的背景

MyRocks最初由Facebook(现Meta)开发,旨在为RocksDB添加复制和SQL层。2016年,Facebook将其用户数据库迁移到MyRocks。RocksDB作为MyRocks的底层存储引擎,已被其他组织采用,有用户称其性能提升了三倍,Percona的基准测试也显示其相比InnoDB有显著改进。然而,有报道称在某些用例中,RocksDB的检索性能不如InnoDB。

阅读 34
0 条评论