JP6007340B2 - 計算機システム、計算機システム管理方法及びプログラム - Google Patents
計算機システム、計算機システム管理方法及びプログラム Download PDFInfo
- Publication number
- JP6007340B2 JP6007340B2 JP2015547360A JP2015547360A JP6007340B2 JP 6007340 B2 JP6007340 B2 JP 6007340B2 JP 2015547360 A JP2015547360 A JP 2015547360A JP 2015547360 A JP2015547360 A JP 2015547360A JP 6007340 B2 JP6007340 B2 JP 6007340B2
- Authority
- JP
- Japan
- Prior art keywords
- range
- group
- data
- key range
- node
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
- G06F16/24556—Aggregation; Duplicate elimination
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/1824—Distributed file systems implemented using Network-attached Storage [NAS] architecture
- G06F16/1827—Management specifically adapted to NAS
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
本発明は、複数の計算機から構成される分散データベースに関する。
近年、Webを用いたアプリケーションを実行する計算システムにおいてデータ量が爆発的に増大しており、複数のサーバにデータを分散させることによって、データへのアクセス性能を向上させるシステムが様々知られている。例えば、RDBMS(Relational DataBase Management System)では、データを所定のレンジ(例えば、キーレンジなど)毎に分割し、分割されたデータを複数のサーバに配置することによって、システム全体のアクセス性能を向上させる方法が知られている。
また、キャッシュサーバ等に用いられるシステムとして、KVS(Key Value Store)等のNoSQL(Not only SQL)データベースが知られている。KVSには、データ(バリュー)と、データの識別子(キー)とがペアとなったレコードが複数格納される。
KVSでは、データに高速にアクセス可能な揮発性の記憶媒体、例えばメモリに、データを格納する構成(メモリストア)、データ格納の永続性に優れる不揮発性の記録媒体、例えば、SSD(Sorid State Disk)やHDD等に、データを格納する構成(ディスクストア)、又は、前述したものを併用する構成等の種々の構成がとられている。
インメモリ型KVSは、ディスク型KVSに比べて、高速なデータアクセスを実現するが、いくつか欠点もある。第一に、物理的制約などにより、SSDやHDDに比べて一台のサーバに搭載可能なメモリ容量が小さいため、ディスク型KVSに比べて格納可能なデータ量が小さくなってしまう。第二に、メモリは揮発性の記録媒体であるため、何らかの障害でサーバが停止するとメモリ上のデータが消滅してしまう。
上記欠点を克服したシステムが、インメモリ型分散KVS(以下、分散KVS)である。分散KVSは、複数のサーバからクラスタを構成して、そのクラスタに含まれるサーバのメモリ上に構成されるKVSである。第一の欠点に対しては、複数のサーバ上にあるメモリを統合することで、一台のサーバでは保持できないメモリ容量を確保できる。第二の欠点に対しては、複数のサーバ間で同じデータを複製しておくことで、一部のサーバが停止してもデータの消滅を回避できる。
分散KVSを構成する各サーバは、他のサーバとは重複しないレンジを担当し、そのレンジに含まれるデータの集合(以下、パーティション)を格納する。さらに、各サーバは他のサーバが管理しているパーティションの複製を格納する。
そして、分散KVSには、管理サーバのような特別なサーバが存在しないもしくは多重化させているため、単一点障害が存在しない。すなわち、任意のサーバに障害が発生した場合であっても、他のサーバが複製されたパーティションに基づいて処理を継続できるため、計算機システムが停止することがない。したがって、分散KVSは耐障害性も確保される。
ここで、分散KVSに格納するデータ量が多くなることで、サーバの負荷が上昇した、または格納可能なデータ量が無くなった際の対策の一つとして、クラスタに新しいサーバを追加するスケールアウトがある。スケールアウトでは、サーバが担当するレンジの変更を行う処理(以下、リバランス処理)が行われる。また、一部のサーバだけにデータが偏ることで、システムのスループットが低下した際の対策の一つとしてデータの偏りを解消する際もリバランス処理が行われる。
前述したような、リバランス処理については、特許文献1に記載された技術が知られている。
特許文献1には、既存レンジとそれに対応する既存パーティションに対して、リバランス後の新しいパーティションを用意し、既存パーティションから新しいパーティションへデータをコピーし、コピー完了後に、既存レンジとそれに対応する既存パーティションから、新しいレンジとそれに対応する新しいパーティションへアクセスを切り替える処理を行うことで、リバランス処理が実現できることが記載されている。
分散KVSを利用するアプリケーションは、銀行口座やインターネットショッピング等のオンラインシステム上の商取引にも適用される。そのため、アプリケーションが処理を継続できるように、分散KVSを停止させることなくサーバ間の負荷を調整するリバランス処理を実行する必要がある。
しかし、特許文献1では、新パーティションへのデータコピー完了後、レンジを移動させるために既存パーティションから新パーティションへデータアクセスを切り替える瞬間、システムが最も脆弱になる。
たとえば、既存パーティションを持つサーバ群と新パーティションを持つサーバ群に対して、データアクセス切り替えを通知する必要があるが、1台でもデータアクセス切り替えを通知できなかった場合、リバランス処理が完遂できずシステムが停止することが考えられる。
また、既存パーティションを持つサーバ群の一部に対して、通信タイムアウトなどによりデータアクセス切り替えを通知できなかった際、システムの停止を避けるため、上記サーバが停止したと判断し、残りのサーバだけでデータアクセスの切り替えを実行する方法が容易に考えられる。ここで、上記サーバがまだ稼働しており、かつデータアクセスを受け付けていた場合、既存パーティションと新パーティション間でデータの一貫性は崩れてしまう。
具体例として、パーティションAとパーティションBを1つの新パーティションに併合するケースにおいて、パーティションAを格納するサーバAと、パーティションB及び新パーティションを格納するサーバがサーバA以外である場合で説明する。サーバAに対してデータアクセスの切り替えを通知できないとサーバAが停止したと判断し、データアクセスの切り替えを行う。ここでサーバAがまだ稼働しており、かつデータアクセスを受け付けていた場合、新パーティションへコピーされたパーティションAのデータ更新は、サーバAが停止したとシステムが判断済みであるため、パーティションAには反映されない。したがって、サーバAがまだ停止していないことにシステムが気付くまで、パーティションAと新パーティションへコピーされたパーティションAの間でデータの一貫性が崩れてしまう。
また、通信タイムアウトなどによりデータアクセス切り替えを通知できなかった場合にはシステムの停止とデータの一貫性の崩壊を両方回避するため、データアクセス制御部、既存パーティション及び新パーティションを各々多重化し、かつ多重化した構成要素に対して定足数(Quorum)以上が応答したら合意されたとみなすことで、データの一貫性を保証し、データアクセスの切り替えを実行する方法も考えられる。ここで、基幹スイッチの故障などにより、これまで相互に通信可能なネットワークが複数の小さなネットワークに分断された場合、システムが停止する場合がある。
具体例として、パーティションAとパーティションBを1つの新パーティションに併合するケースにおいて、2つのパーティション、1つの新パーティション及び、データアクセス制御部も含めて計4つの構成要素が各々5つに多重化されていた場合を考える。この場合、データアクセスの切り替えを実行するためには、各構成要素の定足数3以上で相互通信可能なネットワークが構築されている必要があり、サーバ数は最大12台(=構成要素4×定足数3)となる。ここで、ネットワーク分断が起きた場合、最大12台のサーバが同一の小さなネットワークに残存できず、データアクセスの切り替えを実行できない場合がある。
本願において開示される発明の代表的な一例を示せば以下の通りである。
データ処理を行う複数のプロセスと、前記プロセスが処理を行うデータのキーレンジを指示する指示部と、処理対象のデータを振り分ける振り分け部とを備えるノードで構成される計算機システムであって、
第一のキーレンジのデータを処理する第一のプロセスから第一のキーレンジの一部のキーレンジである第三のキーレンジのデータ処理を第二のキーレンジのデータを処理する第二のプロセスで処理するとき、
前記指示部は第一のプロセスへ第一のキーレンジから第三のキーレンジを除いた範囲である更新後の第一のキーレンジを示す情報を含む第一のレンジ更新情報を送付し、第二のプロセスへ第二のキーレンジに第三のキーレンジを加えた範囲である更新後の第二のキーレンジを示す情報を含む第二のレンジ更新情報を送付し、振り分け部へ前記第一のプロセスに対応付けられた更新後の第一のキーレンジと第二のプロセスに対応付けられた更新後の第二の新キーレンジを含む第三のレンジ更新情報を送付し、
前記振り分け部は第三のレンジ更新情報を受け付けたとき、第一のプロセスと第二のプロセスへ振り分けるデータの範囲を変更し、
第一のプロセスは第一のレンジ更新情報を受け付けたとき、更新後の第一のキーレンジのデータ処理を実行し、
第二のプロセスは第二のレンジ更新情報を受け付けたとき、更新後の第二のキーレンジのデータ処理を実行する。
第一のキーレンジのデータを処理する第一のプロセスから第一のキーレンジの一部のキーレンジである第三のキーレンジのデータ処理を第二のキーレンジのデータを処理する第二のプロセスで処理するとき、
前記指示部は第一のプロセスへ第一のキーレンジから第三のキーレンジを除いた範囲である更新後の第一のキーレンジを示す情報を含む第一のレンジ更新情報を送付し、第二のプロセスへ第二のキーレンジに第三のキーレンジを加えた範囲である更新後の第二のキーレンジを示す情報を含む第二のレンジ更新情報を送付し、振り分け部へ前記第一のプロセスに対応付けられた更新後の第一のキーレンジと第二のプロセスに対応付けられた更新後の第二の新キーレンジを含む第三のレンジ更新情報を送付し、
前記振り分け部は第三のレンジ更新情報を受け付けたとき、第一のプロセスと第二のプロセスへ振り分けるデータの範囲を変更し、
第一のプロセスは第一のレンジ更新情報を受け付けたとき、更新後の第一のキーレンジのデータ処理を実行し、
第二のプロセスは第二のレンジ更新情報を受け付けたとき、更新後の第二のキーレンジのデータ処理を実行する。
本発明によれば、分散KVSを用いたシステムの信頼性を改善できる。
まず、概要について説明する。
図1は、実施例1における計算機システムの構成、クライアント装置300の詳細及びリバランス指示装置200の詳細を示すブロック図である。
計算機システムは、複数の計算機装置100、リバランス指示装置200、及びクライアント装置300から構成される。リバランス指示装置200は計算機装置100が役割を兼任してもよい。その際にリバランス指示装置200を多重化し、冗長性を持たせてもよい。各計算機装置100間、リバランス指示装置200と計算機装置100間及び計算機装置100とクライアント装置300間は、ネットワーク350を介して互いに接続される。ネットワーク350は、LAN、WAN及びSAN等の有線及び無線の種々の構成が考えられる。計算機装置100、リバランス指示装置200、及びクライアント装置300が通信できるものであればどのようなネットワークであってもよい。なお、ネットワーク350には、複数のネットワーク装置(図示省略)が含まれる。ネットワーク装置は、例えば、スイッチ及びゲートウェイなどが含まれる。
ここで、図1におけるリバランス指示装置200及びクライアント装置300の詳細を説明する前に図2における計算機装置100の詳細を先に説明する。
図2は、実施例1における計算機装置100の詳細を説明するブロック図である。
計算機装置100は、ネットワークインタフェース101、プロセッサ102、補助記憶装置103及び主記憶装置104を備え、計算機システムを構成する。計算機装置100は、他の計算機装置100、リバランス指示装置200及びクライアント装置300から送られる指示800にしたがって各種処理を実行する。各計算機装置100の構成は少なくとも図2に示す構成要素を持っていれば良い。
なお、計算機装置100は、キーボード、マウス、タッチパネル等の入力装置及びディスプレイ等の出力装置を備えていてもよい。
ネットワークインタフェース101は、ネットワーク350を介して他の装置と接続するためのインタフェースである。
プロセッサ102は、主記憶装置104に格納されるプログラムで実現された各処理部を実行する。本実施例では各処理部はプログラムで実現しているが、ハードウェアとして実現されても良い。プロセッサ102がプログラムを実行することによって、計算機装置100が備える機能を実現することができる。以下、プログラムを主語に処理を説明する場合には、プロセッサ102によって、プログラムが実行されていることを示す。
補助記憶装置103は、各種情報を格納する。補助記憶装置103は、例えば、HDD又はSSD等が考えられる。なお、補助記憶装置103上に分散KVSを構築するディスクストア(図示省略)が構築されてもよい。
主記憶装置104は、プロセッサ102が実行するプログラム及び当該プログラムの実行に必要な情報を格納する。主記憶装置104は、例えば、メモリ等が考えられる。
本実施例の主記憶装置104上には、ノード110を実現するためのプログラムが格納されている。なお、1つの計算機装置100には複数のノード110が存在してもよい。
ノード110は指示受信部120、振り分け部130、指示部140、バリア管理部150、コピー部160及び複数のプロセス170を実現するためのプログラムで構成されている。
また、振り分け部130は、原子的配信部131、電文貯蓄部132及びノードレンジ情報更新部133で構成されている。また、必要な情報としてノードレンジ情報506を保持している。なお、ノードレンジ情報506は図5におけるシステムレンジ情報500と同じ構造である。
バリア管理部150は必要な情報として、通知済みプロセス情報151を保持している。なお、通知済みプロセス情報151の説明は図12で述べる。
プロセス170は、原子的配信部171、電文貯蓄部172、電文実行部173、データストア部700及び電文退避部180で構成されている。また、プロセス170は必要な情報として、プロセスレンジ情報505、グループ情報600と退避プロセスレンジ情報181を保持している。なお、プロセスレンジ情報505及び退避プロセスレンジ情報181は図5におけるシステムレンジ情報500と同じ構造である。
ここで、主記憶装置104に格納されるプログラム及び情報について説明する。
指示受信部120は、計算機装置100、クライアント装置300及びリバランス指示装置200から送られた指示800を受け取り、当該指示800の内容に応じて、指示800を振り分け部130、指示部140、またはコピー部160に中継する。
指示部140は、指示受信部120から受け取った指示800に基づいて、後述するレンジ更新処理を実行する。動作の詳細は図9で述べる。
コピー部160は、指示受信部120から受け取った指示800に基づいて、後述するグループ内プロセスコピー処理を実行する。動作の詳細は図13及び図14で述べる。
プロセス170は一つのレンジを担当する処理単位である。プロセス170は「状態」及び「イベント」を用いて対象の振る舞いが表現されるシステム(状態マシンやオートマトンとも呼ばれる)であって、内部に現在の状態を保持し、外部からイベントが入力された場合、予め決定されたルールにしたがって、現在の状態を次の状態へ「状態遷移」させる。
ここで、KVS内で保存しているキーに対するデータを「状態」、当該キーに対するデータ更新等の操作を「イベント」、当該操作に対する当該データの更新処理を「状態遷移」と見立てた場合、KVSはキー毎のプロセス170の集合として扱うことができる。
ただし、キー毎のプロセス170の集合を運用する場合、プロセス170の数が膨大となるため現実的ではない。例えば、キーのデータ長が4バイトである場合、4バイトで表現できるキーの数(2の32乗)より、必要となるプロセス170の数は約42億個になる。
したがって、KVSは特定のレンジに含まれるキーの集合毎に一つのプロセス170を運用する方が望ましい。レンジはハッシュ値の範囲を表し、各データのキーからハッシュ値を算出し、算出したハッシュ値が含まれるレンジを担当するプロセス170がそのデータを格納するものとする。この方式をConsistent Hashing法と呼ぶ。上記方式以外にもRange法及びList法等の方式を採用しても良い。
そして、分散KVSをプロセス170で実現しようとする場合、データを複製し合う複数のプロセス170間でデータの一貫性を維持するため、複数のプロセス170に同一の振る舞いを実行させる必要がある。なお、データを複製し合うために同一の振る舞いを実行するプロセス170の集合を「グループ」と呼ぶ。グループに属する全プロセス170が同一の振る舞いを実行するためには、グループに属する全プロセス170に同一イベントを同一の入力順で入力する必要がある。そこで、イベントを入力する順番を決定するために原子的配信部171が使用される。
原子的配信部171は、同じグループに属するプロセス170の原子的配信部171と通信できる。グループに関する情報をグループ情報600に格納されている。そして、例えば分散合意アルゴリズムを用いて、グループ内で同一の電文900を同一の順序で配信する。当該配信方法を原子的配信と呼ぶ(他にも全順序ブロードキャストや原子的ブロードキャストとも呼ばれることがある)。動作の詳細は図10の説明で述べる。
電文貯蓄部172は、原子的配信部171で原子的配信された電文900をFIFO(First In First Out)方式で一時的に貯蓄する。
電文実行部173は、電文貯蓄部172から電文900を取り出し、データストア部700が管理するデータに対し、電文900に対応した各種処理を行う。各種処理は、例えばデータの書き込み、データの上書き、及びデータの削除などである。動作の詳細は図11で述べる。
振り分け部130は、指示受信部120から受け取ったデータ更新指示802に基づいて、データ更新等の操作を行う。動作の詳細は図9で述べる。
原子的配信部131は、全てのノード110に含まれる原子的配信部131と通信できる。ただし、振り分け部130はプロセス170が保持するグループ情報600に相当する情報を保持しておらず、指示部140から指定されたグループ情報600に基づいて原子的配信する。動作の詳細は図10の説明で述べる。
電文貯蓄部132は、原子的配信部131で原子的配信された電文900をFIFO方式で一時的に貯蓄する。
ノードレンジ情報更新部133は、電文貯蓄部132に蓄えられたレンジ更新電文901を取り出して、ノードレンジ情報506を更新する。
バリア管理部150は、後述するレンジ更新処理を行う2つのグループに属するプロセス170間の実行タイミングを制御する。動作の詳細は図12で述べる。
計算機装置100の説明が終了したので、図1におけるリバランス指示装置200及びクライアント装置300の説明に戻る。
リバランス指示装置200は、ネットワークインタフェース201、プロセッサ202、補助記憶装置203、及び主記憶装置204を備え、計算機装置100に対してリバランス処理を制御する。
ネットワークインタフェース201は、ネットワーク350を介して他の装置と接続するためのインタフェースである。
プロセッサ202は、主記憶装置204に格納されるプログラムを実行する。プロセッサ202がプログラムを実行することによって、リバランス指示装置200が備える機能を実現することができる。以下、プログラムを主語に処理を説明する場合には、プロセッサ202によって、プログラムが実行されていることを示す。
補助記憶装置203は、各種情報を格納する。補助記憶装置203は、例えば、HDD又はSSD等が考えられる。
主記憶装置204は、プロセッサ202が実行するプログラム及び当該プログラムの実行に必要な情報を格納する。主記憶装置204は、例えば、メモリ等が考えられる。
本実施例の主記憶装置204上には、性能監視部213、リバランス指示部212及び構成情報管理部211を実現するためのプログラムが格納される。また、主記憶装置204上には、必要な情報として構成情報400及びシステムレンジ情報500が格納される。
ここで、主記憶装置204に格納されるプログラム及び情報について説明する。
リバランス指示部212は、リバランス処理を実現するために、各ノード110に対して指示800を送る。動作の詳細は、図9で述べる。
構成情報管理部211は、ノード110及びノード110に含まれるプロセス170の構成に関する構成情報400を管理する。動作の詳細は、図9で述べる。
性能監視部213は、各グループの性能指標を定期的に収集している。その収集結果からグループ間で性能指標の偏りを検出した場合、その偏りを是正するためにリバランス指示部212にリバランス処理を指示する。動作の詳細は、図9で述べる。
クライアント装置300は、ネットワークインタフェース301、プロセッサ302、補助記憶装置303、及び主記憶装置304を備え、ノード110に対してデータ更新指示802を送る。
ネットワークインタフェース301は、ネットワーク350を介して他の装置と接続するためのインタフェースである。
プロセッサ302は、主記憶装置304に格納されるプログラムを実行する。プロセッサ302がプログラムを実行することによって、クライアント装置300が備える機能を実現することができる。以下、プログラムを主語に処理を説明する場合には、プロセッサ302によって、プログラムが実行されていることを示す。
補助記憶装置303は、各種情報を格納する。補助記憶装置303は、例えば、HDD又はSSD等が考えられる。
主記憶装置304は、プロセッサ302が実行するプログラム及び当該プログラムの実行に必要な情報を格納する。主記憶装置304は、例えば、メモリ等が考えられる。
本実施例の主記憶装置304上には、アプリケーション311、及びクライアント情報管理部312を実現するためのプログラムが格納される。
ここで、主記憶装置304に格納されるプログラム及び情報について説明する。
アプリケーション311は、クライアント情報管理部312にデータ更新等の操作を依頼する。また、アプリケーション311は、クライアント情報管理部312から返される依頼結果を受けとる。
クライアント情報管理部312は、アプリケーション311から依頼されたデータ更新等の操作からデータ更新指示802を作成し、構成情報管理部211から最新のシステムレンジ情報500及び構成情報400を取得して、データ処理を担当するノード110を検索し、該当ノード110へ作成したデータ更新指示802を送り、該当ノード110からのデータ更新指示802の実行結果であるデータ更新完了応答852を受け取るとアプリケーション311に依頼結果を返す。なお、データ更新指示802及びデータ更新完了応答852の説明は、図8で述べる。
なお、本実施例では、計算機装置100、リバランス指示装置200及びクライアント装置300が備える機能を、ソフトウェアを用いて実現しているが、専用のハードウェアを用いて同一の機能を実現してもよい。
図3(a)−(f)は、リバランス処理の概要の説明図である。
この例では、ハッシュ値は1〜2000の間で求められ、1〜2000までのレンジでシステムが取り扱う全データが格納できるとする。ここで、1〜1000のレンジαに含まれる丸で表わされるデータを処理するグループA、1001〜1700のレンジβに含まれる四角で表わされるデータを処理するグループB及び1701〜2000のレンジγに含まれる三角で表わされるデータを処理するグループCでデータ更新等の操作を処理する分散KVSについて説明する。
図3(a)のようにグループAはレンジαに含まれる3個のデータを処理しており、各データはノード1とノード2上に存在するグループAに属するプロセス170のデータストア部700で多重化されているため、グループAは計6個(=3個×2多重)のデータを保持している。同様に、グループBはレンジβに含まれる7個のデータを処理しており、各データはノード1とノード3上に存在するグループBに属するプロセス170のデータストア部700で多重化されているため、グループBは計14個(=7個×2多重)のデータを保持している。さらに同様に、グループCはレンジγに含まれる5個のデータを処理しており、各データはノード2とノード3上に存在するグループCに属するプロセス170のデータストア部700で多重化されているため、グループCは計10個(=5個×2多重)のデータを保持している。
このため各グループ間で負荷に偏りが生じている。そこで、レンジβの範囲を狭め、レンジαの範囲を広げることにより偏りを無くすため、移動グループの作成、グループの分割操作、移動グループの移動、グループの併合操作及び移動グループの削除というステップを実施することによりリバランスする処理を説明する。
図3(b)は図3(a)の状態から、グループの分割操作の準備として、グループBを含むノード110に、レンジ範囲が無い空レンジを担当する、一時的に使用する移動グループDを作成した状態を示している。具体的には、ノード1とノード3がグループBに属するプロセス170を含むため、ノード1とノード3に移動グループDを作成する。なお、空レンジを、図3(b)のように、空レンジと記述する。
図3(c)は図3(b)の状態から、グループの分割操作を行い、グループBのレンジβと移動グループDのレンジδを更新した状態を示している。また、グループの分割操作を行う際、移動グループDが新しく担当するレンジでグループBが格納しているデータについては、グループBから移動グループDへ移動させる。なお、移動グループDが担当するデータは図中では菱形で表される。
図3(d)は図3(c)の状態から、グループの併合操作の準備として、グループAを含むノード110に移動グループDを移動させた状態を示している。移動グループDを移動させるため、まずノード3が保持する移動グループDに属するプロセス170及び当該プロセス170が保持するデータをノード2にコピーし、コピーしたプロセス170を移動グループDに属させる(図中の”1.コピー”)。ここで、あるグループに属するプロセス170を別のノード110にコピーし、かつ同じグループに属させることをグループ内プロセスコピー処理と呼ぶ。ちなみに、図3(d)ではノード3上に存在する移動グループDに属するプロセス170をコピー元として用いてグループ内プロセスコピー処理を実施しているが、ノード1上に存在する移動グループDに属するプロセス170をコピー元として用いてグループ内プロセスコピー処理を実施しても良い。そして、グループの併合操作上で邪魔となるノード3上に存在する移動グループDに属するプロセス170を削除する(図中の”2.削除”)。ここで、あるグループに属するプロセス170の一部を削除することをグループ内プロセス削除処理と呼ぶ。
図3(e)は図3(d)の状態から、グループの併合操作を行い、グループAのレンジαと移動グループDのレンジδを更新した状態を示している。また、グループの併合操作を行う際、グループAが新しく担当するレンジで移動グループDが格納しているデータについては、移動グループDからグループAへ移動させる。
図3(f)は図3(e)の状態から、一時的に作成した移動グループDを削除し、リバランス処理が完了した状態を示している。これにより図3の(a)と比べて、グループAのレンジαが1〜1000から1〜1500に、グループBのレンジβが1001〜1700から1501〜1700に変更され、また、グループAとグループBに格納されるデータ数を各々10個(=5個×2多重)に均等化されている。
ここで、グループの分割操作とグループの併合操作は、「レンジ更新処理」と呼ばれる処理によって実現する。具体的には、グループの分割操作は、グループBが担当するレンジβと移動グループDが担当するレンジδを、1001〜1700と−から、1501〜1700と1001〜1501に更新することで実現する。また、グループの併合操作は、移動グループDが担当するレンジδとグループAが担当するレンジαを、1001〜1501と1〜1000から、−とレンジ1〜1500に更新することで実現する。なお、レンジ更新処理後にレンジが狭まるグループを移動元グループ、レンジが広がるグループを移動先グループ、移動元グループに属するプロセス170を移動元プロセス170、そして移動先グループに属するプロセス170を移動先プロセス170と呼ぶ。
したがって、移動グループの作成・削除、レンジ更新処理及びグループ内プロセスコピー・削除処理によりリバランスを実現できる。
図4は、実施例1における構成情報400の一例を示す説明図である。
構成情報400は、各計算機装置100上に存在するノード110とそのノード110内に配置されるグループに関する情報を格納する。具体的には、構成情報400は、計算機装置ID列401、ノードID列402とグループ情報列403を含む。
計算機装置ID列401は、計算機装置100を一意に識別するための識別子(計算機装置ID)を格納する。
ノードID列402は、ノード110を一意に識別するための識別子(ノードID)を格納する。
グループ情報列403は、グループを識別するための識別子(グループID)のリストを格納する。
図5は、実施例1におけるシステムレンジ情報500の一例を示す説明図である。
システムレンジ情報500は、各グループが担当するレンジに関する情報を格納する。具体的には、グループID列501とレンジ列502を含む。
グループID列501は、グループIDを格納する。
レンジ列502は、グループが担当するレンジを格納する。なお、空レンジである場合は“−”が格納される。
ここでノードレンジ情報506が格納する情報は、当該ノード110上に存在するグループに関するレコードだけである。例えば図3(a)のノード1の場合、グループAに属するプロセス170とグループBに属するプロセス170がノード1上に存在するため、ノードレンジ情報506は、図5のシステムレンジ情報500が保持するレコードのうち、グループAとグループBに関するレコードだけ格納している。
さらにプロセスレンジ情報505が格納する情報は、当該プロセス170が属しているグループに関するレコードだけである。例えば図3(a)のグループAに属するプロセス170の場合、図5のシステムレンジ情報500が保持するレコードのうち、プロセスレンジ情報505はグループAに関するレコードだけ格納している。
図6は、実施例1におけるグループ情報600に格納されるデータの形式を示す説明図である。
グループ情報600は、プロセス170の原子的配信部171が電文900を原子的配信する対象であるグループに属するプロセス170が存在するノード110に関する情報を格納する。グループ情報600は、ノードID列601を含む。
ノードID列601は、ノードIDを格納する。
図7は、実施例1におけるデータストア部700に格納されるデータの形式を示す説明図である。
実施例1では、データストア部700はデータ管理情報703を格納する。データ管理情報703には、キー及びバリューから構成されるデータが複数含まれる。以下、キー及びバリューから構成されるデータをキーバリュー型データとも記載する。
データ管理情報703は、Key列701およびValue列702を含む。
Key列701は、データを識別するための識別子(キー)を格納する。Value列702は、実際のデータ(バリュー)を格納する。
クライアント装置300を操作するユーザは、キーを指定して分散KVSにデータを保存し、また、キーを指定して分散KVSから所望のデータを取得することができる。
なお、データストア部700に格納されるデータの形式は、図7に示すものに限定されず、例えば、キーのハッシュ値及びバリューを対応づけた形式のデータであってもよい。
図8は、取り扱う通信メッセージを示す説明図である。
通信メッセージには、リバランス指示部212にリバランス処理を指示するための通信メッセージであるリバランス指示1000、ノード110にレンジ更新処理などの各種処理の実行を指示するための通信メッセージである指示800、指示800に対する応答850、そして原子的配信部131や原子的配信部171で原子的配信する通信メッセージである電文900がある。
リバランス指示1000は、性能監視部213などからリバランス指示部212に送られる通信メッセージである。リバランス指示1000は、レンジ更新情報によって構成される。レンジ更新情報とは、図5のシステムレンジ情報500と似ており、グループID列と新レンジ列のレコードを複数格納したテーブルである。
指示800には、レンジ更新指示801、データ更新指示802、グループ内プロセスコピー準備指示811、グループ内プロセスコピー実行指示812、グループ情報更新指示813、データストア部コピー指示814、移動グループ作成指示831、グループ内プロセス削除指示832そして移動グループ削除指示833がある。
応答850には、レンジ更新完了応答851、データ更新完了応答852、グループ内プロセスコピー準備完了応答861、グループ内プロセスコピー実行完了応答862、移動グループ作成完了応答881、グループ内プロセス削除完了応答882及び移動グループ削除完了応答883がある。
電文900には、レンジ更新電文901、データ更新電文902、コピー開始電文911及び電文退避開放電文921がある。
データ更新指示802は、処理対象のデータの一つであり、データ更新等の操作、すなわちデータに対する更新処理の実行を要求するための指示800である。本実施例のデータに対する更新処理には、データの書き込み、データの上書き、及びデータの削除などが含まれる。
データ更新電文902も、処理対象のデータの一つであり、データ更新指示802と同じ内容を格納している。
データ更新完了応答852は、データ更新指示802を受け取った振り分け部130がクライアント情報管理部312にデータに対する更新処理の完了を通知するために送る応答850である。データ更新完了応答852は、データに対する更新処理の実行結果によって構成される。
レンジ更新指示801は、レンジ更新処理でノード110に送る指示800である。レンジ更新指示801は、レンジ更新処理毎にユニークに生成されたバリアIDとレンジ更新情報によって構成される。
レンジ更新電文901は、レンジ更新処理で振り分け部130の原子的配信部131とプロセス170の原子的配信部171が各グループ内で原子的配信する電文900である。レンジ更新電文901は、レンジ更新指示801と同様に、バリアIDとレンジ更新情報によって構成される。
レンジ更新完了応答851は、レンジ更新指示801を受け取った指示部140がリバランス指示部212にレンジ更新処理の完了を通知するために送る応答850である。レンジ更新完了応答851は、特に情報を保持しない。
グループ内プロセスコピー準備指示811、グループ内プロセスコピー実行指示812、グループ情報更新指示813、データストア部コピー指示814、コピー開始電文911、グループ内プロセスコピー準備完了応答861及びグループ内プロセスコピー実行完了応答862はグループ内プロセスコピー処理で用いる通信メッセージである。
ここで、グループ内プロセスコピー処理に関する用語をいくつか定義する。まず、グループ内プロセスコピー処理の対象であるグループをコピー対象グループと呼ぶ。グループ内プロセスコピー処理によって新しく生成されるプロセス170をコピー先プロセス170と呼び、コピー先プロセス170が存在するノード110をコピー先ノード110と呼ぶ。そして、グループ内プロセスコピー処理実行前のコピー対象グループに属するプロセス170のうち、コピー先プロセス170に対してデータストア部コピー指示814を送るプロセス170をコピー元プロセス170と呼び、コピー元プロセス170が存在するノード110をコピー元ノード110と呼ぶ。また、原子的配信部171が参照するグループ情報600において、コピー先ノード110を含める前のグループを旧グループ、コピー先ノード110を含めた後のグループを新グループと呼ぶ。また、この新グループを表すグループ情報600を新グループ情報と呼ぶ。
グループ内プロセスコピー準備指示811は、リバランス指示部212からコピー先ノード110に送られる指示800である。グループ内プロセスコピー準備指示811は、コピー対象グループのグループIDによって構成される。
グループ内プロセスコピー準備完了応答861は、グループ内プロセスコピー準備指示811を受け取ったコピー先ノード110がリバランス指示部212にコピー先プロセス170の準備完了を通知するための応答850である。グループ内プロセスコピー準備完了応答861は特に情報を保持していない。
グループ内プロセスコピー実行指示812は、リバランス指示部212からコピー元ノード110に送られる指示800である。グループ内プロセスコピー実行指示812は、コピー対象グループのグループIDと、コピー先ノード110のノードIDによって構成される。
グループ情報更新指示813は、コピー元ノード110からコピー先ノード110に送られる指示800である。グループ情報更新指示813は、新グループ情報によって構成される。
コピー開始電文911は、コピー元プロセス170の原子的配信部171において、旧グループに属するプロセス170に原子的配信される電文900である。コピー開始電文911は、新グループ情報、コピー先ノード110のノードIDとコピー元ノード110のノードIDによって構成される。
データストア部コピー指示814は、コピー元プロセス170からコピー先ノード110に送られる指示800である。データストア部コピー指示814は、コピー元プロセス170のデータストア部700に格納された全てのデータをコピーするために必要な情報によって構成される。
グループ内プロセスコピー実行完了応答862は、データストア部コピー指示814を受け取ったコピー先ノード110がリバランス指示部212にコピー先プロセス170のコピー完了を通知するための応答850である。グループ内プロセスコピー実行完了応答862は特に情報を保持していない。
移動グループ作成指示831及び移動グループ作成完了応答881は、移動グループの作成処理で用いる通信メッセージである。
移動グループ作成指示831は、構成情報管理部211から移動グループを作成するノード110に送られる指示800である。移動グループ作成指示831は、処理対象である移動グループのグループIDと移動グループを作成するノード110のノードID一覧で構成されたグループ情報600によって構成される。
移動グループ作成完了応答881は、移動グループ作成指示831を受け取ったノード110が移動グループに属するプロセス170の作成完了を通知するための応答850である。移動グループ作成完了応答881は特に情報を保持していない。
グループ内プロセス削除指示832及びグループ内プロセス削除完了応答882は、グループ内プロセス削除処理で用いる通信メッセージである。
グループ内プロセス削除指示832は、構成情報管理部211からグループ内プロセス削除処理を行うノード110の全てに送られる指示800である。グループ内プロセス削除指示832は処理対象グループのグループIDによって構成される。
グループ内プロセス削除完了応答882は、グループ内プロセス削除指示832を受け取ったノード110が処理対象グループに属するプロセス170の削除完了を通知するための応答850である。グループ内プロセス削除完了応答882は特に情報を保持していない。
移動グループ削除指示833及び移動グループ削除完了応答883は、移動グループの削除処理で用いる通信メッセージである。
移動グループ削除指示833は、構成情報管理部211から移動グループを削除するノード110の全てに送られる指示800である。移動グループ削除指示833は、処理対象である移動グループのグループIDによって構成される。
移動グループ削除完了応答883は、移動グループ削除指示833を受け取ったノード110が移動グループに属するプロセス170の削除完了を通知するための応答850である。移動グループ削除完了応答883は特に情報を保持していない。
図9は、実施例1におけるリバランス指示部212の処理を示したフローチャートである。
まず、性能監視部213は、各グループに属するプロセス170のデータストア部700が格納するデータ数や各グループに属するプロセス170の電文実行部173が単位時間当たりに処理する電文数などの性能指標を定期的に収集している。そして、上記収集結果から、グループ間での性能指標の偏りを検出する。性能指標の偏りを検出した場合、その偏りを是正できるレンジを算出する。算出したレンジに基づいて、リバランス指示部212に指示するためのリバランス指示1000を作成し、リバランス指示部212に送る。
例えば、図3(a)の場合、性能監視部213がグループBに含まれるデータの数に偏りがあることを検知できるため、その偏りを是正できる新しいレンジを算出する。ここで、グループBに含まれるデータ内の4個(=2個×2多重)がレンジ1001〜1500に含まれていることから、レンジ1001〜1500をグループAのレンジαへ移動させれば偏りを是正できるため、グループID列“グループA”と新レンジ列”1〜1500”のレコードとグループID列“グループB”と新レンジ列“1501〜1700”のレコードを格納したレンジ更新情報を含んだリバランス指示1000を作成し、リバランス指示部212に送る。
リバランス指示部212は、性能監視部213からリバランス指示1000を受け付ける(ステップS101)。
リバランス指示1000を受け付けたリバランス指示部212は、リバランス指示1000に含まれるレンジ更新情報、システムレンジ情報500と構成情報400から、レンジが狭まるリバランス元グループ、レンジが広がるリバランス先グループ、リバランス元グループを含むリバランス元ノード110そしてリバランス先グループを含むリバランス先ノード110を割り出す(ステップS102)。
例えば、図3(a)の場合、構成情報400は図4の構成情報400と同じデータを格納しており、システムレンジ情報500も図5のシステムレンジ情報500と同じデータを格納している。そして、レンジ更新情報は、性能監視部213の説明で挙げた例より、グループID列“グループA”と新レンジ列“1〜1500”のレコードとグループID列“グループB”と新レンジ列“1501〜1700”のレコードを格納している。ここで、システムレンジ情報500と当該レンジ更新情報の両方に存在するグループはグループAとグループBである。そして、グループAは、システムレンジ情報500のレンジ列502とレンジ更新情報の新レンジ列を比較すると、レンジが1〜1000から1〜1500に広がっているため、リバランス先グループであることが割り出せる。グループBも同様に、レンジが1001〜1700から1501〜1700に狭まっているため、リバランス元グループであることが割り出せる。そして、構成情報400より、各グループを保持するノード110が割り出せるため、リバランス元ノード110がノード1とノード3であり、リバランス先ノード110がノード1とノード2であることが割り出せる。
次に、グループの分割操作を行う準備として、リバランス元ノード110に空レンジを担当する移動グループを作成する(ステップS103)。
例えば、図3(b)の場合、リバランス指示部212は、リバランス元ノード110であるノード1とノード3に、空レンジを担当する移動グループDを作成するように構成情報管理部211へ依頼する。
具体的には、依頼を受けた構成情報管理部211は、移動グループを識別できるユニークなグループIDを生成し、生成されたグループIDと、ノード1のノードID及びノード3のノードIDが含まれたグループ情報600を格納した移動グループ作成指示831をノード1とノード3に送る。移動グループ作成指示831を受け取ったノード110の指示部140は、移動グループ作成指示831に含まれるグループIDとグループ情報600を用いて、ノードレンジ情報506に移動グループDに関するレコードを追加し、移動グループDに属するプロセス170を作成する。移動グループDに属するプロセス170が作成できた指示部140は、構成情報管理部211に移動グループ作成完了応答881を送る。ノード1とノード3の両方から移動グループ作成完了応答881を受け取った構成情報管理部211は、構成情報400のノード1とノード3に関するレコードのグループ情報列403に移動グループDを追加し、システムレンジ情報500に移動グループDに関するレコードを追加し、リバランス指示部212に移動グループが作成できたことを通知する。なお、上記以外にも、移動グループに属する1個目のプロセス170は移動グループ作成指示831を用いて作成し、移動グループに属する2個目以降のプロセス170は、後述するグループ内プロセスコピー処理を用いて作成しても良い。
次に、グループの分割操作を行うため、リバランス元グループと移動グループの間でレンジ更新処理を行うためのレンジ更新指示801を作成し、リバランス元ノード110へ送る(ステップS104)。
例えば、図3(c)の場合、ステップS101の説明で挙げた例より、レンジ1001〜1700を担当していたグループBはレンジ1501〜1700を担当するようにリバランス指示1000が入力されているため、移動グループDに移動させるレンジはレンジ1001〜1500である。そこで、リバランス指示部212は、グループID列“グループB”と新レンジ列“1501〜1700”のレコードとグループID列“グループD”と新レンジ列“1001〜1500”のレコードを格納したレンジ更新情報を含んだレンジ更新指示801を作成し、リバランス元ノード110であるノード1とノード3に送る。そして、レンジ更新指示801を送ったリバランス元ノード110からレンジ更新完了応答851を1つ以上受け取った場合、システムレンジ情報500を更新し、グループの分割操作を終了させる。
ノード110におけるレンジ更新処理の詳細については図10以降を用いて後述する。
次に、グループの併合操作を行う準備として、リバランス先ノード110のうち、移動グループに属するプロセス170が存在しないノード110が存在するかどうかの判定を行う(ステップS105)。当該ノード110が存在する場合、後述するグループ内プロセスコピー処理を実行する。
例えば、図3(d)の場合、構成情報400より、リバランス先ノード110であるノード2には移動グループDに属するプロセス170を存在しないことが割り出せるため、ノード3からノード2へ後述するグループ内プロセスコピー処理を実行する。そして、グループ内プロセスコピー処理が完了した際、構成情報400のノード2に関するレコードのグループ情報列403に移動グループDを追加する。
さらに、グループの併合操作を行う準備として、リバランス先ノード110以外に移動グループに属するプロセス170を含むノード110を探して、当該ノード110に対してグループ内プロセス削除処理を実行する(ステップS106)。
例えば、図3(d)の場合、構成情報400より、リバランス先ノード110ではないノード3上に移動グループDに属するプロセス170が存在するため、構成情報管理部211を用いて、当該プロセス170に対するグループ内プロセス削除処理を実行する。
具体的には、依頼を受けた構成情報管理部211は、移動グループDのグループIDを格納したグループ内プロセス削除指示832をノード3に送る。グループ内プロセス削除指示832を受け取ったノード3の指示部140は、グループ内プロセス削除指示832に含まれるグループIDに基づいて、ノードレンジ情報506から移動グループDに関するレコードを削除し、移動グループDに属するプロセス170を削除する。移動グループDに属するプロセス170が削除できた指示部140は、構成情報管理部211にグループ内プロセス削除完了応答882を送る。ノード3からグループ内プロセス削除完了応答882を受け取った構成情報管理部211は、構成情報400のノード3に関するレコードのグループ情報列403から移動グループDを削除し、リバランス指示部212にグループ内プロセス削除処理が実行できたことを通知する。
そして、グループの併合操作を行うため、移動グループとリバランス先グループの間でレンジ更新処理を行うためのレンジ更新指示801を作成し、リバランス先ノード110へ送る(ステップS107)。
例えば、図3(d)の場合、ステップS101の処理において、レンジ1〜1000を担当していたグループAはレンジ1〜1500を担当するようにリバランス指示1000が入力されているため、移動させるレンジはレンジ1001〜1500である。そこで、リバランス指示部212は、グループID列“グループA”と新レンジ列“1〜1500”のレコードとグループID列“グループD”と新レンジ列空レンジのレコードを格納したレンジ更新情報を含んだレンジ更新指示801を作成し、リバランス先ノード110であるノード1とノード2に送る。そして、レンジ更新指示801を送ったリバランス先ノード110からレンジ更新完了応答851を1つ以上受け取った場合、システムレンジ情報500を更新し、グループ併合操作を終了させる。
最後に、不要となった移動グループを削除する(ステップS108)。
例えば、図3(e)の場合、リバランス先ノード110であるノード1及びノード2に移動グループDに属するプロセス170が存在するため、移動グループDを削除するように構成情報管理部211へ依頼する。
具体的には、依頼を受けた構成情報管理部211は、移動グループDのグループIDを格納した移動グループ削除指示833をノード1とノード2に送る。移動グループ削除指示833を受け取ったノード1とノード3の指示部140は、移動グループ削除指示833に含まれるグループIDを基づいて、ノードレンジ情報506から移動グループDに関するレコードを削除し、移動グループDに属するプロセス170を削除する。移動グループDに属するプロセス170が削除できた指示部140は、構成情報管理部211に移動グループ削除完了応答883を送る。ノード1とノード2の両方から移動グループ削除完了応答883を受け取った構成情報管理部211は、構成情報400のノード1とノード2に関するレコードのグループ情報列403から移動グループDを削除し、システムレンジ情報500から移動グループDに関するレコードを削除し、リバランス指示部212に移動グループが削除できたことを通知する。なお、上記以外にも、移動グループDに属するプロセス170が最後の1個になるまでは上述したグループ内プロセス削除処理によって削除し、最後の1個は移動グループ削除指示833を用いて削除しても良い。
このように、振り分け部130やレンジ更新処理を行うグループに属するプロセス170など、レンジ更新処理に関わる各構成要素を同一ノード110に局在化させることで、ネットワーク分断が起きたとしても、高々定足数分のノード110が同一のネットワークに残存すればレンジの変更が可能であるため、構成要素が分散しているケースに比べて、ネットワークが分断された際にシステムが停止する可能性が減らせる。
例えば図3の規模を拡大して、計算機装置100及びノード110が12個存在し、データが5多重化されている場合、各グループに属するプロセス170の数は5であり、各グループ定足数は3である。そのため、ネットワーク分断の障害が起きたとしても、レンジ更新処理は、ネットワーク分断後の小さなネットワークに、レンジ更新処理を行っている計算機装置100が3個存在できれば続行できる。リバランス処理も、ネットワーク分断後の小さなネットワークに、リバランス処理を行っている計算機装置100が4個存在できれば続行できる。
ここで、指示部140の動作を説明する。
指示部140は、指示受信部120からレンジ更新指示801を受け取る。
指示部140は、レンジ更新指示801から、レンジ更新電文901を送る移動先プロセス170と移動元プロセス170を割り出し、レンジ更新電文901の作成を行う。
例えば、図3(b)の場合に受け取るレンジ更新指示801に含まれるレンジ更新情報には、グループID列“グループB”と新レンジ列“1501〜1700”のレコードとグループID“グループD”と新レンジ列“1001〜1501”のレコードが格納されている。したがって、ノードレンジ情報506のレンジ列502と比較することで、レンジ更新電文901を送る移動元グループがグループBであり、移動先グループがグループDであることが割り出せる。そして、本実施例では1つのノード上に同じグループに属するプロセス170は2つ以上存在しないため、移動先グループと移動元グループのグループIDより、移動先プロセス170と移動先プロセス170も割り出せる。
指示部140は割り出した移動元プロセス170及び移動先プロセス170の原子的配信部171に作成したレンジ更新電文901を送る。送られたレンジ更新電文901は各プロセス170が属する各グループ内で原子的配信される。
さらに指示部140は、振り分け部130の原子的配信部131に対して、作成したレンジ更新電文901と移動元プロセス170(もしくは移動先プロセス170)が保持するグループ情報600を送る。送られたレンジ更新電文901は一緒に送られたグループ情報600に基づいたノード110の原子的配信部131へ原子的配信される。なお、レンジ更新処理のために移動元グループと移動先グループは同じノードに局在化させられていることから、移動元プロセス170が保持するグループ情報600と移動先プロセス170が保持するグループ情報600の内容は同一であるため、指示部140は振り分け部130の原子的配信部131にどちらのグループ情報600を送っても良い。
最後に指示部140は、同一ノード110上に存在する移動元プロセス170の電文実行部173が当該レンジ更新電文901に基づいてプロセスレンジ情報505を更新し、かつ同一ノード110上に存在する移動先プロセス170の電文実行部173が当該レンジ更新電文901に基づいてプロセスレンジ情報505を更新し、かつ同一ノード110上に存在するノードレンジ情報更新部133が当該レンジ更新電文901に基づいてノードレンジ情報506を更新したことを検知できた時、リバランス指示部212にレンジ更新完了応答851を送る。
続いて、振り分け部130の動作を説明する。
振り分け部130は指示受信部120からデータ更新指示802を受けとる。
データ更新指示802を受け取った振り分け部130は、データ更新電文902を作成し、ノードレンジ情報506に基づいて、データ更新電文902を送るグループを特定し、特定したグループに属するプロセス170の原子的配信部171にデータ更新電文902を送る。
例えば、図3(a)の場合、ノード1のノードレンジ情報506は、ノード1上にグループAとグループBが存在するため、図5のシステムレンジ情報500のうち、グループAとグループBに関するレコードを格納している。そして、ノード1が受け取ったデータ更新指示802に含まれるデータのキーのハッシュ値が1300だった時、ノードレンジ情報506より、当該データ更新指示802を実行できるグループがグループBであると分かるため、データ更新指示802からデータ更新電文902を作成し、同一ノード110上に存在するグループBに属するプロセス170の原子的配信部171に作成したデータ更新電文902を送る。
最後に振り分け部130は、当該データ更新電文902を送ったプロセス170の電文実行部173が当該データ更新電文902に基づいてデータストア部700を更新したことを検知できた時、データ更新指示802を送ってきたクライアント情報管理部312にデータ更新完了応答852を送る。
図10は、実施例1における原子的配信部171が実行する処理を説明するフローチャートである。
まず、原子的配信部171は振り分け部130、指示部140もしくはコピー部160から電文900を受け取る(ステップS201)。
次に受け取った電文900を、グループ情報600に基づいて、同一グループに属するプロセス170内で原子的配信する(ステップS202)。
例えば、図3(a)の場合、ノード1上に存在するグループAに属するプロセス170の原子的配信部171と、ノード2上に存在するグループAに属するプロセス170の原子的配信部171は同じグループAに含まれており、どちらかの原子的配信部171が受け取った電文900はそれぞれの原子的配信部171に原子的配信され、それぞれの原子的配信部171に同一の電文900が同一の順序で配信される。
なお、S203以降の処理は、S201の処理を実行した原子的配信部171以外にも、他の原子的配信部171から原子的配信された電文900を受け取った原子的配信部171も実行する。
まず、原子的配信された電文900がコピー開始電文911であるかどうかの判定を行う(ステップS203)。ここで、当該電文900がコピー開始電文911であった場合に実行される処理であるステップS211、ステップS212及びステップS213ブロックの説明については、グループ内プロセスコピー処理で用いられるため、後述する。
電文900がコピー開始電文911ではなかった場合、当該電文900を電文貯蓄部172に蓄える(ステップS204)。
なお、原子的配信部131の動作も、振り分け部130から電文900と一緒に送られたグループ情報600を用いることと原子的配信された電文900を電文貯蓄部132に蓄えること以外は、原子的配信部171と同様である。
図11は、実施例1における電文実行部173が実行する処理を説明するフローチャートである。本フローチャートは、原子的配信部171などが電文貯蓄部172に電文900を蓄えるたびに実行される。
まず、電文実行部173は電文貯蓄部172に蓄えられている電文900を取り出す(ステップS301)。
そして、取り出した電文900が、レンジ更新電文901であるかどうかの判定を行う(ステップS302)。
取り出した電文900がレンジ更新電文901ではなかった場合、取り出した電文900がコピー開始電文911であるかどうかの判定を行う(ステップS303)。
さらに、取り出した電文900がコピー開始電文911でもなかった場合、取り出した電文900はデータ更新電文902であるため、プロセスレンジ情報505に基づいて、データ更新電文902に含まれる処理対象のデータが当該グループの担当するレンジの範囲内であるかの判定を行う(ステップS304)。
当該グループの担当するレンジの範囲内だった場合、データ更新電文902に含まれる更新処理を実行し(ステップS305)、それ以外は何もしない。
例えば、図3(a)において、グループBに属するプロセス170の電文実行部173が取り出したデータ更新電文902に含まれるデータのキーのハッシュ値が1300だった場合、当該プロセス170のプロセスレンジ情報505に格納されたグループBのレンジは1001〜1700であるため、当該電文実行部173は当該データ更新電文902に含まれる更新処理を実行する。
次に、ステップS303の処理において、取り出した電文900がコピー開始電文911であった場合に行うステップS321のブロックの説明は、グループ内プロセスコピー処理で用いられるため、後述する。
最後に、ステップS302の処理において、取り出した電文900がレンジ更新電文901であった場合、当該プロセス170のプロセスレンジ情報505とレンジ更新電文901に含まれるレンジ更新情報を比較し、レンジ更新処理前後でのレンジの変化量から、グループ間で移動させるレンジと移動先プロセス170及び移動元プロセス170を割り出す(ステップS311)。
例えば、図3(b)でグループの分割操作を行う場合、レンジ更新電文901に含まれるレンジ更新情報には、グループID列“グループB”と新レンジ列“1501〜1700”のレコードとグループID列“グループD”と新レンジ列“1001〜1501”のレコードが格納されている。また、グループBに属するプロセス170のプロセスレンジ情報505は、図5のシステムレンジ情報500のうち、グループBに関するレコードを格納している。さらに、グループDに属するプロセス170のプロセスレンジ情報505は、グループID列501“グループD”とレンジ列502空レンジであるレコードを格納している。そして、グループBに属するプロセス170の電文実行部173は、当該プロセスレンジ情報505と当該レンジ更新情報より、グループBのレンジβが1001〜1700から1501〜1700に狭まっていることから、移動元グループがグループBであり、移動先グループがグループDであり、そして移動させるレンジが1001〜1500であることを割り出せる。また、グループDに属するプロセス170の電文実行部173は、当該プロセスレンジ情報505と当該レンジ更新情報より、レンジが−から1001〜1500に広がっていることから、移動先グループがグループDであり、移動元グループがグループBであり、そして移動させるレンジが1001〜1500であることを割り出せる。そして、移動元グループと移動先グループが割り出せれば、本実施例では1つのノード上に同じグループに属するプロセス170は2つ以上存在しないため、移動元プロセス170及び移動先プロセス170も割り出せる。
次に、当該プロセス170が移動元プロセス170であるかどうかの判定を行う(ステップS312)。
当該プロセス170が移動元プロセス170であった場合、同一ノード110上に存在する移動先プロセス170のデータストア部700に対して、当該プロセス170のデータストア部700より、移動させるレンジに含まれたデータを移動する(ステップS313)。
例えば、図3(b)におけるノード1の場合、グループBに属する移動元プロセス170の電文実行部173は、移動させるレンジ1001〜1500に2つのデータが含まれているため、ノード1上に存在するグループDに属する移動先プロセス170のデータストア部700に対して、当該データを移動する。なお、ノード3上に存在する移動先プロセス170と移動元プロセス170の間においても、ノード1と同様の処理が、ノード1とは独立して行われている。
そして、電文実行部173は、バリア管理部150に通知する(ステップS314)。バリア管理部150の動作は図12で説明する。
最後に、レンジ更新電文901に含まれるレンジ更新情報に基づいて、当該プロセス170のプロセスレンジ情報505に含まれる当該グループに関するレコードのレンジ列502を新しいレンジに更新する(ステップS315)。
以上より、振り分け部130は、当該振り分け部130のノードレンジ情報506に基づいてデータ更新電文902をグループに振り分け、振り分けられたグループに属するプロセス170は、当該プロセス170のプロセスレンジ情報505に基づいてデータ更新電文902を実行する。したがって、振り分け部130におけるレンジ更新電文901の原子的配信が間に合わず、古いレンジに基づいてデータ更新電文902を誤ったグループに属するプロセス170へ振り分けられたとしても、データ更新電文902を実行するプロセス170が新しいプロセスレンジ情報505に基づいて更新処理の実行可否を判断するため、データの一貫性が保証できる。さらに、原子的配信部171及び原子的配信部131は定足数からの応答に基づいて電文900の配信順序を決定することもできるため、一部のサーバに通知できないことによってシステムが停止することも無くなる。
図12は、実施例1におけるバリア管理部150が実行する処理を説明するフローチャートである。
まず、リバランス指示部212は、ステップS104及びステップS107の処理においてレンジ更新指示801を作成する際、システムでユニークなバリアIDを作成する。そして、レンジ更新指示801及びレンジ更新電文901に当該バリアIDを含めておく。
さらに、バリア管理部150が保持する通知済みプロセス情報151は、バリアIDとグループIDをペアにしたレコードを複数保持するテーブルである。なお、バリアIDとグループIDをペアにしたレコードを通知済みプロセスレコードと呼ぶ。
バリア管理部150は、当該ノード110に含まれる移動先プロセス170もしくは移動元プロセス170の電文実行部173から通知される(ステップS401)。その際、通知してきた電文実行部173より、上述したバリアIDと、当該グループ、移動元グループ及び移動先グループのグループIDを受け取る。
通知されたバリア管理部150は、通知してきた電文実行部173が初回通知であるかどうかを判定する(ステップS402)。初回通知である場合は、ステップS403の処理を実行する。2回目以降の通知である場合は、何もせずに本処理を終了する。
具体的には、バリア管理部150は、通知してきた電文実行部173から受け取ったバリアIDと当該グループのグループIDから通知済みプロセスレコードを作成し、通知済みプロセス情報151に当該レコードと同一であるレコードが存在するかどうかを判定する。同一であるレコードが存在しない場合は初回通知であると判定する。そして、初回通知であると判定された際、当該レコードを通知済みプロセス情報151に追加する。
初回通知であった場合のバリア管理部150は、今回の通知により、移動先プロセス170と移動元プロセス170の両方がバリア管理部150に通知済み状態であるかどうかを判定する(ステップS403)。
具体的には、バリア管理部150は、通知してきた電文実行部173から受け取ったバリアID、移動元グループのグループIDと移動先グループのグループIDを用いて、バリアIDと移動元グループのグループIDより移動元プロセス170の通知済みプロセスレコードを、バリアIDと移動先グループのグループIDより移動先プロセス170の通知済みプロセスレコードを作成する。そして、移動先プロセス170の通知済みプロセスレコードと同一であるレコードと移動元プロセス170の通知済みプロセスレコードと同一であるレコードが通知済みプロセス情報151に両方存在するどうかを判定する。両方存在していた場合は移動先プロセス170と移動元プロセス170の両方が通知済み状態であると判定する。
今回の通知で移動先プロセス170と移動元プロセス170の両方が通知済み状態ではなかった場合、今回通知してきた電文実行部173を待機させる(ステップS404)。
今回の通知で移動先プロセス170と移動元プロセス170の両方が通知済み状態であった場合、ステップS404の処理で待機させている電文実行部173を再開させる(ステップS405)。
例えば、図3(b)のノード1において、グループDに属する移動先プロセス170の電文実行部173が先にバリア管理部150に通知してきた場合、通知済みプロセス情報151にはグループBに属する移動元プロセス170の通知済みプロセスレコードが存在しないため、ステップS404の処理において当該移動先プロセス170の電文実行部173は待機させられる。その後、当該移動元プロセス170の電文実行部173も当該バリア管理部150に通知を行った場合、当該移動先プロセス170と当該移動元プロセス170の通知済みプロセスレコードが通知済みプロセス情報151に存在するため、待機させていた当該移動先プロセス170の電文実行部173を再開させる。なお、ノード3上に存在するバリア管理部150でも、ノード1と同様の処理が、ノード1とは独立して行われている。
以上より、移動先プロセス170の電文実行部173と移動元プロセス170の電文実行部173がバリア管理部150で合流するまで待ち合わせるため、移動先プロセス170の電文実行部173は、移動元プロセス170の電文実行部173がステップS313を実行した(移動させるレンジに含まれたデータを移動した)後に、電文貯蓄部172に蓄えられたデータ更新電文902を実行することができる。
以上により、データの一貫性と無停止性を確保したレンジ更新処理が行われる。
次に、グループ内プロセスコピー処理の実施例を示す。
グループ内プロセスコピー処理の手順は、
1.コピー先ノード110はデータストア部700が空であるコピー先プロセス170を作成し、
2.旧グループに属しているプロセス170のグループ情報600にコピー先ノード110のノードIDを加え、
3.コピー先プロセス170のグループ情報600を新グループ情報に更新し、
4.コピー元プロセス170は、グループ情報600にコピー先ノード110のノードIDが加わる直前までに電文貯蓄部172に蓄えられていたデータ更新電文902を全て実行し、
5.コピー元プロセス170は、データストア部700に格納された全データをコピー先プロセス170に送り、
6.コピー先プロセス170は、受け取ったデータによりデータストア部700に全データをコピーし、
7.コピー先プロセス170は、電文貯蓄部172に蓄えられている電文900の取り出しを開始することによって実現する。
1.コピー先ノード110はデータストア部700が空であるコピー先プロセス170を作成し、
2.旧グループに属しているプロセス170のグループ情報600にコピー先ノード110のノードIDを加え、
3.コピー先プロセス170のグループ情報600を新グループ情報に更新し、
4.コピー元プロセス170は、グループ情報600にコピー先ノード110のノードIDが加わる直前までに電文貯蓄部172に蓄えられていたデータ更新電文902を全て実行し、
5.コピー元プロセス170は、データストア部700に格納された全データをコピー先プロセス170に送り、
6.コピー先プロセス170は、受け取ったデータによりデータストア部700に全データをコピーし、
7.コピー先プロセス170は、電文貯蓄部172に蓄えられている電文900の取り出しを開始することによって実現する。
具体的な各構成部の処理について説明を行う。
図9のステップS111、ステップS112、ステップS113及びステップS114は、実施例1におけるリバランス指示部212がグループ内プロセスコピー処理を実行する際の動作を説明するフローチャートのブロックである。
リバランス指示部212はグループ内プロセスコピー準備指示811をコピー先ノード110へ送る(ステップS111)。
次に、リバランス指示部212はコピー先ノード110からグループ内プロセスコピー準備完了応答861を受け取る(ステップS112)。
コピー先ノード110からグループ内プロセスコピー準備完了応答861を受け取ったリバランス指示部212は、グループ内プロセスコピー実行指示812をコピー元ノード110に送る(ステップS113)。
最後に、リバランス指示部212はコピー先ノード110からグループ内プロセスコピー実行完了応答862を受け取る(ステップS114)。
図13は、実施例1におけるコピー先ノード110におけるコピー部160が実行する処理を説明するフローチャートである。
まず、指示受信部120を介して、リバランス指示部212から送られたグループ内プロセスコピー準備指示811が受け取る(ステップS501)。
グループ内プロセスコピー準備指示811を受け取ったコピー部160は、グループ内プロセスコピー準備指示811からコピー対象グループのグループIDに基づいて、コピー先プロセス170を作成する(ステップS502)。ただし、この時点で作成されたコピー先プロセス170のデータストア部700は1つのデータも含まない。また、コピー先プロセス170の原子的配信部171はこの時点ではコピー対象グループに属しておらず、電文実行部173は停止しているものとする。
例えば、図3(d)の場合、コピー先ノード110であるノード2のコピー部160にグループ内プロセスコピー準備指示811が送られ、グループ内プロセスコピー準備指示811に含まれるコピー対象グループのグループIDはグループDであることから、ノード2のコピー部160はグループDに属するコピー先プロセス170を作成する。
コピー先プロセス170を作成したコピー部160はリバランス指示部212にグループ内プロセスコピー準備完了応答861を送る(ステップS503)。
次に、コピー元ノード110よりグループ情報更新指示813を受け取る(ステップS504)。
コピー元ノード110からグループ情報更新指示813を受け取ったコピー部160は、グループ情報更新指示813に含まれる新グループ情報に基づいて、コピー先プロセス170のグループ情報600を更新する(ステップS505)。
さらに、コピー元ノード110からデータストア部コピー指示814を受け取る(ステップS506)。
コピー元ノード110からデータストア部コピー指示814を受け取ったコピー部160は、データストア部コピー指示814に含まれる情報に基づいて、コピー先プロセス170のデータストア部700にデータを書き込み、コピー先プロセス170の電文実行部173を動作させる(ステップS507)。
最後に、リバランス指示部212に対して、グループ内プロセスコピー処理が終わったことを示すグループ内プロセスコピー実行完了応答862を送る(ステップS508)。
図14は、実施例1におけるコピー元ノード110におけるコピー部160の動作について説明するフローチャートである。
まず、リバランス指示部212から送られたグループ内プロセスコピー実行指示812が受け取る(ステップS601)。
次に、グループ内プロセスコピー実行指示812に含まれたコピー対象グループのグループIDよりコピー元プロセス170を割り出し、割り出したコピー元プロセス170のグループ情報600にグループ内プロセスコピー実行指示812に含まれたコピー先ノード110のノードIDを加えた新グループ情報を作成する。そして、作成した新グループ情報を含んだグループ情報更新指示813を作成し、コピー先ノード110に送る(ステップS602)。
さらに、ステップS602で作成した新グループ情報、グループ内プロセスコピー実行指示812に含まれたコピー先ノード110のノードID及び当該ノード110のノードIDからコピー開始電文911を作成し、コピー元プロセス170の原子的配信部171に送る(ステップS603)。
例えば、図3(d)の場合、コピー元ノード110であるノード3のコピー部160は、グループ内プロセスコピー実行指示812を受け取る。そして、グループ内プロセスコピー実行指示812には、コピー先ノード110がノード2であることと、コピー対象グループがグループDであることが含まれている。グループDに属するコピー元プロセス170のグループ情報600はノード1とノード3であるため、新グループ情報は、ノード1、ノード2とノード3の計三つのノードIDを格納することになる。そして、新グループ情報を含んだグループ情報更新指示813をコピー先ノード110であるノード2に送る。そして、コピー先ノード110のノードIDとしてノード2、コピー元ノード110のノードIDとしてノード3、上記新グループ情報を含んだコピー開始電文911を作成し、グループDに属するコピー元プロセス170の原子的配信部171に送る。
図10のステップS211、ステップS212及びステップS213のブロックは、実施例1における原子的配信部171がグループ内プロセスコピー処理を実行する際の動作を説明するフローチャートのブロックである。
コピー開始電文911を受け取った原子的配信部171は、コピー開始電文911に含まれる新グループ情報に基づいて、グループ情報600を更新する(ステップS211)。
次に、コピー開始電文911に含まれるコピー元ノード110のノードIDに基づいて、当該ノード110がコピー元ノード110であるかどうかを判定する(ステップS212)。
当該ノード110がコピー元ノード110であった場合、当該コピー開始電文911を電文貯蓄部172に蓄える(ステップS213)。当該ノード110がコピー元ノード110以外であった場合、何も行わない。
図11のステップS321は、実施例1における電文実行部173がプロセス170のグループ内プロセスコピー処理を実行する際の動作を説明するフローチャートのブロックである。
ステップS303の処理において、電文貯蓄部172から取り出した電文900がコピー開始電文911であった場合、当該プロセス170のデータストア部700の全データを参照してデータストア部コピー指示814を作成し、コピー開始電文911に含まれたコピー先ノード110のノードIDに基づいて、作成したデータストア部コピー指示814をコピー先ノード110に送る(ステップS321)。
以上により、データの一貫性と無停止性を確保したプロセス170のグループ内プロセスコピー処理が行われる。
なお、本実施例の説明では、一つのグループに属しているプロセス170は一つのノード110上に高々一つだけ存在することを前提に説明しているため、プロセス170を識別するための識別子(プロセスID)などのプロセス170に関する情報は省略している。一つのグループに属しているプロセス170が一つのノード110上に二つ以上存在する場合、構成情報400や通信メッセージなどにプロセスIDやプロセス個数などを含み、各ノード110は当該ノード110上に存在するプロセス170がどのグループに属しているのかを示す情報(ノード構成情報)を保持することになる。
実施例1ではレンジ更新処理を行う際に、移動先プロセス170の電文実行部173がレンジ更新電文901を実行してから、移動元プロセス170の電文実行部173がレンジ更新電文901を実行するまでの間、ステップS404の処理により、移動先プロセス170の電文実行部173は待機させられる。
そこで、移動先プロセス170の電文実行部173は移動元プロセス170の電文実行部173がレンジ更新電文901を実行するまで待たずに、レンジ更新処理前のレンジで担当していたデータ更新電文902を処理できるようにする。ただし、レンジ更新処理後のレンジで新たに担当すべきデータ更新電文902を取り出した場合は当該データ更新電文902を一時的に退避させる。
その後、レンジ更新電文901を実行した移動元プロセス170の電文実行部173は、同一ノード110上に存在する移動先プロセス170の電文実行部173へ割り込む。それ以降は、実施例1と同様、レンジ更新処理後のレンジでデータ更新電文902を処理する。
そして、割り込まれた移動先プロセス170の電文実行部173は、一時的に退避させていたデータ更新電文902を全て取り出して実行する。それ以降は、実施例1と同様、レンジ更新処理後のレンジでデータ更新電文902を処理する。
なお、本実施例2では、割り込みの一例として、移動元プロセス170の電文実行部173が電文退避開放電文921を移動先プロセス170の電文貯蓄部172に投入しているが、計算機装置100が提供する割り込み機構を利用してもよい。
以下、実施例1との差異を中心に実施例2について説明する。
図2の電文退避部180と退避プロセスレンジ情報181は実施例2における計算機装置100の詳細を示すブロック図である。
実施例2のシステム構成において、プロセス170は、一時的にデータ更新電文902を蓄積するための電文退避部180と、電文退避部180に退避させるデータ更新電文902を割り出すための退避プロセスレンジ情報181を有する。なお、電文退避部180は、電文貯蓄部172と同様、FIFO(First In First Out)方式で貯蓄するキューである。また、退避プロセスレンジ情報181の初期値は空レンジである。
実施例2におけるバリア管理部150が実行する処理を説明するフローチャートを図12からの差異により述べる。
まず、ステップS403の処理において移動先プロセス170と移動元プロセス170の両方が通知済み状態ではなかった場合、ステップS404の処理を実行せず、代わりにバリア管理部150に通知してきたプロセス170が移動先プロセス170であるかどうかの判定を行う。
上記判定において、バリア管理部150に通知してきたプロセス170が移動先プロセス170であった場合、移動先プロセス170の退避プロセスレンジ情報181に移動先プロセス170のレンジ更新処理前後の差分となるレンジをセットする。反対にバリア管理部150に通知してきたプロセス170が移動元プロセス170であった場合、何もしない。
最後に、ステップS403の処理において移動先プロセス170と移動元プロセス170の両方が通知済み状態であった場合、ステップS405の処理を実行せず、代わりにバリア管理部150に通知してきたプロセス170が移動元プロセス170であるかどうかの判定を行う。
上記判定において、バリア管理部150に通知してきたプロセス170が移動元プロセス170であった場合、電文退避開放電文921を移動先プロセス170の電文貯蓄部172に蓄える。なお、電文退避開放電文921は、割り込みシグナルであるため、特にデータを保持しない電文900である。反対にバリア管理部150に通知してきたプロセス170が移動先プロセス170であった場合、何もしない。
実施例2における電文実行部173が実行する処理を説明するフローチャートを図11からの差異により説明する。
まず、ステップS302の処理の直前に、電文貯蓄部172から取り出した電文900が電文退避開放電文921であるかどうかを判定する。取り出した電文900が電文退避開放電文921であった場合、退避プロセスレンジ情報181に空レンジをセットし、電文退避部180内に蓄えられたデータ更新電文902を全て取り出して実行し、本処理を終了する。逆に取り出した電文900が電文退避開放電文921ではなかった場合、ステップS302の処理を実行する。
最後に、ステップS305の処理を行う直前に、データ更新電文902に含まれる処理対象のデータが当該プロセス170の退避プロセスレンジ情報181に含まれるレンジの範囲内であるかどうかを判定する。当該レンジの範囲外であった場合、実施例1と同様、ステップS305の処理を行う。逆に当該レンジの範囲内であった場合、電文退避部180に当該データ更新電文902を蓄え、ステップS305の処理を実行せずに本処理を終了する。
以上により、移動先プロセス170の電文実行部173は移動元プロセス170の電文実行部173がレンジ更新電文901を実行するのを待たずに、古いレンジで担当していたデータ更新電文902を実行することができる。
なお、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体(例えば、非一時的な記憶媒体)に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
以上、添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
Claims (12)
- データ処理を行う複数のプロセスと、前記プロセスが処理を行うデータのキーレンジを指示する指示部と、処理対象のデータを振り分ける振り分け部とを備えるノードで構成される計算機システムであって、
第一のキーレンジのデータを処理する第一のプロセスから第一のキーレンジの一部のキーレンジである第三のキーレンジのデータ処理を第二のキーレンジのデータを処理する第二のプロセスで処理するとき、
前記指示部は第一のプロセスへ第一のキーレンジから第三のキーレンジを除いた範囲である更新後の第一のキーレンジを示す情報を含む第一のレンジ更新情報を送付し、
第二のプロセスへ第二のキーレンジに第三のキーレンジを加えた範囲である更新後の第二のキーレンジを示す情報を含む第二のレンジ更新情報を送付し、
振り分け部へ前記第一のプロセスに対応付けられた更新後の第一のキーレンジと第二のプロセスに対応付けられた更新後の第二のキーレンジを含む第三のレンジ更新情報を送付し、
前記振り分け部は第三のレンジ更新情報を受け付けたとき、第一のプロセスと第二のプロセスへ振り分けるデータの範囲を変更し、
第一のプロセスは第一のレンジ更新情報を受け付けたとき、更新後の第一のキーレンジのデータ処理を実行し、
第二のプロセスは第二のレンジ更新情報を受け付けたとき、更新後の第二のキーレンジのデータ処理を実行することを特徴とする計算機システム。 - 請求項1の計算機システムにおいて、
計算機システムは複数のノードを備え、同じキーレンジのデータを処理するプロセスは複数のノードに割当てられ、同じキーレンジのデータを割当てられたプロセスはグループを構成することを特徴とする計算機システム。 - 請求項2の計算機システムにおいて、
第二のプロセスが第二のレンジ更新情報を受け付けたとき、第三のキーレンジのデータを処理するために必要な関連データのコピーを保持していなければ、
少なくとも第一のプロセスに第三のキーレンジのデータに対応した関連データのコピーを送付するよう要求し、
第一のプロセスは前記第二のプロセスから要求のあった前期関連データを第二のプロセスへ送付し、
第二のプロセスは第一のプロセスから前記関連データを受け取った後に、更新後の第二のキーレンジのデータ処理を実行することを特徴とする計算機システム。 - 請求項2の計算機システムにおいて、
グループ間で処理するデータ量に偏りがでたときにキーレンジの変更を指示するリバランス指示部を備え、
リバランス指示部がキーレンジの変更を指示するレンジ更新指示をノードの指示部へ送付し、
ノードの振り分け部は、他のノードの振り分け部と通信を行うことで、振り分け部に送付されたレンジ更新情報を他の振り分け部へ原子的配信し、
前記ノードの前記プロセスは、グループ情報を参照し、グループに含まれるプロセスへ前記プロセスに送付されたレンジ更新情報を原子的配信することを特徴とする計算機システム。 - 請求項4の計算機システムにおいて、
前記リバランス指示部は、前記レンジ更新指示を、前記複数のノードの複数のノードへ送付することを特徴とする計算機システム。 - 請求項3の計算機システムにおいて、
前記第二のプロセスは第三のキーレンジの処理対象のデータを一時的に蓄える電文退避部を備え、
第二のプロセスは、第一のプロセスから関連データを受け取るまでの間、第三のキーレンジのデータを前記電文退避部に蓄え、第一のプロセスから第三のキーレンジの処理対象のデータを受け付けた後は、更新後の第二のキーレンジのデータ処理を実行することを特徴とする計算機システム。 - データ処理を行う複数のプロセスと、前記プロセスが処理を行うデータのキーレンジを指示する指示部と、処理対象のデータを振り分ける振り分け部とを備えるノードで構成される計算機システムで実行されるデータ処理方法であって、
第一のキーレンジのデータを処理する第一のプロセスから第一のキーレンジの一部のキーレンジである第三のキーレンジのデータ処理を第二のキーレンジのデータを処理する第二のプロセスで処理するとき、
前記指示部は第一のプロセスへ第一のキーレンジから第三のキーレンジを除いた範囲である更新後の第一のキーレンジを示す情報を含む第一のレンジ更新情報を送付し、
第二のプロセスへ第二のキーレンジに第三のキーレンジを加えた範囲である更新後の第二のキーレンジを示す情報を含む第二のレンジ更新情報を送付し、
振り分け部へ前記第一のプロセスに対応付けられた更新後の第一のキーレンジと第二のプロセスに対応付けられた更新後の第二のキーレンジを含む第三のレンジ更新情報を送付し、
前記振り分け部は第三のレンジ更新情報を受け付けたとき、第一のプロセスと第二のプロセスへ振り分けるデータの範囲を変更し、
第一のプロセスは第一のレンジ更新情報を受け付けたとき、更新後の第一のキーレンジのデータ処理を実行し、
第二のプロセスは第二のレンジ更新情報を受け付けたとき、更新後の第二のキーレンジのデータ処理を実行することを特徴とするデータ処理方法。 - 請求項7のデータ処理方法において、
計算機システムは複数のノードを備え、同じキーレンジのデータを処理するプロセスは複数のノードに割当てられ、同じキーレンジのデータを割当てられたプロセスはグループを構成することを特徴とするデータ処理方法。 - 請求項8のデータ処理方法において、
第二のプロセスが第二のレンジ更新情報を受け付けたとき、第三のキーレンジのデータを処理するために必要な関連データのコピーを保持していなければ、
少なくとも第一のプロセスに第三のキーレンジのデータに対応した関連データのコピーを送付するよう要求し、
第一のプロセスは前記第二のプロセスから要求のあった前期関連データを第二のプロセスへ送付し、
第二のプロセスは第一のプロセスから前記関連データを受け取った後に、更新後の第二のキーレンジのデータ処理を実行することを特徴とするデータ処理方法。 - 請求項8のデータ処理方法において、
グループ間で処理するデータ量に偏りがでたときにキーレンジの変更を指示するリバランス指示部を備え、
リバランス指示部がキーレンジの変更を指示するレンジ更新指示をノードの指示部へ送付し、
ノードの振り分け部は、他のノードの振り分け部と通信を行うことで、振り分け部に送付されたレンジ更新情報を他の振り分け部へ原子的配信し、
前記ノードの前記プロセスは、グループ情報を参照し、グループに含まれるプロセスへ前記プロセスに送付されたレンジ更新情報を原子的配信することを特徴とするデータ処理方法。 - 請求項10のデータ処理方法において、
前記リバランス指示部は、前記レンジ更新指示を、前記複数のノードの複数のノードへ送付することを特徴とするデータ処理方法。 - 請求項9のデータ処理方法において、
前記第二のプロセスは第三のキーレンジの処理対象のデータを一時的に蓄える電文退避部を備え、
第二のプロセスは、第一のプロセスから関連データを受け取るまでの間、第三のキーレンジのデータを前記電文退避部に蓄え、第一のプロセスから第三のキーレンジの処理対象のデータを受け付けた後は、更新後の第二のキーレンジのデータ処理を実行することを特徴とするデータ処理方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2013/080972 WO2015072025A1 (ja) | 2013-11-18 | 2013-11-18 | 計算機システム、計算機システム管理方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP6007340B2 true JP6007340B2 (ja) | 2016-10-12 |
JPWO2015072025A1 JPWO2015072025A1 (ja) | 2017-03-09 |
Family
ID=53056985
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015547360A Active JP6007340B2 (ja) | 2013-11-18 | 2013-11-18 | 計算機システム、計算機システム管理方法及びプログラム |
Country Status (5)
Country | Link |
---|---|
US (1) | US10324750B2 (ja) |
JP (1) | JP6007340B2 (ja) |
DE (1) | DE112013006675B4 (ja) |
GB (1) | GB2536074B (ja) |
WO (1) | WO2015072025A1 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6360634B2 (ja) * | 2016-01-29 | 2018-07-18 | 株式会社日立製作所 | 計算機システム、及び、データ処理方法 |
US10735218B2 (en) * | 2018-05-23 | 2020-08-04 | Beckhofff Automation GmbH | Data transmission method and automation-communication network |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013046352A1 (ja) * | 2011-09-28 | 2013-04-04 | 株式会社日立製作所 | 計算機システム、データ管理方法及びデータ管理プログラム |
WO2013118270A1 (ja) * | 2012-02-09 | 2013-08-15 | 株式会社日立製作所 | 計算機システム、データ管理方法及びプログラム |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7139772B2 (en) * | 2003-08-01 | 2006-11-21 | Oracle International Corporation | Ownership reassignment in a shared-nothing database system |
US9009112B2 (en) | 2010-03-15 | 2015-04-14 | Microsoft Technology Licensing, Llc | Reorganization of data under continuous workload |
US9201742B2 (en) * | 2011-04-26 | 2015-12-01 | Brian J. Bulkowski | Method and system of self-managing nodes of a distributed database cluster with a consensus algorithm |
US8549010B2 (en) * | 2011-05-13 | 2013-10-01 | Nokia Corporation | Method and apparatus for providing distributed key range management |
US8676951B2 (en) * | 2011-07-27 | 2014-03-18 | Hitachi, Ltd. | Traffic reduction method for distributed key-value store |
US20130332608A1 (en) * | 2012-06-06 | 2013-12-12 | Hitachi, Ltd. | Load balancing for distributed key-value store |
US9471657B1 (en) * | 2013-05-20 | 2016-10-18 | Amazon Technologies, Inc. | Range query capacity allocation |
US9720989B2 (en) * | 2013-11-11 | 2017-08-01 | Amazon Technologies, Inc. | Dynamic partitioning techniques for data streams |
US9569517B1 (en) * | 2013-11-27 | 2017-02-14 | Google Inc. | Fault tolerant distributed key-value storage |
US10235404B2 (en) * | 2014-06-25 | 2019-03-19 | Cohesity, Inc. | Distributed key-value store |
-
2013
- 2013-11-18 WO PCT/JP2013/080972 patent/WO2015072025A1/ja active Application Filing
- 2013-11-18 US US14/770,639 patent/US10324750B2/en active Active
- 2013-11-18 GB GB1515100.4A patent/GB2536074B/en active Active
- 2013-11-18 DE DE112013006675.0T patent/DE112013006675B4/de active Active
- 2013-11-18 JP JP2015547360A patent/JP6007340B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013046352A1 (ja) * | 2011-09-28 | 2013-04-04 | 株式会社日立製作所 | 計算機システム、データ管理方法及びデータ管理プログラム |
WO2013118270A1 (ja) * | 2012-02-09 | 2013-08-15 | 株式会社日立製作所 | 計算機システム、データ管理方法及びプログラム |
Non-Patent Citations (1)
Title |
---|
JPN6014007040; 清田 陽司: '絶対わかるクラウド技術' みてわかるクラウドマガジン Vol.1, 20100510, p.47-55, 日経BP社 * |
Also Published As
Publication number | Publication date |
---|---|
US20160011903A1 (en) | 2016-01-14 |
US10324750B2 (en) | 2019-06-18 |
JPWO2015072025A1 (ja) | 2017-03-09 |
GB2536074B (en) | 2020-10-07 |
DE112013006675B4 (de) | 2022-02-10 |
DE112013006675T5 (de) | 2015-10-29 |
GB201515100D0 (en) | 2015-10-07 |
GB2536074A (en) | 2016-09-07 |
WO2015072025A1 (ja) | 2015-05-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10997163B2 (en) | Data ingestion using file queues | |
JP5952960B2 (ja) | 計算機システム、計算機システム管理方法及びプログラム | |
JP6360634B2 (ja) | 計算機システム、及び、データ処理方法 | |
WO2017097059A1 (zh) | 分布式数据库系统及其自适应方法 | |
JP5701398B2 (ja) | 計算機システム、データ管理方法及びプログラム | |
WO2016166844A1 (ja) | 分散処理システム、タスク処理方法、記憶媒体 | |
JP2010061455A (ja) | 計算機システム及びデータ管理方法 | |
JP5686034B2 (ja) | クラスタシステム、同期制御方法、サーバ装置および同期制御プログラム | |
WO2014205847A1 (zh) | 一种分区平衡子任务下发方法、装置与系统 | |
CN113010496A (zh) | 一种数据迁移方法、装置、设备和存储介质 | |
KR101527634B1 (ko) | 샤딩 서비스를 제공하는 방법 및 장치 | |
US20170206027A1 (en) | Management system and management method of computer system | |
JP6007340B2 (ja) | 計算機システム、計算機システム管理方法及びプログラム | |
Jiang et al. | A novel clustered MongoDB-based storage system for unstructured data with high availability | |
JP2010026965A (ja) | アーカイブシステムおよびコンテンツの管理方法 | |
JP6291977B2 (ja) | 分散ファイルシステム、バックアップファイル取得方法、制御装置及び管理装置 | |
US11762574B2 (en) | Backup system and method | |
WO2013073022A1 (ja) | 計算機システム及び障害検出方法 | |
JP5845298B2 (ja) | ノードおよびプログラム | |
JP2023145248A (ja) | 管理システム、ストレージシステム及び管理処理方法 | |
WO2017145286A1 (ja) | ストレージシステムの管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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: 20160823 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160912 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6007340 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |