Uber社は、分散データベースに新しい差分バックアップシステムを導入し、ストレージコストを最大70%削減することに成功したと発表した。
Uber社のエンジニアは、ストレージコストの増大やバックアップ完了までに長時間を要する問題を受けて、このソリューションを開発した。こうした問題は、同社がSchemalessサービスやDocstoreサービスのストレージをRocksDBベースのMySQLストレージエンジンであるMyRocksに移行してから発生している。
Uber社では、SchemalessとDocstoreの分散データベースが何十ペタバイトもの運用データを処理し、一秒あたり数千万ものリクエストを処理している。こうしたデータベースは、Uber社のグローバルオペレーションにとって重要なものであり、さまざまなビジネス機能のサポートや、スムーズな業務状態の確保に役立っている。
Uber社のストレージプラットフォームチームが、MyRocksに移行した際に問題が発生した。MyRocksでは、書き込み操作やストラテジー効率のためには最適化されていたが、増分バックアップへのサポートがされていなかった。こうした制限から、各データベースでパーティションのフルバックアップが毎回必要であり、複製データストレージやBLOBストレージコストが増大する原因になっていた。
新しい差分バックアップシステムでは、MyRocksのSSTableファイルのイミュータブルな性質が活用されており、 連続バックアップ間で変更されないことがよくある。各バックアップ時にすべてのファイルをコピーするのではなく、システムでSSTableファイルの共有プールが維持され、そこに新たに作成されたファイルだけが追加される。マニフェストファイルでは、内包しているファイルのリストを記録することで、各バックアップが定義される。このため、必要に応じたリストアが効率的に行える。
このソリューションは、Adithya Reddy氏が技術ブログ投稿で詳細に解説したところによると、このシステムが稼働すると、最初にフルバックアップを実行し、すべてのメタデータとSSTableファイルがBLOBストア内の共有プールに保存される。以降の差分バックアップでは、前回のバックアップから既存のファイルを再利用し、新しいSSTableファイルのみがプールに追加される。
バックアップマニフェストファイルは、JSONドキュメントとして実装されており、バックアップタイプ、成功ステータス、タイミングの詳細、ファイルのチェックサムなどの重要な情報を追跡する。このマニフェストはバックアップのインデックスとして機能し、リストア処理に必要な情報を提供する。
新しいシステムは、Backup Schedulerと呼ばれるステートレスサービスによって管理されている。バックアップのタイミングと頻度は、Backup Schedulerがパーティションのバックアップステータスに基づいて決定する。実際のバックアッププロセスは、Percona XtraBackup ツールを使用してバックアップを実行する必要があるときにアクティブ化される一時バックアップコンテナによって処理される。
主にこのシステムが差分バックアップを実行するが、以下の場合には依然としてフルバックアップが必要である。
- バックアップが初めて本番環境で初めて実行される場合
- 前回のパーティションのノードが不適切である場合
- MyRocksのバージョンアップグレードが完了していない場合
- 既存のバックアッププールが差分バックアップの上限に達した場合
このバックアップシステムでは、従来のPercona XtraBackupのツールがバックアップとリストアの両方に使われており、既存システムとの互換性が維持されているほか、新しい差分バックアップ機能も追加されている。このアプローチにより、Uber社は、自社の広範なデータベースインフラストラクチャに大幅な変更を加えることなく、改善を実装できた。
こうした制約にもかかわらず、改善の効果は顕著だ。Uber社は、ほとんどのインスタンスでデータストレージが平均45%削減されており、一部の大規模インスタンスでは、差分バックアップごとのストレージコストが70%以上削減されたと報告している。また、バックアッププロセスのスピードも大幅に改善されており、フルバックアップは従来の半分の時間で完了し、差分バックアップの完了までの時間も5分の1に短縮されている。
もともとMyRocksは、Facebook社(現Meta社)が、RocksDBにレプリケーションとSQL階層を追加するために開発したもので、同社は2016年に、ユーザーデータベースをMyRocksに移行している。MyRocksの基盤となるストレージエンジンであるRocksDBは、他の組織でも採用されており、一部のユーザーが、パフォーマンスが3倍向上したと主張しているほか、Percona社がInnoDBとのベンチマークの比較で大幅な改善がみられたと発表している。 しかし、一部のユースケースでは、RocksDBはInnoDBに比べてリトリーバルパフォーマンスが劣るという報告もある。