JP6697158B2 - 情報管理プログラム、情報管理方法、及び情報管理装置 - Google Patents

情報管理プログラム、情報管理方法、及び情報管理装置 Download PDF

Info

Publication number
JP6697158B2
JP6697158B2 JP2016116159A JP2016116159A JP6697158B2 JP 6697158 B2 JP6697158 B2 JP 6697158B2 JP 2016116159 A JP2016116159 A JP 2016116159A JP 2016116159 A JP2016116159 A JP 2016116159A JP 6697158 B2 JP6697158 B2 JP 6697158B2
Authority
JP
Japan
Prior art keywords
node
nodes
assigned
key
identifier
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
JP2016116159A
Other languages
English (en)
Other versions
JP2017220148A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016116159A priority Critical patent/JP6697158B2/ja
Priority to US15/603,541 priority patent/US10749957B2/en
Publication of JP2017220148A publication Critical patent/JP2017220148A/ja
Application granted granted Critical
Publication of JP6697158B2 publication Critical patent/JP6697158B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1061Peer-to-peer [P2P] networks using node-based peer discovery mechanisms
    • H04L67/1065Discovery involving distributed pre-established resource-based relationships among peers, e.g. based on distributed hash tables [DHT] 
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/12Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks

Description

本発明は、情報管理プログラム、情報管理方法、及び情報管理装置に関する。
世の中に存在する様々なデバイスに通信機能を持たせ、そのデバイスによる遠隔計測や、そのデバイスから収集される情報の活用などを実現するIoT(Internet of Things)技術が広く普及しつつある。こうしたIoT技術を活用する上で、各種デバイスによって収集される大量の情報をより効率良く管理し、所望の情報をより素早く検索できるようにする技術の開発が望まれている。
大量の情報を効率良く管理する方法としては、例えば、検索時に用いるキーを紐付けた情報(値)を複数の場所(ノード)に分散して格納する自律分散KVS(Key-Value Store)と呼ばれる技術がある。自律分散KVSのシステムでは、キーと値のペアが格納されるノードを一意に決定できるようにしてキーによる値の検索を可能にするために、DHT(Distributed Hash Table)やSkip Graphなどのアルゴリズムが利用される。
例えば、DHTの1つであるChordでは、予め設定された複数のID(IDentification)に所定の規則に基づいてノードが割り当てられ、各IDに対するノードの割り当てに応じてノードへのキーの割り当てが決定される。つまり、自律分散KVSのシステムへのノードの参加や離脱に対し、ノードの割り当てやキーの割り当てが自律的に決定される。そのため、自律分散KVSのシステムでは、ノードの追加や削減が容易であり、高いスケーラビリティを実現することが可能である。
なお、m桁の連続数値に管理キーの値を対応付けて管理するシステムにおいて、連続数値の範囲を複数の範囲に分割し、管理キーとデータのペアを分割数と同じ数だけ複製して複数のノードに記憶させ、データの冗長化を実現する方法が提案されている。また、キーと、そのキーに対応するデータの元データとを含む登録情報をDHTのノードに記憶させる際に、データのハッシュ値から登録情報の順序を決め、その順序に基づいて同一ノードに記憶させる登録情報を決定する方法が提案されている。また、単一のマスターノードがデータに固有の識別子をスレーブノードに振り分ける方法が提案されている。
国際公開第2013/027784号 特開2011−198199号公報 特開2009−20757号公報 特開2012−178025号公報
David Karger, Eric Lehman, Tom Leighton, Matthew Levine, Daniel Lewin, Rina Panigrahy, "Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web", http://dl.acm.org.citation.cfm?id=383071
自律分散KVSのシステムでは、ノードが離脱すると、そのノードに格納されているキーと値のペア(KVペア)が失われる。そのため、自律分散KVSのシステムでは、上記の提案技術のようにKVペアを複製して複数のノードに格納し、そのKVペアの消失を防止する対策がとられる。しかし、ノードの参加及び離脱が頻繁に生じると、KVペアを他のノードへ複製する処理が頻繁に発生し、その際に生じるノード間の通信負荷が大きくなる。
また、ノードの参加及び離脱が生じると、ノードの検索に用いる情報の更新処理が発生する。そのため、頻繁なノードの参加及び離脱はノードの処理負荷も増大させる。従って、システムへの参加及び離脱が頻繁に生じうる移動端末などをノードとする場合、ノード間の通信負荷やノードの処理負荷が増大してシステム性能が低下するリスクが生じうる。
1つの側面によれば、本開示の目的は、頻繁な参加及び離脱が生じうるノードによるシステム性能の低下リスクを抑制することが可能な、情報管理プログラム、情報管理方法、及び情報管理装置を提供することにある。
1つの側面によれば、所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムを管理するコンピュータが、複数のシステムに共通の識別子と、識別子に共通に割り当てられたキーと、識別子に割り当てられたノードの情報とを管理テーブルに記憶し、いずれのシステムにも割り当てられていないノードの集合であるノードプールのノード数がシステムの数以上のとき、システムの数と同数のノードをノードプールから抽出し、抽出したノードを共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて管理テーブルを更新する情報管理方法が提供される。
頻繁な参加及び離脱が生じうるノードによるシステム性能の低下リスクを抑制することができる。
第1実施形態に係る情報管理装置の一例を示した図である。 自律分散KVSシステムの一例(Chord)について説明するための第1の図である。 自律分散KVSシステムの一例(Chord)について説明するための第2の図である。 自律分散KVSシステムの一例(Chord)について説明するための第3の図である。 第2実施形態に係る多重化分散KVSシステムの一例を示した図である。 第2実施形態に係る多重化分散KVSシステムにおけるノードの管理について説明するための図である。 第2実施形態に係るノードが保持するルーティングテーブルの一例を示した図である。 第2実施形態に係るノードの機能を実現可能なハードウェアの一例を示した図である。 第2実施形態に係る初期ノードが有する機能の一例を示したブロック図である。 第2実施形態に係る操作履歴の一例を示した図である。 第2実施形態に係るルーティングテーブルの一例を示した図である。 第2実施形態に係る初期ノードリストの一例を示した図である。 第2実施形態に係る同IDノードリストの一例を示した図である。 第2実施形態に係るノードプール情報の一例を示した図である。 第2実施形態に係るRTTデータの一例を示した図である。 第2実施形態に係る通常ノードが有する機能の一例を示したブロック図である。 第2実施形態に係るノードの割り当て方法について説明するための図である。 第2実施形態に係るノードの参加時に実行される処理の流れについて説明するためのフロー図である。 第2実施形態に係るKVS操作の受け付け時に実行される処理の流れについて説明するためのフロー図である。 第2実施形態に係る同期及び死活監視の処理について説明するための図である。 第2実施形態に係る同期及び死活監視の処理の流れについて説明するための第1のシーケンス図である。 第2実施形態に係る同期及び死活監視の処理の流れについて説明するための第2のシーケンス図である。 第2実施形態に係る再参加及び同期の処理について説明するための図である。 第2実施形態に係る再参加及び同期の処理の流れについて説明するためのシーケンス図である。 第2実施形態に係るRTT測定時の処理の流れについて説明するためのフロー図である。
以下に添付図面を参照しながら、本発明の実施形態について説明する。なお、本明細書及び図面において実質的に同一の機能を有する要素については、同一の符号を付することにより重複説明を省略する場合がある。
<1.第1実施形態>
図1を参照しながら、第1実施形態について説明する。第1実施形態は、DHTなどを利用して自律分散KVSを実現するシステムにおいてノードの離脱による情報の消失を防止する技術に関する。また、第1実施形態は、頻繁にシステムへの参加・離脱を繰り返す可能性のあるノードが存在する場合でも、ノードの離脱時に生じるノード間の通信負荷やノードの処理負荷を低減する仕組みに関する。
なお、図1は、第1実施形態に係る情報管理装置の一例を示した図である。図1に示した情報管理装置10は、第1実施形態に係る情報管理装置の一例である。また、情報管理装置10は、ノードの参加や離脱を管理する役割が割り当てられているノード(初期ノード)の1つである。図1の例において、情報管理装置10は、ノードN01に対応する。
図1に示すように、情報管理装置10は、記憶部11及び制御部12を有する。
なお、記憶部11は、RAM(Random Access Memory)などの揮発性記憶装置、或いは、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置である。制御部12は、CPU(Central Processing Unit)やDSP(Digital Signal Processor)などのプロセッサである。但し、制御部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの電子回路であってもよい。制御部12は、例えば、記憶部11又は他のメモリに記憶されたプログラムを実行する。
情報管理装置10は、ノードを管理する。ノードは、自身に割り当てられたキーに対応する情報(管理テーブル11a)を保持する。ノードは、例えば、携帯電話やスマートフォンなどの移動端末、カーナビゲーションシステムなどの車載端末、或いは、パーソナルコンピュータやサーバ装置などの情報処理装置である。また、ノードは、LAN(Local Area Network)やインターネットなどのネットワークを利用して他のノードと通信する機能を有する。
制御部12は、複数の識別番号(ID)が設定されているID空間の識別番号にノードを割り当て、ID空間へのノードの割り当てに基づいて個々のノードにキーを割り当てることで、識別番号を介して特定のキーを保持するノードを特定可能にする。なお、複数の識別番号にはそれぞれ1つのノードが割り当てられうる。また、1つのID空間に割り当てられているノードの集合は1つのシステムを形成する。
図1には、3つのID空間21、22、23が例示されている。ID空間21は、例えば、8つの黒点を有する1つのリングで表現される。黒点の近傍に記載されている数字は、その黒点の位置に対応する識別番号である。黒点を囲む円は、その黒点に対応する識別番号に割り当てられているノードを表す。図1の例では、ID空間21の識別番号「0」にノードN01が割り当てられている。
制御部12は、識別番号の設定が共通するID空間21、22、23を利用してノードを管理する。つまり、制御部12は、ID空間21、22、23に対応する複数のシステムを管理する。図1に示すように、ID空間22、23は8つの黒点を有する1つのリングで表現され、その黒点の位置にID空間21と同じ識別番号が設定される。
なお、図1には3つのID空間を利用する例を示しているが、利用するID空間の数は2又は4以上であってもよい。また、図1の例では、説明の都合上、個々のID空間について、DHTの1つであるChordのID空間と同じ表現を用いているが、採用するアルゴリズムの種類に応じて表現を変形することが可能である。つまり、ID空間の多重化を実現する第1実施形態の技術を適用可能な範囲でID空間の表現を変形してもよい。
記憶部11は、ID空間21、22、23に対応する複数のシステムについて、識別番号への割り当ての対象となるノードを収容するノードプール30の情報を記憶する。
制御部12は、ノードからシステムへの参加要求を受け付けたとき、そのノードを一旦ノードプール30に収容する。また、制御部12は、ノードプール30に収容されているノードの数がシステムの数以上のとき、システムの数と同数のノードをノードプール30から選択する。そして、制御部12は、選択したノードをそれぞれ複数のシステムの同じ識別番号に割り当てる。
つまり、制御部12は、参加要求を出しているノードを待機させ、待機しているノードの数がID空間の数より多い場合に、各ID空間の同じ識別番号にノードを1つずつ割り当てる。図1の例ではID空間の数が3であるため、制御部12は、ノードプール30に収容されているノードの数が3以上になってから、3つのノードをID空間21、22、23のそれぞれに対して割り当てる。例えば、制御部12は、ID空間21、22、23の識別番号「6」に3つのノードをそれぞれ割り当てる。
参加要求を出しているノードがID空間の数以上集まってから、各ID空間の同じ識別番号にノードを割り当てることで、ノードの割り当てが同じシステムが実現される。各システムにおけるキーの割り当てはノードの割り当てで決まるため、ノードの割り当てが同じシステム間では同じ識別番号のノードに同じキーが割り当てられる。
例えば、Chordのアルゴリズムを採用する場合、ID空間21、22、23の識別番号「0」に割り当てられているノードN01、N02、N03には、キーK1、K7(K1、K7のキーIDはそれぞれ「1」、「7」)が割り当てられる。識別番号「6」にノードが割り当てられると、割り当てられたノードにキーK1が割り当てられ、識別番号「0」のノードN01、N02、N03にはキーK7が割り当てられる。
上記のように、情報管理装置10は、所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムを管理する。記憶部11には、複数のシステムに共通の識別子と、識別子に共通に割り当てられたキーと、識別子に割り当てられたノードの情報とを記憶する管理テーブル11aが格納される。
制御部12は、いずれのシステムにも割り当てられていないノードの集合であるノードプール30のノード数がシステムの数以上のとき、システムの数と同数のノードをノードプール30から抽出し、抽出したノードを共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて管理テーブル11aを更新する。
上述した第1実施形態の技術を適用すれば、同じノードの割り当てを有する複数のシステムが構築でき、同じ識別番号に割り当てられているノードには同じキーが割り当てられる。また、各システムのID空間に設定されている識別番号の系列が同じであるため、指定されたキーに対応する情報の操作が識別番号を介して各システムのノードに反映されるため、キー、情報、ノードの関係がシステム間で容易に同期されうる。
その結果、複製されたシステムが存在するのと同じ状態になり、一部のシステムにあるノードが離脱しても、他のシステムにあるノードが情報を保持しているため、ノードの離脱による情報の消失を防止することができる。また、第1実施形態の技術を適用すれば、同じID空間に割り当てられている複数のノードに対し、バックアップ用に同じ情報を保持させなくても情報の消失を防止できる。
そのため、ノードの参加や離脱の際にバックアップ用の情報をノード間でやり取りする負担を回避することができ、頻繁に参加と離脱を繰り返すノードが存在しても、参加と離脱時に生じる通信負荷や処理負荷の増大が抑制される。
以上、第1実施形態について説明した。
<2.第2実施形態>
次に、第2実施形態について説明する。第2実施形態は、DHTなどを利用して自律分散KVSを実現するシステム(自律分散KVSシステム)においてノードの離脱による情報の消失を防止する技術に関する。また、第2実施形態は、頻繁にシステムへの参加・離脱を繰り返す可能性のあるノードが存在する場合でも、ノードの離脱時に生じるノード間の通信負荷やノードの処理負荷を低減する仕組みに関する。
[2−1.自律分散KVSシステムの例]
自律分散KVSシステムでは、指定されたキーに対する値を保持しているノードを特定できるようにするDHTなどの技術が利用される。ここでは、DHTの1つであるChordについて説明すると共に、自律分散KVSシステムで利用できる他の技術について述べる。なお、説明の都合上、Chordのアルゴリズムを主な例として挙げるが、第2実施形態の技術を適用可能な範囲はこれに限定されない。
(Chord)
図2〜図4を参照しながら、自律分散KVSシステムの実現に利用可能なChordのアルゴリズム(以下、単にChordと称する。)について説明する。
なお、図2は、自律分散KVSシステムの一例(Chord)について説明するための第1の図である。図3は、自律分散KVSシステムの一例(Chord)について説明するための第2の図である。図4は、自律分散KVSシステムの一例(Chord)について説明するための第3の図である。
Chordでは、リング状のID空間にIDを割り振り、設定された規則に基づいてIDに対するノードの割り当て及びノードに対するキーの割り当てを決めることで、特定のキーが割り当てられたノードを一意に決める仕組みを実現している。
図2の例は、mビット(m=3)のIDが割り振られたID空間に3つのノード(Node#0、Node#1、Node#3)を割り当てる方法を示している。また、図2の例は、3つのキー(Key#1、Key#2、Key#6)をノードに割り当てる方法を示している。
Node#i(i=0,1,3)は「ID=i」の位置(以下、ID#iと表記する。)に割り当てられる。なお、Node#iが割り当てられているIDをNodeIDと表記する場合がある。また、Key#jの識別子は「j」であり、この識別子をKeyIDと表記する場合がある。
ID空間のノードにKey#jを割り当てるとき、Chordでは、ID#j(KeyIDと同じ値のID)にノードが割り当てられている場合には、そのノードにKey#jが割り当てられる。一方、ID#jにノードが割り当てられていない場合、リング上で、ID#jより先にあるIDのうち、ノードが割り当てられている直近のID(Next NodeID)が特定され、Next NodeIDに割り当てられているノードにKey#jが割り当てられる。
図2の例では、ID#1にNode#1が割り当てられているため、Key#1は、Node#1に割り当てられる。また、ID#2にノードが割り当てられていないため、次にノードが割り当てられているID#3にあるNode#3にKey#2が割り当てられる。同様に、ID#6にノードが割り当てられていないため、次にノードが割り当てられているID#0にあるNode#0にKey#6が割り当てられる。
Node#0、Node#1、Node#3は、Key#1、Key#2、Key#6の探索に利用するルーティングテーブルを保持している。ルーティングテーブルは、探索するキーのKeyIDを含む範囲(Interval)、及びそのキーを保持しているノード(Successor)に関する情報を有する。
例えば、図2(A)は、Node#0が保持するルーティングテーブルである。Chordの場合、ルーティングテーブルには、m個のIntervalと、各Intervalに対応するSuccessorのIDとが格納される。Intervalは、NodeID(n)及びルーティングテーブルの行番号(k)に基づいて算出される。Intervalの始点(Start(n,k))は、下記の式(1)により与えられる。
Start(n,k)=(n+2k-1) mod 2m
…(1)
そして、Intervalは、Start(n,k)以上、Start(n+1,k)未満の範囲に設定される。例えば、n=0、k=1の場合、Start(0,1)は1となり、Start(1,1)は2となる。そのため、Node#0が保持するルーティングテーブルの1行目に記述されるIntervalは1以上2未満となる。
Successor(図中ではSuc.と略記)は、Startと同じ値のIDにノードが割り当てられている場合、Startの値がSuccessorの値となる。一方、Startと同じ値のIDにノードが割り当てられていない場合、リング上でStartの値と同じIDより先にあるIDのうち、ノードが割り当てられているID(Next NodeID)がSuccessorの値となる。例えば、n=0、k=1の場合、Successorは1となる。
同様に、k=2,3の場合についてInterval及びSuccessorを求めると、図2(A)に示すようなルーティングテーブルが得られる。また、Node#1が保持するルーティングテーブルは、図2(B)のようになる。そして、Node#3が保持するルーティングテーブルは、図2(C)のようになる。
例えば、Node#に対し、Key#2に紐付けられる値への操作が要求された場合、Node#は、ルーティングテーブルを参照し、KeyIDである「2」を含むInterval([2,4))を特定する。そして、Node#は、特定したIntervalに対応するSuccessor(ID#3にあるNode#3)がKey#2を保持していることを認識し、受け付けた操作をNode#3に要求する。
上記のように、Chordは、IDに対するノードの割り当てに基づいてキーの割り当てが決まるようにし、各ノードが特定のキーを保持するノードを探索できる仕組みを有する。そして、各ノードは、ノードの割り当てに基づいて予め計算されるInterval及びSuccessorを含むルーティングテーブルを保持し、このルーティングテーブルを利用して特定のキーを保持するノードを探索し、キーに紐付けられる値の操作を実施する。
また、新たなノードがID空間に追加される場合(ノードの参加)、少なくとも一部のノードが保持するルーティングテーブルが更新される。また、ノードの割り当てが変更されるため、キーの割り当ても更新されうる。
例えば、図3に示すように、Node#6が新たに参加した場合、Key#6はNode#6に割り当てられる。また、Node#0が保持するルーティングテーブルのうち、3行目のSuccessorが「6」に変更される(図3(A)を参照)。また、Node#1が保持するルーティングテーブルのうち、3行目のSuccessorが「6」に変更される(図3(B)を参照)。また、Node#3が保持するルーティングテーブルのうち、1、2行目のSuccessorが「6」に変更される(図3(C)を参照)。
Node#6が保持するルーティングテーブル(図3(D)を参照)の計算方法、及びNode#0、Node#1、Node#3が保持するルーティングテーブルの計算方法は、図2に示したルーティングテーブルの計算と同じである。このように、ノードの参加に応じて、キーの再割り当てやルーティングテーブルの更新が行われる。また、ID空間からノードが削除される場合(ノードの離脱)、図4(Node#1が離脱する例)に示すように、キーの再割り当てやルーティングテーブルの更新が行われる。
(その他の技術)
特定のキーを保持するノードを効率的に探索できるようにする仕組みとしては、上述したChordの他、CAN(Content Addressable Network)、Pastry、KademliaなどのDHTがある。CANは、キーを写像する論理空間(ChordのID空間に対応)としてN次元トーラスを採用する方式である。Pastryは、論理空間としてPastryアルゴリズムを採用する方式である。Kademliaは、論理空間として2分木を採用する方式である。また、各種DHTの他、自律分散KVSシステムの実現にSkip Graphを利用することもできる。
第2実施形態に係る技術は、上述した様々な仕組みを採用する自律分散KVSシステムに広く適用可能である。
[2−2.多重化分散KVSシステム]
次に、図5〜図7を参照しながら、第2実施形態に係る多重化分散KVSシステムについて説明する。
図5は、第2実施形態に係る多重化分散KVSシステムの一例を示した図である。図6は、第2実施形態に係る多重化分散KVSシステムにおけるノードの管理について説明するための図である。図7は、第2実施形態に係るノードが保持するルーティングテーブルの一例を示した図である。
図5に示すように、第2実施形態に係る多重化分散KVSシステムは、例えば、制御装置100、GW(Gateway)装置200−1、200−2、…、200−N、及び端末装置301、302、303を有する。
制御装置100は、例えば、パーソナルコンピュータやサーバ装置などのコンピュータである。GW装置200−1、200−2、…、200−N、端末装置301、302、303は、例えば、パーソナルコンピュータ、携帯電話、スマートフォン、カーナビゲーションシステム、タブレット端末などの移動端末である。制御装置100とGW装置200−1、200−2、…、200−Nとはネットワーク300を介して通信することができる。GW装置200−1は、BT(Bluetooth:登録商標)などの近距離通信を利用して端末装置301、302、303と通信することができる。
制御装置100、GW装置200−1、200−2、…、200−N、及び端末装置301、302、303は、それぞれURI(Uniform Resource Identifier)やIPアドレスなどの特定情報に基づいて識別されうる。また、GW装置200−1、200−2、…、200−N、及び端末装置301、302、303の少なくとも一部は、GPS(Global Positioning System)、温度センサ、加速度センサなどの機能を有し、その機能を利用して取得した情報(センサ情報)を保持することができる。
例えば、端末装置301、302、303は、自身が保持するセンサ情報の種類や特徴と、自身の特定情報とを短距離通信でGW装置200−1に送信する。GW装置200−1は、端末装置301、302、303の特定情報をそれぞれキーに紐付けて保持する。また、GW装置200−2、…、200−Nは、それぞれがセンサ情報を取得して保持し、自身の特定情報をキーに紐付けて保持する。この場合、GW装置200−1、200−2、…、200−Nがそれぞれ自律分散KVSシステムのノードとなり、センサ情報の格納先を示す特定情報が、キーに紐付けられる値となる。
制御装置100は、自律分散KVSシステムへの参加・離脱を管理するノード(初期ノード)を設定し、初期ノードに関する情報を他のノードに通知する機能を有する。例えば、制御装置100は、Webサーバの機能を有し、その機能を利用して初期ノードに関する情報を他のノードに通知する。なお、図5の例は第2実施形態の技術を適用可能なシステムの一例を示したものであり、その適用範囲はこれに限定されない。但し、以下では、説明の都合上、GW装置200−1、200−2、…、200−Nをノードと称する。
(ノードの種類・割り当て/キーの割り当て/ルーティングテーブル)
ノードには、初期ノードと通常ノードとがある。初期ノードは、ノードの参加や離脱を管理する機能(管理機能)を有するノードである。通常ノードは、初期ノードの管理機能が省略されたノードである。初期ノードは、制御装置100により予め設定される。また、初期ノードが割り当てられているIDの情報は、制御装置100により各ノードに通知される。また、初期ノード以外のノードは通常ノードとなる。
図6の例は、第2実施形態に係る多重化分散KVSシステムにおけるノードの割り当てを示している。図6に示すように、この多重化分散KVSシステムは、複数のID空間401、402、403を利用する。ID空間401、402、403は同じmビットのID系列(m=3;ID=0,1,…,7)を有する。
また、ID空間401、402、403の間ではノードの割り当てが共通となるように制御される。例えば、ID空間401のID#0には初期ノード210が割り当てられている。この場合、ID空間402、403のID#0にもノード(図6の例では通常ノード220、230)が割り当てられる。そして、ID空間401、402、403には同じID系列が設定され、ノードの割り当ても同じであるため、同じIDに割り当てられているノードには同じキー及び値が格納される。
図6の例では、ID空間401において、ID#0に初期ノード210が割り当てられ、ID#2に初期ノード212が割り当てられ、ID#4に通常ノード214が割り当てられている。ID空間402では、ID#0に通常ノード220が割り当てられ、ID#2に通常ノード222が割り当てられ、ID#4に通常ノード224が割り当てられている。ID空間403では、ID#0に通常ノード230が割り当てられ、ID#2に通常ノード232が割り当てられ、ID#4に通常ノード234が割り当てられている。
例えば、ノードに割り当てられるキーとしてKey#0、Key#1、…、Key#7が用意されている場合、ID#0に割り当てられているノードには、Key#5、Key#6、Key#7、Key#0が割り当てられる。ID#2に割り当てられているノードには、Key#1、Key#2が割り当てられる。ID#4に割り当てられているノードには、Key#3、Key#4が割り当てられる。そして、これらのキーに値が紐付けられ、そのキーを利用して値に対する操作が行われる。なお、ここではキーの割り当て方法の一例としてChordの規則(図2(D)を参照)を採用している。
このように、第2実施形態に係る多重化分散KVSシステムは、同じID系列を有するID空間を複数管理し、IDに対するノードの割り当てを多重化することで、ノードごとキーと値のペアを冗長化する仕組みを採用している。この仕組みを実現するため、図6に示すように、初期ノード210、212は、それぞれノードプール410、412を管理する。ノードプール410、412は、システムへの参加を要求しているノードを一時的に収容し、IDへの割り当てを待機させるためのプールである。
なお、ノードプール410、412は初期ノード210、212間の情報のやり取りにより同じ内容に維持される。図6の例では初期ノード210、212がそれぞれノードプール410、412を管理しているが、初期ノード210、212に共通のノードプールを1つ用意し、そのノードプールを初期ノード210、212のいずれか又は両方が管理する仕組みに変形できる。
例えば、初期ノード210が参加の要求を受け付けた場合、初期ノード210は、参加の要求を出したノードをノードプール410に一旦収容する。そして、初期ノード210は、ノードプール410に収容されているノードの数が、ID空間の数(図6の例では3)より大きいかを確認する。
収容されているノード数がID空間の数より大きい場合、初期ノード210は、ノードプール410からID空間の数と同数のノードを選択し、選択した各ノードに同じIDを割り振る。そして、初期ノード210は、IDを割り振ったノードをID空間401、402、403の該当IDに1つずつ割り当てる。この方法によれば、新規ノードの参加後もID空間401、402、403におけるノードの割り当てが同じ状態に維持される。
なお、第2実施形態に係る多重化分散KVSシステムの各ノードは、自身が属するID空間とは異なる他のID空間に属するノードにアクセスする機会がある。そのため、各ノードは、他のID空間に属するノードの情報を含むルーティングテーブルを保持する。例えば、ID#0に割り当てられているノード(初期ノード210、通常ノード220、230)は、図7に示すようなルーティングテーブルを保持する。
図7に示すように、第2実施形態に係るルーティングテーブルは、ノードが割り当てられているID(NodeID:n)、行番号k、Start、Interval、Successorを有する。図2(A)などに示したルーティングテーブルとの違いは、Successorの欄に、他のID空間に属するノードの情報が含まれる点にある。
図7の例では、Successorを特定するIDに加え、各ID空間のSuccessorにアクセスするための情報(IP Address)が記載されている。例えば、n=0、k=1に対応するSuccessorのIDは2である。そして、ID#2に割り当てられているID空間401、402、403のノードは、それぞれ初期ノード212、通常ノード222、232である。そのため、Successorの欄には、初期ノード212、通常ノード222、232のIP Addressが記載される。
図7にはID#0に割り当てられているノードが保持するルーティングテーブルの一例を示したが、他のIDに割り当てられているノードも、そのノードに対応するルーティングテーブルを保持している。そのため、あるID空間のノードが操作を受け付けたとき、そのノードは、自身が属するID空間から操作対象となる該当ノードを探索できるだけでなく、他のID空間から操作対象となる該当ノードを探索することが可能になる。
そして、上記のルーティングテーブルを利用することで、通信状態の良い該当ノードに操作を要求することができる。また、あるID空間の該当ノードが離脱した場合でも、他のID空間の該当ノードが処理を代替できるため、特別な処理を実行せずともシステムの運用を継続することができる。また、離脱したノードが再参加する際、離脱前のIDに割り当て、同じIDに割り当てられている他のノードと同期処理を実行することで、迅速に離脱前の状態へと復旧することが可能になる。
以上、多重化分散KVSシステムについて説明した。
[2−3.ハードウェア]
次に、図8を参照しながら、第2実施形態に係るノードの機能を実現可能なハードウェアについて説明する。図8は、第2実施形態に係るノードの機能を実現可能なハードウェアの一例を示した図である。
例えば、初期ノード210が有する機能は、図8に示すハードウェア資源を用いて実現することが可能である。つまり、初期ノード210が有する機能は、コンピュータプログラムを用いて図8に示すハードウェアを制御することにより実現される。
図8に示すように、このハードウェアは、主に、CPU902と、ROM(Read Only Memory)904と、RAM906と、ホストバス908と、ブリッジ910とを有する。さらに、このハードウェアは、外部バス912と、インターフェース914と、入力部916と、出力部918と、記憶部920と、ドライブ922と、接続ポート924と、通信部926とを有する。
CPU902は、例えば、演算処理装置又は制御装置として機能し、ROM904、RAM906、記憶部920、又はリムーバブル記録媒体928に記録された各種プログラムに基づいて各構成要素の動作全般又はその一部を制御する。ROM904は、CPU902に読み込まれるプログラムや演算に用いるデータなどを格納する記憶装置の一例である。RAM906には、例えば、CPU902に読み込まれるプログラムや、そのプログラムを実行する際に変化する各種パラメータなどが一時的又は永続的に格納される。
これらの要素は、例えば、高速なデータ伝送が可能なホストバス908を介して相互に接続される。一方、ホストバス908は、例えば、ブリッジ910を介して比較的データ伝送速度が低速な外部バス912に接続される。
入力部916としては、例えば、マウス、キーボード、タッチパネル、タッチパッド、ボタン、スイッチ、及びレバーなどが用いられる。また、入力部916としては、赤外線やその他の電波を利用して制御信号を送信することが可能なリモートコントローラが用いられることもある。また、入力部916は、ユーザが情報を入力するデバイスの他、GPS、温度センサ、加速度センサなどのセンサ情報を収集し、収集した情報をCPU902などに入力するデバイスであってもよい。
出力部918としては、例えば、CRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)、PDP(Plasma Display Panel)、又はELD(Electro-Luminescence Display)などのディスプレイ装置が用いられる。また、出力部918として、スピーカやヘッドホンなどのオーディオ出力装置、又はプリンタなどが用いられることもある。つまり、出力部918は、情報を視覚的又は聴覚的に出力することが可能な装置である。
記憶部920は、各種のデータを格納するための装置である。記憶部920としては、例えば、HDDなどの磁気記憶デバイスが用いられる。また、記憶部920として、SSD(Solid State Drive)やRAMディスクなどの半導体記憶デバイス、光記憶デバイス、又は光磁気記憶デバイスなどが用いられてもよい。
ドライブ922は、着脱可能な記録媒体であるリムーバブル記録媒体928に記録された情報を読み出し、又はリムーバブル記録媒体928に情報を書き込む装置である。リムーバブル記録媒体928としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどが用いられる。
接続ポート924は、例えば、USB(Universal Serial Bus)ポート、IEEE1394ポート、SCSI(Small Computer System Interface)、RS−232Cポート、又は光オーディオ端子など、外部接続機器930を接続するためのポートである。外部接続機器930としては、例えば、プリンタなどが用いられる。
通信部926は、ネットワーク932に接続するための通信デバイスである。通信部926としては、例えば、有線又は無線LAN用の通信回路、WUSB(Wireless USB)用の通信回路、光通信用の通信回路やルータ、ADSL(Asymmetric Digital Subscriber Line)用の通信回路やルータ、携帯電話ネットワーク用の通信回路などが用いられる。通信部926に接続されるネットワーク932は、有線又は無線により接続されたネットワークであり、例えば、インターネット、LAN、放送網、衛星通信回線などを含む。
なお、初期ノード210以外のノードが有する機能も図8に示したハードウェアを用いて実現可能である。つまり、GW装置200−1、200−2、…、200−Nが有する機能は図8に示したハードウェアを用いて実現可能である。また、制御装置100及び端末装置301、302、303が有する機能も図8に示したハードウェアを用いて実現可能である。また、図8に示したハードウェアのうち一部の要素を省略する変形や、さらに要素を追加する変形も許容される。
以上、ハードウェアについて説明した。
[2−4.機能]
次に、ノードの機能について説明する。
(初期ノード)
まず、図9を参照しながら、初期ノードの機能について説明する。図9は、第2実施形態に係る初期ノードが有する機能の一例を示したブロック図である。なお、ここでは説明の都合上、初期ノード210の機能を例に説明する。
図9に示すように、初期ノード210は、記憶部241、操作処理部242、探索処理部243、プール管理部244、参加処理部245、同期処理部246、死活監視部247、及び離脱処理部248を有する。
なお、記憶部241の機能は、上述したRAM906や記憶部920などを用いて実現できる。操作処理部242、探索処理部243、プール管理部244、参加処理部245、同期処理部246、死活監視部247、及び離脱処理部248の機能は、上述したCPU902などを用いて実現できる。
記憶部241には、KVSデータ241a、操作履歴241b、ルーティングテーブル241c、初期ノードリスト241d、同IDノードリスト241e、ノードプール情報241f、及びRTTデータ241gが格納される。
KVSデータ241aは、初期ノード210に割り当てられているキー(図6の例ではKey#5、Key#6、Key#7、Key#0)と、そのキーに紐付けられて保持される値(Value)とのペアである。
操作履歴241bは、図10に示すように、初期ノード210又は初期ノード210と同じIDに割り当てられているノードが受け付けた操作の履歴である。図10は、第2実施形態に係る操作履歴の一例を示した図である。
図10に例示した操作履歴241bには、Key#5に値val05を紐付けて格納する操作(put Key#5 val05)、Key#6に値val06を紐付けて格納する操作(put Key#6 val06)が含まれている。また、この操作履歴241bには、Key#5の値val05を削除する操作(del Key#5 val05)、Key#7に値val07を紐付けて格納する操作(put Key#7 val07)も含まれている。
操作履歴241bには、操作を受け付けたノードの所属するID空間の情報が併せて記載される。例えば、Key#5に値val05を紐付けて格納する操作を初期ノード210が受け付けた場合、操作履歴241bには、初期ノード210が所属するID空間401の情報が記載される。同様に、初期ノード210と同じIDを有するノードが受け付け、実行した操作の履歴が、その操作を受け付けたノードの所属するID空間の情報に対応付けて操作履歴241bとして記憶部241に蓄積される。
ルーティングテーブル241cは、キーを保持するノードを探索する際に利用される情報である。例えば、初期ノード210が利用するルーティングテーブル241cは、図11のようになる。図11は、第2実施形態に係るルーティングテーブルの一例を示した図である。
図11に示すように、ルーティングテーブル241cには、例えば、行番号k、Start、Interval、Successorが含まれる。また、Successorの欄には、初期ノード210と同じID空間401に属するSuccessorの情報(IP Addressなど)の他、同じIDを有するID空間402、403のノードの情報(IP Addressなど)が記載される。
初期ノードリスト241dは、図12に示すように、制御装置100により設定された全ての初期ノードの情報(IP Addressなど)を列挙した情報である。図12は、第2実施形態に係る初期ノードリストの一例を示した図である。図6の例では、初期ノード210、212が設定されているため、図12に例示した初期ノードリスト241dには、初期ノード210、212の情報が記載されている。
同IDノードリスト241eは、図13に示すように、初期ノード210と同じIDに割り当てられているノードの情報(IP Addressなど)を列挙した情報である。図13は、第2実施形態に係る同IDノードリストの一例を示した図である。図6の例では、初期ノード210と同じID#0に通常ノード220、230が割り当てられているため、図13に例示した同IDノードリスト241eには、通常ノード220、230の情報が記載されている。
ノードプール情報241fは、図14に示すように、ノードプール410に収容されているノードの情報(IP Addressなど)を含む。図14は、第2実施形態に係るノードプール情報の一例を示した図である。例えば、ノードプール410に通常ノード216、…が収容されている場合、ノードプール情報241fには、通常ノード216、…の情報が記載される。
RTTデータ241gは、図15に示すように、ノードプール410に収容されているノードのペア毎に測定されたRTT(Round-Trip Time)を示すデータである。図15は、第2実施形態に係るRTTデータの一例を示した図である。RTTは、一方のノードから他方のノードにメッセージを送信し、そのメッセージに対する応答が他方のノードから一方のノードへと到達するまでにかかる時間である。RTTを参照することで、通信経路上におけるノード間の距離を評価することができる。
例えば、RTTデータ241gを参照し、RTTが小さいノードの組み合わせを抽出(クラスタリング)することで、通信経路上で近傍にあるノードの集合(近傍ノード群)が得られる。多重化分散KVSシステムでは、同一IDに割り当てられているノード間で操作要求の転送や操作履歴の同期などが実施されるため、同一IDに割り当てられるノード間の距離が短いほどシステムの性能が向上する。そのため、第2実施形態に係る多重化分散KVSシステムでは、近傍ノード群に属するノードが同一IDに割り当てられる。その際、RTTデータ241gが利用される。
再び図9を参照する。操作処理部242は、多重化分散KVSシステムの利用者又は他のノードから受け付けた操作の要求を処理する。
例えば、利用者は、制御装置100を介して初期ノード210に操作を要求する。初期ノード210に割り当てられているキーに関する操作である場合、操作処理部242は、その要求に応じて操作をKVSデータ241aに反映させる。また、操作処理部242は、受け付けた操作の内容と、自身が所属するID空間401の情報を操作履歴241bに記載する。受け付けた操作の要求が他のノードから出されたものである場合、操作処理部242は、上記と同様に、その操作をKVSデータ241aに反映させ、操作履歴241bに記載を追加する。
探索処理部243は、ルーティングテーブル241cを参照し、指定されたキーを保持するノードを特定する。例えば、初期ノード210に割り当てられていないキーに対する操作の要求を操作処理部242が受け付けた場合、探索処理部243は、ルーティングテーブル241cに基づいて、そのキーに対応するSuccessorのIDを特定する。
例えば、Key#1(KeyID=1)に対する操作の要求が受け付けられた場合、探索処理部243は、ルーティングテーブル241c(図11を参照)を参照し、KeyIDを含むInterval([1,2))を特定する。また、探索処理部243は、特定したIntervalに対応するSuccessorのID(ID=2)を特定する。そして、探索処理部243は、特定したSuccessorのIDを操作処理部242に通知する。この通知を受けた操作処理部242は、Successorに対して操作の要求を転送する。
プール管理部244は、ノードプール410を管理する。
例えば、プール管理部244は、ノードプール410にノードが追加された場合、追加されたノードの情報(IP Addressなど)を収集し、収集した情報をノードプール情報241fに記載する。また、プール管理部244は、初期ノード212に対してノードの追加を通知すると共に、追加されたノードの情報を初期ノード212に提供する。一方、プール管理部244は、初期ノード212からノードの追加を通知された場合、初期ノード212から提供されるノードの情報をノードプール情報241fに記載する。
また、プール管理部244は、ノードプール410に収容されているノード間のRTTを計測し、計測したRTTをRTTデータ241gに記載する。また、プール管理部244は、RTTデータ241gに記載のRTTに基づいて近傍ノード群を抽出する。なお、RTTの計測は、予め設定された周期又はタイミングで実行される。また、近傍ノード群の抽出は、予め設定された周期又はタイミングで実行されてもよいし、或いは、参加処理部245によるノードの参加処理が実行されるタイミングで実行されてもよい。
参加処理部245は、ノードの参加に関する処理を実行する。例えば、参加処理部245は、IDに割り当てられていないノードから参加要求を受けた場合、そのノードをノードプール410に収容する。また、参加処理部245は、ノードプール情報241fを参照し、ノードプール410に収容されているノードの数がID空間の数以上である場合、ID空間の数と同数のノードを選択し、選択したノードに同じIDを割り振る。そして、参加処理部245は、ID空間401、402、403の同じIDに、選択したノードを1つずつ割り当てる。
なお、参加処理部245は、ID空間の数と同数のノードを含む近傍ノード群がある場合にノードの選択、IDの割り振り、及びIDへの割り当てを実行してもよい。この場合、ID空間の数以上のノードがノードプール410に存在していてもノードの参加が見送られる。一方、この方法によれば、通信経路上の距離が短いノードの組が同じIDに割り当てられるため、システムの性能向上に寄与する。
同期処理部246は、同じIDに割り当てられているノード間で操作履歴241bを同期する。例えば、同期処理部246は、操作履歴241bに記載されている操作のうち、同じIDに割り当てられている他のノードに通知していない操作を特定し、特定した操作を同IDノードリスト241eに記載されている各ノードに通知する。なお、同期の処理は、操作処理部242が操作を受け付ける度に実行してもよいし、予め設定された周期又はタイミングで実行してもよい。
死活監視部247は、同期処理部246が同期の処理を実行する際、操作の通知に対する応答を監視し、その応答の有無に応じて通知先のノードが通信可能な状態にあるか否かを判断する。例えば、死活監視部247は、通知から応答までにかかる遅延時間を計測し、その遅延時間が予め設定された閾値より大きい場合、通知先のノードが通信不可の状態(離脱した状態)にあると判断する。
また、死活監視部247は、離脱した状態にあると判断したノードの数をカウントする。そして、カウントした数が予め設定された閾値(例えば、2)以上の場合、死活監視部247は、離脱したノードの数が閾値以上であることを離脱処理部248に通知する。なお、死活監視部247は、初期ノード210以外の残存するノードの数をカウントし、カウントした数と予め設定された閾値(例えば、1)とを比較してもよい。また、死活監視部247は、離脱した状態にあると判断したノードの情報を同IDノードリスト241e及びルーティングテーブル241cから削除する。
離脱処理部248は、初期ノード210を含め、同じIDに割り当てられているノードを離脱させる処理を実行する。例えば、離脱処理部248は、死活監視部247から、離脱した状態にあるノードの数が閾値以上である旨の通知を受けた場合、初期ノード210と異なるIDに割り当てられているノードの中から、KVSデータ241aの移管先となる代替ノードを決定する。そして、離脱処理部248は、KVSデータ241aを代替ノードに移管し、離脱処理の対象外である各ノードに初期ノード210の離脱を通知する。
また、離脱処理部248は、初期ノード212に参加の要求を出す。初期ノード212に参加の要求を出すことで、初期ノード210はノードプール412に収容される。なお、離脱処理の対象となる他のノードがある場合、離脱処理部248は、その他のノードに対し、代替ノードの決定、KVSデータの移管、離脱の通知、及び参加の要求を行うように指示してもよい。
また、離脱処理部248は、制御装置100に対し、初期ノード210に代わる初期ノードの設定を依頼する。なお、初期ノード210以外に初期ノードがない場合、離脱処理部248は、離脱処理の対象外となる各ノードに初期ノード210の離脱を通知する前に、制御装置100に初期ノードの設定を依頼する。そして、初期ノードが設定され、新たな初期ノードが各ノードに通知された後、離脱処理部248は、離脱の通知などの処理を実行し、新たな初期ノードに参加の要求を出す。
以上、初期ノード210の機能について説明した。なお、初期ノード212の機能も同様である。
(通常ノード)
次に、図16を参照しながら、通常ノードの機能について説明する。図16は、第2実施形態に係る通常ノードが有する機能の一例を示したブロック図である。なお、ここでは説明の都合上、通常ノード230の機能を例に説明する。
図16に示すように、通常ノード230は、記憶部251、操作処理部252、探索処理部253、参加処理部254、同期処理部255、死活監視部256、及び離脱処理部257を有する。
なお、記憶部251の機能は、上述したRAM906や記憶部920などを用いて実現できる。操作処理部252、探索処理部253、参加処理部254、同期処理部255、死活監視部256、及び離脱処理部257の機能は、上述したCPU902などを用いて実現できる。
記憶部251には、KVSデータ251a、操作履歴251b、ルーティングテーブル251c、初期ノードリスト251d、同IDノードリスト251eが格納される。
KVSデータ251aは、通常ノード230に割り当てられているキー(図6の例ではKey#5、Key#6、Key#7、Key#0)と、そのキーに紐付けられて保持される値(Value)とのペアである。
操作履歴251bは、上述した操作履歴241b(図10を参照)と同様に、通常ノード230又は通常ノード230と同じIDに割り当てられているノードが受け付けた操作の履歴である。ルーティングテーブル251cは、上述したルーティングテーブル241c(図11を参照)と同様に、キーを保持するノードを探索する際に利用される情報である。
初期ノードリスト251dは、上述した初期ノードリスト241d(図12を参照)と同様に、制御装置100により設定された全ての初期ノードの情報(IP Addressなど)を列挙した情報である。同IDノードリスト251eは、上述した同IDノードリスト241e(図13を参照)と同様に、通常ノード230と同じIDに割り当てられているノードの情報(IP Addressなど)を列挙した情報である。
なお、通常ノード230と初期ノード210とは同じIDに割り当てられるため、ルーティングテーブル251c、同IDノードリスト251eは同じ内容になる。また、初期ノードリスト251dは各ノードで共通の内容となる。
操作処理部252は、多重化分散KVSシステムの利用者又は他のノードから受け付けた操作の要求を処理する。
例えば、利用者は、制御装置100を介して通常ノード230に操作を要求する。通常ノード230に割り当てられているキーに関する操作である場合、操作処理部252は、その要求に応じて操作をKVSデータ251aに反映させる。また、操作処理部252は、受け付けた操作の内容と、自身が所属するID空間403の情報を操作履歴251bに記載する。受け付けた操作の要求が他のノードから出された要求である場合、操作処理部252は、上記と同様に、その操作をKVSデータ251aに反映させ、操作履歴251bに記載を追加する。
探索処理部253は、ルーティングテーブル251cを参照し、指定されたキーを保持するノードを特定する。例えば、通常ノード230に割り当てられていないキーに対する操作の要求を操作処理部252が受け付けた場合、探索処理部253は、ルーティングテーブル251cに基づいて、そのキーに対応するSuccessorのIDを特定する。そして、探索処理部253は、特定したSuccessorのIDを操作処理部252に通知する。この通知を受けた操作処理部252は、Successorに対して操作の要求を転送する。
参加処理部254は、初期ノードリスト251dに記載されている初期ノードに参加の要求を出す。初期ノードからIDが割り振られ、通常ノード230がIDに割り当てられた場合、参加処理部254は、初期ノードからノードの割り当てに関する情報を取得し、ルーティングテーブル251cを生成する。なお、初期ノードがルーティングテーブル251cを生成する場合、参加処理部254は、初期ノードからルーティングテーブル251cを取得する。
同期処理部255は、同じIDに割り当てられているノード間で操作履歴251bを同期する。例えば、同期処理部255は、操作履歴251bに記載されている操作のうち、同じIDに割り当てられている他のノードに通知していない操作を特定し、特定した操作を同IDノードリスト251eに記載されている各ノードに通知する。
なお、同期の処理は、操作処理部252が操作を受け付ける度に実行してもよいし、予め設定された周期又はタイミングで実行してもよい。また、同期処理部255は、通常ノード230の参加時に、同じIDのノードに対して同期を要求し、そのノードから取得した操作履歴を操作履歴251bとして記憶部251に格納し、その操作履歴251bからKVSデータ251aを生成してもよい。
死活監視部256は、同期処理部255が同期の処理を実行する際、操作の通知に対する応答を監視し、その応答の有無に応じて通知先のノードが通信可能な状態にあるか否かを判断する。例えば、死活監視部256は、通知から応答までにかかる遅延時間を計測し、その遅延時間が予め設定された閾値より大きい場合、通知先のノードが通信不可の状態(離脱した状態)にあると判断する。
また、死活監視部256は、離脱した状態にあると判断したノードの数をカウントする。そして、カウントした数が予め設定された閾値(例えば、2)以上の場合、死活監視部256は、離脱したノードの数が閾値以上であることを離脱処理部257に通知する。なお、死活監視部256は、通常ノード230以外の残存するノードの数をカウントし、カウントした数と予め設定された閾値(例えば、1)とを比較してもよい。また、死活監視部256は、離脱した状態にあると判断したノードの情報を同IDノードリスト251e及びルーティングテーブル251cから削除する。
離脱処理部257は、通常ノード230を含め、同じIDに割り当てられているノードを離脱させる処理を実行する。例えば、離脱処理部257は、死活監視部256から、離脱した状態にあるノードの数が閾値以上である旨の通知を受けた場合、通常ノード230と異なるIDに割り当てられているノードの中から、KVSデータ251aの移管先となる代替ノードを決定する。そして、離脱処理部257は、KVSデータ251aを代替ノードに移管し、離脱処理の対象外である各ノードに通常ノード230の離脱を通知する。
また、離脱処理部257は、初期ノード212に参加の要求を出す。初期ノード212に参加の要求を出すことで、通常ノード230はノードプール412に収容される。なお、離脱処理の対象となる他のノードがある場合、離脱処理部257は、その他のノードに対し、代替ノードの決定、KVSデータの移管、離脱の通知、及び参加の要求を行うように指示してもよい。
以上、通常ノード230の機能について説明した。なお、通常ノード230以外の通常ノード(通常ノード214など)が有する機能も同様である。
[2−5.処理の流れ]
次に、多重化分散KVSシステムにおいて実行される処理の流れについて説明する。
(ノードの参加)
まず、図17及び図18を参照しながら、ノードの参加時に実行される処理の流れについて説明する。図17は、第2実施形態に係るノードの割り当て方法について説明するための図である。図18は、第2実施形態に係るノードの参加時に実行される処理の流れについて説明するためのフロー図である。
図17の例は、通常ノード216が初期ノード210に参加の要求を出した場合に実行される割り当て処理の様子を示している。この例ではノードプール410に通常ノード226、227、233、236が収容されており、参加の要求を受けた初期ノード210は、通常ノード216をノードプール410に収容する。
例えば、RTTデータ241gに基づいて通常ノード216、226、236が近傍ノード群として抽出できる場合、初期ノード210は、通常ノード216、226、236に同じID(この例ではID#6)を割り当てる。そして、初期ノード210は、例えば、ID空間401のID#6に通常ノード216を割り当て、ID空間402のID#6に通常ノード226を割り当て、ID空間403のID#6に通常ノード236を割り当てる。
通常ノード216、226、236の参加によりノードの割り当てが変更されたため、各ノードが保持するルーティングテーブルが更新される。また、図6に示した例のようにKey#0、#1、…、#7がノードに割り当てられている場合、通常ノード216、226、236の参加によりキーの割り当ても変更される。この例では、初期ノード210及び通常ノード220、230に割り当てられていたKey#5、Key#6が通常ノード216、226、236に割り当てられる。
上記のような参加の要求があると、初期ノード210は、以下の流れで処理を実行する(図18を参照)。
(S101)参加処理部245は、通常ノード216から参加の要求を受け付ける。
(S102)参加処理部245は、参加の要求を出した通常ノード216からノードの情報(IP Address)を取得する。また、参加処理部245は、通常ノード216をノードプール410に追加する。つまり、参加処理部245は、通常ノード216の情報をノードプール情報241fに記載する。
(S103)参加処理部245は、ノードプール情報241fを参照し、ノードプール410に収容されているノードの数が閾値ThJ以上であるか否かを判定する。閾値ThJは、例えば、ID空間の数(多重度)より大きい数に設定される。ノードの数が閾値ThJ以上である場合、処理はS104へと進む。一方、ノードの数が閾値ThJ未満である場合、処理はS108へと進む。
(S104)参加処理部245は、RTTデータ241gを参照し、RTTの小さいN個(NはID空間の多重度)のノードを選択する。なお、近傍ノード群が抽出されている場合、参加処理部245は、N個のノードを含む近傍ノード群のノードを選択する。例えば、参加処理部245は、N個のノードから選択される全てのノードのペアについて測定されたRTTの合計値を基準に、その合計値が最小になるノードの組を選択する。
(S105)参加処理部245は、S104で選択したノードに同じIDを割り当てる。このとき、参加処理部245は、ID空間401、402、403の中でノードが割り当てられていないIDの中から1つのIDを特定し、特定したIDをS104で選択したノードに割り当てる。未割り当てのIDが複数ある場合、例えば、参加処理部245は、未割り当てのIDからランダムに1つのIDを選択してノードに割り当てる。
(S106)参加処理部245は、同じIDを割り当てたN個のノードに対して異なるID空間401、402、403への参加を指示する。つまり、参加処理部245は、ID空間401、402、403の同じIDにそれぞれ1つのノードを割り当てる。
(S107)参加処理部245は、同じIDを割り当てたN個のノードに対して、各ノードの情報(IP Address)を通知する。つまり、参加処理部245は、これらN個のノードが同IDノードリストを生成できるように、各ノードの情報を収集して各ノードに通知する。S107の処理が完了すると、図18に示した一連の処理は終了する。
(S108)参加処理部245は、参加の要求を出した通常ノード216に対し、プール保持状態であることを通知する。なお、プール保持状態とは、ノードプール410に収容され、IDへの割り当てを待機している状態を言う。プール保持状態の通知を受けた通常ノード216は、初期ノード210からIDが割り当てられるのを待機する状態となる。S108の処理が完了すると、図18に示した一連の処理は終了する。
ここまで、ノードの参加時に実行される処理の流れについて説明してきた。
(KVS操作)
次に、図19を参照しながら、KVS操作(KVSデータに対する操作)の受け付け時に実行される処理の流れについて説明する。図19は、第2実施形態に係るKVS操作の受け付け時に実行される処理の流れについて説明するためのフロー図である。なお、ここでは説明の都合上、初期ノード210が操作の要求を受け付けた場合を例に説明する。
(S111)操作処理部242は、KVS操作(KVSデータに対する操作)の指示を受け付ける。KVS操作の指示は、操作対象の値に紐付けられるキーの情報を含む。また、KVS操作としては、例えば、値の格納(put)、値の取得(get)、値の削除(del)などがある。
(S112)操作処理部242は、受け付けたKVS操作の指示が自ノード(初期ノード210)宛ての指示であるか否かを判定する。
例えば、操作処理部242は、初期ノード210に割り当てられているキーの集合に、KVS操作の指示で指定されたキーが含まれる場合、自ノード宛ての指示であると判定する。自ノード宛ての指示であると判定した場合、処理はS113へと進む。一方、自ノード宛ての指示ではないと判定した場合、処理はS114へと進む。
(S113)操作処理部242は、KVS操作の指示に応じた処理を実行する。
例えば、指示が値の格納(put)である場合、操作処理部242は、指示に応じてキーと値とのペアをKVSデータ241aとして記憶部241に格納する。指示が値の取得(get)である場合、操作処理部242は、指定されたキーに対応する値を記憶部241から取得し、取得した値をKVS操作の要求元に返す。指示が値の削除(del)である場合、操作処理部242は、指定されたキーと値とを記憶部241から削除する。
また、操作処理部242は、実行したKVS操作の内容と、初期ノード210が所属するID空間401の情報とを操作履歴241bに記録する。S113の処理が完了すると、図19に示した一連の処理は終了する。
(S114)操作処理部242は、KVS操作の指示を宛先ノード(指定されたキーを保持するノード)に転送する。
例えば、操作処理部242は、指示に含まれるキーの情報を探索処理部243に通知し、そのキーを保持するノードのIP Addressを要求する。この要求を受けた探索処理部243は、ルーティングテーブル241cを参照し、通知されたキーを保持するノード(Successor)を特定する。そして、探索処理部243は、特定したノードのIP Addressを操作処理部242に通知する。
操作処理部242は、探索ノードのIP Addressとして、同じIDに割り当てられている複数のノードのIP Addressを探索処理部243から取得する。操作処理部242は、取得したIP Addressのうち、初期ノード210と同じID空間401に属するノードのIP Addressを選択し、選択したIP AddressにKVS操作の指示を転送する。
(S115)操作処理部242は、KVS操作の指示を転送した後、宛先ノードから応答が返ってくるまでの時間(応答待ち時間)を計測する。そして、操作処理部242は、応答待ち時間が閾値ThR以上であるか否かを判定する。閾値ThRは任意に設定可能であるが、例えば、初期ノード210と宛先ノードとの間のRTTにマージンを加えた予測値に基づいて設定される。応答待ち時間が閾値ThR以上の場合、処理はS117へと進む。一方、応答待ち時間が閾値ThR以上でない場合、処理はS116へと進む。
(S116)操作処理部242は、KVS操作の転送先(宛先ノード)から応答を受信する。
KVS操作が値の格納(put)や削除(del)である場合、操作処理部242は、宛先ノードにおける処理の完了を示す応答を受信する。KVS操作が値の取得(get)である場合、操作処理部242は、宛先ノードから応答として、指定されたキーに対応する値を取得する。この場合、操作処理部242は、取得した値をKVS操作の要求元に返す。S116の処理が完了すると、図19に示した一連の処理は終了する。
(S117)操作処理部242は、S114でKVS操作を転送した転送先と同じIDのノード(宛先ノード)があるか否かを判定する。
例えば、操作処理部242は、探索処理部243から取得したIP Addressのうち、初期ノード210とは異なるID空間402、403に属するノードのIP Addressを特定する。そして、操作処理部242は、特定したIP Addressに対して稼働確認のメッセージを送信する。
送信したメッセージに対して少なくとも1つの応答が得られた場合、操作処理部242は、宛先ノードがあると判定する。宛先ノードがあると判定した場合、処理はS118へと進む。なお、複数のノードから応答が得られた場合、操作処理部242は、未選択のノードから1つのノードを宛先ノードとして選択する。一方、宛先ノードがないと判定した場合、処理はS119へと進む。
(S118)操作処理部242は、KVS操作の指示を宛先ノード(同じIDのノード)に転送する。S118の処理が完了すると、処理はS115へと進む。
(S119)操作処理部242は、KVS操作がエラー終了した際の処理(エラー処理)を実行する。例えば、操作処理部242は、KVS操作の操作元に対し、KVS操作がエラー終了した旨を通知する。S119の処理が完了すると、図19に示した一連の処理は終了する。
ここまで、KVS操作(KVSデータに対する操作)の受け付け時に実行される処理の流れについて説明してきた。
(操作履歴の同期・ノードの死活監視)
次に、図20〜図22を参照しながら、同期及び死活監視の処理の流れについて説明する。図20は、第2実施形態に係る同期及び死活監視の処理について説明するための図である。図21は、第2実施形態に係る同期及び死活監視の処理の流れについて説明するための第1のシーケンス図である。図22は、第2実施形態に係る同期及び死活監視の処理の流れについて説明するための第2のシーケンス図である。
図20の例は、同じIDに割り当てられている通常ノード214、224、234の間で操作履歴及びKVSデータを同期する様子を示している。なお、同期の処理は、予め設定された周期又はタイミングで実行されてもよいし、あるノードでKVS操作が完了し、操作履歴が更新されたタイミングで実行されてもよい。
図20の例では、通常ノード234がKey#3にval03を格納する操作(put)を受け付け、通常ノード224がKey#4にval04を格納する操作(put)を受け付けた段階までの操作履歴が同期済である。この状態で通常ノード214がKey#3の値val03を削除する操作(del)を受け付けた場合、図20に示すように、この操作は未同期の操作履歴となる。
この場合、通常ノード214は、同期の処理を実行するタイミングで、未同期の操作履歴を通常ノード224、234に通知し、操作履歴の同期を要求する。この要求を受けた通常ノード224、234は、通知された未同期の操作履歴をそれぞれ自身の操作履歴に追加する。また、通常ノード224、234は、追加した操作履歴に基づいて、それぞれ自身のKVSデータを更新する。この例ではKey#3の値val03が削除される。
上記のように、同期の際、同じIDに割り当てられている全てのノードが通信を実施する。そのため、同期を実施する際に通信不可の状態にあるノードを検出することができる。例えば、通常ノード214は、通常ノード224、234にそれぞれ稼働状況を確認するメッセージを送信し、そのメッセージに対する応答が得られるか否かを確認する(死活監視)。そして、通常ノード214は、応答が得られたノードを対象に同期を実施する。
通常ノード214に未通知の操作履歴がある場合、同じIDに割り当てられている通常ノード214、224、234が実行する処理は、例えば、以下の流れで実行される(図21を参照)。
(S121、S122)通常ノード214は、未通知の操作履歴を通常ノード224、234に送信する。このとき、通常ノード214は、同IDノードリストを参照し、通常ノード214と同じIDに割り当てられている通常ノード224、234のIP Addressに対して未通知の操作履歴を送信する。
(S123、S124)通常ノード214から未通知の操作履歴を受信した通常ノード224、234は、受信を完了した旨を示す応答を通常ノード214に返す。
(S125)通常ノード214は、通常ノード224、234から応答を受信し、応答の有無に基づいて通信が不可の状態にあるノードの数(通信不可ノード数)をカウントする。この例では通常ノード224、234が通信可能な状態にあるため、通信不可ノード数は0となる。
また、通常ノード214は、通信不可ノード数が閾値ThN以上であるか否かを判定する。閾値ThNは1以上の任意の数に設定できるが、例えば、ID空間の多重数から1を減じた数(この例では2)に設定される。
ID空間の多重度が3の場合、通信不可ノード数が2の状態とは、通常ノード214と同じIDに割り当てられている他のノードが全て離脱した状態(正常に通信できない状態)にあることを意味する。つまり、KVSデータの冗長性が失われている状態にある。後述するように、このような状態にある場合、その冗長性を回復するための処理が実行される。S125の段階では通信不可ノード数が0であるから、通常ノード214は、通信不可ノード数が閾値ThN以上ではないと判定し、そのまま動作を継続する。
(S126、S127)通常ノード224は、通常ノード214から受信した未通知の操作履歴に基づいて自身が保持する操作履歴を更新する(図20を参照)。また、通常ノード224は、更新後の操作履歴にある未実行のKVS操作(未通知の操作履歴に対応するKVS操作)を自身が保持するKVSデータに適用する。そして、通常ノード224は、そのまま動作を継続する。
(S128、S129)通常ノード234は、通常ノード214から受信した未通知の操作履歴に基づいて自身が保持する操作履歴を更新する(図20を参照)。また、通常ノード234は、更新後の操作履歴にある未実行のKVS操作(未通知の操作履歴に対応するKVS操作)を自身が保持するKVSデータに適用する。そして、通常ノード234は、そのまま動作を継続する。
S125、S127、S129の処理が完了した後、通常ノード214、224、234はそのまま動作を継続する。そして、ある時点で通常ノード234が離脱し(後述するS130の処理)、さらに、通常ノード214が未通知の操作履歴を他のノードに通知する同期の処理を実行する場合、以下のように処理が進行する。
(S130)通常ノード234が離脱する場合としては、例えば、通信環境の悪化や通常ノード234の電源断などがある。また、通常ノード234の利用者により多重化分散KVSシステムから離脱する操作が行われた場合などでも通常ノード234が離脱する。
(S131、S132)同期の処理を実行するタイミングで、通常ノード214は、未通知の操作履歴を通常ノード224、234に送信する。このとき、通常ノード214は、同IDノードリストを参照し、通常ノード214と同じIDに割り当てられている通常ノード224、234のIP Addressに対して未通知の操作履歴を送信する。
(S133)通常ノード214から未通知の操作履歴を受信した通常ノード224は、受信を完了した旨を示す応答を通常ノード214に返す。一方、通常ノード234は既に離脱しているため、通常ノード214から通常ノード234に送信された未通知の操作履歴は通常ノード234に到達しない。そのため、通常ノード234は、未通知の操作履歴に対する応答を送信しない。
(S134)通常ノード214は、通常ノード224から応答を受信し、応答の有無に基づいて通信が不可の状態にあるノードの数(通信不可ノード数)をカウントする。この例では通常ノード224から応答が得られ、通常ノード234からは応答が得られていないため、通信不可ノード数は1となる。
また、通常ノード214は、通信不可ノード数が閾値ThN以上であるか否かを判定する。S134の段階では通信不可ノード数が1であるから、通常ノード214は、通信不可ノード数が閾値ThN以上ではないと判定し、そのまま動作を継続する。つまり、通常ノード214の他に、同じIDに割り当てられている通常ノード224が正常稼働しており、KVSデータの冗長性が維持されているため、通常ノード214の運用がそのまま継続される。
(S135、S136)通常ノード224は、通常ノード214から受信した未通知の操作履歴に基づいて自身が保持する操作履歴を更新する(図20を参照)。また、通常ノード224は、更新後の操作履歴にある未実行のKVS操作(未通知の操作履歴に対応するKVS操作)を自身が保持するKVSデータに適用する。そして、通常ノード224は、そのまま動作を継続する。
上記のように、多重化分散KVSシステムでは、同じIDに割り当てられているノードが複数存在するため、一部のノードが離脱しても、KVSデータの冗長性が失われない限り、そのまま運用を継続することができる。もちろん、完全に冗長性が失われる前に、冗長性が低下した段階で対処する仕組みにすることもできる。
例えば、ID空間の多重度がW(W≧4)の場合、同じIDに割り当てられているノードの数が2になった時点で冗長性を回復するための処理を実施する仕組みに変形することができる。つまり、ID空間の多重度に応じて閾値ThNを適切に変形することで、KVSデータの消失に対するリスクを好適に抑制することができる。
ここで、通信不可ノード数が閾値ThN未満となった場合に実行される処理の流れについて説明する(図22を参照)。
(S141、S142)通常ノード224、234が離脱する。
(S143、S144)同期の処理を実行するタイミングで、通常ノード214は、未通知の操作履歴を通常ノード224、234に送信する。このとき、通常ノード214は、同IDノードリストを参照し、通常ノード214と同じIDに割り当てられている通常ノード224、234のIP Addressに対して未通知の操作履歴を送信する。
但し、通常ノード224、234は既に離脱しているため、未通知の操作履歴は通常ノード224、234に到達しない。そして、通常ノード214は、通常ノード224、234から未通知の操作履歴に対する応答を得ることができない。
(S145)通常ノード214は、応答の有無に基づいて通信が不可の状態にあるノードの数(通信不可ノード数)をカウントする。この例では通常ノード224、234から応答が得られないため、通信不可ノード数は2となる。また、通常ノード214は、通信不可ノード数が閾値ThN以上であるか否かを判定する。
S145の段階では通信不可ノード数が2であるから、通常ノード214は、通信不可ノード数が閾値ThN以上であると判定する。つまり、通常ノード214の他に、正常稼働している同じIDのノードが存在せず、KVSデータの冗長性が失われている。この場合、通常ノード214は、その対処としてS146以降の処理を実行する。
(S146)通常ノード214は、KVS操作の受け付けを停止する。
(S147)通常ノード214は、通常ノード214の機能を移管する移管先のノード(代替ノード)を特定する。
例えば、通常ノード214は、自身が離脱した場合に、自身が保持するキーの割当先となるノードを探索し、そのノードを代替ノードとする。図6の例でID#4のノードが離脱する場合、ID#4のノードが保持するKey#3、Key#4は、ID#0のノードに移管される。この場合、通常ノード214は、ID#0のノード(初期ノード210)を代替ノードとする。なお、操作の受け付けを停止した後に、通常ノード214に対して要求されたKVS操作は、代替ノードに転送される。
(S148、S149)通常ノード214は、自身が保持しているKVSデータを代替ノードに移管する。そして、通常ノード214は、自身の離脱を各ノードに通知すると共に、初期ノード210に対して参加を要求する。初期ノード210に参加を要求することで、通常ノード214はノードプール410に収容される。
上記のように、各ノードは、同期処理の中で通信不可ノード数を監視し、同じIDに割り当てられているノードの多重化が維持されているかを確認する。そして、ノードの多重化が十分でなく、KVSデータの冗長性が低下していると判断される状況にある場合、そのIDに割り当てられているノードを離脱させてノードプールに戻す制御が実施される。ノードプールに十分な数のノードがあれば、それら複数のノードが共通するIDに割り当てられ、KVSデータの冗長性が回復される。
ここまで、同期及び死活監視の処理の流れについて説明してきた。
(ノードの再参加)
次に、図23及び図24を参照しながら、再参加及び同期の処理の流れについて説明する。図23は、第2実施形態に係る再参加及び同期の処理について説明するための図である。図24は、第2実施形態に係る再参加及び同期の処理の流れについて説明するためのシーケンス図である。
図23の例は、一旦離脱した通常ノード234が再参加する際に実施される同期の様子を示している。通常ノード234が移動端末である場合、通信環境の変化により一時的に通信不可の状態になることがある。この場合、通常ノード234は、図21(S132、S134を参照)のように、離脱した状態にあると判断される。
仮に、一時的に離脱状態になった通常ノード234を新たなIDに割り当てて再参加させると、通常ノード234が保持しているKVSデータ及び操作履歴は利用できなくなる。そのため、一時的に通信不可の状態になった後、すぐに通常ノード234の通信状態が復旧する場合、通常ノード234を元のIDに再参加させ、既に保持しているKVSデータや操作履歴を利用して運用を継続できれば、システムの負担を低減できる。
図21を参照しながら説明したように、多重化分散KVSシステムでは、同じIDに割り当てられているノードの一部が離脱した場合でも、残りのノードで運用が継続される。そのため、残りのノードで運用が継続されている際、一時的に離脱したノードを元のIDに再参加させ、図23に示すように、離脱期間に更新されている操作履歴を同期させれば、再参加したノードを加えた状態で運用を継続することができる。
図23の例では、再参加した通常ノード234が、運用を継続している通常ノード224から操作履歴を取得している。この場合、通常ノード234は、通常ノード224から取得した操作履歴と、自身が保持している操作履歴とを比較し、両者の差分を抽出する。そして、通常ノード234は、抽出した差分を自身の操作履歴に反映させると共に、差分に含まれるKVS操作を自身のKVSデータに反映させる。この処理により、通常ノード224、234のKVSデータが同期される。
つまり、通常ノード234が再参加する場合、通常ノード234及び通常ノード234と同じIDに割り当てられている通常ノード214、224は、以下の流れで処理を実行する(図24を参照)。
(S151、S152)通常ノード234が離脱する。その後、通常ノード234が再参加する。なお、離脱から再参加までの期間が所定期間(例えば、1秒など)より短い場合に再参加を許可する仕組みとしてもよい。
(S153、S154)通常ノード234は、稼働確認のメッセージを通常ノード214、224に送信する。このとき、通常ノード234は、同IDノードリストを参照し、通常ノード234と同じIDに割り当てられている通常ノード214、224のIP Addressに対して稼働確認のメッセージを送信する。
(S155、S156)通常ノード234から稼働確認のメッセージを受信した通常ノード214、224は、受信を完了した旨を示す応答を通常ノード234に返す。
なお、この例では通常ノード214、224が稼働しているため、通常ノード214、224から稼働確認のメッセージに対する応答が通常ノード234に返される。しかし、図22に示したように、既に通常ノード214、224が離脱している場合、稼働確認のメッセージに対する応答は通常ノード234に返されない。この場合、通常ノード234は、再参加の処理を終了し、例えば、初期ノード210に参加を要求する。
(S157)通常ノード234は、操作履歴の同期を依頼するノード(同期先)を選択する。なお、同期先は、ランダムに選択されてもよいし、予め設定されている優先順位に基づいて選択されてもよい。例えば、通常ノード234が保持するRTTデータに基づいてRTTが小さいノードが優先的に同期先として選択されてもよいし、稼働確認のメッセージを送信してから応答が返るまでの時間が短いノードが選択されてもよい。図24の例では、通常ノード224が選択されている。
(S158)通常ノード234は、同期先として選択した通常ノード224に同期要求を送信する。
(S159)通常ノード234から同期要求を受けた通常ノード224は、自身が保持している操作履歴を通常ノード234に送信する。
(S160、S161)通常ノード234は、通常ノード224から受信した操作履歴に基づいて自身が保持する操作履歴を更新する。また、通常ノード234は、更新後の操作履歴にある未実行のKVS操作(操作履歴の差分に対応するKVS操作)を自身が保持するKVSデータに適用する。S161までの処理が完了した後、通常ノード214、224、234はそのまま動作を継続する。
上記のように、一時的に離脱したノードを元のIDに割り当て、同じIDに割り当てられている他のノードと操作履歴を同期してKVSデータを更新することで、多重化分散KVSシステムは離脱前の状態に復旧する。このような再参加を許容することで、新たなノードの参加に伴うルーティングテーブルの再構築、キーの再割り当て、KVSデータの移管などの処理を省略することができ、頻繁にノードの参加・離脱があってもシステムの性能低下を抑制することができる。
ここまで、再参加及び同期の処理の流れについて説明してきた。
(RTTの計測)
次に、図25を参照しながら、RTT測定時の処理の流れについて説明する。図25は、第2実施形態に係るRTT測定時の処理の流れについて説明するためのフロー図である。なお、ここでは説明の都合上、初期ノード210がRTTを測定する場合を例に説明する。
(S171)プール管理部244は、ノードプール情報241fを参照し、ノードプール410からノードのペアを選択する。
(S172)プール管理部244は、S171で選択したノード間のRTTを測定する。例えば、プール管理部244は、選択したペアの一方に対して他方のIP Addressを通知し、IPネットワークにおけるノードの到達性を確認するためのソフトウェアであるpingを利用してRTTを測定するように指示する。そして、プール管理部244は、指示を与えたノードからRTTを取得する。
(S173)プール管理部244は、S171で選択したノードのペアと、S172で取得したRTTとを対応付け、RTTデータ241gとして記憶部241に保存する。
(S174)プール管理部244は、全てのペアを選択し終えたか否かを判定する。全てのペアを選択し終えた場合、処理はS175へと進む。一方、未選択のペアがある場合、処理はS171へと進む。
(S175)プール管理部244は、RTTデータ241gを参照し、RTTが相互にThT(例えば、100ミリ秒など)より小さくなるノードの集合(近傍ノード群)を特定する(クラスタリング)。
例えば、プール管理部244は、ノードプール410からID空間の多重度と同じ数のノードを選択し、選択したノードのペア毎にRTTが閾値ThTより小さいか否かを判定する。そして、全てのペアのRTTが閾値ThTより小さい場合、プール管理部244は、選択したノードの集合を近傍ノード群(図15を参照)として特定する。
S175の処理が完了すると、図25に示した一連の処理は終了する。
以上、多重化分散KVSシステムにおいて実行される処理の流れについて説明した。
上記のように、多重化分散KVSシステムは、識別子を割り当てる論理空間を多重化し、識別子に割り当てるノードを冗長化させてKVSデータの冗長化を図ることで、ノードの離脱によるデータの消失を防止している。また、同じ識別子に割り当てられた一部のノードが離脱しても冗長性が許容可能な範囲で維持されている場合には残りのノードで運用が継続される。
そのため、ノードの離脱頻度が高い場合でも、離脱時に生じる処理負担を低減でき、システムの性能を安定的に維持することができる。また、一時的に離脱したノードが再参加する際、元の識別子に割り当てて他のノードと操作履歴を同期するため、ノードの離脱と再参加が頻繁に繰り返される場合でも、ルーティングテーブルの再計算などを省略でき、システムの性能が好適に維持される。つまり、ルーティングテーブルの更新コストや同期用データの転送コストを低減でき、参加・離脱の頻度が高いノードを多数含むシステムに第2実施形態の技術を適用した場合の効果は更に格別なものとなる。
なお、識別子を割り当てる論理空間の規定やキーの探索アルゴリズムなどについてChordの方式を例に説明を進めてきたが、他のDHTやSkip Graphなどの方式に対しても第2実施形態の技術を適用可能である。つまり、論理空間の多重化、同一識別子に割り当てられるノードの一部が離脱した場合の処理、及び再参加時の処理などは、他の方式に同様に当てはめることが可能であり、こうした方式を採用する変形例についても当然に第2実施形態の技術的範囲に属する。
以上、第2実施形態について説明した。
10 情報管理装置
11 記憶部
11a 管理テーブル
12 制御部
21、22、23 ID空間
30 ノードプール
K1、K7 キー
V1、V7 値
N01、N02、N03 ノード

Claims (7)

  1. 所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムを管理するコンピュータに、
    複数のシステムに共通の識別子と、前記識別子に共通に割り当てられたキーと、前記識別子に割り当てられたノードの情報とを管理テーブルに記憶し、
    いずれのシステムにも割り当てられていないノードの集合であるノードプールのノード数が前記システムの数以上のとき、前記システムの数と同数のノードを前記ノードプールから抽出し、抽出した前記ノードを前記共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて前記管理テーブルを更新する
    処理を実行させる、情報管理プログラム。
  2. 前記抽出する処理では、
    前記ノードプールに含まれるノード同士についてノード間の通信にかかる時間を監視し、前記時間の合計が最小となるノードの組み合わせを抽出する処理が実行される
    請求項1に記載の情報管理プログラム。
  3. 前記複数のシステムのうち第1のシステムに含まれる第1のノードが、指定された前記キーに対応する情報の要求を受け付けたとき、
    前記第1のノードは、
    前記ノードの割り当てに基づいて、指定された前記キーを保持するノードが割り当てられている前記識別子を特定し、前記第1のシステムに含まれるノードのうち、特定した前記識別子に割り当てられている第2のノードに問い合わせ、
    前記第2のノードから応答がない場合、前記複数のシステムのうち前記第1のシステムとは異なる第2のシステムに含まれるノードの中から、特定した前記識別子に割り当てられている第3のノードに問い合わせる
    請求項1又は2に記載の情報管理プログラム。
  4. 前記情報管理プログラムは、
    同じ前記識別子に割り当てられているノードのうち、問い合わせに対して応答があるノードの数が所定の閾値より小さいとき、該識別子に対する全てのノードの割り当てを解除し、割り当てが解除された前記ノードのうち応答がある前記ノードを前記ノードプールに含める
    処理をさらに実行させる、請求項1〜3のいずれか1項に記載の情報管理プログラム。
  5. 所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムを管理するコンピュータが、
    複数のシステムに共通の識別子と、前記識別子に共通に割り当てられたキーと、前記識別子に割り当てられたノードの情報とを管理テーブルに記憶し、
    いずれのシステムにも割り当てられていないノードの集合であるノードプールのノード数が前記システムの数以上のとき、前記システムの数と同数のノードを前記ノードプールから抽出し、抽出した前記ノードを前記共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて前記管理テーブルを更新する
    情報管理方法。
  6. 所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムを管理する情報管理装置であって、
    複数のシステムに共通の識別子と、前記識別子に共通に割り当てられたキーと、前記識別子に割り当てられたノードの情報とを記憶する管理テーブルが格納される記憶部と、
    いずれのシステムにも割り当てられていないノードの集合であるノードプールのノード数が前記システムの数以上のとき、前記システムの数と同数のノードを前記ノードプールから抽出し、抽出した前記ノードを前記共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて前記管理テーブルを更新する制御部と
    を有する、情報管理装置。
  7. 所定の関数を適用して得られるキーと該キーに対応するデータのペアを複数のノードに分散して記憶するシステムにおける情報管理方法であって、
    前記複数のノードのうち前記システムを管理する管理ノードが、
    複数のシステムに共通の識別子と、前記識別子に共通に割り当てられたキーと、前記識別子に割り当てられたノードの情報とを管理テーブルに記憶し、
    いずれのシステムにも割り当てられていないノードの集合であるノードプールのノード数が前記システムの数以上のとき、前記システムの数と同数のノードを前記ノードプールから抽出し、抽出した前記ノードを前記共通の識別子と共にそれぞれのシステムに割り当て、識別子ごとに共通のキーを割り当てて前記管理テーブルを更新する、情報管理方法。
JP2016116159A 2016-06-10 2016-06-10 情報管理プログラム、情報管理方法、及び情報管理装置 Active JP6697158B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016116159A JP6697158B2 (ja) 2016-06-10 2016-06-10 情報管理プログラム、情報管理方法、及び情報管理装置
US15/603,541 US10749957B2 (en) 2016-06-10 2017-05-24 Method and apparatus for information management

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016116159A JP6697158B2 (ja) 2016-06-10 2016-06-10 情報管理プログラム、情報管理方法、及び情報管理装置

Publications (2)

Publication Number Publication Date
JP2017220148A JP2017220148A (ja) 2017-12-14
JP6697158B2 true JP6697158B2 (ja) 2020-05-20

Family

ID=60574211

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016116159A Active JP6697158B2 (ja) 2016-06-10 2016-06-10 情報管理プログラム、情報管理方法、及び情報管理装置

Country Status (2)

Country Link
US (1) US10749957B2 (ja)
JP (1) JP6697158B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023085434A1 (ja) * 2021-11-15 2023-05-19 旭化成ホームズ株式会社 情報処理システム、情報処理方法およびプログラム

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070079004A1 (en) * 2005-09-30 2007-04-05 Junichi Tatemura Method and apparatus for distributed indexing
JP2009020757A (ja) * 2007-07-12 2009-01-29 Toshiba Corp データ登録装置、データ登録方法及びプログラム
US9131016B2 (en) * 2007-09-11 2015-09-08 Alan Jay Glueckman Method and apparatus for virtual auditorium usable for a conference call or remote live presentation with audience response thereto
JP5029373B2 (ja) * 2008-01-11 2012-09-19 日本電気株式会社 ノード、経路制御方法および経路制御プログラム
CN101860474B (zh) * 2009-04-08 2015-07-22 中兴通讯股份有限公司 基于对等网络的资源信息处理方法及对等网络
CN102483768B (zh) * 2009-04-16 2015-12-16 泰必高软件公司 基于策略的储存结构分布
BR112012010501A2 (pt) * 2009-11-03 2016-03-15 Telecom Italia Spa método para permitir compartilhamento de arquivos de conteúdo entre nós de uma rede não hierárquica, rede não hierárquica, e, software de cliente
US10084856B2 (en) * 2009-12-17 2018-09-25 Wsou Investments, Llc Method and apparatus for locating services within peer-to-peer networks
JP5544963B2 (ja) 2010-03-23 2014-07-09 日本電気株式会社 データ処理装置、データ分散処理システム、データ処理プログラム、及び、データ処理方法
WO2012004872A1 (ja) * 2010-07-07 2012-01-12 富士通株式会社 管理装置、管理プログラムおよび管理方法
JP5727258B2 (ja) 2011-02-25 2015-06-03 ウイングアーク1st株式会社 分散型データベースシステム
JP5655628B2 (ja) * 2011-02-25 2015-01-21 日本電気株式会社 情報処理システム、データバックアップ方法、情報処理装置及びその制御方法と制御プログラム
JPWO2013027784A1 (ja) 2011-08-22 2015-03-19 日本電気株式会社 データ処理装置、データ分散処理システム、データ処理方法およびプログラム記憶媒体
JP6056453B2 (ja) * 2012-12-20 2017-01-11 富士通株式会社 プログラム、データ管理方法および情報処理装置
US20160197831A1 (en) * 2013-08-16 2016-07-07 Interdigital Patent Holdings, Inc. Method and apparatus for name resolution in software defined networking
WO2015029139A1 (ja) * 2013-08-27 2015-03-05 株式会社東芝 データベースシステム、プログラムおよびデータ処理方法

Also Published As

Publication number Publication date
US20170359416A1 (en) 2017-12-14
US10749957B2 (en) 2020-08-18
JP2017220148A (ja) 2017-12-14

Similar Documents

Publication Publication Date Title
JP6674099B2 (ja) 情報管理プログラム、情報管理方法、及び情報管理装置
US10713134B2 (en) Distributed storage and replication system and method
CN107079059B (zh) 区块链存储方法、装置及节点设备
JP6362119B2 (ja) クラスタ・ブレイン分割後の調停処理方法、クォーラム記憶装置、およびシステム
US9917884B2 (en) File transmission method, apparatus, and distributed cluster file system
US10320905B2 (en) Highly available network filer super cluster
US9367261B2 (en) Computer system, data management method and data management program
US10021181B2 (en) System and method for discovering a LAN synchronization candidate for a synchronized content management system
CN107451013B (zh) 基于分布式系统的数据恢复方法、装置及系统
CN108363641A (zh) 一种主备机数据传递方法、控制节点以及数据库系统
CN104468163A (zh) 容灾网络组网的方法、装置及容灾网络
WO2016082078A1 (zh) 路径管理的系统、装置和方法
KR101527634B1 (ko) 샤딩 서비스를 제공하는 방법 및 장치
US9544371B1 (en) Method to discover multiple paths to disk devices cluster wide
JP6697158B2 (ja) 情報管理プログラム、情報管理方法、及び情報管理装置
CN112492030B (zh) 数据存储方法、装置、计算机设备和存储介质
JP5445138B2 (ja) データ分散格納方法およびデータ分散格納システム
JPWO2012160641A1 (ja) 管理装置、情報処理装置、情報処理システム及びデータ転送方法
CN112860480B (zh) 一种双活存储系统及其处理数据的方法
JP2007173990A (ja) 情報処理装置、通信負荷分散方法及び通信負荷分散プログラム
JP2019509579A (ja) 情報処理システム
CN107153594B (zh) 分布式数据库系统的ha组件选主方法及其系统
JP2024514467A (ja) 地理的に分散されたハイブリッドクラウドクラスタ
JP6036302B2 (ja) 情報処理装置、情報処理システム、情報処理方法および情報処理プログラム
JP5890452B2 (ja) クラスタシステムのサーバ装置およびそのプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190311

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200124

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200218

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200311

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20200311

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20200311

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: 20200324

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200406

R150 Certificate of patent or registration of utility model

Ref document number: 6697158

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150