概要

Cloudflareは、同社の330以上のグローバルデータセンター間で内部の制御プレーン状態を安全に同期させるための新しい分散合意サービス「Meerkat」を発表した。Meerkatは「QuePaxa」と呼ばれる合意アルゴリズムを採用しており、これは世界規模の本番環境でQuePaxaを初めて採用する試みとなる。現時点ではまだ実験段階で、本番環境への展開は行われておらず、まずは内部利用にとどめる方針だという。

既存の合意アルゴリズムが抱える課題

Cloudflareの内部サービスの多くは、複数のデータセンターにまたがって同じ状態を読み書きする必要があり、異なる読み取り者が矛盾した状態を見ることがないという強い一貫性(リニアリザビリティ)が求められる。しかし、Raftに代表される従来のリーダーベースの合意アルゴリズムは、広域ネットワーク環境では課題を抱えている。リーダーとなったレプリカだけが書き込みを受け付けられる仕組みのため、リーダーに障害が発生すると新しいリーダーが選出されるまで書き込みができなくなる。さらに、広域ネットワークでは遅延が予測しづらく、適切なタイムアウト値の設定が難しいという問題もある。

QuePaxaの技術的な特徴

QuePaxaはこうした課題を解決するために、リーダーを必要としない設計を採用している。すべてのレプリカが常に書き込み可能な状態にあり、単一障害点が存在しない。クライアントは複数のレプリカに対して同時に提案を送ることができ、それらの提案が破棄されるのではなく建設的に相互作用する仕組みになっている。また、進捗がタイムアウトによって停止しないよう設計されているのも特徴だ。Cloudflareによれば、悪条件下ではRaftと比較して約10倍高いスループットを達成できるという。

アーキテクチャとしては、各レプリカが共有ログを維持し、ログの各スロットには最大1つのイベントが記録される。合意アルゴリズムによって最新のスロットが決定され、すべてのレプリカが同一のログを持つことが保証される仕組みだ。読み取り処理もこのログを経由することで、一貫性が確保されている。合意決定には原理的に1〜3回のラウンドトリップが必要となるが、レプリカを地理的に近接配置する、複数の操作を1つの提案にまとめてバッチ化する、古いデータの許容度に応じて新しい合意ラウンドを省略する「ステイルリード(stale read)」、CAS(Compare-And-Swap)風の操作で複数操作を1ラウンドにまとめるトランザクション機能などにより、レイテンシの低減を図っている。

想定用途と今後の展開

現在Meerkatは、AIモデルインスタンスの保存場所といったリソース配置情報や、どのレプリカがデータベースへの書き込み権を持つかといったリーダーシップ情報など、比較的アクセス頻度の低い制御プレーン情報の管理を想定している。一方で、一般的なデータベースのような高頻度アクセスが必要なシステムへの適用は想定していないとしている。Cloudflareは最大50レプリカ規模での概念実証に成功しており、リーダーが常に障害を起こす状況下でもエラー率が増加しないことを確認したという。今後はQuePaxaアルゴリズムの詳細解説記事の公開、Rust実装の形式検証、クラスタ管理や最適配置方法論の確立、査読論文の準備などを進める予定で、今後1年間で関連記事を複数公開するとしている。