よろずやIT
プログラミング

コンシステントハッシュ法とは?サーバーを増減しても大惨事にならない仕組み

執筆・監修:よろずやIT編集部|編集方針を見る

結論:まずここだけ読めばOK

詳しい手順・原因は、この下で解説しています。

プログラミングのイラスト

コンシステントハッシュ法とは何か

コンシステントハッシュ法とは、複数のサーバーにデータを分散して保存する際に、「どのデータをどのサーバーに置くか」を決めるための割り振り方の一種です。分散キャッシュや分散データベースなど、複数台のサーバーでデータを手分けして管理する仕組みで広く使われています。

この手法の最大の特徴は、サーバーの台数が増えたり減ったりしても、再配置が必要になるデータの範囲がごく一部で済むという点です。

単純な「割り算」方式の弱点

コンシステントハッシュ法のメリットを理解するために、まず単純な方法から考えてみます。

サーバーが3台あるとして、各データに番号を振り、「データ番号 ÷ サーバー台数」のあまりでどのサーバーに置くかを決めるとします(これを剰余ハッシュ法と呼びます)。この方法自体はシンプルで分かりやすいのですが、大きな弱点があります。

サーバーを1台追加して4台にした瞬間、「割る数」が3から4に変わります。すると、ほとんどのデータで「あまり」の計算結果が変わってしまい、ほぼ全部のデータについて、担当サーバーの再計算・移動が必要になってしまうのです。サーバーをたった1台増やしただけなのに、システム全体のデータをほぼ丸ごと移動させる大工事になりかねません。

コンシステントハッシュ法の考え方

コンシステントハッシュ法では、サーバーとデータの両方を、大きな「輪(リング)」の上の点として配置する、というイメージで考えます。

  1. サーバー自体にもハッシュ値を計算し、輪の上のどこかの位置に配置する
  2. データにもハッシュ値を計算し、同じ輪の上のどこかの位置に配置する
  3. 各データは、「輪の上を時計回りに進んで、最初に出会ったサーバー」が担当する、というルールにする

この方式であれば、サーバーを1台追加した時に何が起きるかというと、輪の上でその新しいサーバーのすぐ手前に位置していたデータだけが、新しいサーバーの担当に切り替わります。それ以外の大部分のデータは、担当サーバーが変わりません。サーバーの増減が、影響範囲を輪の一部分だけに限定できるというのが、この手法の核心部分です。

実際にはもう一工夫されている

輪の上にサーバーを1点ずつ配置するだけだと、配置の偏りによって、特定のサーバーだけ負担が集中してしまうことがあります。そのため実際の実装では、1台のサーバーを、輪の上の複数の点(仮想ノード)として配置するという工夫が行われることが多いです。これにより、負荷がより均等に分散されやすくなります。

関連するトピック

以前の記事「キャッシュとは」でも触れた通り、キャッシュの仕組みは応答速度の改善に大きく貢献します。コンシステントハッシュ法は、そのキャッシュを複数台のサーバーに分散させる場合に、裏側で使われている考え方の1つです。CDNとはのような、多数のサーバーにコンテンツを配置する仕組みとも関連が深い技術です。

こうして見ると

コンシステントハッシュ法は、「サーバーの台数はいずれ変わるもの」という前提に立ち、変化に強い設計をあらかじめ組み込んでおく、という考え方の一例です。地味な仕組みですが、大規模なサービスがサーバー増減のたびに大惨事にならずに済んでいる背景には、こうした工夫が存在しています。

PR【中古】 1からはじめるITアーキテクチャー構築入門 システム設計の基礎から実践まで/二上哲也(著者),田端真由美(著者)

【中古】 1からはじめるITアーキテクチャー構築入門 システム設計の基礎から実践まで/二上哲也(著者),田端真由美(著者)

¥2,480

楽天で見る
SHAREXLINEはてブ

よくある質問

Q.普通に『サーバー台数で割ったあまり』で振り分けるのでは、何がダメなのですか?

A.この方式(剰余ハッシュ法)は、サーバーの台数が変わると『割る数』自体が変わってしまいます。その結果、ほとんどのデータで計算結果(担当サーバー)が変わってしまい、実質的にほぼ全てのデータを再配置する必要が生じます。台数が少ししか変わっていないのに、影響範囲が全体に及んでしまう点が問題です。

Q.コンシステントハッシュ法は、どんな場面で使われていますか?

A.分散キャッシュシステムや、分散データベース、負荷分散(ロードバランサー)など、『データや処理を複数のサーバーに分散させたいが、サーバーの台数は今後も増減する可能性がある』という場面で広く使われています。

Q.サーバーを1台追加する時、まったく影響が出ないわけではないのですか?

A.影響がゼロになるわけではありません。追加したサーバーが担当することになった範囲のデータは、そのサーバーに移動(再配置)する必要があります。ただし、剰余ハッシュ法のように無関係な大部分のデータまで巻き込まれることがなく、影響範囲が一部に限定される点が大きな違いです。

関連記事

最新のIT関連書籍 トップ10

PR / 楽天市場の売れ筋ランキングを定期的に取得しています。価格は変動する場合があるため、購入前に各ストアでご確認ください。