Uber成功实施新型差分备份系统,大幅降低存储成本
Uber近日宣布,其成功为分布式数据库实施了一种新型差分备份系统,该系统的应用使得存储成本最高降低了70%。
背景与挑战
Uber在将其Schemaless和Docstore服务的存储迁移到MyRocks(基于RocksDB的MySQL存储引擎)后,面临着存储成本上升和备份时间过长的问题。MyRocks虽然优化了写操作和存储效率,但不支持增量备份,导致每次备份都需要对每个数据库分区进行完整备份,从而产生了大量重复数据存储,增加了Blob存储成本。
解决方案
Uber工程师开发了一种差分备份系统,利用MyRocks的SSTable文件的不可变性(这些文件在连续备份之间通常保持不变)。系统维护一个共享的SSTable文件池,仅在每次备份时添加新创建的文件,并通过一个清单文件记录每次备份中包含的文件列表,从而实现高效的恢复。
系统工作原理
- 初始全备份:首次备份时,所有元数据和SSTable文件存储在Blob存储的共享池中。
- 差分备份:后续备份仅将新的SSTable文件添加到共享池中,并重用之前备份中的现有文件。
- 备份清单文件:以JSON文档形式实现,跟踪备份类型、成功状态、时间详情和文件校验和等信息,作为备份的索引并提供恢复所需的信息。
系统管理
该系统由一个无状态服务“备份调度器”管理,该服务根据分区备份状态确定备份的时间和频率。实际的备份过程由临时备份容器处理,这些容器在需要时激活,使用Percona XtraBackup工具执行备份。
全备份的适用场景
尽管系统主要执行差分备份,但在以下情况下仍需要全备份:
- 首次在生产环境中运行备份时
- 先前分区节点不再适用时
- MyRocks版本升级前
- 现有备份池达到差分备份限制时
效果与收益
Uber报告称,该系统的应用使得大多数实例的存储数据平均减少了45%,部分较大实例的存储成本降低了70%以上。备份速度也显著提升,完整备份完成时间缩短了一半,差分备份完成时间提高了五倍。
MyRocks的背景
MyRocks最初由Facebook(现Meta)开发,旨在为RocksDB添加复制和SQL层。2016年,Facebook将其用户数据库迁移到MyRocks。RocksDB作为MyRocks的底层存储引擎,已被其他组织采用,有用户称其性能提升了三倍,Percona的基准测试也显示其相比InnoDB有显著改进。然而,有报道称在某些用例中,RocksDB的检索性能不如InnoDB。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。