分散Key/Valueストア,Kaiを使ってみよう!

第4回 Kaiの詳細(2)―Kaiの設定をチューニングする

この記事を読むのに必要な時間:およそ 4 分

今回は,Kaiの設定とチューニングについて詳しく説明します。

なお,本連載が対象とする Kaiのバージョンは0.4,ErlangのバージョンはR13Bです。

データ管理の単位 = バケット

ここでは,Kai設定ファイル内の number_of_bucketsについて説明します。

number_of_bucketsは,ノード間での負荷の偏りや,データ配置の計算コストを調整するために使用します。ノード数が数十程度であれば,デフォルト設定のまま変更する必要はありません。

Kaiでは,担当ノードの決定やデータの再配置を行なう際,効率を高めるため,データをバケットという単位でまとめて扱います。バケットとは,32ビットのハッシュ空間をnumber_of_bucketsに指定された値で均等に分割したものです。

図1 ハッシュ空間とパケットの関係

図1 ハッシュ空間とパケットの関係

バケット数(number_of_buckets)が少ないと,ノードごとの担当データ量に偏りが生じるため,上手に負荷分散されません。極端な例ですが,バケットが一つであるならば,全てのデータが特定のノードに集中してしまいます。

一方で,バケット数が多いと,データを操作するときの処理量が大きくなります。大雑把な見積もりではありますが,ノード数が数十程度であれば,バケット数は,1,000~100,000の範囲が適当だと思われます。

なお,デフォルトでは1,024に設定してあります。もし,設定を変更するのであれば、以下の点に注意してください。

  1. なるべく,クラスタ内の総仮想ノード数よりも大きな値にする(仮想ノードについては後述します)
  2. クラスタを構成する全てのノードで,必ず,同じ値を設定する

(1) は,負荷分散のため,(2) は,データを操作するときの計算結果を,クラスタを構成する全ノードで一致させるために必要な条件となります。バケット数は,なるべく,将来の仮想ノードの増加を考慮して決めてください。

仮想ノードによるデータ配置の重み付け

ここでは,Kai設定ファイル内のnumber_of_virtual_nodesについて説明します。

number_of_virtual_nodesは,ノードの性能差に合わせて負荷を調節するために使用します。

本連載の第1回で,Kaiは,Consistent Hashingによりデータ割り当てを決定する際,リング状のハッシュ空間にノードを配置すると説明しました。

性能の高いノードには,他のノードより多くのデータを割り当てられると,より適切に負荷分散を行うことができます。Kaiでは,ノードをハッシュリングに配置する際,性能に合わせて擬似的なノードを多く配置することができます。このときの配置数をnumber_of_virtual_nodesによって設定します。

例えば,標準的な構成のノードには128を設定し,2倍のメモリを搭載したノードには256を設定します。なお,詳細は省略しますが,少なくとも100以上の数値を設定するようにしてください。

Consistent Hashingについてのより詳しい説明は,こちらのページもご参照ください。

著者プロフィール

幾田雅仁(いくたまさひと)

酪農,ゴルフのキャディさん,某大手パソコン通信の下請け,某大手ポータルサイトなどを経て,決済代行を生業とする株式会社ゼロに入社。

p2p?なにそれ?美味しいの?の状態で,Erlang 分散処理勉強会に参加し,Kai のプレゼンを見て感銘を受け,無理矢理開発に参加し,現在に至る。

コメント

コメントの記入