JP5845298B2 - ノードおよびプログラム - Google Patents

ノードおよびプログラム Download PDF

Info

Publication number
JP5845298B2
JP5845298B2 JP2014040471A JP2014040471A JP5845298B2 JP 5845298 B2 JP5845298 B2 JP 5845298B2 JP 2014040471 A JP2014040471 A JP 2014040471A JP 2014040471 A JP2014040471 A JP 2014040471A JP 5845298 B2 JP5845298 B2 JP 5845298B2
Authority
JP
Japan
Prior art keywords
data
node
nodes
predetermined direction
acquisition unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2014040471A
Other languages
English (en)
Other versions
JP2015165373A (ja
Inventor
絵里子 岩佐
絵里子 岩佐
雅志 金子
雅志 金子
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2014040471A priority Critical patent/JP5845298B2/ja
Publication of JP2015165373A publication Critical patent/JP2015165373A/ja
Application granted granted Critical
Publication of JP5845298B2 publication Critical patent/JP5845298B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、複数サーバを並べたクラスタ構成において、分散システムを構成するサーバの追加や削除が発生した際に、データを保持している可能性があるサーバを特定するノードおよびプログラムに関する。
近年、クラウドコンピューティングの隆盛に伴い、多量のデータの処理や保持を効率的に行うことが求められている。そこで、複数のサーバを協調動作させることにより効率的な処理を実現する分散処理技術が発展している。
分散処理を行う際には、クラスタを構成する各サーバ(以下、「ノード」と称する。)が担当するデータを決定する必要がある。このとき、クラスタ全体での処理能力を高めるためには、各ノードが担当するデータ数(データ量)は平均化されていることが望ましい。
代表的なデータの管理手法として、各データのkeyをハッシュ関数にかけた値(以下、「hash(key)」と称する。)をノード数Nで割った余り、すなわち「hash(key) mod N」を番号として持つノードがデータを管理する手法がある。この場合、各ノードに事前に「0」から「N−1」までの番号を割り当てていることが前提となる。このような管理手法を用いた場合、ノードが追加・離脱すると、Nの値が変化して、多くのデータについて、そのデータの保存を担当するノードが変更になるため、担当するデータを再配置することが必要になる。
そこで、ノードの追加・離脱に伴い担当するノードが変更になるデータ数を約1/Nに抑える方法として、コンシステントハッシュ(Consistent Hashing)法(非特許文献1参照)を用いた管理手法がある。このコンシステントハッシュ法は、Amazon Dynamo(非特許文献1参照)等において用いられている。
このコンシステントハッシュ法を用いたデータ管理手法では、ノードとデータの双方にID(IDentifier)を割り当てる。そして、データのIDから閉じたID空間を時計回りに辿った場合に最初に遭遇するノードをそのデータの担当とする。ノードに対するIDの与え方の例としては、IPアドレスをハッシュ関数にかけた値(hash(IPアドレス))が挙げられる。
クラスタ構成の分散システムでは、各ノードの処理性能が等しい場合には、各ノードが担当するデータ量を等しくする、すなわち、コンシステントハッシュ法のID空間における、ノード間の距離(以下、「ノードの担当範囲」または「ハッシュID範囲」と称する。)を等しくすることが望ましい。ノード間距離を等しく設定しても、ノードの参加や離脱が発生すると偏りが生じる。その影響を分散させるために、各ノードに仮想的に複数のID(仮想ID)を持たせる手法が用いられている(非特許文献1参照)。各ノードが複数の仮想IDを持つことで、仮想ID毎の担当範囲は異なっていても、大数の法則に従いノードの担当範囲は平均化される。
図15は、複数のノードをクラスタ構成にした場合に、各ノードをコンシステントハッシュのID空間(環状のID空間)上に配置し、データを管理する手法(以下、「コンシステントハッシュ法によるデータ管理手法」と称する。)を説明するための図である(特許文献2参照)。なお、ここで、データの管理とは、各ノードが行うデータの取得や更新、データの複製を行うこと等を意味する。
図15に示すように、コンシステントハッシュ法では、各ノードがコンシステントハッシュのID空間(以下、単に「ID空間」と称する場合がある。)にマッピングされる。そして、各ノードは、図15に示すように、自身が担当するハッシュIDの範囲(「ハッシュID範囲」)を持っている。あるデータを取得する際は、データを一意に特定するkey情報をハッシュ関数にかけ、導出されたコンシステントハッシュのID空間上の位置(図15においては、黒丸(●)で表示)から所定の方向(図15では時計回り)に進んで最初に遭遇するノードからデータを取得する(図15においては、矢印(→)で表示)。例えば、図15において、データAについては、ID空間上を時計回りに進み最初に遭遇したノード「1」が担当となる。なお、更新時も同様にノードを特定する。
また、複製データは、ID空間上で時計回り(若しくは反時計回り)に隣のノードに作成する(冗長数が「2」の場合)。図15では、ノード「1」においてデータAの更新を行った場合、ノード「2」にデータAの複製を作成する。このようにすることにより、ノード「1」が故障等の理由でクラスタから離脱しても、データへの問い合わせはデータAの複製を持つノード「2」に振り分けられるため、ノード「2」において処理を継続することが可能となる。
次に、コンシステントハッシュ法によるデータ管理手法において、クラスタに新たなノードが参加(追加)する場合の動作について説明する。
図16は、コンシステントハッシュのID空間上に、新たにノードが参加した場合の動作例を説明するための図である。
図16においては、図15に示すノードの配置において、ノード「1」とノード「4」との間に、ノード「5」が新たに配置された例を示している。
コンシステントハッシュのID空間にノード「5」が参加した後、ノード「5」がデータを保持するハッシュID範囲に位置するデータの問い合わせがあった場合、参加直後のノード「5」はデータを持っていないため、ノード「5」の参加以前に該当データを担当していたノード「1」からデータを引き継いで処理を行う。その後、ノード「5」はノード「4」の複製データ(図16においては、「データDの複製」と表記。)を保持し、ノード「1」はノード「4」のハッシュID範囲のデータの複製(「データDの複製」)を保持する必要がなくなるため、破棄を行う。また、ノード「2」は、ノード「1」のハッシュID範囲ではなくなった「データAの複製」を保持する必要がなくたるため、破棄を行う。以降は、図15の複製作成処理と同様に動作する。
また、ノードの参加または離脱後のID空間に従ったデータ配置への置き換えを行うデータの再配置を一度に実行すると、新たに参加したノード「5」の負荷が高くなり通常サービスに影響を及ぼす可能性がある。このため、データに対する処理が発生したタイミングや、負荷を調整しながらバックグラウンドで処理を行うことが望ましい。
クラスタ構成の分散システムでは、トラヒックや利用者数の変化に合わせて、クラスタを構成するサーバ数を調整することで、クラスタの処理能力を柔軟に変更可能であるという利点がある。
コンシステントハッシュ法によるデータ管理手法は、クラスタを構成するノードの追加や離脱に伴うデータの移行が全データに対する一部のデータに限られるため、クラスタ構成の動的な変更(ノードの追加・離脱)が頻繁に起こるシステムに対して有効である。また、クラスタを構成するノードの障害に備えて、原本データを保持するノード以外の1つ以上のノードに対して複製データを保持させることで、耐故障性を高めている。
Giuseppe DeCandia,et al.,"Dynamo: Amazon’s Highly Available Key-value Store", SOSP’07, October 14-17, 2007, Stevenson, Washington, USA,[online],[平成26年2月20日検索],インターネット<URL:http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf> David karger, et al.,"Consistent Hashing and Random Trees:Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web",[online],1997,ACM,[平成26年2月20日検索],インターネット<URL:http://www.akamai.com/dl/technical_publications/ConsistenHashingandRandomTreesDistributedCachingprotocolsforrelievingHotSpotsontheworldwideweb.pdf>
特開2012−248091号公報
ところで、クラスタを構成するノードの参加または離脱があった場合、データを探索し、クラスタを構成する他ノードから取得して処理を行う必要がある。この場合、クラスタへのノードの参加または離脱からバックグラウンドで行われるデータ再配置完了までの間、データを保持しているノードとデータへの問い合わせを受けるノードが異なる可能性がある。この際、問い合わせを受けたノードは、図16を参照して述べたようにデータを引き継ぎ処理を行うこととなる。しかしながら、問い合わせ先が限定できない場合、クラスタを構成する全ノードに対する問い合わせが必要となり、データを取得する負荷が信号処理に影響を与えるおそれがある。また、データを保持している可能性のあるノードが特定できない場合には、全ノードに対してデータ有無を問い合わせるまでデータの有無を正確に判定することはできない。なお、動的構成変更(動的にノードが参加または離脱)が発生した場合にも、確実にデータ一貫性を担保したい場合には、上記のような問い合わせが必要になる。
このような背景を鑑みて本発明がなされたのであり、本発明は、クラスタを構成するノードの参加または離脱があった場合、全ノードに対する問い合わせを不要にしつつデータの一貫性を保持し、データを保持している可能性があるノードを効率良く探索することを可能とするノードおよびプログラムを提供することを課題とする。
プログラムを提供することを課題とする。
前記した課題を解決するため、請求項1に記載の発明は、環状のID(IDentifier)空間に、処理対象の複数のデータのID、および、クラスタを構成し前記データに関するリクエストを処理する複数のノードのIDが、割り当てられ、前記ID空間において前記データのIDから所定方向回りに辿って最初に遭遇した前記ノードまでの間に位置する前記データを当該ノードが原本データとして保持するとともに、前記クラスタ内の自身以外の他のノードに前記原本データの複製である複製データを保持させる分散システムの前記ノードであって、メッセージ処理に必要なデータを保持していなかった場合、前記データを保持している可能性のあるノードを特定し、他のノードに要求してデータを取得するデータ取得部と、ノードの参加または離脱に伴い、自身が保持しているデータのうち、別のノードへと移行する、または、新たに複製データを配置するデータを特定して、当該特定したデータを再冗長化・再配置するデータ再冗長化・再配置部と、を備え、前記データ取得部は、前記原本データを持っているノードに信号を振り分けられる状況であるデータ再冗長化・再配置完了までに発生したノード参加・離脱台数の合計の値ΔNを保持し、前記データのKey情報をハッシュ値演算した結果であるデータIDを算出するととともに、算出した前記データIDと自身のノードIDの間のノード数αを算出し、前記値ΔNと前記ノード数αの比較結果を基に、ID空間上の自身のノードIDから前記値ΔN台分のノードに対して問い合わせてデータを取得することを特徴とする。
このようにすることで、クラスタを構成するノードの参加または離脱があった場合、全ノードに対する問い合わせを不要にしつつデータの一貫性を保持し、データを保持している可能性があるノードを効率良く探索することができる。
請求項2に記載の発明は、前記データ取得部が、α=0の場合、前記ID空間上で前記複製データが作成される方向である所定方向回りに前記値ΔN台分探索してデータを取得し、α≦ΔNの場合、前記所定方向回りに前記値ΔN台分探索し、前記所定方向回りと逆方向にα台分探索してデータを取得し、α>ΔNの場合、前記所定方向回りと、当該所定方向回りと逆方向とにそれぞれ前記値ΔN台分探索してデータを取得することを特徴とする。
このようにすることで、クラスタを構成するノードの参加または離脱があった場合、全ノードに対する問い合わせを不要にしつつデータの一貫性を保持し、データを保持している可能性があるノードを効率良く探索することができる。
請求項3に記載の発明は、前記データ取得部が、前記所定方向回りと逆方向の前記値ΔN台分の問い合わせについて、自身のノードIDと前記データIDの間に存在するノードに対してのみ行うことを特徴とする。
このようにすることで、クラスタを構成するノードの参加または離脱があった場合、全ノードに対する問い合わせを不要にしつつデータの一貫性を保持し、データを保持している可能性があるノードを効率良く探索することができる。また、所定方向回りと逆方向にΔN台分の問い合わせについては、自身のノードIDとデータIDの間に存在するノードに対してのみ行えばよい。
請求項4に記載の発明は、前記データ取得部が、前記原本データを保持していない場合において、前記複製データの保持の有無を判定し、前記複製データを保持している場合、自身のノードIDのID空間上の前記所定方向回りと逆方向に前記値ΔN台分のノードに対して問い合わせてデータを取得することを特徴とする。
このようにすることで、原本データなしで複製データありの場合、所定方向回りと逆方向のみにΔN台分問い合わせればよく、問い合わせ範囲を減らすことができ、データを保持している可能性があるノードをより効率良く探索することができる。
請求項5に記載の発明は、前記データ取得部が、前記値ΔNと前記ノード数αの比較結果を基に、α≦ΔNの場合、前記所定方向回りと逆方向に前記α台分探索してデータを取得し、α>ΔNの場合、前記所定方向回りと逆方向に前記値ΔN台分探索してデータを取得することを特徴とする。
このようにすることで、原本データなしで複製データありの場合、所定方向回りと逆方向のみにΔN台分問い合わせればよく、問い合わせ範囲を減らすことができ、データを保持している可能性があるノードをより効率良く探索することができる。また、所定方向回りと逆方向にΔN台分の問い合わせについては、自身のノードIDとデータIDの間に存在するノードに対してのみ行えばよい。
請求項6に記載の発明は、コンピュータを請求項1ないし請求項5のいずれか1項に記載のノードとして機能させるためのプログラムとした。
これによれば、このようなプログラムを実装したコンピュータを本発明のノードとして機能させることができる。
本発明によれば、クラスタを構成するノードの参加または離脱があった場合、全ノードに対する問い合わせを不要にしつつデータの一貫性を保持し、データを保持している可能性があるノードを効率良く探索することを可能とするノードおよびプログラムを提供することができる。
本発明の第1の実施形態に係るノードを含む分散システムの全体構成を示す図である。 本発明の第1の実施形態に係るノードの構成例を示す機能ブロック図である。 本発明の第1の実施形態に係るノード識別子管理テーブルのデータ構成例を示す図である。 本発明の第1の実施形態に係る死活監視テーブルのデータ構成例を示す図である。 本発明の第1の実施形態に係るノードの問い合わせ先ノード特定処理の具体例を説明するための図である。 本発明の第1の実施形態に係るノードの問い合わせ先ノード特定処理の具体例を説明するための図である。 本発明の第1の実施形態に係るノードの問い合わせ先ノード特定処理の具体例を説明するための図である。 本発明の第1の実施形態に係るノードの問い合わせ先ノード特定処理の具体例を説明するための図である。 本発明の第1の実施形態に係るノードの問い合わせ先ノード特定処理の具体例を説明するための図である。 本発明の第1の実施形態に係るノードのデータの問い合わせ先を表にして示す図である。 本発明の第1の実施形態に係るノードが行う、クライアントからの信号受信から信号処理までの流れを示すフローチャートである。 本発明の第2の実施形態に係るノードの構成例を示す機能ブロック図である。 本発明の第2の実施形態に係るノードのデータの問い合わせ先を表にして示す図である。 本発明の第2の実施形態に係るノードが行う、クライアントからの信号受信から信号処理までの流れを示すフローチャートである。 コンシステントハッシュ法によるデータ管理手法を説明するための図である。 コンシステントハッシュのID空間上に、新たにノードが参加した場合の動作例を説明するための図である。
(第1の実施形態)
次に、本発明を実施するための形態(以下、「本実施形態」と称する。)について説明する。
以下の説明において、複製データはコンシステントハッシュのID空間上で時計回りのノードに作成するものとする。したがって、ノード検索において、右回りとはID空間上時計回り、左周りとはID空間上反時計回りを示す。これに従い、右側とは自ノードからみてID空間上の右側を、左側とは自ノードからみてID空間上の左側を示す。なお、右側、左側を、右隣、左隣、また単に右、左と記述する場合がある。
[分散システムの全体構成]
まず、本発明の第1の実施形態に係るノード1を含む分散システム1000の全体構成について説明する。
図1は、本発明の第1の実施形態に係るノード1を含む分散システム1000の全体構成を示す図である。
この分散システム1000は、各クライアント2からのメッセージを受け付けるロードバランサ3と、振り分け装置4と、クラスタを構成する複数のノード1とを含んで構成される。ロードバランサ3は、クライアント2からのメッセージを単純なラウンドロビン法等により各振り分け装置4に振り分ける。振り分け装置4は、受信したメッセージを、例えば、コンシステントハッシュ法等に基づき、各ノード1に振り分ける。各ノード1では、メッセージ処理を行い、クライアント2にサービスを提供する。
分散システム1000のノード1は、コンシステントハッシュのID空間に、処理対象の複数のデータのID、および、クラスタを構成しデータに関するリクエストを処理する複数のノードのIDが、割り当てられ、ID空間においてデータのIDから所定方向回りに辿って最初に遭遇したノードまでの間に位置するデータを当該ノードが原本データとして保持するとともに、クラスタ内の自身以外の他のノードに原本データの複製である複製データを保持させる。
図1においては、振り分け装置4とノード1とを別装置として記載したが、同一サーバ上で別々の機能として動作させることも可能である。また、振り分け装置4も、図1に示すように、クラスタ構成をとることができる。さらに、ロードバランサ3が存在せず、クライアント2から任意の振り分け装置4にメッセージを送信することも可能である。
<処理概要>
一般に、データは他のノード(サーバ)に一定ルールに従って複製してある。ノードの参加または離脱が起きた時、原本データと複製データとの一貫性を保つために、データの移動等(再配置)が行われる。その最中に、データアクセス(問い合わせ)を受けた場合に、そのデータを保持するサーバを特定するために全ノードにデータ有無を問い合わせる事態が発生する場合があり、時間がかかったり、または、負荷が高くなってしまう。
本発明の第1の実施形態に係るノード1は、データ有無を問い合わせるサーバの範囲を限定するようにする。具体的には、最初に問い合わせを受けたノードから、高々、参加または離脱されたノードの台数ΔN台分左右(データおよびノードのIDの空間上におけるノード群の順序におけるΔN台分の左右)に問い合わせる。
このようにすることにより、コンシステントハッシュ法を用いたクラスタシステムにおいて、データを保有するノードを効率よく探すことが可能となる。
<ノード>
次に、本発明の第1の実施形態に係る分散システム1000を構成するノード1について、具体的に説明する。
図2は、本発明の第1の実施形態に係るノード1の構成例を示す機能ブロック図である。
ノード1は、図1に示したように、各振り分け装置4と通信可能に接続されるとともに、クラスタを構成する自身以外の他のノード1とも通信可能に接続される。そして、クライアント2からのメッセージを受信し、サービスを提供する。また、このノード1は、自身が原本データとして保持する情報を、後記する複製データの配置のための所定の条件を満たす他のノード1に対して送信することにより、他のノード1に複製データを保持させる。
このノード1は、図2に示すように、制御部10と、入出力部11と、記憶部12とを含んで構成される。
入出力部11は、振り分け装置4や、自身以外の他のノード1との間の情報の入出力を行う。また、この入出力部11は、通信回線を介して情報の送受信を行う通信インタフェースと、不図示のキーボード等の入力手段やモニタ等の出力手段等との間で入出力を行う入出力インタフェースとから構成される。
制御部10は、ノード1全体の制御を司り、ノード識別子管理部101、メッセージ処理部102、データ取得部103、死活監視部104、及びデータ再冗長化・再配置部105を含んで構成される。なお、この制御部10は、例えば、記憶部12に格納されたプログラムをCPU(Central Processing Unit)がRAM(Random Access Memory)に展開し実行することで実現される。
<ノード識別子管理部>
ノード識別子管理部101は、クラスタへのノードの追加や離脱が発生した際に、クラスタを構成するノードの識別子情報(コンシステントハッシュ法ではID空間上のノードの情報一覧)を更新し、ノード識別子管理テーブル100として管理する。
なお、ノード識別子管理部101においてノード識別子を付与することも可能であるし、他のノードや外部システムで計算したノード識別子管理テーブルを受信して登録することも可能である。ここで、コンシステントハッシュ法で仮想IDを用いる場合、ノード識別子は仮想ID毎に保持する。
<ノード識別子管理テーブル>
図3は、本発明の第1の実施形態に係るノード識別子管理テーブル100のデータ構成例を示す図である。図3に示すように、ノード識別子管理テーブル100は、クラスタを構成する各ノード1のノード識別子110、およびサーバ名などの識別子としてのアドレスを含んで構成される。
このノード識別子110は、コンシステントハッシュ法のID空間上でのノードIDに対応する。また、コンシステントハッシュ法において仮想IDを用いる場合には、ノード識別子110は、仮想ID毎に割り当てられ、ノード識別子管理テーブル100に登録される。そして、このノード識別子管理テーブル100では、例えば、コンシステントハッシュのID空間におけるID(または仮想ID)を昇順に並べて管理する。つまり、ノード識別子管理テーブル100において、ノード識別子110(ノードID)を昇順に並べたときの自身のノード1の行の次の行のノード1が、ID空間上での右隣(時計回りに次)のノード1となる。
例えば、図3においては、コンシステントハッシュのID空間に基づくノード識別子が「3ab946129」は、アドレス(例えば、IPアドレス)「192.168.0.24」に対応付けられる。
アドレス120は、クラスタを構成する各ノード1の識別子を表す。このアドレス120は、ノード1それぞれのアドレス(例えば、IPアドレス)に対応付けられて記憶される。
なお、このノード識別子管理テーブル100のノード識別子110は、特定のノード(マスタノード)のノード識別子管理部101が各ノード1に対して付与することもできる。また、ノード1それぞれのノード識別子管理部101でノード識別子を付与することも可能である。他のノードや外部システムで計算したノード識別子管理テーブル100を受信して登録することも可能である。
さらに、このノード識別子管理テーブル100には、処理で必要となる他の付加情報(例えば、各ノード1のクラスタへの参加日時等)を加えることも可能である。
<メッセージ処理部>
図2に戻り、メッセージ処理部102は、振り分け装置4から振り分けられたメッセージを受信し、そのメッセージの処理を実行し、処理結果をクライアント2に返信することにより、サービスを提供する。
また、メッセージ処理部102は、他のノード(ここではノード識別子を昇順に並べた時の次のノード=ID空間の右隣のノード)にデータの複製を行うことでデータの冗長化を実現する。複製データを複数持つ場合には、さらに他のノード(ここではノード識別子を昇順に並べた時のさらに次のノード=ID空間の2つ右隣のノード)にデータの複製を行う。
<データ取得部>
データ取得部103は、メッセージ処理に必要なデータを保持していなかった場合、データを保持している可能性のあるノードを特定し、他のノードに要求してデータを取得する。本実施形態では、データ取得部103は、データを保持している可能性のあるノードを特定し、問い合わせを行うノードを絞り込むことで、全ノードへの問い合わせが発生し、無駄なトラヒックの発生や処理の遅延を招くことを防ぐようにする。
データ取得部103は、原本データを持っているノードに確実に信号を振り分けられる状況であるデータ再冗長化・再配置の完了までに発生したノード参加・離脱台数の合計ΔNを求めて保持する。ここで、データ再冗長化・再配置は、ノードの参加または離脱によって一時的にデータの配置が崩れたものを再び配置し直すもので、再冗長化・再配置が完了すると、原本データを持っているノードに確実に信号を振り分けられる状況となる。また、データ取得部103は、データのKey情報をハッシュ値演算した結果であるデータIDを算出するととともに、算出したデータIDと自身のノードIDの間のノード数αを算出し、ΔNとノード数αの比較結果を基に、自身のノードIDのID空間上の左、右、または左右にΔN台分のノードに対して問い合わせてデータを取得する。
具体的には、データ取得部103は、上記ノード数α=0の場合、ID空間上で複製データが作成される方向である所定方向回りにΔN台分探索してデータを取得し、α≦ΔNの場合、所定方向回りにΔN台分探索し、所定方向回りと逆方向にα台分探索してデータを取得し、α>ΔNの場合、所定方向回りと、当該所定方向回りと逆方向とにそれぞれΔN台分探索してデータを取得する。ここで、図11を参照して後記するように、後記データ取得部103は、原本データなしの場合、所定方向回りと逆方向のΔN台分の問い合わせについては、自身のノードIDとデータIDの間に存在するノードに対してのみ行う。なお、問い合わせノードの特定方法の詳細については、後記する。
<死活監視部>
死活監視部104は、他のノードと常に死活監視信号のやり取りを実施しており、クラスタを構成するノードの追加や離脱を検出している。死活監視部104は、クラスタを構成するノードの追加や離脱を検出した場合には、自ノードあるいは他ノードのノード識別子管理部101、あるいはノード識別子110を設定している外部システムに通知を行い、ノード識別子管理テーブル100へと反映する。
<死活監視テーブル>
図4は、本発明の第1の実施形態に係る死活監視テーブル200のデータ構成例を示す図である。
死活監視テーブル200は、1台の物理装置を単位として作成され、監視対象となるノード1(サーバ)がリスト化されたものである。死活監視テーブル200には、例えば、サーバ名とそれに紐付くアドレス(IPアドレス)とが記憶される。
死活監視テーブル200は、論理装置(仮想ノード)単位でノードが構成されるパターンを考慮して、その論理装置を構築する物理装置が少なくとも1回は監視対象となるように設定される。また、クラスタを構成するノード1に追加や離脱があった場合、ノード識別子管理テーブル100と同期的に更新されるものとする。よって、ノード識別子管理テーブル100のノード識別子110が、論理装置単位で構成された仮想IDによるものではなく、物理装置単位のIDである場合には、死活監視テーブル200とノード識別子管理テーブル100とについて、同一のものを用いてもよい。また、この場合、死活監視テーブル200を生成せず、ノード識別子管理テーブル100を用いて、死活監視部104が各ノード1の死活監視を行うようにしてもよい。
<データ再冗長化・再配置部>
図2に戻り、データ再冗長化・再配置部105は、ノードの参加または離脱に伴い、ノード識別子管理テーブル100を利用して、自身が保持しているデータのうち、別のノードへと移す、あるいは新たに複製データを配置するデータを特定し、ノードが通常行っている処理の負荷を考慮しながら、バックグラウンドでデータを再冗長化・再配置する。ノードの参加・ノード障害に伴う離脱の場合は、参加・離脱後にデータの再冗長化・再配置を実行する。また、保守観点によるノードの離脱の場合にはノード離脱前にデータの再冗長化・再配置を実施する。ここで、保守観点によるノードの離脱の場合、データの再冗長化・再配置が完了するまでの間はデータ取得部103による問い合わせノードの対象となることに注意が必要である。
なお、データ再冗長化・再配置における「再」の意味とは、ノードの参加または離脱によって一時的にデータの配置が崩れたものを再び配置し直すことを表現したものである。
<記憶部>
図2に戻り、記憶部12は、ハードディスクやフラッシュメモリ、RAM等の記憶手段からなり、処理の対象となる原本データや複製データ(いずれも不図示)、前記したノード識別子管理テーブル100(図3参照)や死活監視テーブル200(図4参照)が記憶される。
以下、上述のように構成されたクラスタ構成の分散システムにおけるデータ保持サーバ特定方法について説明する。
図5乃至図9は、本実施形態における問い合わせ先ノード特定処理の具体例を説明するための図である。
<新たなノードが1台参加>
図5は、クラスタに新たなノードが1台参加したケースを表す図である。
図5(a)のケースでは、図5(a)の番号(1)に示すように、クラスタに新たなノードが1台参加した場合、参加したノード「◎(二重丸)」は、参加前にデータXを保持していた右隣のノード「●(黒丸)」に問い合わせを行い、データを取得する必要がある。すなわち、図5(a)の符号aに示すように、新たにクラスタに参加したノード「◎(二重丸)」は、ID空間を参加したノード数分右回りに探索してデータ取得する必要がある。
一方、図5(b)のケースでは、経路途中で信号の到着順序が入れ違ったケースを表している。図5(b)の番号(2)(3)の信号到達に示すように、信号順序の入れ替え等により信号の到着順序が入れ違うことがある。例えば、ノード参加前のノード識別子管理テーブル100(図2参照)に基づき振り分けられた信号がノード参加前のノード識別子管理テーブル100に基づき振り分けられた信号よりも後に到達したケースを表している。この場合、図5(b)で示すように、新たに参加したノード「◎(二重丸)」が既にデータXを移行し、処理をしている可能性があるため、図5(b)の番号(3)で信号を受信したノード「●(黒丸)」は、左隣のノード「◎(二重丸)」に問い合わせを行い、データを取得する必要がある。すなわち、図5(b)の符号bに示すように、信号を受信((3)信号到達)したノード「●(黒丸)」は、ID空間を参加したノード数分左回りに探索してデータを取得する必要がある。
このように、ノード参加後には、信号を受信したノードは、左右に参加したノード数(ここでは1台)分の問い合わせを行い、データを取得した後に処理を行う必要がある。なお、図5(b)のケースでは、信号を受信((3)信号到達)したノード「●(黒丸)」は、複製データを保持しており処理を継続できる可能性はあるが、データの一貫性の観点から、左隣のノードに問い合わせを行い、原本データを管理する権利を取得した後に処理を行う必要がある。つまり、複製データ側を原本データより先に更新することはない。
<新たなノードが複数台参加>
図6は、クラスタに新たなノードが複数台参加したケースを表す図である。
図6(a)のケースでは、図6(a)の番号(1),(1),(1)に示すように、クラスタに新たなノードが複数台参加した場合、新たにクラスタに参加し信号を受信したノード「◎(二重丸)」は、他の新たに参加したノード「◎(二重丸)」を含み3台(新たに参加したノード数)分右隣りに問い合わせを行い、ノード「◎(二重丸)」は参加前にデータXを保持していた3台右隣のノード「●(黒丸)」からデータを取得する必要がある。すなわち、図6(a)の符号aに示すように、新たにクラスタに参加したノード「◎(二重丸)」は、ID空間を参加したノード数分右回りに探索してデータ取得する必要がある。
一方、図6(b)のケースでは、経路途中で信号の到着順序が入れ違ったケースを表している。図6(b)の番号(2)の信号到達と番号(3)の信号到達とに示すように、信号順序の入れ替え等により信号の到着順序が入れ違うことがある。例えば、ノード参加前のノード識別子管理テーブル100(図2参照)に基づき振り分けられた信号がノード参加前のノード識別子管理テーブル100に基づき振り分けられた信号よりも後に到達したケースを表している。この場合、図6(b)で示すように、新たに参加したノード「◎(二重丸)」が既にデータXを以降して処理をしている可能性があるため、図6(b)の番号(3)で信号を受信したノード「●(黒丸)」は、他の新たに参加したノード「◎(二重丸)」を含み2台(新たに参加したノード数)分左隣のノードに問い合わせを行い、データを取得する必要がある。すなわち、図6(b)の符号bに示すように、信号を受信((3)信号到達)したノード「●(黒丸)」は、ID空間を参加したノード数分左回りに探索してデータを取得する必要がある。
このように、ノードが複数台参加したケースにおいても、信号を受信したノードは左右に参加したノード数(図6(a)では3台、図6(b)では2台)分の問い合わせを行いデータを取得した後に処理を行う必要がある。なお、図6(b)のケースでは、信号を受信((3)信号到達)したノード「●(黒丸)」は、複製データを保持しており処理を継続できる可能性はあるが、データの一貫性の観点から、左隣のノードに問い合わせを行い、原本データを管理する権利を取得した後に処理を行う必要がある。つまり、複製データ側を原本データより先に更新することはない。
<ノードの保守観点による離脱>
図7は、ノードの保守観点による離脱を行うケースを表す図である。図7(a)において、番号(1)のノードは、保守観点による離脱対象ノード「○(白破線丸)」、図7(b)において、番号(1),(1)のノードは、保守観点による離脱対象ノード「○(白破線丸)」である。なお、離脱には、保守観点による離脱のほか、故障等による離脱がある。保守観点による離脱では、離脱対象となっているノードが持つデータをすべて他のサーバ(ノード)に移行した後に当該ノードが離脱することになる。
図7(a)のケースでは、図7(a)の番号(1),(2)に示すように、信号を受信したノード「●(黒丸)」は、左隣の離脱対象ノード「○(白破線丸)」に対してデータの問い合わせを行い、データXを取得した後に処理を行う必要がある。すなわち、図7(a)の符号aに示すように、信号を受信したノード「●(黒丸)」は、ID空間を左回りに探索してデータを取得する必要がある。
また、図7(b)のケースでは、信号を受信したノード「●(黒丸)」は、図7(b)の番号(1),(1)に示すように、2台(離脱対象のノード数)分左隣のノード「○(白破線丸)」に対してデータの問い合わせを行い、データXを取得した後に処理を行う必要がある。すなわち、図7(b)の符号bに示すように、信号を受信したノード「●(黒丸)」は、ID空間を離脱したノード数分左回りに探索してデータを取得する必要がある。
このように、ノード離脱後には信号を受信したノードは、左隣に離脱したノード数分の問い合わせを行い、データを取得する必要がある。なお、図7(a)(b)のケースにおいて、信号を受信(「(2)信号到達」参照)したノード「●(黒丸)」は、複製データを保持しており処理を継続できる可能性はあるが、データの一貫性の観点から、左隣のノードに問い合わせを行い、原本データを管理する権利を取得した後に処理を行う必要がある。つまり、複製データ側を原本データより先に更新することはない。
<ノードの参加と離脱(保守観点)>
図8は、ノードの参加と離脱が発生したケースを表す図である。なお、この時の離脱は保守観点の離脱であったと仮定する。図8において、番号(1)のノードは、保守観点による離脱対象ノード「○(白破線丸)」である。
図8の番号(4)の信号到達および図8の番号(3)に示すように、新たにクラスタに参加し信号を受信したノード「◎(二重丸)」は、データXを取得する必要がある。この例では、図8の符号aに示すように、新たにクラスタに参加したノード「◎(二重丸)」は、ID空間を参加または離脱したノード数分右回りに探索してデータ取得する。
この場合、図8の符号bに示すように、データXは、もともと離脱対象ノード「○(白破線丸)」(「(1)ノード離脱(保守観点)」参照)が保持していたが、バックグラウンドでデータを移行しているため、既にノード離脱後の配置に移行している可能性がある。つまり、データXは、図8の破線矢印cに示すように、ノード離脱から新たなノードの参加までの間に、離脱対象ノードからその右隣のノードへとバックグラウンドでデータを移行(「(2)データ再配置」参照)されている可能性があり、信号受信時でデータXが離脱対象となっているノードとその右隣のノードのどちらにあるかはわからない。この場合、バックグラウンドでデータを移行しているので、図8の離脱対象ノード「○(白破線丸)」がデータを持っているのか、その右隣のノード「●(黒丸)」にデータがあるのかが分からない。
そこで、新たにクラスタに参加したノードは、離脱しようとしているノード「○(白破線丸)」とその右隣のノード「●(黒丸)」とを含む2台(参加、離脱したノード数)分右隣に問い合わせを行いデータを取得する必要がある。このように、ノードの離脱・参加があった場合には、左右に参加・離脱したノード数分の問い合わせを行いデータを取得する必要がある。
ここで、前述したようにノードの離脱や参加に伴い、データの再冗長化・再配置が行われるため、データの問い合わせは再冗長化・再配置の完了までの期間となる。また、自身が既に原本データを保持していたケースでは、他のノードが原本データを保持していない(更新権利を持っていない)ことがわかるため、問い合わせを行わずに処理を継続できる。
<左側問い合わせが不要なケース>
図9は、左側問い合わせが不要なケースを表す図である。図8において、番号(1)のノードは、保守観点による離脱対象ノード「○(白破線丸)」である。
図9の番号(3)の信号到達および図9の番号(2)に示すように、新たにクラスタに参加し信号を受信したノード「◎(二重丸)」は、データのKey情報をハッシュ値演算した結果(以降、データIDと呼ぶ)と参加ノードの間にノードが存在しないため、左側問い合わせは不要である。
以上をまとめると、データの問い合わせ先は、図10に示す表1となる。
表1(データの問い合わせ先を示す表)は、「原本データ保持」および「原本データなし」について、「データ再冗長化・再配置完了前」と「データ再冗長化・再配置完了後」を表にして示したものである。なお、表1中のΔNは、あるノードの参加または離脱に伴うデータ再冗長化・再配置開始から完了までに発生したノード参加・離脱台数の合計であり、データ取得部103(図2参照)で計算して記憶部12(図2参照)に保持している。
表1に示すように、「原本データ保持」している場合は、「データ再冗長化・再配置完了前」および「データ再冗長化・再配置完了後」のいずれの場合も問い合わせ不要である。
「原本データなし」の場合は、「データ再冗長化・再配置完了後」では問い合わせ不要であるが、「データ再冗長化・再配置完了前」では、左右にΔN台分問い合わせが必要である。ただし、左側の問い合わせは、自身のIDとデータIDの間に存在するノードに対してのみ実施する。「左側の問い合わせは、自身のIDとデータIDの間に存在するノードに対してのみ実施」する理由は、次の通りである。コンシステントハッシュ法では、データのIDから右回りに探索して最初に当たったノードIDを持つノードにデータを保持する。よって、データIDとノードIDの間にノードが存在しなければ、左側にデータを持っているノードは、存在することはありえないからである。
また、左側の問い合わせについては、図9に示したように、データIDと自身のIDの間にいるノードに限定して実施すればよい。
ここで、「データ再冗長化・再配置完了前」の「原本データなし」の場合には原本データをたどる必要があるのに対し、「データ再冗長化・再配置完了後」の「原本データなし」の場合、問い合わせ不要である理由について述べる。「データの再冗長化・再配置が完了している」とは、原本データを持っているノードに確実に信号を振り分けられる状況」である。すなわち、原本データがなければ探索してもデータが見つかることはないという状況であるので、問い合わせは不要であるとする。
<処理の流れ>
次に、本発明の第1の実施形態に係るノード1の信号受信から処理までの流れについて、図11および前記した図5ないし図9を参照して説明する。
図11は、本発明の第1の実施形態に係るノード1(データ取得部103)が行うクライアントからの信号受信から信号処理までの流れを示すフローチャートである。データ取得部103において、問い合わせ先ノードを特定する方法について説明する。
まず、メッセージ処理部102(図2参照)は、ノード識別子管理部101やメッセージ処理部102から、クライアントからの信号を受信する(ステップS10)。
まず、データ取得部103は、あるノードの参加または離脱に伴うデータ再冗長化・再配置開始から完了までに発生したノード参加・離脱台数の合計ΔNが0より大きい(ΔN>0)か否かを判定する(ステップS11)。
各ノードでは、常にΔNの値を保持している。以下、再冗長化・再配置が完了している状態を安定状態と呼ぶこととする。安定状態からノードの参加または離脱1台が発生した場合に、ΔN=1とする。その後、安定状態に移行する前にさらなる参加または離脱が1台発生した場合、ΔN=+1とする。上記は、参加または離脱が起こる度に繰り返すこととする。安定状態に遷移した場合には、ΔN=0とする。
そして、この条件を満たさない場合には(ステップS11→No)、問い合わせ先ノード特定処理を終了する(ステップS19へ進む)。一方、この条件を満たす場合には(ステップS11→Yes)、次のステップS12に進む。
次に、データ取得部103は、原本データを保持しているか否かを判定する。原本データを保持している場合には(ステップS12→Yes)、表1に示すように、「データ再冗長化・再配置完了前」および「データ再冗長化・再配置完了後」のいずれの場合も問い合わせ不要であるため、問い合わせ先ノード特定処理を終了する(ステップS19へ進む)。
一方、原本データを保持していない場合には(ステップS12→No)、表1に示すように、左右にΔN台分問い合わせが必要であるため、次のステップS13以降に進む。
ここで、データ取得部103は、表1に示すように、左右にΔN台分問い合わせに際し、左側の問い合わせは、自身のノードIDとデータIDの間に存在するノードに対してのみ実施する。例えば、図9の番号(3)の信号到達および図9の番号(2)に示すように、新たにクラスタに参加し信号を受信したノード「◎(二重丸)」は、データIDと参加ノードの間にノードが存在しないため、左側問い合わせは不要である。
図11のフローに戻って、まず、データ取得部103は、データのKey情報をハッシュ値演算した結果からデータIDを算出する(ステップS13)。
次に、データ取得部103は、算出したデータIDと自身のノードIDの間のノード数αを算出する(ステップS14)。
次に、データ取得部103は、前記ノード数αとΔNを比較する(ステップS15)。
α=0の場合、データ取得部103は、右にΔN探索してデータ取得し(ステップS16)、次のステップS19に進む。
α≦ΔNの場合、データ取得部103は、右にΔN探索+左にα探索してデータ取得し(ステップS17)、次のステップS19に進む。
α>ΔNの場合、データ取得部103は、左右にΔN探索してデータ取得し(ステップS18)、次のステップS19に進む。
最後に、ステップS19において、メッセージ処理部102は、信号処理を行って問い合わせ先ノード特定処理を終了する。
以下、上記フローの実行による、問い合わせ先ノード特定処理の具体例について説明する。
<例1:ノード参加>
図6(a)に示す例において、図6(a)の番号(1),(1),(1)に示すように、クラスタに新たなノードが3台参加した場合、新たにクラスタに参加し信号を受信したノード「◎(二重丸)」は、他の新たに参加したノード「◎(二重丸)」を含み3台(新たに参加したノード数)分右隣りに問い合わせを行い、ノード「◎(二重丸)」は参加前にデータXを保持していた3台右隣のノード「●(黒丸)」からデータを取得する。図6(a)の符号aに示すように、新たにクラスタに参加したノード「◎(二重丸)」は、ID空間を参加したノード数ΔN分右回りに探索してデータ取得する(例えば、図11のステップS17における右にΔN探索参照)。
図6(b)に示す例において、経路途中で信号の到着順序が入れ違った場合、図6(b)の番号(3)で信号を受信したノード「●(黒丸)」は、他の新たに参加したノード「◎(二重丸)」を含みノード数αが2台(新たに参加したノード数)分左隣のノードに問い合わせを行い、データを取得する。図6(b)の符号bに示すように、信号を受信((3)信号到達)したノード「●(黒丸)」は、ID空間を参加したノード数ΔN左回りに探索してデータを取得する(例えば、図11のステップS17における右にΔN探索参照)。
<例2:ノード離脱>
図7(a)に示す例において、図7(a)の番号(1),(2)に示すように、信号を受信したノード「●(黒丸)」は、左隣の離脱対象ノード「○(白破線丸)」に対してデータの問い合わせを行い、データXを取得した後に処理を行う。図7(b)の符号aに示すように、信号を受信したノード「●(黒丸)」は、ID空間を左回りに探索してデータを取得する(例えば、図11のステップS18におけるΔN探索参照)。
図7(b)に示す例において、信号を受信したノード「●(黒丸)」は、図7(b)の番号(1),(1)に示すように、2台(離脱対象のノード数)分左隣のノード「○(白破線丸)」に対してデータの問い合わせを行い、データXを取得する。図7(b)の符号bに示すように、信号を受信したノード「●(黒丸)」は、ID空間を離脱したノード数分左回りに探索してデータを取得する(例えば、図11のステップS18におけるΔN探索参照)。
<例3:ノード参加・離脱>
図8に示す例において、 図8の番号(4)の信号到達および図8の番号(3)に示すように、ノードの離脱・参加があった場合には、左右に参加・離脱したノード数分の問い合わせを行いデータを取得する(例えば、図11のステップS18における左右にΔN探索参照)。この場合、図8の符号aに示すように、新たにクラスタに参加したノード「◎(二重丸)」は、ID空間を参加または離脱したノード数分右回りに探索してデータ取得する。
以上説明したように、分散システム1000のノード1は、メッセージ処理に必要なデータを保持していなかった場合、データを保持している可能性のあるノードを特定し、他のノードに要求してデータを取得するデータ取得部103を備える。データ取得部103は、原本データを持っているノードに確実に信号を振り分けられる状況であるデータ再冗長化・再配置完了までに発生したノード参加・離脱台数の合計のΔNを求めて保持し、データのKey情報をハッシュ値演算した結果であるデータIDを算出するととともに、算出したデータIDと自身のノードIDの間のノード数αを算出し、ΔNとノード数αの比較結果を基に、自身のノードIDのID空間上の左、右、または左右にΔN台分のノードに対して問い合わせてデータを取得する。
データ取得部103は、図11に示されているように、α=0の場合、ID空間上で複製データが作成される方向である所定方向回り(本実施形態では時計回り)にΔN台分探索してデータを取得し、α≦ΔNの場合、所定方向回りにΔN台分探索し、所定方向回りと逆方向にα台分探索してデータを取得し、α>ΔNの場合、所定方向回りと、当該所定方向回りと逆方向とにそれぞれΔN台分探索してデータを取得する。
このように、ノード1は、ノードの参加または離脱に伴うデータ再冗長化・再配置開始から完了までに発生したノード参加・離脱台数をカウントすることで、最初に問い合わせを受けたノードから、高々、増減設されたノードの台数ΔN台分左右(データおよびノードのIDの空間上におけるノード群の順序におけるΔN台分の左右)に問い合わせる。これにより、データ有無を問い合わせるノードの範囲を限定する、すなわち問い合わせ先を絞り込むことができる。したがって、クラスタを構成するノードの参加または離脱があった場合、全ノードに対する問い合わせを不要にしつつデータの一貫性を保持し、データを保持している可能性があるノードを効率良く探索することができる。
(第2実施形態)
次に、本発明の第2の実施形態に係るノード1Aについて説明する。
図12は、本発明の第2の実施形態に係るノード1Aの構成例を示す機能ブロック図である。図2において示した第1の実施形態に係るノード1との違いは、第2の実施形態に係るノード1Aは、第1の実施形態に係るノード1のデータ取得部103が、データ取得部103Aに変更されていることである。その他の構成については、図12において、図2に示した第1に実施形態に係るノード1と同一の名称と符号を付し、説明を省略する。また、分散システム1000の全体構成も第1の実施形態における図1と同一であるので説明を省略する。
データ取得部103Aは、図2のデータ取得部103の「原本データ保持」および「原本データなし」の判定に加え、「原本データ保持」と「原本データなし/複製データあり」と「原本データなし/複製データなし」とを判定する。
図13は、データの問い合わせ先を表(表2)にして示す図である。
表2は、図10の表1に対して「原本データなし」が、さらに「原本データなし/複製データあり」と「原本データなし/複製データなし」とに分かれる。
「原本データなし/複製データあり」の場合、「データ再冗長化・再配置完了前」では、左にΔN台分問い合わせる。ただし、左側の問い合わせは自身のIDとデータIDの間に存在するノードに対してのみ実施する。
「原本データなし/複製データなし」の場合、「データ再冗長化・再配置完了前」では、左右にΔN台分問い合わせる。ただし、左側の問い合わせは自身のIDとデータIDの間に存在するノードに対してのみ実施する。なお、「原本データなし/複製データあり」および「原本データなし/複製データなし」のいずれの場合も「データ再冗長化・再配置完了後」では、問い合わせ不要である。また、左側の問い合わせが不要のケースについては、図9で説明している。
表2に関して、「原本データなし/複製データあり」または「原本データなし/複製データなし」は、データ取得部103Aが、システム的に下記のような判定を行う。
例えば、以下のような2例が挙げられる。
(1)各データに付加情報を持たせる
各データに付加情報を持ち、その中に原本/複製情報を記述しておく態様である。データ取得部103Aは、この付加情報から「原本データなし/複製データあり」または「原本データなし/複製データなし」を判定することが可能である。なお、この付加情報を有するデータは、「ノード情報」あるいは「メタデータ」と呼ばれることがある。ただし、この場合には、事前に原本データ一覧や複製データ一覧などのデータ一覧を作成してから、後記図14のフローに入る必要がある。
(2)原本データと複製データでデータの格納先ディレクトリを変える
事前にデータ格納先を原本データと複製データで別々としておく態様である。例えば、原本データは、/A/B/C/original/〜に格納し、複製データは/A/B/C/backup/〜に格納する。この場合、原本データと複製データでデータの格納先が異なるため、後記図14のフロー実行のチェックの段階で原本データディレクトリ配下を先に見て、なければ続いて複製データディレクトリ配下を見ることになる。
図14は、本発明の第2の実施形態に係るノード1A(データ取得部103A)が行うクライアントからの信号受信から処理までの流れを示すフローチャートである。図14において、図11に示したフローと同一の処理を行うステップには同一ステップ番号を付し、説明を省略する。
図14において、ステップS14でノード数αを算出すると、データ取得部103Aは、複製データを保持しているか否かを判定する(ステップS21)。
複製データを保持している場合、ステップS22に進み(ステップS21→Yes)、複製データを保持していない場合、ステップS15に進む(ステップS21→No)。
ステップS22では、データ取得部103Aは、前記ノード数αとΔNを比較する。
α=0の場合、データ取得部103Aは、ステップS19に進む。
α≦ΔNの場合、データ取得部103Aは、左にα探索してデータ取得し(ステップS23)、次のステップS19に進む。
α>ΔNの場合、データ取得部103Aは、左にΔN探索してデータ取得し(ステップS24)、次のステップS19に進む。
このように、本実施形態によれば、ノード1Aのデータ取得部103A(図12参照)は、データ問い合わせ先の原本データなしの場合において、複製データの保持の有無を判定し、複製データを保持している場合、自身のノードIDのID空間上の所定方向回りと逆方向に値ΔN台分のノードに対して問い合わせてデータを取得する。具体的には、データ取得部103Aは、α≦ΔNの場合、所定方向回りと逆方向にα台分探索してデータを取得し、α>ΔNの場合、所定方向回りと逆方向に値ΔN台分探索してデータを取得する。
図13の表2に示すように、「原本データなし/複製データあり」の場合、「データ再冗長化・再配置完了前」では、左にΔN台分問い合わせる。第1の実施形態の図10の表1では、原本データ保持と原本データなしを判定していたため、原本データなしの場合は、「データ再冗長化・再配置完了前」では、左右にΔN台分問い合わせている。これに対し、本実施形態では、原本データなしの場合において、複製データの保持の有無を判定しているので、原本データなしで複製データありの場合、左のみにΔN台分問い合わせればよく、問い合わせ範囲を減らすことができる。ここで、図13の表2に示すように、左にΔN台分の問い合わせについては、自身のノードIDとデータIDの間に存在するノードに対してのみ行えばよいので、右側の問い合わせを減らすことができれば、データを保持している可能性があるノードをより効率良く探索することができる。
以上、本発明の実施形態について説明したが、本発明は、ここで説明した各実施形態に限定されるものではない。
1,1A ノード
2 クライアント
3 ロードバランサ
4 振り分け装置
10 制御部
11 入出力部
12 記憶部
100 ノード識別子管理テーブル
101 ノード識別子管理部
102 メッセージ処理部
103,103A データ取得部
104 死活監視部
105 データ再冗長化・再配置部
200 死活監視テーブル
1000 分散システム

Claims (6)

  1. 環状のID(IDentifier)空間に、処理対象の複数のデータのID、および、クラスタを構成し前記データに関するリクエストを処理する複数のノードのIDが、割り当てられ、前記ID空間において前記データのIDから所定方向回りに辿って最初に遭遇した前記ノードまでの間に位置する前記データを当該ノードが原本データとして保持するとともに、前記クラスタ内の自身以外の他のノードに前記原本データの複製である複製データを保持させる分散システムの前記ノードであって、
    メッセージ処理に必要なデータを保持していなかった場合、前記データを保持している可能性のあるノードを特定し、他のノードに要求してデータを取得するデータ取得部と、
    ノードの参加または離脱に伴い、自身が保持しているデータのうち、別のノードへと移行する、または、新たに複製データを配置するデータを特定して、当該特定したデータを再冗長化・再配置するデータ再冗長化・再配置部と、を備え、
    前記データ取得部は、
    前記原本データを持っているノードに信号を振り分けられる状況であるデータ再冗長化・再配置完了までに発生したノード参加・離脱台数の合計の値ΔNを保持し、
    前記データのKey情報をハッシュ値演算した結果であるデータIDを算出するとともに、算出した前記データIDと自身のノードIDの間のノード数αを算出し、
    前記値ΔNと前記ノード数αの比較結果を基に、ID空間上の自身のノードIDから前記値ΔN台分のノードに対して問い合わせてデータを取得する
    ことを特徴とするノード。
  2. 前記データ取得部は、
    α=0の場合、前記ID空間上で前記複製データが作成される方向である所定方向回りに前記値ΔN台分探索してデータを取得し、
    α≦ΔNの場合、前記所定方向回りに前記値ΔN台分探索し、前記所定方向回りと逆方向にα台分探索してデータを取得し、
    α>ΔNの場合、前記所定方向回りと、当該所定方向回りと逆方向とにそれぞれ前記値ΔN台分探索してデータを取得すること
    を特徴とする請求項1に記載のノード。
  3. 前記データ取得部は、
    前記所定方向回りと逆方向の前記値ΔN台分の問い合わせについて、自身のノードIDと前記データIDの間に存在するノードに対してのみ行うこと
    を特徴とする請求項1または請求項2に記載のノード。
  4. 前記データ取得部は、前記原本データを保持していない場合において、前記複製データの保持の有無を判定し、
    前記複製データを保持している場合、自身のノードIDのID空間上の前記所定方向回りと逆方向に前記値ΔN台分のノードに対して問い合わせてデータを取得すること
    を特徴とする請求項1ないし請求項3のいずれか1項に記載のノード。
  5. 前記データ取得部は、前記値ΔNと前記ノード数αの比較結果を基に、
    α≦ΔNの場合、前記所定方向回りと逆方向に前記α台分探索してデータを取得し、
    α>ΔNの場合、前記所定方向回りと逆方向に前記値ΔN台分探索してデータを取得すること
    を特徴とする請求項4に記載のノード。
  6. コンピュータを請求項1ないし請求項のいずれか1項に記載のノードとして機能させるためのプログラム。
JP2014040471A 2014-03-03 2014-03-03 ノードおよびプログラム Active JP5845298B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014040471A JP5845298B2 (ja) 2014-03-03 2014-03-03 ノードおよびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014040471A JP5845298B2 (ja) 2014-03-03 2014-03-03 ノードおよびプログラム

Publications (2)

Publication Number Publication Date
JP2015165373A JP2015165373A (ja) 2015-09-17
JP5845298B2 true JP5845298B2 (ja) 2016-01-20

Family

ID=54187839

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014040471A Active JP5845298B2 (ja) 2014-03-03 2014-03-03 ノードおよびプログラム

Country Status (1)

Country Link
JP (1) JP5845298B2 (ja)

Also Published As

Publication number Publication date
JP2015165373A (ja) 2015-09-17

Similar Documents

Publication Publication Date Title
US11288248B2 (en) Performing file system operations in a distributed key-value store
US11481139B1 (en) Methods and systems to interface between a multi-site distributed storage system and an external mediator to efficiently process events related to continuity
JP2021002369A (ja) 索引更新パイプライン
US11734248B2 (en) Metadata routing in a distributed system
US9367261B2 (en) Computer system, data management method and data management program
US10712964B2 (en) Pre-forking replicas for efficient scaling of a distributed data storage system
US20120278817A1 (en) Event distribution pattern for use with a distributed data grid
JP5969315B2 (ja) データ移行処理システムおよびデータ移行処理方法
WO2015196692A1 (zh) 一种云计算系统以及云计算系统的处理方法和装置
JP2014164554A (ja) 負荷分散判定システム
JP2013182575A (ja) サーバおよびプログラム
KR20130038517A (ko) 분산된 컨테이너들을 사용하여 데이터를 관리하는 시스템 및 방법
JP5845298B2 (ja) ノードおよびプログラム
US20240176762A1 (en) Geographically dispersed hybrid cloud cluster
JP5918802B2 (ja) ノードおよびプログラム
JP5690296B2 (ja) 負荷分散プログラムおよび負荷分散装置
JP6093320B2 (ja) 分散処理システム
JP5711771B2 (ja) ノード離脱処理システム
JP5815000B2 (ja) ノードおよびプログラム
JP6714547B2 (ja) 負荷分散装置、負荷分散方法、および、負荷分散プログラム
JP2011180658A (ja) 分散ファイルシステムにおける冗長化方法
JP6506156B2 (ja) ノードおよびグラビテーション抑止方法
JP6127005B2 (ja) クラスタシステムのサーバ装置およびプログラム
JP6093319B2 (ja) クラスタシステム
Xiao et al. Applying MapReduce Framework to Peer-to-Peer Overlay Network

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150929

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151029

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151117

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151120

R150 Certificate of patent or registration of utility model

Ref document number: 5845298

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150