【新規性喪失の例外の表示】特許法第30条第2項適用 平成27年7月1日 IEEEによる2015 IEEE 39th Annual International Computers, Software and Applications Conference Proc. COMSPAC 2015の論文集(pp. 638−639)に発表。
【新規性喪失の例外の表示】特許法第30条第2項適用 平成27年8月25日 一般社団法人電子情報通信学会の2015年電子情報通信学会通信ソサイエティ大会(2015年9月8日〜11日、仙台市)の論文集(通信講演論文集2、BI−6−4、SS−93〜94)に発表。
【文献】
吉田 惇人,”線形ハッシュ法とSkip Graphを用いた分散キーバリューストアの実装と評価”,第6回データ工学と情報マネジメントに関するフォーラム (第12回日本データベース学会年次大会),[online],日本,2014年 3月 3日,D2−2,[平成26年5月30日検索],インターネット<URL:http://db-event.jpn.org/deim2014/>
(58)【調査した分野】(Int.Cl.,DB名)
複数のストレージと該ストレージと組み合わされたプロセッサとメモリを含めて構成された物理ノードの複数が接続されたネットワーク上に構成される範囲検索可能なクラウドストレージにおいて上記物理ノードの負荷分散を図る方法であって、
上記範囲検索可能なクラウドストレージを、上記ストレージによる共通の容量値の仮想ストレージと該仮想ストレージが係属するプロセッサによる仮想プロセッサとメモリが構成要素となる仮想ノードの複数が接続されたオーバレイネットワーク上に形成し、
データ蓄積においては、上記範囲検索可能なクラウドストレージにキーバリュー(key-value)型データを蓄積し、
検索においては、上記仮想ノードを所定のキーバリューについて検索し、
各仮想ノードのデータ蓄積量に負荷分散のための下限と該下限の所定倍で仮想ノードの容量となる上限とを設け、
(1)第1仮想ノードに新たなデータを追加しようとする場合に、追加によるデータ量が上記上限以上の場合は、前記追加によるデータ量について、上記検索可能なクラウドストレージから選択した空仮想ノードを第2仮想ノードとして、第1仮想ノードから第2仮想ノードに上記上限の半分の分量のデータを振り分けると共に、この振り分けによる新たな順に上記オーバレイネットワーク上の仮想ノードの並びを更新することを特徴とする、範囲検索可能なクラウドストレージにおける負荷分散方法。
上記各物理ノードにおけるストレージは、ストレージを分割したものであり、その分割は、同じサイズの領域の数が最多となる分割であることを特徴とする請求項1から4のいずれか1つに記載の範囲検索可能なクラウドストレージにおける負荷分散方法。
【背景技術】
【0002】
近年、ビッグデータ処理向けのクラウドストレージが急速に発展している。中でも、特にソーシャルネットワークとIоTなどにおける時空間データを効率的に処理するための範囲検索可能なクラウドストレージが注目されつつある。しかし、範囲検索を可能にするために、データのローカリティ(局所参照性)を保つことが必要であり、物理ノード間の低コストかつ高効率の負荷分散はきわめて困難な課題である。
【0003】
従来技術では、隣接ノードのリモートマイグレーションといった手法が多く用いられている。隣接ノードのリモートマイグレーションとは、負荷が軽いノードが自分の負荷を、担当範囲が隣接するノードに移動し、自分が空きノードになった後、元の位置を離れ、リモートの負荷が重いノードの隣にマイグレーションし、その重いノードの負荷を担当するという仕組みである。
従来技術の問題点としては、オーバヘッドが非常に大きいことと処理速度が遅いことである。
【0004】
この従来技術の一例を
図5に示す。
図5は、AからFの各ノードの負荷とその担当範囲とを示す。ノード間で作業負荷を再バランスさせる基本的なメカニズムとして、従来の大概のものでは上記リモートマイグレーション用のリオーダー(Reorder)操作を用いている。これは、仮に第2ノードが過少負荷であり、他の過剰負荷ノードを救済するものとする。この場合は、まず、第2ノードのすべての作業負荷を隣の方へ移動する。その第2ノードは空ノードになるので、一旦システムから離れ、また過剰負荷ノードの隣へ再加入する。その過剰負荷ノードはその負荷を隣にできた空ノードに移す。この場合の移動コストは、
図5のαとβを加えたものである。この操作によっては、移動されるデータ量が多いが、バランシング効果は限られている。
【0005】
本発明では、検索アルゴリズムにコード#(CHORD#)アルゴリズムを用いて仮想ノードの管理を行うが、このアルゴリズムの、よく知られたコード(CHORD)アルゴリズムと比べての類似点と相異点は、概略下記の通りである。
つまりコードでは複数のノードが論理的な配置でリング状に並べられ、各ノードに検索項目となるキーがハッシュ関数によって分散されて関連付けられる。検索は、上記キーによるキー空間で行う。このため、各ノードはキーとアドレスに関するフィンガーテーブルを備え、それには、上記リングを半周、4分の1周と順次半分の行程とするノードのアドレスが書かれている。
これに対してコード#では、複数のノードが論理的な配置でリング状に並べられる点ではそれに類似しているが、一次元に並べられるデータに関する項目が、各ノードが所定の範囲を受け持ち、かつ前記データの順で並ぶ構成である。検索は、上記ノードによるノード空間で行う。各ノードは上記と同様なフィンガーテーブルを備えるがノードとアドレスに関するものである。
【0006】
上記の様にコードの場合はハッシュ関数を用いるので、ノード毎のキー数の分布は平均化される。しかし、ノード位置とキー順の関連がばらばらになっており、範囲検索は容易ではない。これに対してコード#の場合はハッシュ関数を用いないので、ノード位置とキー順の関連を簡単な対応づけで済ませることができる。しかし、ノード毎のキー数の分布には偏りが生じる。
【発明の概要】
【発明が解決しようとする課題】
【0008】
本発明の目的は、クラウド上に分散して蓄積されたキーバリュー(key-value)型データについて、ストレージ資源の利用率を高めることができるようにすることである。
【課題を解決するための手段】
【0009】
このため、本発明では、範囲検索可能なクラウドストレージにおいて範囲検索を行うが、そのクラウドストレージ上の仮想ノードの基盤となる物理ノードに割り当てられたデータが量的に偏在することが無い様にするために、負荷分散を行う。
【0010】
まず、本発明の、範囲検索可能なクラウドストレージにおける負荷分散方法で用いるクラウドストレージは、複数のストレージと該ストレージと組み合わされたプロセッサとメモリを含めて構成された物理ノードの複数が接続されたネットワーク上に構成されるもので、
上記範囲検索可能なクラウドストレージを、上記ストレージによる共通の容量値の仮想ストレージと該仮想ストレージが係属するプロセッサによる仮想プロセッサとが構成要素となる仮想ノードの複数が接続された
オーバレイネットワーク上に形成し、
データ蓄積においては、上記範囲検索可能なクラウドストレージにキーバリュー(key-value)型データを蓄積し、
検索においては、上記仮想ノードを所定のキーバリューについて検索する。
さらに、物理ノードの負荷分散のために、各仮想ノードのデータ蓄積量に、下限と該下限の所定倍の上限とを設けている。
このような範囲検索可能なクラウドストレージで各仮想ノードのデータ蓄積量の調整を行って物理ノードの負荷分散を図るには以下の様にする。
(1)第1仮想ノードに新たなデータを追加しようとする場合で、追加によるデータ量が上記上限以上になる見込みの場合は、前記追加によるデータ量について、上記検索可能なクラウドストレージから選択した空仮想ノードを第2仮想ノードとして、第1仮想ノードから第2仮想ノードに上記上限の半分の分量のデータを振り分けると共に、この振り分けによる新たな順に上記オーバレイネットワーク上の仮想ノードの並びを更新し、
(2)上記キーバリュー型データの並びで隣接する第1仮想ノードのデータ量と第2仮想ノードのデータ量との和が上記上限未満の場合に、第1仮想ノードあるいは第2仮想ノードの一方に両方のデータを寄せ集めて他方の仮想ノードを空仮想ノードとすると共に、上記オーバレイネットワーク上の仮想ノードの並びを更新し、
(3)上記キーバリュー型データの並びで隣接する第1仮想ノードの仮想ストレージと第2仮想ノードの各々のデータ量の和が、上記上限以上で、且つ、その一方の仮想ノードのデータ量が上記下限未満の場合に、その他方の仮想ノードから該一方の仮想ノードへデータを移動して、それら双方のデータ量が上記下限を超える様に再配分し、上記オーバレイネットワーク上の仮想ノードの並びを更新する。
【0011】
また、本発明は、上記クラウドストレージを構成する物理ノードから選択された第1物理ノードと第2物理ノードについて、
上記物理ノードの空でない仮想ノード数の全体の仮想ノード数に対する比をμとし、所定の閾値パラメータλ(∈(0、1))を用いて、
(1)第1物理ノードに属する仮想ノードにおける空でないノード数の第1物理ノードに属する仮想ノード数の比μ
1と、第2物理ノードに属する上記仮想ノード数
に対する空でない仮想ノード数の比μ
2について、μ
1(1+λ)が上記μより大きく、μ
2(1−λ)が上記μより小さいときに、
(2)第1物理ノードに属する空でない仮想ノードから第2物理ノードに属する空の仮想ノードへの、保持データに関するスワップを行い、
(3)上記オーバレイネットワーク上のノードの並びを更新する、
ことを特徴とする。
【0012】
上記範囲検索可能なクラウドストレージにおける上記の
キーバリューについての検索は、コード#アルゴリズムに従った検索であることを特徴とする。
【0013】
上記オーバレイネットワークにおいて空仮想ノードの全体が上記オーバレイネットワークの並びの連続した一画を占める空仮想ノードプールを構成し、
上記空の仮想ノードは、該空仮想ノードプールから選択するものであることを特徴とする。
【0014】
また、上記各物理ノードにおけるストレージは、ストレージを分割したものであり、その分割は、同じサイズの領域が最多となる分割であるとしてもよい。
【0015】
上記所定倍とは、2倍を超え2.08倍以下であることが望ましい。
【0016】
また、上記オーバレイネットワークには、P2P(peer to peer)を用いることができる。
【発明の効果】
【0017】
例えば各種測定データを本発明が対象とする範囲検索可能なクラウドストレージに保存することで、データの蓄積が進むに従って各物理ノードの負荷が増加するが、この増加は一様でない場合が多いので、本発明の負荷分散方法を用いて各物理ノードの負荷を分散することができ、ストレージ資源の利用率を高めることができるようになる。また、検索に際しては、例えばCHORD#を用いることができるので、検索は効率的に行うことができる。
【発明を実施するための形態】
【0019】
本発明の範囲検索可能なクラウドストレージにおける負荷分散方法を適用する例には、オーバレイを基にした記憶システムアーキテクチャを持ったクラウドストレージがある。
ここで、N個の記憶ノードからなる一組の大規模な分散クラウドストレージを考える。Nまでの基数をnとする。各々の物理ノードを複数の仮想ノードに区切り、すべての仮想ノードのセットをVとする(Vの仮想ノード数はm)。物理ノードp
iの容量をc
iとし、仮想ノードv
jの負荷をl
jとする。物理ノードの容量は任意でありえるが、仮想ノードの容量は決められた値である。
【0020】
分散した状態で範囲検索を行えるようにするために、すべての仮想ノードでChord#オーバレイを構成する。本明細書では、「オーバレイノード」と「仮想ノード」は、交換可能である。Chord#は、範囲検索可能な分散データ構造である。Chord#ネットワークでは、すべてのオーバレイノードは2つのリンクで連なることによるリングで接続されており、リングにおけるオーバレイノードの各位置はそのノードが担当する範囲によって決められている。
データ検索を速めるために、各々のオーバレイノードは、複数のレベル(スキップリストにおけるレベル)で短絡路を提供するフィンガーテーブル(finger table)を持っている。一般に、そのフィンガーテーブルで第iフィンガーを計算するために、オーバレイノードは、第(i−1)フィンガーのリモートノードに、さらにその第(i−1)フィンガーがどれを参照しているかを尋ねる。つまり、次式の様にレベルiのフィンガーは、次に低いレベルi−1のフィンガーポインターに設定されている。初期値として、フィンガーは直接的な後続点を指す。
【0022】
Chord#を使うために、データ項のキー空間を連続的に連なるように分割して、各々の分割を仮想ノードに割り当てる。また、ここでは、仮想ノードは、そのキーとして、その分割の下境界を採用し、分割全体で、その担当範囲の下境界を採用する。また、データ項目を保存するために、すべての仮想ノードを使うわけではない。つまり、一部の仮想ノードを空にしておく。具体的には、仮想ノードのセットVを、サブセットV
EとV
NEに分けるが、サブセットV
Eは、すべて空の仮想ノードを含み、サブセットV
NEはすべての空でない仮想ノードを含む。
【0023】
さらに、空の仮想ノードには、空でない仮想ノードから区別をするために、空でない仮想ノードには決して使われないキーと範囲を割り当てる。例えば、(−1、0)間の実数はデータ項目のキーとしてまた空で無い仮想ノードとしては、決して使われないと仮定する。
図1に、本発明の一例として提案するオーバレイを基にしたストレージシステム構成を示す。この例の場合は、すべての空の仮想ノードが隣接する領域に配置されるようになる。この領域を空仮想ノードプール(EVNP:empty virtual nodes pool)と呼ぶ。
図1では、仮想ノードが属する物理ノードを区別できるようにするために、描画線幅を変えている。同じ線幅の仮想ノードは、同じ物理ノードに保存される。各々の物理ノードには、空でない仮想ノード(円)と空の仮想ノード(星形多角形)とからなる複数がある。
【0024】
本発明の目的を実現するための方法の1つは、データ項目を仮想ノードに割り当てるための負荷分散アルゴリズムを設計することで、任意の物理ノードPi(iは、1から物理ノードの数Nまで)について、その容量c
iに比例したデータ項目の全体の負荷を管理するようにするものである。形式的には、物理ノードPiに属する仮想ノードのサブセットV
i(∈V、Vはすべての仮想ノードのセット)は、以下の数2が最小化されるように、仮想ノードごとに実際の負荷を調整する。ここで、仮想ノードv
jの負荷をl
jとする。物理ノードの容量は任意でありえるが、仮想ノードの容量は所定の一定値である。ここで、Σは、その添え字のすべての要素についての和を表すものとする。
【0026】
上記数式の第2項は、物理ノードP
iの期待される負荷とみなすことができる。過剰負荷の物理ノードと過少負荷の物理ノードの間で負荷のバランスをとる基本的な考え方は、過少負荷の物理ノードの空の仮想ノードに過剰負荷の物理ノードの空でない仮想ノードからデータを移動するスワップ(Swap)を行う。
【0027】
しかし、仮想ノードの負荷が任意であるならば、システムは非常に非効率になる場合がある。ほんの少しのデータ項目だけを保存している多くの仮想ノードがあるとすると、過剰負荷の物理ノードから過少負荷の物理ノードへのデータの移動は、それらのほんの少しのデータ項目ごとを移動する多数回のスワップ操作が必要になることが分かる。
これに加えて、空でない仮想ノードにほんの少しのデータ項目だけを保存することで、オーバレイネットワークは非効率な利用となり物理資源を浪費することになる。
【0028】
これらの理由から、本発明では、仮想ノードの負荷に許容範囲を設定して、常に負荷を適度な状態に保つことを行う。具体的には、ここでは上記許容範囲の下限lbと上限ubを導入する。そこで、ub=2×lb + εとするが、ε(>0)は、小さい実数である。
常に仮想ノードv
iの負荷は、lb≦l
i<ubを満たさなければいけない。さもなければ、後述の負荷を調整する操作が発動される。
仮想ノードの負荷の範囲が与えられれば、以下の様に実用的に便利な数3の近似を得ることができる。絶対値記号は、集合については仮想ノード数を表し、数値については絶対値を表す。
【0030】
|V
NE|/|V|をμとすると、μは、Chord#オーバレイネットワークでの、すべての空でない仮想ノード数とすべての仮想ノード数の比を示す。また、任意の物理ノードP
iについては、それの空でない仮想ノード数のすべての仮想ノード数に対する比をμ
iとする。
ここで、閾値パラメータλ∈(0、1)を導入する。もし、μ
iがμ(1+λ)より大きいならば、それは過剰負荷と解釈し、また、μ
iがμ(1−λ)より小さいならば、それは過少負荷と解釈する。
過少負荷の物理ノードは、何もする必要がないが、過剰負荷の物理ノードからの要請を待つことになる。
【0031】
物理ノードが過少負荷、通常負荷あるいは過剰負荷のどの状態にあるのかについては、μ
iとμを比較することによって行うことができる。μを推定する前に、ここでは、仮想ノードの総数mを計算するための方法を最初に導入する。これはμを推定するために必要である。この際、Chord#の特徴を用いることによって、mを計算する。
【0032】
任意の物理ノードが仮想ノードのv
jを含むと仮定する。また、v
jは左隣にレベル−0のオーバレイノードv
kがあるとする。上記物理ノードは、v
jをして右隣ノードにv
k.keyの問合わせを送らせる。この問合わせは通常の問合わせとして取り扱われ、中間のオーバレイノードはChord#プロトコルに従って正確にそれを転送する。この問合わせと通常の問合わせの唯一の違いは、問い合わせメッセージにあり、どのオーバレイレベルに各中間ノードがその問い合わせを転送するかを記録したセグメントが埋め込まれているということである。そのセグメントにおけるそのセットを、LSと記す。その問い合わせがv
kに転送された後に、v
kは単にv
jにそれを転送する。その問合わせを受け取った後に、次の方程式に従って、v
jはmを次のように計算する:
【0034】
図13に例を示す。仮想ノード74がmを計算する場合を仮定する。仮想ノード74は、キー79についての問い合わせを送るが、このキーはレベル0で左隣のオーバレイノードのキーである。その問合わせは、そのレベル3で隣の-0.5ノードに転送される。-0.5ノードはそのレベル2で隣のノード92に問合わせを転送し、そして、ノード92はそのレベル1で隣のノード85に問合わせを転送する。ノード79はレベル0でノード85の右隣りであるので、問合わせはレベル0に転送される。この例では、LS = 3、2、1、0であり、m=2
3+2
2+2
1+2
0+1で16である。
【0035】
mが分かると、物理ノードは、サンプリングを基にした方法で、独立してμを推定することができる。(1)具体的には、物理ノードはランダムにその中の仮想ノードを選んで、それを所定のTTL(Time To Live:生存時間)(少なくともO(log m))をつけてサンプル−要請メッセージを送出させる。(2)パケットを受けた全ノードは、フィンガーテーブルからランダムに隣のリンクを選び、パケットを転送して、TTLを減らす。(3)経路に沿ったあらゆるオーバレイノードはランダムに隣のリンクを選んで、それを転送し、TTLを減らす。(4)TTLが無くなったノードは、サンプルを返送する。
この方法で、メッセージを送る物理ノードは、一様分布に従った仮想ノードのサンプリングを得ることができる。
【0036】
この理由は以下の通りである。
Chord#のようなトポロジーは、エキスパンダであるので、Chord#におけるTTLはO(log m)のランダムウォークについて一様分布に収束する。
サンプリングが一様分布に従っていれば、μを推定することは、基本的な母集団比率評価問題になることがよく知られている。仮想ノードのサンプリングのセットをS(|S|=s)とし、次の様にブール変数a
iを導入する。
【0037】
【数5】
μの評価値をμ^(^はμの上)とすると、
【0038】
【数6】
であり、その期待値は、次のようになる。
【0039】
【数7】
また、これから、μ^がμの偏りの無い評価であることは明らかである。
【0040】
物理ノードP
iが過剰負荷にあることが見出された時に、スワッププロセスを開始する。
図2に、スワップ前とスワップ後のシステムを示す。
具体的には、
(A)まず、空でない仮想ノードv
jをランダムに選ぶ。
(B)そして、(−1、0)にある乱数Kを発生させ、そして、仮想ノードv
jからChord#オーバレイネットワークにKを検索させる。Chord#の検索アルゴリズムによると、キーKの空の仮想ノードがあれば、そのノードはv
jへ返答する。キーKの空の仮想ノードが存在しない場合は、キーKに最も近いキーの空の仮想ノードがv
jへ返答する。
(C)返答する空の仮想ノードがv
kであるとする。もし、v
kが通常負荷(過少でも過剰でもない負荷)または過少負荷の物理ノードにある場合は、仮想ノードv
jは仮想ノードv
kへすべてのデータ項目を渡す。そうでない場合は、仮想ノードv
jは新しいK∈(−1、0)を発生させ、再びKの検索を行う。
(D)このプロセスを、仮想ノードv
jが通常負荷または過少負荷の物理ノードから空の仮想ノードを見つけるまで繰り返す。
(E)データ伝送に加えて、仮想ノードv
jと仮想ノードv
kが、そのキー、担当範囲、隣接ノードの情報を交換する。
(F)スワップ操作の最後に交換された情報をもったオーバレイネットワークでの位置を交換する。
【0041】
次に、空でない仮想ノードの負荷の調節について、説明する。
負荷分散の枠組みを理解するための要点は、空でない仮想ノードの負荷を[lb、ub)の範囲に保つことである。この目的のため、3つの操作を導入する:スプリット(split)、マージ(Merge)、及び再分配(Redistribute)である。
スプリット操作は、仮想ノードv
jについてデータ入力によって負荷l
jが上限ubに達するときにトリガーされる。スプリット操作を行うためには、仮想ノードv
jは、最初に、空の仮想ノードを見つけなければならない。
v
jと同じ物理ノードに空の仮想ノードv
kがあるならば、v
jはスプリット要請をv
kに送信する。さもなければ、v
jは(−1、0)内の乱数(Kとする)を発生させる。Chord#オーバレイネットワークでKの検索を行う。
キーKによる空の仮想ノードが存在するかどうかにかかわらず、空の仮想ノードのどれかがv
jへ返答する。返答した仮想ノードがv
kであるとすると、v
jはその負荷の半分(すなわちlb+ε/2)をv
kに割り振る。
実際には、v
jはより大きなキーのデータ項目かより小さなキーのデータ項目をv
kに動かすことができるが、汎用性を失わずに、ここでは、v
jはより大きなキーのデータ項目をv
kに動かすものとすることができる。
データ項目伝送に加えて、v
jは右隣のノード情報もv
kに送って、Chord#オーバレイのスキップリストにおけるレベル0で、その右隣はv
kであるようにする。
【0042】
するとv
kが空でない仮想ノードになるので、それはオーバレイネットワークでの元の位置から離れて、キーにはデータ項目のキーの下限を使って、v
jの右隣で再びオーバレイネットワークに参加する。
【0043】
他の操作のマージ及び再分配は、l
jがデータ削除により上記lb未満なったとき、トリガーされる。マージ及び再分配がトリガーされるかどうかは、v
jの2つのレベル0のオーバレイネットワーク上の隣のノードに依存する。
(イ)どちらかの隣のノード、例えばv
kが、l
j+l
k<ubなる条件を満たすとき、マージ操作がトリガーされ、v
jはv
kからのすべてのデータ項目を吸収する。この結果を受けて、v
jは通常のものになり、そして、v
kは空になる。まず、v
kはオーバレイネットワークから離れ、区間(−1、0)間のランダムなキーを発生し、再びオーバレイネットワークに加わる。そのオーバレイネットワーク上の新しい位置は、上記EVNPである。
(ロ)他方、レベル0のオーバレイネットワークのv
jの両隣りの仮想ノードが、ub−l
j以上のデータ項目数を持っているとき、v
jは、lb−l
j個のデータ項目をどちらかの隣のノードにそれが下限lbになるまで受け渡すことを要請することができる。これは、再分配と呼ばれる。再分配の後に、両方の2つの仮想ノードは、通常負荷の仮想ノードになる。
スプリット、マージ、及び再分配で、あらゆる空でない仮想ノードの負荷はlbとubとの間に留めることができる。これらすべての3つの操作は、ローカルな共同作業でありグローバル情報なしで行われる。
【実施例1】
【0044】
まず、本実施例におけるオーバレイネットワーク例は以下の様に構成されたものである。各々の物理ノードは、複数の同一の容量の仮想ノードを設定できるようにパーティション分割が行われており、また、各々の仮想ノードには、それぞれの担当範囲が割り当てられている。その担当範囲に基づいて、範囲検索可能なP2Pネットワークがこれらの仮想ノードで構成される。具体的には、各仮想ノードが隣のノードに繋がっているようにする。また、各々の仮想ノードにも検索を速めるためになんらかの長いリンクを設ける。データ項目を保存するために、すべての仮想ノードを使うというわけではない。データの格納には一部の仮想ノードを使い、他の仮想ノードは空仮想ノードにしておく。空でない仮想ノードには、データ項目として使われていない範囲のキーを割り当てる。例えば、データ項目が常にプラスであるとき、区間(−1、0)間の値を空の仮想ノードに割り当てる。
【0045】
各々の物理ノードには、複数の空でない仮想ノードと空の仮想ノードがあるとする。このとき、次のようにすると過剰負荷の物理ノードと過小負荷の物理ノード間での負荷の均衡の再調整を行うことができる。
例えば、過剰負荷の物理ノードには空でない仮想ノードがあり、そして、過少負荷の物理ノードには空の仮想ノードがあるとする。この場合、空でない仮想ノードからすべてのその負荷を空の仮想ノードの方へ移す。そして、オーバレイネットワーク上でそれらの位置関係を交換する。この操作はスワップ(Swap)に当たる。
【0046】
局所的な負荷調整については、スプリット(Split)、マージ(Merge)、及び再分配(Redistribute)の3操作で行う。この際、空でない仮想ノードにデータ項目の上限ubと下限lbを導入する。また、ubはlbの2倍強、例えば2.08、とする。これらubとlbは、負荷調整のトリガーとなる指標である。
【0047】
スプリットは、
図3(a)に示すように、データ挿入でデータ項目がub達するときには、例えば、その仮想ノードを2つにスプリット(分裂)させる。具体的には、同じ物理ノード内で空の仮想ノード見出し、データの半分をその方へ移す。これで、空の仮想ノードは空でなくなる。そして、オーバレイネットワーク上で位置を変える。同じ物理ノード内で空の仮想ノードが見つからない場合は、上記の様に、負の乱数Kをキーに持つ仮想ノードを検索し、その検索に応答した仮想ノードに、上記の様に、データの半分を移す。
マージは、
図3(b)に示すように、オーバレイネットワークの隣接する2つの仮想ノードのデータ項目の和がubより少ない場合は、1つの仮想ノードが他の仮想ノードのデータ項目を吸収する。そして、空になった仮想ノードはその位置を去り、空仮想ノードプールに再加入する。
また、再分配は、
図3(c)に示すように、隣接する2つのノードの個々のデータ項目は両方ともubより少ないが、そのデータ項目の和がubより大きい場合は、データ項目の多い方から少ない方へデータ項目を移す。
これら3つの操作で、どの仮想ノードにおいても、lbとubの間にデータ項目を留めることが出来る。
【0048】
図4は負荷均等化操作の例を示す図である。この例では、過剰負荷ノードから過小負荷ノードへ負荷移動を行う。
【0049】
図2は、本実施例の場合にも当たり、スワップ操作をオーバレイネットワークの観点からみた図である。この
図2において、物理ノードAは過剰負荷であり、物理ノードBは過少負荷であるとする。物理ノードAにある仮想ノード11から物理ノードBにある空の仮想ノードの1つにデータを移動する。データ移動後に、隣接ノード情報、探索キーおよびオーバレイネットワークにおける位置を上記ノード間で交換する。
【実施例2】
【0050】
本発明のパフォーマンスを評価するために、Java(登録商標)でシミュレータを開発した。また、本発明の方法に加えて、比較のために、(A)一様な環境や(B)不均質な環境で定評のあるLoReC(LOad REbalancing for distributed file systems in Clouds、非特許文献1)を実装した。
上記シミュレータによる計算機シミュレーションで、負荷分散効果、データ移動コスト、メッセージ発信コストと負荷分散速度を評価した。
【0051】
(A) 一様な環境でのシミュレーション
結果における最初のセット、一様な環境から得られたものである。
一様な環境では、容量が1000で同一で、1000台の物理ノードを使用した。各々の物理ノードは、20の仮想ノードを包含している。シミュレーションは次の2種類のシナリオで行った。
(イ)静的シナリオでは、偏った初期負荷分布の3つのパターンを仮定して、それぞれ負荷分散操作を行った。
負荷分散操作の間、データ挿入と削除は、起きていない。
静的シナリオで、スプリット、マージ、及び再分配はほとんど起こらず、スワップに集中することができた。
(ロ)ダイナミックなシナリオでは、その負荷の削減(同様に増加)を続けた。データ撹拌の間、すべての負荷分散操作がトリガーされ、実際の環境に近い状態での評価をすることができた。
【0052】
図6は、初期負荷分布の偏り方の3つのパターンを表す。負荷に対するCDF(Cumulative Distribution Function:累積分布関数)を表す。物理ノードで最も小さな負荷は200で、最大の負荷は800である。負荷Bでは、大部分のノードは軽負荷となっており、ごく一部のノードだけに多大な負荷がかかっている。負荷Cでは、大部分のノードは多大な負荷が掛かった状態となっており、ごく一部だけが軽負荷となっている。負荷Aの位置は、負荷Bと負荷Cの間である。
図7(a)、7(b)と7(c)が各負荷に対する負荷分散効果の比較を示す。
本発明の方法では、少数の過少負荷されたノードが存在する間、ほとんど過剰負荷のノードが存在しない。
これは、従来の方法(LoReC)では過剰負荷のノードと過小負荷のノードがいくつか残ることに対して、本発明の優れた点である。この違いの主因は、再配列(REORDER)の使い方の違いにある。従来の方法の様に、REORDERで、軽負荷のノードが、過剰負荷のノードを救済する場合、その前にすべてのそのデータ項目を隣のノードの方へ動かさなければならない。しかし、軽負荷のノードからデータ項目を受け取った後に、隣の軽負荷のノードが助けられるべき過剰負荷のノードより多大負荷になるならば、REORDER操作は意味がない。しかも、この場合、更なる負荷分散は行われない。
【0053】
図8(a)はデータ移動コストの比較を表す。
図8(b)はメッセージ発信コストの比較を表す。そして、
図8(c)は負荷分散速度の比較を表す。本発明の方法やLoReCが定期的に行われると想定している。したがって、これらの速度を負荷分散操作の回数で比較する。負荷分散操作がより少ない回数の方が、より速いと思われる。これらの図から、本発明の方法の方が、重要なデータ移動コストとメッセージ発信コストを節約することができて、LoReCより速く終わることができることが分かる。
【0054】
静的シナリオに加えて、データ撹拌したシミュレーションも行った。ロードバランスされた範囲検索可能システムに600のデータ項目があると仮定した。それから、偏った方法ですべてのノードからデータ項目を削除したが、より多くのデータ項目がより少ないノードから削除された、また、より少ないデータ項目がより多くのノードから削除された。各試行におけるデータの削除は、
図9に示す関数に従っている。
図10(a)は蓄積されたデータ移動コストの比較を示し、
図10(b)は蓄積されたメッセージ発信コストの比較を示す。そして、
図10(c)は負荷分散速度の比較を表す。
【0055】
静的シナリオのように、速度を負荷分散操作数で比較した。LoReCでは、「REORDER」の数を数え、本発明の方法については、スワップの数を数えた。スプリット、マージ、及び再分配については数えていない。これらは負荷変動でトリガーされるからである。
さらに、上記3つの操作の処理時間は、スワップの期間より非常に短いと思われる。静的シナリオでの結果と同様に、本発明の方法は、データ削除に対して、LoReCに比べて著しい改善を示す。
同様に、データ挿入についてのシミュレーションを行った。各々のノードに200のデータ項目があってロードバランスを図った範囲検索可能システムの設定とした。それから、偏った方法でデータ項目をすべてのノードに挿入した。試行ごとのデータ挿入は、
図9に従った方法である。
図11(a)、(b)と(c)にデータ削除の場合と同様の結果を示す。
【0056】
(B) 不均質な環境でのシミュレーション
本発明の方法が仮想ノードに基づいて、それは本質的に不均一な環境をサポートしており、一様な環境での働きとほとんど違いを示さない。このため、記述を簡略化するために、その一部の結果だけを以下に示す。
シミュレーションにおいて、物理ノードの容量がジップ(Zipf)分布であると仮定した。その容量の最大と最小は、それぞれ5000と500である。容量に対する負荷の比率は、[0.2、0.8]間のもう一つのジップ分布に従うとした。
図12(a)に負荷分散効果を示し、
図12(b)に、それに対応するデータ移動コストを示す。
これらの図から、データ移動コストについては、本発明によってLoReCと同様な負荷分散効果を得るには、LoReCによるデータ移動コストのわずか1%でよいことが分かる。