据其博客的文章介绍,优步(Uber)已经成功地为其分布式数据库实施了一个新的差异备份(Differential Backup)系统,该系统使存储成本降低了 70%。
优步(Uber)工程师开发这一解决方案,是为了应对优步(Uber)将其 Schemaless 和 Docstore 服务的存储迁移到基于 RocksDB 的 MySQL 存储引擎 MyRocks 后出现了存储成本上升和备份完成时间过长的问题。
在优步(Uber),Schemaless 和 Docstore 分布式数据库处理数十 PB 的运营数据,每秒处理数千万个请求。这些数据库对优步(Uber)的全球运营至关重要,用以支持各种业务功能并确保业务的连续性。
当优步(Uber)团队将存储平台迁移到 MyRocks 时出现了问题,尽管 MyRocks 针对写入操作和存储效率进行了优化,但缺乏对增量备份(Incremental Backup)的支持。这种限制意味着每个数据库分区每次都需要进行完全备份(Full Backup),这导致了大量的重复数据存储并增加了 blob 存储成本。
新的差异备份(Differential Backup)系统利用了 MyRocks SSTable 文件的不可变特性,这些文件在连续备份之间通常保持不变。系统不会在每次备份期间复制所有文件,而是维护一个共享的 SSTable 文件池,并且只将新创建的文件添加到该共享池中。清单文件通过记录包含的文件列表来定义每个备份,因此可以在需要时进行高效地恢复。
Adithya Reddy 在一篇 技术博客 中详细介绍了该解决方案,该系统的工作原理是首先执行初始的完全备份,将所有元数据和 SSTable 文件存储在 blob 存储区内的共享池中。后续差异备份仅将新的 SSTable 文件添加到共享池中,同时重用之前备份中的现有文件。
备份清单文件以 JSON 文档的形式实现的,用以跟踪基本信息,包括备份类型、成功状态、计时详细信息和文件校验和。该清单用作备份的索引,并为恢复过程提供必要的信息。
新系统由一个称为 Backup Scheduler 的无状态服务管理。Backup Scheduler 根据分区备份状态确定备份的时间和频率。实际的备份过程由临时备份容器处理,当需要使用 Percona XtraBackup 工具执行备份时,这些容器就会被激活。
虽然系统主要执行差异备份,但在某些情况下仍需要完全备份,例如:
当备份在生产环境中首次运行时
当上一个分区节点变得不适合使用时
在 MyRocks 版本升级之前
当现有备份池达到差异备份上限时
备份系统继续使用已建立的 Percona XtraBackup 工具进行备份和恢复过程,在添加新的差异备份功能的同时保持与现有系统的兼容性。这种方法使优步(Uber)能够在不需要对其更广泛的数据库基础设施进行大量更改的情况下实施改进。
尽管存在这些限制,但改进仍然很显著。优步(Uber)报告称,大多数实例的数据存储平均减少了 45%,一些较大的实例的每次差异备份的存储成本减少了 70% 或更多。备份过程的速度也得到了显著的提高,完全备份的完成速度比以前快两倍,差异备份的完成时间缩短了五倍。
MyRocks 最初是由 Facebook(现在的 Meta)开发的,目的是为 RocksDB 添加复制和 SQL 层。2016 年,Facebook 将其用户数据库迁移至 MyRocks。RocksDB——MyRocks 背后的底层存储引擎——也被其他组织采用,一些用户声称性能提高了三倍,Percona 发布的基准测试也显示,它的性能与 InnoDB 相比有了显著的改进。然而,对于某些用例,有报道称 RocksDB 在检索方面的表现不如 InnoDB。
作者介绍
Matt Saunders 是 Adaptavist 的首席技术官 DevOps 主管。他帮助团队使用 DevOps、平台工程和云原生工具和技术,快速高效地交付质量可靠的软件,同时将压力降到最低。他曾与复杂的企业、小型初创企业、中小企业以及介于两者之间的所有企业合作过。还联合组织了伦敦 DevOps 聚会小组,该小组拥有 10000 多名成员,每月举办一次非常受欢迎的行业活动。
查看原文链接:
评论