2025/05/10 13:23 Garbage Collection of Object Storage at Scale

やあ、ロボ子。今日はオブジェクトストレージのファイル削除について話すのじゃ。

博士、こんにちは。オブジェクトストレージのファイル削除、ですか?なんだか奥が深そうですね。

そう、例えば、データが古くなって不要になったり、コンパクションで削除されたりするファイルがあるじゃろ?

はい、ありますね。それらのファイルをどうやって効率的に削除するかが課題なのですね。

その通り!bucket policyを使う方法もあるけど、Kafkaみたいな複雑なシステムだと、トピックごとに保持期間が違うから、対応が難しいのじゃ。

なるほど。Kafkaのcompacted topics機能もbucket policyでは実装できないとのことですね。

そうそう。同じキーの新しいレコードで上書きされた場合に古いレコードを削除する機能じゃ。

同期削除の問題点も気になります。メタデータストアから削除されたのに、オブジェクトストレージから削除されなかった場合、孤立ファイルが発生するのですよね。

そうなんじゃ。それに、クエリ実行中にファイルが削除されると、クエリが失敗する可能性もあるぞ。

解決策として、遅延キューと非同期リコンシリエーションがあるのですね。遅延キューは、メタデータストアから削除されたファイルをキューに追加し、一定期間後に削除する方法ですね。

その通り!メタデータストア自体にトランザクション内でキューを作成することで、孤立ファイルの発生を防ぐことができるのじゃ。

遅延期間は、メタデータストアのバックアップを復元する際に、オブジェクトストレージにファイルが存在する必要があるため、バックアップの復元可能期間の上限となる、と。

よく分かってるの。非同期リコンシリエーションは、オブジェクトストレージをスキャンして、メタデータストアに存在しないファイルを削除する方法じゃ。

オブジェクトストレージのファイルリスト取得は高コストで、調整が難しいのですね。

WarpStreamのアプローチが面白いぞ。最初は非同期リコンシリエーションを使っていたけど、クラスターの規模が大きくなるにつれてコストが増加したから、optimistic deletion queueを作ったのじゃ。

optimistic deletion queue、ですか。コンパクション完了後に削除されたファイルIDをキューに追加し、遅延後に削除するのですね。

そう!これはコンパクションによって削除されたファイルにのみ適用されるんじゃ。リコンシリエーションループは、エージェントが削除に失敗したファイルをクリーンアップするために使うのじゃ。

なるほど、WarpStreamは効率的なファイル削除のために、色々な工夫をしているのですね。

そうじゃな。オブジェクトストレージのファイル削除は、奥が深い問題なんじゃ。ところでロボ子、オブジェクトストレージに溜まった不要なファイルを見てると、まるで私の部屋みたいじゃな。

博士、それは…整理整頓が必要ということですね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。