特許第6566822号(P6566822)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 独立行政法人情報通信研究機構の特許一覧

特許6566822範囲検索可能なクラウドストレージにおける負荷分散方法
<>
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000009
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000010
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000011
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000012
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000013
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000014
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000015
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000016
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000017
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000018
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000019
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000020
  • 特許6566822-範囲検索可能なクラウドストレージにおける負荷分散方法 図000021
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6566822
(24)【登録日】2019年8月9日
(45)【発行日】2019年8月28日
(54)【発明の名称】範囲検索可能なクラウドストレージにおける負荷分散方法
(51)【国際特許分類】
   G06F 16/27 20190101AFI20190819BHJP
   G06F 16/21 20190101ALI20190819BHJP
【FI】
   G06F16/27
   G06F16/21
【請求項の数】6
【全頁数】17
(21)【出願番号】特願2015-194688(P2015-194688)
(22)【出願日】2015年9月30日
(65)【公開番号】特開2017-68666(P2017-68666A)
(43)【公開日】2017年4月6日
【審査請求日】2018年8月9日
【新規性喪失の例外の表示】特許法第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)に発表。
(73)【特許権者】
【識別番号】301022471
【氏名又は名称】国立研究開発法人情報通信研究機構
(74)【代理人】
【識別番号】100095337
【弁理士】
【氏名又は名称】福田 伸一
(74)【代理人】
【識別番号】100095061
【弁理士】
【氏名又は名称】加藤 恭介
(74)【代理人】
【識別番号】100174425
【弁理士】
【氏名又は名称】水崎 慎
(72)【発明者】
【氏名】ショウ シュン
(72)【発明者】
【氏名】寺西 裕一
(72)【発明者】
【氏名】地引 昌弘
【審査官】 後藤 彰
(56)【参考文献】
【文献】 特開2013−178677(JP,A)
【文献】 吉田 惇人,”線形ハッシュ法とSkip Graphを用いた分散キーバリューストアの実装と評価”,第6回データ工学と情報マネジメントに関するフォーラム (第12回日本データベース学会年次大会),[online],日本,2014年 3月 3日,D2−2,[平成26年5月30日検索],インターネット<URL:http://db-event.jpn.org/deim2014/>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/21
G06F 16/27
(57)【特許請求の範囲】
【請求項1】
複数のストレージと該ストレージと組み合わされたプロセッサとメモリを含めて構成された物理ノードの複数が接続されたネットワーク上に構成される範囲検索可能なクラウドストレージにおいて上記物理ノードの負荷分散を図る方法であって、
上記範囲検索可能なクラウドストレージを、上記ストレージによる共通の容量値の仮想ストレージと該仮想ストレージが係属するプロセッサによる仮想プロセッサとメモリが構成要素となる仮想ノードの複数が接続されたオーバレイネットワーク上に形成し、
データ蓄積においては、上記範囲検索可能なクラウドストレージにキーバリュー(key-value)型データを蓄積し、
検索においては、上記仮想ノードを所定のキーバリューについて検索し、
各仮想ノードのデータ蓄積量に負荷分散のための下限と該下限の所定倍で仮想ノードの容量となる上限とを設け、
(1)第1仮想ノードに新たなデータを追加しようとする場合に、追加によるデータ量が上記上限以上の場合は、前記追加によるデータ量について、上記検索可能なクラウドストレージから選択した空仮想ノードを第2仮想ノードとして、第1仮想ノードから第2仮想ノードに上記上限の半分の分量のデータを振り分けると共に、この振り分けによる新たな順に上記オーバレイネットワーク上の仮想ノードの並びを更新することを特徴とする、範囲検索可能なクラウドストレージにおける負荷分散方法。
【請求項2】
上記クラウドストレージを構成する物理ノードから選択された第1物理ノードと第2物理ノードについて、
上記物理ノードの空でない仮想ノード数の全体の仮想ノード数に対する比をμとし、所定の閾値パラメータλ(∈(0、1))を用いて、
(1)第1物理ノードに属する仮想ノードにおける空でないノード数の第1物理ノードに属する仮想ノード数の比μ1と、第2物理ノードに属する上記仮想ノード数対する空でない仮想ノード数の比μ2について、μ1(1+λ)が上記μより大きく、μ2(1−λ)が上記μより小さいときに、
(2)第1物理ノードに属する空でない仮想ノードから第2物理ノードに属する空の仮想ノードへの、保持データに関するスワップを行い、
(3)上記オーバレイネットワーク上のノードの並びを更新することを特徴とする請求項1に記載の範囲検索可能なクラウドストレージにおける負荷分散方法。
【請求項3】
上記範囲検索可能なクラウドストレージにおける上記のキーバリューについての検索は、コード#アルゴリズムに従った検索であることを特徴とする請求項1あるいは2に記載の範囲検索可能なクラウドストレージにおける負荷分散方法。
【請求項4】
上記オーバレイネットワークにおいて空仮想ノードの全体が上記オーバレイネットワークの並びの連続した一画を占める空仮想ノードプールを構成し、
上記空の仮想ノードは、該空仮想ノードプールから選択するものであることを特徴とする請求項1から3のいずれか1つに記載の範囲検索可能なクラウドストレージにおける負荷分散方法。
【請求項5】
上記各物理ノードにおけるストレージは、ストレージを分割したものであり、その分割は、同じサイズの領域の数が最多となる分割であることを特徴とする請求項1から4のいずれか1つに記載の範囲検索可能なクラウドストレージにおける負荷分散方法。
【請求項6】
上記所定倍は、2倍を超え2.08倍以下であることを特徴とする請求項1から5のいずれか1つに記載の範囲検索可能なクラウドストレージにおける負荷分散方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、クラウド上に分散して蓄積されたキーバリュー(key-value)型データについて、ストレージ資源の利用率を高めることができる、範囲検索可能なクラウドストレージにおける負荷分散方法に関する。
【背景技術】
【0002】
近年、ビッグデータ処理向けのクラウドストレージが急速に発展している。中でも、特にソーシャルネットワークとIоTなどにおける時空間データを効率的に処理するための範囲検索可能なクラウドストレージが注目されつつある。しかし、範囲検索を可能にするために、データのローカリティ(局所参照性)を保つことが必要であり、物理ノード間の低コストかつ高効率の負荷分散はきわめて困難な課題である。
【0003】
従来技術では、隣接ノードのリモートマイグレーションといった手法が多く用いられている。隣接ノードのリモートマイグレーションとは、負荷が軽いノードが自分の負荷を、担当範囲が隣接するノードに移動し、自分が空きノードになった後、元の位置を離れ、リモートの負荷が重いノードの隣にマイグレーションし、その重いノードの負荷を担当するという仕組みである。
従来技術の問題点としては、オーバヘッドが非常に大きいことと処理速度が遅いことである。
【0004】
この従来技術の一例を図5に示す。図5は、AからFの各ノードの負荷とその担当範囲とを示す。ノード間で作業負荷を再バランスさせる基本的なメカニズムとして、従来の大概のものでは上記リモートマイグレーション用のリオーダー(Reorder)操作を用いている。これは、仮に第2ノードが過少負荷であり、他の過剰負荷ノードを救済するものとする。この場合は、まず、第2ノードのすべての作業負荷を隣の方へ移動する。その第2ノードは空ノードになるので、一旦システムから離れ、また過剰負荷ノードの隣へ再加入する。その過剰負荷ノードはその負荷を隣にできた空ノードに移す。この場合の移動コストは、図5のαとβを加えたものである。この操作によっては、移動されるデータ量が多いが、バランシング効果は限られている。
【0005】
本発明では、検索アルゴリズムにコード#(CHORD#)アルゴリズムを用いて仮想ノードの管理を行うが、このアルゴリズムの、よく知られたコード(CHORD)アルゴリズムと比べての類似点と相異点は、概略下記の通りである。
つまりコードでは複数のノードが論理的な配置でリング状に並べられ、各ノードに検索項目となるキーがハッシュ関数によって分散されて関連付けられる。検索は、上記キーによるキー空間で行う。このため、各ノードはキーとアドレスに関するフィンガーテーブルを備え、それには、上記リングを半周、4分の1周と順次半分の行程とするノードのアドレスが書かれている。
これに対してコード#では、複数のノードが論理的な配置でリング状に並べられる点ではそれに類似しているが、一次元に並べられるデータに関する項目が、各ノードが所定の範囲を受け持ち、かつ前記データの順で並ぶ構成である。検索は、上記ノードによるノード空間で行う。各ノードは上記と同様なフィンガーテーブルを備えるがノードとアドレスに関するものである。
【0006】
上記の様にコードの場合はハッシュ関数を用いるので、ノード毎のキー数の分布は平均化される。しかし、ノード位置とキー順の関連がばらばらになっており、範囲検索は容易ではない。これに対してコード#の場合はハッシュ関数を用いないので、ノード位置とキー順の関連を簡単な対応づけで済ませることができる。しかし、ノード毎のキー数の分布には偏りが生じる。
【先行技術文献】
【非特許文献】
【0007】
【非特許文献1】H. C. Hsiao, H. Y. Chung, H. Shen, and Y. C. Chao, “Load Rebalancingfor Distributed File Systems in Clouds,” IEEE Transactions on Paralleland Distributed Systems, vol. 24, no. 5, pp. 951-962, May. 2013.
【発明の概要】
【発明が解決しようとする課題】
【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#を用いることができるので、検索は効率的に行うことができる。
【図面の簡単な説明】
【0018】
図1】本発明の一例として提案するオーバレイを基にしたストレージシステム構成を示す図である。
図2】スワップ前とスワップ後の物理ノードと仮想ノードの模式図である。
図3】(a)はスプリット、(b)はマージ、(c)は再分配の各操作を説明する図である。
図4】負荷分散操作の例を示す図である。
図5】ノード間で作業負荷を再バランスさせる基本的なメカニズムとして、リオーダー(Reorder)操作を用いる従来技術の例を示す図である。
図6】シミュレーションにおける初期負荷分布の偏り方の3つのパターン(A、B、C)を表す図である。
図7】(a)、(b)、(c)は、上記各負荷に対する負荷分散効果の比較を示す。
図8】(a)、(b)、(c)は、上記各負荷に対するデータ移動コストの比較を表す。
図9】ダイナミックなシナリオで、各試行においてどのようにデータを削除したかを示す図である。
図10】ダイナミックなシナリオで、(a)は蓄積されたデータ移動コストの比較を示す図、(b)は蓄積されたメッセージ発信コストの比較を示す図、(c)は負荷分散速度の比較を示す図である。
図11】ダイナミックなシナリオで、データ挿入についてのシミュレーション結果を示す図で、(a)は蓄積されたデータ移動コストの比較を示す図、(b)は蓄積されたメッセージ発信コストの比較を示す図、(c)は負荷分散速度の比較を示す。
図12】不均質な環境でのシミュレーション結果を示す図で、(a)に負荷分散効果を示し、(b)に、それに対応するデータ移動コストを示す。
図13】仮想ノードの総数mを求める具体例を示す図である。
【発明を実施するための形態】
【0019】
本発明の範囲検索可能なクラウドストレージにおける負荷分散方法を適用する例には、オーバレイを基にした記憶システムアーキテクチャを持ったクラウドストレージがある。
ここで、N個の記憶ノードからなる一組の大規模な分散クラウドストレージを考える。Nまでの基数をnとする。各々の物理ノードを複数の仮想ノードに区切り、すべての仮想ノードのセットをVとする(Vの仮想ノード数はm)。物理ノードpiの容量をciとし、仮想ノードvjの負荷をljとする。物理ノードの容量は任意でありえるが、仮想ノードの容量は決められた値である。
【0020】
分散した状態で範囲検索を行えるようにするために、すべての仮想ノードでChord#オーバレイを構成する。本明細書では、「オーバレイノード」と「仮想ノード」は、交換可能である。Chord#は、範囲検索可能な分散データ構造である。Chord#ネットワークでは、すべてのオーバレイノードは2つのリンクで連なることによるリングで接続されており、リングにおけるオーバレイノードの各位置はそのノードが担当する範囲によって決められている。
データ検索を速めるために、各々のオーバレイノードは、複数のレベル(スキップリストにおけるレベル)で短絡路を提供するフィンガーテーブル(finger table)を持っている。一般に、そのフィンガーテーブルで第iフィンガーを計算するために、オーバレイノードは、第(i−1)フィンガーのリモートノードに、さらにその第(i−1)フィンガーがどれを参照しているかを尋ねる。つまり、次式の様にレベルiのフィンガーは、次に低いレベルi−1のフィンガーポインターに設定されている。初期値として、フィンガーは直接的な後続点を指す。
【0021】
【数1】
【0022】
Chord#を使うために、データ項のキー空間を連続的に連なるように分割して、各々の分割を仮想ノードに割り当てる。また、ここでは、仮想ノードは、そのキーとして、その分割の下境界を採用し、分割全体で、その担当範囲の下境界を採用する。また、データ項目を保存するために、すべての仮想ノードを使うわけではない。つまり、一部の仮想ノードを空にしておく。具体的には、仮想ノードのセットVを、サブセットVEとVNEに分けるが、サブセットVEは、すべて空の仮想ノードを含み、サブセットVNEはすべての空でない仮想ノードを含む。
【0023】
さらに、空の仮想ノードには、空でない仮想ノードから区別をするために、空でない仮想ノードには決して使われないキーと範囲を割り当てる。例えば、(−1、0)間の実数はデータ項目のキーとしてまた空で無い仮想ノードとしては、決して使われないと仮定する。
図1に、本発明の一例として提案するオーバレイを基にしたストレージシステム構成を示す。この例の場合は、すべての空の仮想ノードが隣接する領域に配置されるようになる。この領域を空仮想ノードプール(EVNP:empty virtual nodes pool)と呼ぶ。
図1では、仮想ノードが属する物理ノードを区別できるようにするために、描画線幅を変えている。同じ線幅の仮想ノードは、同じ物理ノードに保存される。各々の物理ノードには、空でない仮想ノード(円)と空の仮想ノード(星形多角形)とからなる複数がある。
【0024】
本発明の目的を実現するための方法の1つは、データ項目を仮想ノードに割り当てるための負荷分散アルゴリズムを設計することで、任意の物理ノードPi(iは、1から物理ノードの数Nまで)について、その容量ciに比例したデータ項目の全体の負荷を管理するようにするものである。形式的には、物理ノードPiに属する仮想ノードのサブセットVi(∈V、Vはすべての仮想ノードのセット)は、以下の数2が最小化されるように、仮想ノードごとに実際の負荷を調整する。ここで、仮想ノードvjの負荷をljとする。物理ノードの容量は任意でありえるが、仮想ノードの容量は所定の一定値である。ここで、Σは、その添え字のすべての要素についての和を表すものとする。
【0025】
【数2】
【0026】
上記数式の第2項は、物理ノードPiの期待される負荷とみなすことができる。過剰負荷の物理ノードと過少負荷の物理ノードの間で負荷のバランスをとる基本的な考え方は、過少負荷の物理ノードの空の仮想ノードに過剰負荷の物理ノードの空でない仮想ノードからデータを移動するスワップ(Swap)を行う。
【0027】
しかし、仮想ノードの負荷が任意であるならば、システムは非常に非効率になる場合がある。ほんの少しのデータ項目だけを保存している多くの仮想ノードがあるとすると、過剰負荷の物理ノードから過少負荷の物理ノードへのデータの移動は、それらのほんの少しのデータ項目ごとを移動する多数回のスワップ操作が必要になることが分かる。
これに加えて、空でない仮想ノードにほんの少しのデータ項目だけを保存することで、オーバレイネットワークは非効率な利用となり物理資源を浪費することになる。
【0028】
これらの理由から、本発明では、仮想ノードの負荷に許容範囲を設定して、常に負荷を適度な状態に保つことを行う。具体的には、ここでは上記許容範囲の下限lbと上限ubを導入する。そこで、ub=2×lb + εとするが、ε(>0)は、小さい実数である。
常に仮想ノードviの負荷は、lb≦li<ubを満たさなければいけない。さもなければ、後述の負荷を調整する操作が発動される。
仮想ノードの負荷の範囲が与えられれば、以下の様に実用的に便利な数3の近似を得ることができる。絶対値記号は、集合については仮想ノード数を表し、数値については絶対値を表す。
【0029】
【数3】
【0030】
|VNE|/|V|をμとすると、μは、Chord#オーバレイネットワークでの、すべての空でない仮想ノード数とすべての仮想ノード数の比を示す。また、任意の物理ノードPiについては、それの空でない仮想ノード数のすべての仮想ノード数に対する比をμiとする。
ここで、閾値パラメータλ∈(0、1)を導入する。もし、μiがμ(1+λ)より大きいならば、それは過剰負荷と解釈し、また、μiがμ(1−λ)より小さいならば、それは過少負荷と解釈する。
過少負荷の物理ノードは、何もする必要がないが、過剰負荷の物理ノードからの要請を待つことになる。
【0031】
物理ノードが過少負荷、通常負荷あるいは過剰負荷のどの状態にあるのかについては、μiとμを比較することによって行うことができる。μを推定する前に、ここでは、仮想ノードの総数mを計算するための方法を最初に導入する。これはμを推定するために必要である。この際、Chord#の特徴を用いることによって、mを計算する。
【0032】
任意の物理ノードが仮想ノードのvjを含むと仮定する。また、vjは左隣にレベル−0のオーバレイノードvkがあるとする。上記物理ノードは、vjをして右隣ノードにvk.keyの問合わせを送らせる。この問合わせは通常の問合わせとして取り扱われ、中間のオーバレイノードはChord#プロトコルに従って正確にそれを転送する。この問合わせと通常の問合わせの唯一の違いは、問い合わせメッセージにあり、どのオーバレイレベルに各中間ノードがその問い合わせを転送するかを記録したセグメントが埋め込まれているということである。そのセグメントにおけるそのセットを、LSと記す。その問い合わせがvkに転送された後に、vkは単にvjにそれを転送する。その問合わせを受け取った後に、次の方程式に従って、vjはmを次のように計算する:
【0033】
【数4】
【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=23+22+21+20+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)とし、次の様にブール変数aiを導入する。
【0037】
【数5】
μの評価値をμ^(^はμの上)とすると、
【0038】
【数6】
であり、その期待値は、次のようになる。
【0039】
【数7】
また、これから、μ^がμの偏りの無い評価であることは明らかである。
【0040】
物理ノードPiが過剰負荷にあることが見出された時に、スワッププロセスを開始する。図2に、スワップ前とスワップ後のシステムを示す。
具体的には、
(A)まず、空でない仮想ノードvjをランダムに選ぶ。
(B)そして、(−1、0)にある乱数Kを発生させ、そして、仮想ノードvjからChord#オーバレイネットワークにKを検索させる。Chord#の検索アルゴリズムによると、キーKの空の仮想ノードがあれば、そのノードはvjへ返答する。キーKの空の仮想ノードが存在しない場合は、キーKに最も近いキーの空の仮想ノードがvjへ返答する。
(C)返答する空の仮想ノードがvkであるとする。もし、vkが通常負荷(過少でも過剰でもない負荷)または過少負荷の物理ノードにある場合は、仮想ノードvjは仮想ノードvkへすべてのデータ項目を渡す。そうでない場合は、仮想ノードvjは新しいK∈(−1、0)を発生させ、再びKの検索を行う。
(D)このプロセスを、仮想ノードvjが通常負荷または過少負荷の物理ノードから空の仮想ノードを見つけるまで繰り返す。
(E)データ伝送に加えて、仮想ノードvjと仮想ノードvkが、そのキー、担当範囲、隣接ノードの情報を交換する。
(F)スワップ操作の最後に交換された情報をもったオーバレイネットワークでの位置を交換する。
【0041】
次に、空でない仮想ノードの負荷の調節について、説明する。
負荷分散の枠組みを理解するための要点は、空でない仮想ノードの負荷を[lb、ub)の範囲に保つことである。この目的のため、3つの操作を導入する:スプリット(split)、マージ(Merge)、及び再分配(Redistribute)である。
スプリット操作は、仮想ノードvjについてデータ入力によって負荷ljが上限ubに達するときにトリガーされる。スプリット操作を行うためには、仮想ノードvjは、最初に、空の仮想ノードを見つけなければならない。
jと同じ物理ノードに空の仮想ノードvkがあるならば、vjはスプリット要請をvkに送信する。さもなければ、vjは(−1、0)内の乱数(Kとする)を発生させる。Chord#オーバレイネットワークでKの検索を行う。
キーKによる空の仮想ノードが存在するかどうかにかかわらず、空の仮想ノードのどれかがvjへ返答する。返答した仮想ノードがvkであるとすると、vjはその負荷の半分(すなわちlb+ε/2)をvkに割り振る。
実際には、vjはより大きなキーのデータ項目かより小さなキーのデータ項目をvkに動かすことができるが、汎用性を失わずに、ここでは、vjはより大きなキーのデータ項目をvkに動かすものとすることができる。
データ項目伝送に加えて、vjは右隣のノード情報もvkに送って、Chord#オーバレイのスキップリストにおけるレベル0で、その右隣はvkであるようにする。
【0042】
するとvkが空でない仮想ノードになるので、それはオーバレイネットワークでの元の位置から離れて、キーにはデータ項目のキーの下限を使って、vjの右隣で再びオーバレイネットワークに参加する。
【0043】
他の操作のマージ及び再分配は、ljがデータ削除により上記lb未満なったとき、トリガーされる。マージ及び再分配がトリガーされるかどうかは、vjの2つのレベル0のオーバレイネットワーク上の隣のノードに依存する。
(イ)どちらかの隣のノード、例えばvkが、lj+lk<ubなる条件を満たすとき、マージ操作がトリガーされ、vjはvkからのすべてのデータ項目を吸収する。この結果を受けて、vjは通常のものになり、そして、vkは空になる。まず、vkはオーバレイネットワークから離れ、区間(−1、0)間のランダムなキーを発生し、再びオーバレイネットワークに加わる。そのオーバレイネットワーク上の新しい位置は、上記EVNPである。
(ロ)他方、レベル0のオーバレイネットワークのvjの両隣りの仮想ノードが、ub−lj以上のデータ項目数を持っているとき、vjは、lb−lj個のデータ項目をどちらかの隣のノードにそれが下限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%でよいことが分かる。
【産業上の利用可能性】
【0057】
本発明の具体的な例としては次の例を挙げることが出来る。まず、データの蓄積に際しては、インターネットに接続され分散した場所に配置された各種センサー、例えば各家庭に設置されたIoTデバイスのセンサーや車両からモバイルネットワークや間歇的に接続されるネットワークを介して接続されたセンサーから、測定データを本発明が対象とする範囲検索可能なクラウドストレージに保存する。データの蓄積が進むに従って、各物理ノードの負荷が増加するが、この増加は一様でない場合が多いので、本発明の負荷分散方法を用いて、各物理ノードの負荷を分散する。これにより、ストレージ資源の利用率を高めることができるようになる。また、検索に際しては、例えばCHORD#を用いて検索することができるので、検索は効率的に行うことができる。
従って、本発明は、範囲検索可能なクラウドストレージにデータを蓄積することができるシステムがあれば、どのようなシステムとも組み合わせて用いることが容易にできることが明らかである。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13