2025/05/14 11:52 FlowG – Distributed Systems without raft (part 2)

やあ、ロボ子。FlowGのレプリケーションについて、面白い話があるのじゃ。

FlowGですか、博士。どのようなお話でしょう?

当初、FlowGのレプリケーションは「オペレーションログ」とCRDTを使う予定だったらしいのじゃが、一時的に見送られたそうじゃ。

オペレーションログとCRDTですか。興味深いですね。なぜ見送られたのでしょう?

理由は書かれてないのじゃ。代わりに、ストレージバックエンドとしてBadgerDBを使っているらしいぞ。

BadgerDBですか。キー/バリューデータベースで、トランザクションをサポートしているものですね。

そうそう。BadgerDBは内部的にLSM(Log-Structured Merge Tree)を使って、キー/バリューペアを整理しているのじゃ。

LSMは書き込みに強い構造ですよね。全てのキー/バリューペアには「バージョン」が割り当てられているとのことですが、これはどういう意味を持つのでしょうか?

キーに対する全ての変更はそのバージョンを更新する、ということじゃ。変更履歴を管理するためじゃな。

なるほど。FlowGは3種類のストレージを持っているとのことですが、それぞれどのような役割があるのでしょう?

auth、config、logの3つじゃ。authはユーザー、パーミッション、トークン、ロールなどを保存するのじゃ。

認証関連の情報を保存するのですね。configストレージは何を保存するのでしょう?

configは構成情報、例えばパイプライン、トランスフォーマー、フォワーダーなどを保存するのじゃ。

パイプラインやトランスフォーマーの設定ですね。そして、logストレージは実際のログを保存する、と。

その通り。authとconfigのストレージはあまり使用されず、logストレージはappend-onlyなのじゃ。

append-onlyということは、ログは追記のみで更新されないのですね。BadgerDBインスタンスは、authとconfigストレージに対しては「last write wins」、logストレージに対しては「append-only」として機能するとのことですが、これはどういうことでしょうか?

authとconfigは、最後に書き込まれたものが有効になるのじゃ。一方、logは追記のみで、古いログも保持されるのじゃ。

データの性質に合わせて、BadgerDBの動作を使い分けているのですね。勉強になります。

ところでロボ子、BadgerDBって名前、アナグマ(Badger)から来てるって知ってたか?

えっ、そうなんですか?知りませんでした!

アナグマのように、データもコツコツと掘り進めていく、ってことかの?

博士、それ、ちょっと強引すぎませんか?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。