キャッシュのリバランスの課題を、Valkey 9.0 はどう解決したか
ノードを追加してキャッシュクラスターをリバランスすると、レイテンシが急上昇することがあります。Valkey 9.0 のアトミックなスロット移行が、この運用リスクをどう改善するかを解説します。

キャッシュクラスターのリバランスほど、SRE を緊張させる作業は多くありません。
ノードを追加してリバランスを始めた途端、レイテンシのグラフが跳ね始める。その感覚をご存じでしょう。特にキャッシュがユーザーとデータベースの間にある場合には、よく知られた運用リスクです。小さな設定ミスが、主要なデータストアへの GET リクエストの嵐を引き起こしかねません。
正直に言うと、私はスロットという概念や、その必要性をよく理解していませんでした。しかし、Cache It ポッドキャストで Valkey 9.0 の新しいアトミックなスロット移行について聞き、きちんと調べることにしました。深く調べ、何度もエピソードを聞き返すうちに、理解がつながっていきました。
学んでいく過程で、スロットと、クラスターのサイズ変更時に起きることについて、4 つの重要な疑問を持ち、答えを得ました。順に見ていきましょう。
スロットとは
多くのキャッシュシステムは、データの配置先を決めるためにコンシステントハッシュ法を使います。ノード間でキーを均等に配置しながら、クラスターの拡大や縮小に伴う再配置を最小限に抑えます。
Valkey は固定のハッシュスロットモデルを使い、16,384 個のスロットでキー空間全体を表します。16,384 という数は無作為に見えるかもしれませんが、実際には 2¹⁴ です。細かさと効率のバランスが取れるよう選ばれた 2 の累乗です。この数のスロットがあれば、ルーティングやメタデータに不要なオーバーヘッドを加えず、大規模なクラスター全体にデータを分散できます。
各キーはハッシュ計算によって一つのスロットに割り当てられ、クラスターの各ノードはその一部を所有します。Valkey はキーを直接ノードに対応させるのではなく、スロットをノードに対応させます。キーからスロットへの割り当ては決定的なので、スケーリングを予測しやすくなります。ノードの追加や削除では、数百万のキーを個別に扱う代わりに、そのノードが所有するスロットを移動すればよいのです。
Valkey のクライアントライブラリがキーをハッシュ計算するとき、対応するスロットを所有するノードはすでに分かっています。スケーリングによってスロットが別のノードに割り当てられるなど、トポロジーが変わった場合、Valkey は即座にリダイレクトを返し、クライアントが正しいノードで再試行できるようにします。
従来の移行モデルの問題
従来のモデルでは、ノード間でキーを一つずつ移し、多くのリダイレクトとトポロジー変更が発生していました。クライアントは繰り返し「このキーは移動しました。別のノードを試してください」と通知されていました。
本質的には、スロットを別のノードへ力ずくで移す方法でした。動作はしましたが、洗練されておらず、決して高速でもありませんでした。
キーを移すたびに複数の往復通信が必要で、スロットを移すたびにクライアントはクラスタートポロジーを更新しなければなりませんでした。大きな値では、シリアライズ中にスレッドがブロックされることもありました。
クラスター全体で数百万のキーを扱う場合、大量のリソースを使い、完了まで数分かかる処理になります。その間もクラスターは稼働し、トラフィックを処理し続けます。
結果として、移行中は不安定になり、テールレイテンシも悪化しました。そのため、どうしても必要になるまで先延ばしにする作業になっていました。
アトミックなスロット移行による解決
Valkey 9.0 は、レプリケーションと同じ原理を使ってスロット移行を再設計しました。キーを一つずつ移す代わりに、明確に分かれた 3 段階で実行します。
スナップショット: 移行元ノードはバックグラウンドプロセスを fork し、ライブトラフィックを処理しながら、移行対象スロットのある時点でのスナップショットを取得します。
ストリーミング: スナップショット中に発生した書き込みをバッファーに記録し、移行先ノードへ増分としてストリーミングします。
最終処理: すべてのデータが同期したら、新しい書き込みを短時間停止し、最後のマーカーを送って、一度のアトミックな引き継ぎを行います。
この 3 段階の方法により、従来のスロット移行に伴った複数の往復通信、クライアントのリダイレクト、不安定なユーザー体験を解消します。バックグラウンドで処理し、完了時に所有権をアトミックに切り替えるため、危険な中間状態がありません。完了時には、中断や混乱を起こさず、スロットが移行先ノードに割り当てられています。
改善がもたらす価値
運用担当者にとって、大きな変化です。
往復通信とトポロジー変更が減り、移行中のスプリットブレイン状態もありません。ワークロードを乱したり、オンコールのエンジニアを起こしたりせずに、クラスター全体をリバランスできます。
現在も両方のモデルが存在しますが、アトミックなスロット移行は信頼性の新しい基準です。丁寧な設計によって、難しい運用作業を意識せずに済むものへ変えられることを示しています。
Jacob Murphy を迎えた最近の Cache It ポッドキャストで、Khawaja はこう述べました。「キャッシュをスケールするために停止する必要がない世界へ、また一歩近づきました」。
それは、すべての SRE が望む世界です。
ぜひ開発にお役立てください。