JP5445177B2 - 確定クロック判定プログラム及び方法、並びにノード装置 - Google Patents

確定クロック判定プログラム及び方法、並びにノード装置 Download PDF

Info

Publication number
JP5445177B2
JP5445177B2 JP2010016979A JP2010016979A JP5445177B2 JP 5445177 B2 JP5445177 B2 JP 5445177B2 JP 2010016979 A JP2010016979 A JP 2010016979A JP 2010016979 A JP2010016979 A JP 2010016979A JP 5445177 B2 JP5445177 B2 JP 5445177B2
Authority
JP
Japan
Prior art keywords
clock
list
clock value
node
command
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
JP2010016979A
Other languages
English (en)
Other versions
JP2011154631A (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 JP2010016979A priority Critical patent/JP5445177B2/ja
Priority to US13/015,931 priority patent/US8437983B2/en
Publication of JP2011154631A publication Critical patent/JP2011154631A/ja
Application granted granted Critical
Publication of JP5445177B2 publication Critical patent/JP5445177B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control

Description

本発明は、分散処理システムにおけるデータの整合性判定技術に関する。
近年、分散処理システムとして、例えば結果整合性(Eventual Consistency)を実装したシステムが知られている。この結果整合性とは、ある時点ではデータの整合が取れていないかもしれないが、最終的に整合が取れていれば良いという考え方である。
図1に、結果整合性を実装した分散処理システムの一例を示す。図1の例では、分散処理システムは、処理を受け持つノードA乃至Dを含み、各ノードには、結果整合性を実現するための分散処理フレームワーク(以下、単に「フレームワーク」と呼ぶ)が実装されている。なお、図1の例では、ノードA乃至Cにおいてデータのレプリカを保持するようになっているものとする。例えば、ノードAがデータ値「a」を設定するためのコマンド(setコマンド)を受け付けると、分散ハッシュテーブル(DHT:Distributed Hash Table)などを用いて、このデータの保管場所となるノードを決定する。例えばノードA乃至Cが保管場所として決定された場合には、ノードAは、データ値「a」を自身のデータベースに格納するとともにノードB及びCに転送する。そうすると、データ値「a」は、フレームワークの連携によってノードB及びCに伝わっていき、データ値「a」はノードB及びCのデータベースにも格納される。図1における実線の矢印は、setコマンドに伴うデータの流れを示している。なお、コマンドを受け付けたノードのことを、レセプタと呼ぶ場合もある。また、あるデータについて当該データを保管する役目があるノードのことを、コンテナと呼ぶ場合もある。
その後、例えば、ノードDがデータを取得するためのコマンド(getコマンド)を受け付けた場合には、フレームワークが連携して、データを保持しているノード(ノードA乃至C)のいずれかのデータベースからデータ値「a」を取得し、getコマンドの要求元に出力する。なお、図1では、ノードCのデータベースからデータを取得する例を示している。また、図1における二点鎖線の矢印は、getコマンドに伴うデータの流れを示している。
例えば、ノードA乃至Cにデータ値「a」が格納されている状態において、さらにノードAがsetコマンド(データ値「b」)を受け付けた場合には、図2に示すように、まずノードA自身のデータベースに格納されているデータ値「a」を「b」に書き換える。さらに、データ値「b」は、フレームワークの連携によってノードB及びCに伝わっていく。ここで、例えば、データ値「b」がノードCに伝わる前に、ノードDがgetコマンドを受け付けた場合において、ノードCからデータを取得するとなると、データ値「b」に書き換わる前であるため、データ値「a」が取得される。なお、一定期間経過後、データの再取得を行うことで、更新後のデータ値「b」を取得することができる。
このように、結果整合性を実装した分散処理システムでは、ある時点においては、更新後のデータ値を取得できない場合もあるが、一定期間経過後、他にデータ更新がなされていなければ、更新後のデータ値を取得できる。なお、結果整合性を実装した分散処理システムでは、データ更新時にデータベースをロックするようなことはしないので、例えばシステムのスケーラビリティを高めることができる。
一方、分散処理システムにおいて、論理時計(論理クロックとも呼ぶ)によってノード間の処理の順序関係を表す手法(例えば、Lamportのアルゴリズム等)が従来から知られている。例えば、図3に示すように、送信側のノードが、送信時点の論理クロック値をタイムスタンプとしてメッセージに設定した上で当該メッセージを送信し、受信側のノードでは、メッセージに設定されたタイムスタンプに所定数(図3では1)を加算した値を新たな論理クロック値として算出する。従って、論理クロックでは、時間が進んでいく一方で、時間が戻されるようなことはない(すなわち、論理クロック値は増えていく一方で、論理クロック値が減らされるようなことはない)。なお、図3において、矢印の始点側の数値は、送信側ノードの論理クロック値を示し、矢印の終点側の数値は、受信側ノードの論理クロック値を示している。また、矢印の上部に付された数値は、送信側ノードによって設定されたタイムスタンプ(すなわち、送信時点の論理クロック値)を示している。
例えば図3では、ノードAにおいてイベントが発生し、ノードAの論理クロック値が1の時に、ノードAからノードBへメッセージ(タイムスタンプ:1)が送信されている。そして、そのメッセージを受信したノードBでは、メッセージ受信前の論理クロック値は0であるが、受信メッセージに含まれるタイムスタンプが1であるため、論理クロック値は1まで進んでいると判断し、タイムスタンプに1加算した値(=2)を新たな論理クロック値としている。その後、さらにノードAにおいてイベントが発生し、ノードAの論理クロック値が2の時に、ノードAからノードCへメッセージ(タイムスタンプ:2)が送信されている。そして、そのメッセージを受信したノードCでは、メッセージ受信前の論理クロック値は0であるが、受信メッセージに含まれるタイムスタンプが2であるため、論理クロック値は2まで進んでいると判断し、タイムスタンプに1加算した値(=3)を新たな論理クロック値としている。その後、ノードCにおいてイベントが発生し、ノードCの論理クロック値が4の時に、ノードCからノードDへメッセージ(タイムスタンプ:4)が送信されている。そして、そのメッセージを受信したノードDでは、メッセージ受信前の論理クロック値は0であるが、受信メッセージに含まれるタイムスタンプが4であるため、論理クロック値4は4まで進んでいると判断し、タイムスタンプに1加算した値(=5)を新たな論理クロック値としている。また、ノードBにおいてイベントが発生し、ノードBの論理クロック値が3の時に、ノードBからノードCへメッセージ(タイムスタンプ:3)が送信されている。そして、そのメッセージを受信したノードCでは、受信メッセージに含まれるタイムスタンプは3であるが、自身の論理クロック値は4まで進んでいるため、自身の論理クロック値に1加算した値(=5)を新たな論理クロック値としている。その後、ノードDにおいてイベントが発生し、ノードDの論理クロック値が6の時に、ノードDからノードAへメッセージ(タイムスタンプ:6)が送信されている。そして、そのメッセージを受信したノードAでは、メッセージ受信前の論理クロック値は2であるが、受信メッセージに含まれるタイムスタンプが6であるため、論理クロック値は6まで進んでいると判断し、タイムスタンプに1加算した値(=7)を新たな論理クロック値としている。その後、ノードAにおいてイベントが発生し、ノードAの論理クロック値が8の時に、ノードAからノードCへメッセージ(タイムスタンプ:8)が送信されている。そして、そのメッセージを受信したノードCでは、メッセージ受信前の論理クロック値は5であるが、受信メッセージに含まれるタイムスタンプが8であるため、論理クロック値は8まで進んでいると判断し、タイムスタンプに1加算した値(=9)を新たな論理クロック値としている。また、ノードDにおいてイベントが発生し、ノードDの論理クロック値が7の時に、ノードDからノードCへメッセージ(タイムスタンプ:7)が送信されている。そして、そのメッセージを受信したノードCでは、受信メッセージに含まれるタイムスタンプは7であるが、自身の論理クロック値は9まで進んでいるため、自身の論理クロック値に1加算した値(=10)を新たな論理クロック値としている。このように、各ノードが論理クロック値を交換しながら処理を進めていく。しかし、ある論理クロック値に係る処理が自ノードにおいて完了しているからといって、他のノードにおいても、同じ論理クロック値に係る処理が必ず完了しているとは限らない。
例えば、結果整合性を実装した分散処理システムでは、ある論理クロック値の時にデータ更新が行われた場合に、その直後に、更新後のデータを必ず取得できるという保証はない。例えばある論理クロック値の時にsetコマンドを受け付けた場合の一例を図4(a)に示す。なお、図4(a)では、ノードCがクライアントYからのsetコマンド(データ値「3」)を受け取った際の論理クロック値は4であったものとする。なお、図4(a)におけるtの値は、論理クロック値を示す(以下、同様)。さらに、ノードA乃至Cにおいてデータのレプリカを保持するようになっているものとする。従って、図4(a)では、ノードCがクライアントYからのsetコマンド(データ値「3」)を受け付けた後、データ値「3」が、上で述べたようなフレームワークの連携によってノードA及びBに伝わっていくことになる。なお、図4(a)の例では、t=1の時に、ノードA乃至Cのいずれかのノードが、データ値「2」を受け取っており、t=3の時に、ノードA乃至Cのいずれかのノードが、データ値「4」を受け取っていたものとする。
しかし、結果整合性の考え方は、最終的にデータの整合が取れていれば良いというものであるため、いずれの時点でデータの整合が取れたか(すなわち、いつ「確定」したか)という観点は存在しなかった。そのため、結果整合性を実装した分散処理システムでは、ある論理クロック値に対応する整合データを取得することはできない。なお、ここでは、特定の論理クロック値に対応する整合データを取得するためのコマンドをsc_getとする。例えば図4(b)に示すように、t=4の時に受け取ったデータ値「3」がノードCからノードAに伝わる前に、ノードAが、クライアントXからのsc_getコマンドを受け付けたものとする。なお、図4(b)では、ノードAがクライアントXからのsc_setコマンドを受け取った際の論理クロック値は5であったものとする。この場合、ノードAは、t=5に対応する整合データを取得し、クライアントXに出力すべきであるが、t=5におけるデータが、どのタイミングで確定したか判断することはできない。
WO2007/032046公報 特開2000−259473号公報
以上のように、結果整合性を実装した分散処理システムには、どの時点でデータが確定したかという観点が存在しなかった。そのため、結果整合性を実装した分散処理システムでは、論理クロックが進行していく中で、システム全体として現在どこまでデータが確定しているのかを把握することはできなかった。なお、以下では、データが確定している時点を示す論理クロック値のことを、確定クロック値と呼ぶ。
従って、本発明の目的は、分散処理システムにおいて、システム全体における確定クロック値を把握できるようにするための技術を提供することである。
本確定クロック判定方法は、複数のノード装置を含む分散処理システムにおけるノード装置により実行される方法である。そして、本方法は、(A)複数のノード装置の各々についての第1の確定クロック値を含み且つ複数のノード装置の間で回覧されるクロックリストを受信する受信ステップと、(B)自ノード装置が受け付けたコマンドのうち処理が完了していないコマンド毎に当該コマンドを受け付けた時点の論理クロック値を格納するコマンドリスト格納部に格納されている最小の論理クロック値から、現時点における自ノード装置の第1の確定クロック値を算出し、算出した第1の確定クロック値でクロックリストに含まれる自ノード装置の第1の確定クロック値を更新する更新ステップと、(C)更新後のクロックリストに含まれる最小の第1の確定クロック値を、分散処理システム全体における第2の確定クロック値として特定する特定ステップと、(D)更新後のクロックリストを上記複数のノード装置に含まれる他のノード装置に送信するステップとを含む。
分散処理システム全体における確定クロック値を把握できるようになる。
図1は、結果整合性を実装した従来の分散処理システムの第1の動作例を示す図である。 図2は、結果整合性を実装した従来の分散処理システムの第2の動作例を示す図である。 図3は、従来の論理クロックを説明するための図である。 図4(a)及び(b)は、従来技術の問題点を説明するための図である。 図5は、第1の実施の形態のノード装置の機能ブロック図である。 図6は、第1の実施の形態の処理フローを示す図である。 図7は、第2の実施の形態に係るシステムの構成図である。 図8は、第2の実施の形態のノード装置の機能ブロック図である。 図9(a)乃至(c)は、第2の実施の形態に係る分散処理システム全体の処理を説明するための図である。 図10(a)及び(b)は、第2の実施の形態に係る分散処理システム全体の処理を説明するための図である。 図11は、ノード装置A及びBの動作を示すシーケンス図である。 図12は、系全体の確定クロック値を把握するための他の手法の一例を示す図である。 図13は、コマンド受信時のノード装置の処理フローを示す図である。 図14は、コマンドの処理完了時のノード装置の処理フローを示す図である。 図15は、クロックリスト受信時のノード装置の処理フローを示す図である。 図16は、sc_getコマンド受信時のノード装置の処理フローを示す図である。 図17は、クロックリストの回し方の第1の例を示す図である。 図18は、クロックリストの回し方の第2の例を示す図である。 図19は、コンピュータの機能ブロック図である。
[第1の実施の形態]
第1の実施の形態に係るノード装置の機能ブロック図を図5に示す。第1の実施の形態に係るノード装置は、受信部1501と、クロックリスト更新部1503と、特定部1505と、送信部1507と、コマンドリスト格納部1509とを有する。なお、図5に示したノード装置を複数用いて分散処理システムが構築される。受信部1501は、分散処理システム内の他のノード装置等からデータを受信する。クロックリスト更新部1503は、受信部1501が受信したデータとコマンドリスト格納部1509に格納されているデータとを用いて処理を行う。なお、コマンドリスト格納部1509には、自ノード装置が受け付けたコマンドのうちの処理中のコマンドについて、当該コマンドを受け付けた時点の論理クロック値が格納される。特定部1505は、クロックリスト更新部1503の処理結果を用いて処理を行う。送信部1507は、クロックリスト更新部1503の処理結果を、分散処理システム内の他のノード装置へ送信する。
次に、図5に示したノード装置の処理内容を図6を用いて説明する。まず、受信部1501が、分散処理システムに含まれる複数のノード装置の間で回覧されるクロックリストを受信する(図6:ステップS1001)。クロックリストには、分散処理システムに含まれる複数のノード装置の各々についての確定クロック値(以下、第1の確定クロック値とも呼ぶ)が含まれる。なお、受信部1501が受信したクロックリストは、クロックリスト更新部1503に出力される。
そして、クロックリスト更新部1503は、コマンドリスト格納部1509に格納されている最小の論理クロック値から、現時点における自ノード装置の第1の確定クロック値を算出し、算出した第1の確定クロック値でクロックリストに含まれる自ノード装置の第1の確定クロック値を更新する(ステップS1003)。このように、クロックリストが自ノード装置に回ってきた際には、現時点における自ノード装置の第1の確定クロック値を、クロックリストに反映する。なお、更新後のクロックリストは、特定部1505及び送信部1507に出力される。
そして、特定部1505は、更新後のクロックリストに含まれる最小の第1の確定クロック値を、分散処理システム全体における確定クロック値(以下、第2の確定クロック値又は系全体の確定クロック値とも呼ぶ)として特定する(ステップS1005)。また、送信部1507は、更新後のクロックリストを分散処理システムに含まれる他のノード装置に送信する(ステップS1007)。
以上のような処理を実施することにより、分散処理システムにおける系全体の確定クロック値を特定することができる。従って、分散処理システム全体として、どこまでデータが確定しているのかを把握できるようになる。
[第2の実施の形態]
次に、第2の実施の形態について説明する。図7に、第2の実施の形態に係るシステムの構成図を示す。例えばインターネットであるネットワーク1には、複数のノード装置(図7では、ノード装置A乃至C)を含む分散処理システム100と、複数のクライアント端末(図7では、クライアント端末A及びB)とが接続されている。分散処理システム100に含まれる各ノード装置には、結果整合性を実現するためのフレームワーク(図示せず)が実装されている。なお、各ノード装置には、クライアント端末からのデータを保管するためのデータベース(図示せず)が含まれているものとする。図7では、ノード装置が3台、クライアント端末が2台の例を示しているが、ノード装置及びクライアント端末の台数は、これに限定されない。
図8に、第2の実施の形態に係るノード装置の機能ブロック図を示す。第2の実施の形態に係るノード装置は、メッセージ受信部11と、メッセージ処理部12と、メッセージ送信部13と、コマンドリスト管理部14と、コマンドリスト格納部15と、クロックリスト受信部16と、確定クロック管理部17と、確定クロック値格納部18と、クロックリスト送信部19とを有する。
メッセージ受信部11は、クライアント端末からのコマンドや、分散処理システム100内の他のノード装置からのメッセージを受信する。なお、メッセージ受信部11は、新たなコマンドを受け付けた場合には、コマンドの情報を、メッセージ処理部12、コマンドリスト管理部14又は確定クロック管理部17に通知する。メッセージ処理部12は、メッセージ受信部11が受信したコマンドやメッセージに応じた処理を実施する。メッセージ送信部13は、メッセージ処理部12の処理結果をコマンド要求元に送信したり、分散処理システム100内の他のノード装置にメッセージを送信したりする。なお、メッセージ送信部13は、処理結果を送信し、処理完了と判断した場合には、その旨をコマンドリスト管理部14に通知する。コマンドリスト管理部14は、コマンドリスト格納部15を管理しており、メッセージ受信部11及びメッセージ送信部13からの通知に応じて、データの登録及び削除を行う。さらに、コマンドリスト管理部14は、コマンドリスト格納部15に格納されているデータを用いて、第1の確定クロック値を計算するといった処理も行う。
なお、コマンドリスト格納部15には、自ノード装置が受け付けたコマンドの情報と、当該コマンドを受け付けた時点の論理クロック値との対を含むコマンドリストが格納される。なお、コマンドとして、例えばsetコマンド、getコマンドなどが含まれる。例えば、論理クロック値が10の時にgetコマンドを受け付け、論理クロック値が14の時にsetコマンドを受け付け、論理クロック値が16の時にgetコマンドを受け付けていた時に、これらのコマンドの処理が未だ完了していない場合には、コマンドリスト={10:get,14:set,16:get}といったようなデータがコマンドリスト格納部15に格納される。
なお、コマンドリストに含まれる最小の論理クロック値から1減じた値が第1の確定クロック値となる。例えば上記のようなコマンドリストがコマンドリスト格納部15に格納されていた場合、コマンドリストに含まれる最小の論理クロック値は10であり、第1の確定クロック値は9(=10−1)となる。なお、コマンドリストが空の場合には、現時点における自ノード装置の論理クロック値が第1の確定クロック値となる。
また、クロックリスト受信部16は、分散処理システム100内の他のノード装置からクロックリストを受信する。クロックリストは、分散処理システム100内のノード装置の間で回覧されるデータである。なお、クロックリストには、ノード装置の識別情報と、当該ノード装置の第1の確定クロック値との対が含まれる。例えば、ノード装置Aの第1の確定クロック値が10であり、ノード装置Bの第1の確定クロック値が5であり、ノード装置Cの第1の確定クロック値が7であった場合のクロックリストは、クロックリスト={ノードA:10,ノードB:5,ノードC:7}となる。
さらに、確定クロック管理部17は、コマンドリスト管理部14の処理結果を用いて、クロックリスト受信部16が受信したクロックリストを更新し、更新後のクロックリストから分散処理システム100における系全体の確定クロック値を特定する。なお、確定クロック管理部17によって特定された系全体の確定クロック値は、確定クロック値格納部18に格納される。さらに、確定クロック管理部17は、系全体の確定クロック値が特定の論理クロック値以上になったか判断し、系全体の確定クロック値が特定の論理クロック値以上になった場合には、その旨をメッセージ受信部11に通知するといった処理も行う。また、クロックリスト送信部19は、確定クロック管理部17が更新したクロックリストを、分散処理システム100内の他のノード装置に送信する。
次に、図9及び図10を用いて、分散処理システム100全体の処理について説明する。なお、例えば図9(a)に示すように、分散処理システム100において、ノード装置Aの第1の確定クロック値が10であり、ノード装置Bの第1の確定クロック値が8であり、ノード装置Cの第1の確定クロック値が12であった場面を例として説明する。例えば、分散処理システム100の起動時にクロックリストを生成するノード装置が予め決められており、システムが正常に起動した後、そのノード装置が、分散処理システム100内のノード装置の情報(例えば、ノード装置の総数やノード装置の識別情報など)を取得し、クロックリストを生成すると、クロックリストの回覧が開始される。なお、ここでは、「ノード装置A−>ノード装置B−>ノード装置C」の順でクロックリストが回覧されるものとし、ノード装置Cの後、再びノード装置Aに戻るものとする。そして、例えば、クロックリスト={ノードA:5,ノードB:4,ノードC:7}がノード装置Aに回ってきたとすると、ノード装置Aは、自ノード装置の第1の確定クロック値(=10)に従って、クロックリストを更新する。なお、図9(a)における太枠の丸印は、クロックリストを所持しているノード装置を示している(以下、同じ)。そうすると、図9(b)に示すように、クロックリストは、{ノードA:10,ノードB:4,ノードC:7}といった内容に更新される。そして、更新後のクロックリストに含まれる最小の第1の確定クロック値(=4)を、系全体の確定クロック値として特定する。なお、特定された系全体の確定クロック値(=4)は、ノード装置Aの確定クロック値格納部18に格納される。その後、クロックリストは、ノード装置Bへ送信される。
そして、ノード装置Bは、クロックリストを受信すると、自ノード装置の第1の確定クロック値(=8)に従って、クロックリストを更新する。そうすると、図9(c)に示すように、クロックリストは、{ノードA:10,ノードB:8,ノードC:7}といった内容に更新される。そして、更新後のクロックリストに含まれる最小の第1の確定クロック値(=7)を、系全体の確定クロック値として特定する。なお、特定された系全体の確定クロック値(=7)は、ノード装置Bの確定クロック値格納部18に格納される。その後、クロックリストは、ノード装置Cへ送信される。
そして、ノード装置Cは、クロックリストを受信すると、自ノード装置の第1の確定クロック値(=12)に従って、クロックリストを更新する。そうすると、図10(a)に示すように、クロックリストは、{ノードA:10,ノードB:8,ノードC:12}といった内容に更新される。そして、更新後のクロックリストに含まれる最小の第1の確定クロック値(=8)を、系全体の確定クロックとして特定する。なお、特定された系全体の確定クロック値(=8)は、ノード装置Cの確定クロック値格納部18に格納される。その後、クロックリストは、ノード装置Aへ送信される。
そして、ノード装置Aは、再びクロックリストを受信すると、自ノード装置の第1の確定クロック値に従って、クロックリストを更新する。なお、ここでは、ノード装置Aの第1の確定クロック値は10のままであったものとする。従って、クロックリストの内容は、更新前と変わらない。例えば、このような場合には、クロックリストの更新処理を省略してもよい。その後、クロックリストに含まれる最小の第1の確定クロック値(=8)を、系全体の確定クロック値として特定する。なお、特定された系全体の確定クロック値(=8)は、ノード装置Aの確定クロック値格納部18に格納される。
このように、分散処理システム100内の各ノード装置は、クロックリストが自ノード装置に回ってきた時に、クロックリストを最新の状態に更新し、分散処理システム100における系全体の確定クロック値を特定する。そして、クロックリストを次のノード装置に渡す。
なお、図9及び図10では、ノード装置A乃至Cにおいて、第1の確定クロック値が変化しない例を示したが、分散処理システム100では、並行してコマンドの処理も行われているので、第1の確定クロック値も徐々に変化することになる。例えば図11を用いて、第1の確定クロック値が変化する場合について説明する。なお、図11の例では説明を簡単にするために、ノード装置A及びBのみが存在するものとする。
まず、ノード装置Aが、ノード装置Bからクロックリスト={ノードA:1,ノードB:1}を受信する(図11のT1)。このとき、ノード装置Aの第1の確定クロック値は3であり、ノード装置Aがクロックリストを更新すると、クロックリスト={ノードA:3,ノードB:1}となる。そうすると、ノード装置Bの第1の確定クロック値(=1)が、クロックリスト内の第1の確定クロック値の中で最小のものとなる。よって、T1の段階では「1」が系全体の確定クロック値として特定される。なお、クロックリストは、ノード装置Aからノード装置Bへ送信される。
その後、ノード装置Bが、ノード装置Aからクロックリスト={ノードA:3,ノードB:1}を受信する(図11のT2)。このとき、ノード装置Bの第1の確定クロック値は4であり、ノード装置Bがクロックリストを更新すると、クロックリスト={ノードA:3,ノードB:4}となる。そうすると、ノード装置Aの第1の確定クロック値(=3)が、クロックリスト内の第1の確定クロック値の中で最小のものとなる。よって、T2の段階では「3」が系全体の確定クロック値として特定される。なお、クロックリストは、ノード装置Bからノード装置Aへ送信される。
その後、ノード装置Aが、ノード装置Bからクロックリスト={ノードA:3,ノードB:4}を受信する(図11のT3)。このとき、ノード装置Aの第1の確定クロック値は6まで進んでいるので、ノード装置Aがクロックリストを更新すると、クロックリスト={ノードA:6,ノードB:4}となる。そうすると、ノード装置Bの第1の確定クロック値(=4)が、クロックリスト内の第1の確定クロック値の中で最小のものとなる。よって、T3の段階では「4」が系全体の確定クロック値として特定される。なお、クロックリストは、ノード装置Aからノード装置Bへ送信される。
その後、ノード装置Bが、ノード装置Aからクロックリスト={ノードA:6,ノードB:4}を受信する(図11のT4)。このとき、ノード装置Bの第1の確定クロック値は8まで進んでいるので、ノード装置Bがクロックリストを更新すると、クロックリスト={ノードA:6,ノードB:8}となる。そうすると、ノード装置Aの第1の確定クロック値(=6)が、クロックリスト内の第1の確定クロック値の中で最小のものとなる。よって、T4の段階では「6」が系全体の確定クロック値として特定される。なお、クロックリストは、ノード装置Bからノード装置Aへ送信される。
その後、ノード装置Aが、ノード装置Bからクロックリスト={ノードA:6,ノードB:8}を受信する(図11のT5)。このとき、ノード装置Aの第1の確定クロック値は6のままであるので、クロックリストの内容は変わらない。但し、T3の段階では最小の第1の確定クロック値は4であったが、T4の段階でノード装置Bによってクロックリストが更新されたことにより、T5の段階では最小の第1の確定クロック値が6に変わっている。よって、T5の段階では「6」が系全体の確定クロック値として特定される。なお、クロックリストは、ノード装置Aからノード装置Bへ送信される。
その後、ノード装置Bは、ノード装置Aからクロックリスト={ノードA:6,ノードB:8}を受信する(図11のT6)。このとき、ノード装置Bの第1の確定クロック値は12まで進んでいるので、ノード装置Bがクロックリストを更新すると、クロックリスト={ノードA:6,ノードB:12}となる。なお、T6の段階では、最小の第1の確定クロック値(=6)がT4の時と変わっていないため、系全体の確定クロック値は「6」のままである。そして、クロックリストは、ノード装置Bからノード装置Aへが送信される。
その後、ノード装置Aは、ノード装置Bからクロックリスト={ノードA:6,ノードB:12}を受信する(図11のT7)。このとき、ノード装置Aの第1の確定クロック値は13まで進んでいるので、ノード装置Aがクロックリストを更新すると、クロックリスト={ノードA:13,ノードB:12}となる。そうすると、ノード装置Bの第1の確定クロック値(=12)が、クロックリスト内の第1の確定クロック値の中で最小のものとなる。よって、T7の段階では「12」が系全体の確定クロック値として特定される。
このように第1の確定クロック値の変化に応じて、系全体の確定クロック値も変化していく。なお、図11では、ノード装置A及びBの2台のみが存在する例を示したが、ノード装置が3台以上存在する場合も、各ノード装置の処理は同じである。
以上のような処理を実施することにより、分散処理システム100における系全体の確定クロック値を特定することができる。従って、分散処理システム100全体として、どこまでデータが確定しているのかを把握できるようになる。
なお、系全体の確定クロック値を把握する手法として、図12に示すような手法も考えられる。具体的には、分散処理システム100内の全てのノード装置が書き込むことができるデータベースを設け、各ノード装置は、自ノード装置の論理クロック値が更新される毎に当該データベースに書き込みにいく。しかしながら、この手法では、論理クロック値が更新される毎にデータベースへのアクセスが発生し、本来行うべき処理以外の負荷が大きくなる。また、複数のノード装置が1つのデータベースにアクセスするとなると、排他制御が必要となり、待ち時間などが生じてくる。これに対し、本実施の形態に係る手法であれば、本来行うべき処理への負担を抑えつつ、系全体の確定クロック値を把握することができる。
次に、第2の実施の形態に係るノード装置の処理フローについて説明する。まず、図13を用いて、コマンド受信時の処理フローを説明する。例えば、メッセージ受信部11が、クライアント端末から新たなコマンドを受信する(図13:ステップS1)。この際、コマンド受信時の論理クロック値を特定する。そして、メッセージ受信部11は、コマンドの種別やコマンド受信時の論理クロック値などを含むコマンド情報を、メッセージ処理部12及びコマンドリスト管理部14に通知する。
そして、コマンドリスト管理部14は、メッセージ受信部11からコマンド情報を受信すると、コマンドとコマンド受信時の論理クロック値との対をコマンドリストに登録する(ステップS3)。すなわち、コマンドを受信する毎に、コマンドとコマンド受信時の論理クロック値との対がコマンドリストに登録されていく。
また、メッセージ処理部12は、メッセージ受信部11からコマンド情報を受信すると、受信コマンドに応じた処理を実施する。メッセージ処理部12については、従来と変わらないため、これ以上説明しない。そして、処理を終了する。
次に、図14を用いて、コマンドの処理完了時の処理フローを説明する。例えば、コマンドリスト管理部14は、コマンドリスト格納部15に格納されているコマンドリストを検索し、処理中のコマンドがあるか判断する(図14:ステップS11)。例えば、コマンドリストが空の場合には処理中のコマンドはないと判断し、コマンドリストに、コマンドとコマンド受信時の論理クロック値との対が1つでも登録されている場合には処理中のコマンドがあると判断する。なお、コマンドリストが空の場合、すなわち処理中のコマンドがないと判断された場合には(ステップS11:Noルート)、処理を終了する。
一方、処理中のコマンドがあると判断された場合(ステップS11:Yesルート)、コマンドリスト管理部14は、いずれかのコマンドの処理が完了したか判断する(ステップS13)。例えば、図14の処理フローと並行して、メッセージ処理部12がコマンドに応じた処理を実施しており、その処理が完了した場合には、その旨がコマンドリスト管理部14に通知される。従って、コマンドリスト管理部14は、処理完了通知を受信した場合、処理が完了したと判断する。なお、処理完了通知を受信していなければ(ステップS13:Noルート)、処理完了通知を受信するまで待つ。
そして、いずれかのコマンドの処理が完了したと判断された場合(ステップS13:Yesルート)、コマンドリスト管理部14は、処理が完了したコマンドと当該コマンド受信時の論理クロック値との対のデータをコマンドリスト格納部15内のコマンドリストから削除する(ステップS15)。
また、メッセージ処理部12による処理が完了した場合には、メッセージ送信部13が、処理結果をコマンド要求元へ送信する(ステップS17)。その後、ステップS11の処理に戻り、コマンドリストが空になるまで処理を繰り返す。なお、図14の処理フローにおいて、ステップS15及びS17については順番の入れ替えが可能であり、また並列に実施するようにしてもよい。
以上、図13及び図14に示したような処理を実施することにより、処理中のコマンドの情報を適切に管理することができる。
次に、図15を用いて、クロックリスト受信時の処理フローを説明する。まず、クロックリスト受信部16が、分散処理システム100内の他のノード装置からクロックリストを受信する(図15:ステップS21)。クロックリスト受信部16は、受信したクロックリストを、確定クロック管理部17に出力する。
そして、確定クロック管理部17は、クロックリスト受信部16からクロックリストを受信すると、コマンドリスト管理部14に、現時点における自ノード装置の第1の確定クロック値を算出するよう指示する。コマンドリスト管理部14は、確定クロック管理部17からの指示に応じて、コマンドリスト格納部15に格納されているコマンドリストを基に、現時点における第1の確定クロック値を算出する(ステップS23)。例えば、コマンドリストに含まれる最小の論理クロック値から1減じた値を、現時点における第1の確定クロック値として算出する。論理クロック値は、増えていく一方であるという性質があるため、コマンドリストに含まれる最小の論理クロック値の1つ前のところまでは、確定しているものとみなすことができる。例えば、コマンドリストに含まれる最小の論理クロック値が10であった場合には、第1の確定クロック値として9(=10−1)が算出される。なお、全ての処理が完了し、コマンドリストが空の場合もある。コマンドリストが空の場合には、現時点における論理クロック値を第1の確定クロック値として算出する。例えば背景技術の欄で述べたように、各ノード装置は論理クロック値を交換しながら処理を行う。すなわち、コマンドリストが空の状態でも、他のノード装置からメッセージを受信することで、論理クロック値は進んでいくことになる。そのため、コマンドリストが空の場合には、現時点における論理クロック値を第1の確定クロック値とする。
その後、コマンドリスト管理部14は、算出した第1の確定クロック値を確定クロック管理部17に出力する。そして、確定クロック管理部17は、コマンドリスト管理部14から第1の確定クロック値を受信すると、その第1の確定クロック値を用いてクロックリストを更新する(ステップS25)。すなわち、ステップS23において算出された第1の確定クロック値で、クロックリストに含まれる自ノード装置の第1の確定クロック値を書き換える。
その後、確定クロック管理部17は、更新後のクロックリストから系全体の確定クロック値を特定し、確定クロック値格納部18に格納する(ステップS27)。具体的には、更新後のクロックリストに含まれる第1の確定クロック値のうち、最小のものを系全体の確定クロック値として特定する。
そして、確定クロック管理部17は、更新後のクロックリストを送信するようクロックリスト送信部19に指示する。クロックリスト送信部19は、確定クロック管理部17からの指示に応じて、更新後のクロックリストを、分散処理システム100内の次のノード装置へ送信する(ステップS29)。なお、クロックリストの回し方としては、例えば、予め回す順番が決定されているような場合(例えばノード識別番号の昇順又は降順など)もあれば、ランダムに回すような場合もある。また、例えば、分散処理システム100内の他のノード装置のうち、第1の確定クロック値が最も小さいノード装置を特定し、特定したノード装置へ送信するような場合もある。系全体の確定クロック値は、クロックリストに含まれる最小の第1の確定クロック値であるから、第1の確定クロック値が最小であるノード装置へ優先的に回すようにすれば、当該ノード装置の第1の確定クロック値が更新された場合には直ぐに系全体の確定クロック値に反映されるようになる。そして、処理を終了する。
以上のような処理を実施することにより、分散処理システム100における系全体の確定クロック値を特定することができる。
次に、図16を用いて、sc_getコマンド受信時の処理フローを説明する。なお、図16に示す処理は、図15に示した処理と並行して行われるものとする。まず、メッセージ受信部11は、クライアント端末からsc_getコマンドを受信する(図16:ステップS31)。この際、sc_getコマンド受信時の論理クロック値を特定する。そして、メッセージ受信部11は、sc_getコマンド受信時の論理クロック値を、確定クロック管理部17に通知する。なお、sc_getコマンドは、コマンドリストには登録されないものとする。
確定クロック管理部17は、メッセージ受信部11からsc_getコマンド受信時の論理クロック値を受信すると、確定クロック値格納部18から系全体の確定クロック値を取得する(ステップS33)。そして、確定クロック管理部17は、系全体の確定クロック値がsc_get受信時の論理クロック値より小さいか判断する(ステップS35)。系全体の確定クロック値がsc_get受信時の論理クロック値より小さい場合(ステップS35:Yesルート)、図15に示した処理により系全体の確定クロック値が更新されるまで処理を一旦保留する。そして、系全体の確定クロック値が更新された場合には、ステップS33に戻って処理を再開する。なお、系全体の確定クロック値がsc_getコマンド受信時の論理クロック値以上になるまで、ステップS33及びS35の処理が繰り返される。
そして、系全体の確定クロック値がsc_getコマンド受信時の論理クロック値以上であると判断された場合(ステップS35:Noルート)、確定クロック管理部17は、その旨をメッセージ受信部11に通知する。メッセージ受信部11は、確定クロック管理部17からの通知を受信すると、sc_getコマンドの処理を実行するようメッセージ処理部12に指示する。そして、メッセージ処理部12は、sc_getコマンドで指定されたデータを自ノード装置内のデータベースから取得し、取得したデータをメッセージ送信部13に送信させる(ステップS37)。なお、メッセージ送信部13は、sc_getコマンドの要求元へデータを送信する。その後、処理を終了する。
例えば、sc_getコマンド受信時の論理クロック値が5で且つそのときの系全体の確定クロック値が4であったとすると、論理クロック値が5の時に受信したコマンドによって、データが書き換えられる可能性がある。そこで、本実施の形態では、上で説明したように、系全体の確定クロック値がsc_getコマンド受信時の論理クロック値以上になった時点で、データを取得するようになっている。これにより、sc_getコマンド受信時の論理クロック値に対応する整合データを取得できる。例えばデータベースのスナップショットを生成するような場合に、本技術を適用することもできる。
なお、上では、sc_getコマンド受信時の論理クロック値を基準として、整合データを取得する例を説明したが、sc_getコマンドで、どの時点の整合データを取得するかを指定するような構成であってもよい。この場合、sc_getコマンド受信時の論理クロック値ではなく、sc_getコマンドで指定された論理クロック値を用いて、上で述べたような処理を実施するようにすればよい。
また、クロックリストの数は、1個である必要はなく、複数のクロックリストを回覧するようにしてもよい。例えばクロックリストの数を増やせば、クロックリストの受信間隔が短くなるので、図15に示した処理の実行間隔も短くなる。従って、系全体の確定クロック値をより細かく把握できるようになる。さらに、複数のクロックリストを回覧する際には、クロックリストの回し方は自由である。図17及び図18に、複数のクロックリストを回覧する際のクロックリストの回し方の例を示す。
図17の例では、1つ目のクロックリスト1701が、ノードAとノードBとノードCとを巡回するようになっており、2つ目のクロックリスト1702が、ノードCとノードDとノードEとノードFとを巡回するようになっている。なお、クロックリスト1701及び1702の各々には、全てのノード(すなわち、ノードA乃至F)についての第1の確定クロック値が含まれる。但し、この例では、ノードA及びBには、クロックリスト1702が渡されず、ノードD乃至Fには、クロックリスト1701が渡されないようになっている。そこで、両方のクロックリストを受信するノードCが、以下のような処理を実施する。具体的には、ノードCは、最後に受信したクロックリスト1701及び1702を記憶しておく。そして、新たにクロックリスト1701を受信した場合には、自身の第1の確定クロック値をクロックリスト1701に反映するとともに、記憶しておいたクロックリスト1702からノードD乃至Fの第1の確定クロック値を抽出し、クロックリスト1701に反映する。また、新たにクロックリスト1702を受信した場合には、自身の第1の確定クロック値をクロックリスト1702に反映するとともに、記憶しておいたクロックリスト1701からノードA及びBの第1の確定クロック値を抽出し、クロックリスト1702に反映する。これにより、例えばノードD乃至Fにはクロックリスト1701は渡されないが、クロックリスト1701に含まれるノードD乃至Fの第1の確定クロック値を適切に更新することができる。同様に、ノードA及びBにはクロックリスト1702は渡されないが、クロックリスト1702に含まれるノードA及びBの第1の確定クロック値を適切に更新することができる。
また、図18の例では、1つ目のクロックリスト1801が、全てのノード(すなわち、ノードA乃至F)を巡回するようになっており、2つ目のクロックリスト1802が、ノードAとノードDとを巡回するようになっている。なお、クロックリスト1801及び1802の各々には、全てのノード(すなわち、ノードA乃至F)についての第1の確定クロック値が含まれる。例えば、頻繁にコマンドを受信しないようなノードには、少なくとも1つのクロックリストが回るようにしておき、一方で、頻繁にコマンドを受信するようなノードには、複数のクロックリストが回ってくるようにする。
なお、複数のクロックリストを回覧する際には、クロックリストの間に差異が生じてくる場合もある。その場合には、周期的に又は所定のタイミングで、あるノードが最新の内容でクロックリストの同期を取るようにし、その後、それぞれのクロックリストの回覧を再開させるにしてもよい。
以上本発明の本実施の形態について説明したが、本発明はこれに限定されるものではない。例えば図5又は図8に示したノード装置の機能ブロック図は一例であって必ずしも実際のプログラムモジュール構成と一致しない場合もある。データ格納部の構成も同様に一例にすぎない。
また、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしてもよい。
なお、上で述べたノード装置は、コンピュータ装置によって実現することもできる。例えば、図19に示すように、メモリ2501とプロセッサ(CPU2503)とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とを備え、これらがバス2519を介して接続されたコンピュータを用いてもよい。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505等の記憶部に格納しておき、CPU2503により実行される際にはHDD2505からメモリ2501に読み出して利用することもできる。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行ってもよい。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納してもよい。実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされてもよい。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。なお、図5のコマンドリスト格納部1509は、図19におけるメモリ2501やHDD2505等として実現してもよい。図8のコマンドリスト格納部15及び確定クロック値格納部18についても同様である。図5の受信部1501、クロックリスト更新部1503、特定部1505及び送信部1507は、プロセッサ2503及びプログラムの組み合わせ、すなわち、プロセッサ2503がプログラムを実行することにより実現してもよい。より具体的には、プロセッサ2503は、HDD2505又はメモリ2501に記憶されたプログラムに従った動作を行うことで、上で述べたような処理部として機能してもよい。図8のメッセージ受信部11、メッセージ処理部12、メッセージ送信部13、コマンドリスト管理部14、クロックリスト受信部16、確定クロック管理部17及びクロックリスト送信部19についても同様である。
以上述べた本実施の形態をまとめると、以下のようになる。
第1の態様に係る確定クロック判定方法は、複数のノード装置を含む分散処理システムにおけるノード装置により実行される方法である。そして、本方法は、(A)複数のノード装置の各々についての第1の確定クロック値を含み且つ複数のノード装置の間で回覧されるクロックリストを受信する受信ステップと、(B)自ノード装置が受け付けたコマンドのうち処理が完了していないコマンド毎に当該コマンドを受け付けた時点の論理クロック値を格納するコマンドリスト格納部に格納されている最小の論理クロック値から、現時点における自ノード装置の第1の確定クロック値を算出し、算出した第1の確定クロック値でクロックリストに含まれる自ノード装置の第1の確定クロック値を更新する更新ステップと、(C)更新後のクロックリストに含まれる最小の第1の確定クロック値を、分散処理システム全体における第2の確定クロック値として特定する特定ステップと、(D)更新後のクロックリストを上記複数のノード装置に含まれる他のノード装置に送信するステップとを含む。
このように、クロックリストを最新の状態に更新しながら分散処理システムに含まれるノード装置で回すことで、分散処理システムにおける系全体の確定クロック値(すなわち、第2の確定クロック値)を把握できるようになる。
また、第1の態様において、分散処理システム全体で整合が取れているデータ値を取得するための取得コマンドを受け付けるステップと、特定ステップにおいて特定された第2の確定クロック値が、取得コマンドを受け付けた時点の論理クロック値又は取得コマンドで指定された論理クロック値以上になったか判断するステップと、第2の確定クロック値が、取得コマンドを受け付けた時点の論理クロック値又は取得コマンドで指定された論理クロック値以上になったと判断された場合、取得コマンドで指定されたデータの値を取得コマンドの要求元に出力するステップとをさらに含むようにしてもよい。このようにすれば、分散処理システム全体における確定クロック値(すなわち、第2の確定クロック値)が、取得コマンドを受け付けた時点の論理クロック値又は取得コマンドで指定された論理クロック値以上になってから、取得コマンドで指定されたデータの値を出力する。従って、特定の論理クロック値に対応する整合データを取得することができるようになる。
さらに、複数のクロックリストが回覧される場合、受信ステップにおいてクロックリストを受信する毎に、更新ステップ以降のステップを実行する場合もある。例えばクロックリストの数が多くなれば、短い間隔で自ノードにおける確定クロック値をチェックし、クロックリストを更新できるようになるので、分散処理システムにおける系全体の確定クロック値をより細かく把握できるようになる。
上で述べた更新ステップにおいて、コマンドリスト格納部に格納されている最小の論理クロック値から1減じた値を、現時点における自ノード装置の第1の確定クロック値として算出する場合もある。例えば、自ノードにおいて、処理が完了していない最小の論理クロック値から1減じたところまでは、確定したものとみなすことができるためである。
第2の態様に係る、分散処理システム用のノード装置は、(z)自ノード装置が受け付けたコマンドのうち処理が完了していないコマンド毎に当該コマンドを受け付けた時点の論理クロック値を格納するコマンドリスト格納部と、(a)分散処理システムにおける複数のノード装置の各々についての第1の確定クロック値を含み且つ複数のノード装置の間で回覧されるクロックリストを受信する受信部と、(b)コマンドリスト格納部に格納されている最小の論理クロック値から、現時点における自ノード装置の第1の確定クロック値を算出し、算出した第1の確定クロック値でクロックリストに含まれる自ノード装置の第1の確定クロック値を更新するクロックリスト更新部と、(c)更新後のクロックリストに含まれる最小の第1の確定クロック値を、分散処理システム全体における第2の確定クロック値として特定する特定部と、(d)更新後のクロックリストを複数のノード装置に含まれる他のノード装置に送信する送信部とを有する。
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROM、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、RAM等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
複数のノード装置を含む分散処理システムにおける前記ノード装置に、
前記複数のノード装置の各々についての第1の確定クロック値を含み且つ前記複数のノード装置の間で回覧されるクロックリストを受信する受信ステップと、
自ノード装置が受け付けたコマンドのうち処理が完了していないコマンド毎に当該コマンドを受け付けた時点の論理クロック値を格納するコマンドリスト格納部に格納されている最小の前記論理クロック値から、現時点における自ノード装置の前記第1の確定クロック値を算出し、算出した前記第1の確定クロック値で前記クロックリストに含まれる自ノード装置の前記第1の確定クロック値を更新する更新ステップと、
更新後のクロックリストに含まれる最小の前記第1の確定クロック値を、前記分散処理システム全体における第2の確定クロック値として特定する特定ステップと、
更新後のクロックリストを前記複数のノード装置に含まれる他のノード装置に送信するステップと、
を実行させるための確定クロック判定プログラム。
(付記2)
前記分散処理システム全体で整合が取れているデータ値を取得するための取得コマンドを受け付けるステップと、
前記特定ステップにおいて特定された前記第2の確定クロック値が、前記取得コマンドを受け付けた時点の前記論理クロック値又は前記取得コマンドで指定された前記論理クロック値以上になったか判断するステップと、
前記第2の確定クロック値が、前記取得コマンドを受け付けた時点の前記論理クロック値又は前記取得コマンドで指定された前記論理クロック値以上になったと判断された場合、前記取得コマンドで指定されたデータの値を前記取得コマンドの要求元に出力するステップと、
をさらに実行させるための付記1記載の確定クロック判定プログラム。
(付記3)
複数の前記クロックリストが回覧される場合、前記受信ステップにおいて前記クロックリストを受信する毎に、前記更新ステップ以降のステップを実行する
ことを特徴とする付記1又は2記載の確定クロック判定プログラム。
(付記4)
前記更新ステップにおいて、
前記コマンドリスト格納部に格納されている最小の前記論理クロック値から1減じた値を、現時点における自ノード装置の前記第1の確定クロック値として算出する
ことを特徴とする付記1乃至3のいずれか1つ記載の確定クロック判定プログラム。
(付記5)
複数のノード装置を含む分散処理システムにおける前記ノード装置により実行される確定クロック判定方法であって、
前記複数のノード装置の各々についての第1の確定クロック値を含み且つ前記複数のノード装置の間で回覧されるクロックリストを受信する受信ステップと、
自ノード装置が受け付けたコマンドのうち処理が完了していないコマンド毎に当該コマンドを受け付けた時点の論理クロック値を格納するコマンドリスト格納部に格納されている最小の前記論理クロック値から、現時点における自ノード装置の前記第1の確定クロック値を算出し、算出した前記第1の確定クロック値で前記クロックリストに含まれる自ノード装置の前記第1の確定クロック値を更新する更新ステップと、
更新後のクロックリストに含まれる最小の前記第1の確定クロック値を、前記分散処理システム全体における第2の確定クロック値として特定する特定ステップと、
更新後のクロックリストを前記複数のノード装置に含まれる他のノード装置に送信するステップと、
を含む確定クロック判定方法。
(付記6)
分散処理システム用のノード装置であって、
自ノード装置が受け付けたコマンドのうち処理が完了していないコマンド毎に当該コマンドを受け付けた時点の論理クロック値を格納するコマンドリスト格納部と、
前記分散処理システムにおける複数のノード装置の各々についての第1の確定クロック値を含み且つ前記複数のノード装置の間で回覧されるクロックリストを受信する受信部と、
前記コマンドリスト格納部に格納されている最小の前記論理クロック値から、現時点における自ノード装置の前記第1の確定クロック値を算出し、算出した前記第1の確定クロック値で前記クロックリストに含まれる自ノード装置の前記第1の確定クロック値を更新するクロックリスト更新部と、
更新後のクロックリストに含まれる最小の前記第1の確定クロック値を、前記分散処理システム全体における第2の確定クロック値として特定する特定部と、
更新後のクロックリストを前記複数のノード装置に含まれる他のノード装置に送信する送信部と、
を有するノード装置。
1 ネットワーク
11 メッセージ受信部 12 メッセージ処理部
13 メッセージ送信部 14 コマンドリスト管理部
15 コマンドリスト格納部 16 クロックリスト受信部
17 確定クロック管理部 18 確定クロック値格納部
19 クロックリスト送信部
100 分散処理システム

Claims (5)

  1. 複数のノード装置を含む分散処理システムにおける前記ノード装置に、
    前記複数のノード装置の各々についての第1の確定クロック値を含み且つ前記複数のノード装置の間で回覧されるクロックリストを受信する受信ステップと、
    自ノード装置が受け付けたコマンドのうち処理が完了していないコマンド毎に当該コマンドを受け付けた時点の論理クロック値を格納するコマンドリスト格納部に格納されている最小の前記論理クロック値から、現時点における自ノード装置の前記第1の確定クロック値を算出し、算出した前記第1の確定クロック値で前記クロックリストに含まれる自ノード装置の前記第1の確定クロック値を更新する更新ステップと、
    更新後のクロックリストに含まれる最小の前記第1の確定クロック値を、前記分散処理システム全体における第2の確定クロック値として特定する特定ステップと、
    更新後のクロックリストを前記複数のノード装置に含まれる他のノード装置に送信するステップと、
    を実行させるための確定クロック判定プログラム。
  2. 前記分散処理システム全体で整合が取れているデータ値を取得するための取得コマンドを受け付けるステップと、
    前記特定ステップにおいて特定された前記第2の確定クロック値が、前記取得コマンドを受け付けた時点の前記論理クロック値又は前記取得コマンドで指定された前記論理クロック値以上になったか判断するステップと、
    前記第2の確定クロック値が、前記取得コマンドを受け付けた時点の前記論理クロック値又は前記取得コマンドで指定された前記論理クロック値以上になったと判断された場合、前記取得コマンドで指定されたデータの値を前記取得コマンドの要求元に出力するステップと、
    をさらに実行させるための請求項1記載の確定クロック判定プログラム。
  3. 複数の前記クロックリストが回覧される場合、前記受信ステップにおいて前記クロックリストを受信する毎に、前記更新ステップ以降のステップを実行する
    ことを特徴とする請求項1又は2記載の確定クロック判定プログラム。
  4. 複数のノード装置を含む分散処理システムにおける前記ノード装置により実行される確定クロック判定方法であって、
    前記複数のノード装置の各々についての第1の確定クロック値を含み且つ前記複数のノード装置の間で回覧されるクロックリストを受信する受信ステップと、
    自ノード装置が受け付けたコマンドのうち処理が完了していないコマンド毎に当該コマンドを受け付けた時点の論理クロック値を格納するコマンドリスト格納部に格納されている最小の前記論理クロック値から、現時点における自ノード装置の前記第1の確定クロック値を算出し、算出した前記第1の確定クロック値で前記クロックリストに含まれる自ノード装置の前記第1の確定クロック値を更新する更新ステップと、
    更新後のクロックリストに含まれる最小の前記第1の確定クロック値を、前記分散処理システム全体における第2の確定クロック値として特定する特定ステップと、
    更新後のクロックリストを前記複数のノード装置に含まれる他のノード装置に送信するステップと、
    を含む確定クロック判定方法。
  5. 分散処理システム用のノード装置であって、
    自ノード装置が受け付けたコマンドのうち処理が完了していないコマンド毎に当該コマンドを受け付けた時点の論理クロック値を格納するコマンドリスト格納部と、
    前記分散処理システムにおける複数のノード装置の各々についての第1の確定クロック値を含み且つ前記複数のノード装置の間で回覧されるクロックリストを受信する受信部と、
    前記コマンドリスト格納部に格納されている最小の前記論理クロック値から、現時点における自ノード装置の前記第1の確定クロック値を算出し、算出した前記第1の確定クロック値で前記クロックリストに含まれる自ノード装置の前記第1の確定クロック値を更新するクロックリスト更新部と、
    更新後のクロックリストに含まれる最小の前記第1の確定クロック値を、前記分散処理システム全体における第2の確定クロック値として特定する特定部と、
    更新後のクロックリストを前記複数のノード装置に含まれる他のノード装置に送信する送信部と、
    を有するノード装置。
JP2010016979A 2010-01-28 2010-01-28 確定クロック判定プログラム及び方法、並びにノード装置 Active JP5445177B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010016979A JP5445177B2 (ja) 2010-01-28 2010-01-28 確定クロック判定プログラム及び方法、並びにノード装置
US13/015,931 US8437983B2 (en) 2010-01-28 2011-01-28 Method for determining definite clock and node apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010016979A JP5445177B2 (ja) 2010-01-28 2010-01-28 確定クロック判定プログラム及び方法、並びにノード装置

Publications (2)

Publication Number Publication Date
JP2011154631A JP2011154631A (ja) 2011-08-11
JP5445177B2 true JP5445177B2 (ja) 2014-03-19

Family

ID=44309611

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010016979A Active JP5445177B2 (ja) 2010-01-28 2010-01-28 確定クロック判定プログラム及び方法、並びにノード装置

Country Status (2)

Country Link
US (1) US8437983B2 (ja)
JP (1) JP5445177B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5488178B2 (ja) * 2010-04-30 2014-05-14 富士通株式会社 データ管理プログラム及び方法、並びにノード装置
JP2016143296A (ja) 2015-02-03 2016-08-08 富士通株式会社 情報記憶装置、ストレージシステムおよび情報記憶装置制御プログラム

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5452445A (en) * 1992-04-30 1995-09-19 Oracle Corporation Two-pass multi-version read consistency
JPH07302242A (ja) * 1994-04-30 1995-11-14 Mitsubishi Electric Corp 負荷分散方式
US5581753A (en) * 1994-09-28 1996-12-03 Xerox Corporation Method for providing session consistency guarantees
JP2000259473A (ja) 1999-03-08 2000-09-22 Fuji Xerox Co Ltd データベース管理方式
CN1679028A (zh) * 2002-08-29 2005-10-05 松下电器产业株式会社 内容处理装置与内容显示装置
US7660833B2 (en) * 2003-07-10 2010-02-09 Microsoft Corporation Granular control over the authority of replicated information via fencing and unfencing
US7526672B2 (en) * 2004-02-25 2009-04-28 Microsoft Corporation Mutual exclusion techniques in a dynamic peer-to-peer environment
BRPI0611707A2 (pt) 2005-06-29 2012-04-24 Compumedics Ltd conjunto de sensor com ponte condutiva
DE112005003668T5 (de) 2005-09-12 2008-07-24 Fujitsu Ltd., Kawasaki HSM-Steuerprogramm, HSM-Steuervorrichtung und HSM-Steuerverfahren

Also Published As

Publication number Publication date
JP2011154631A (ja) 2011-08-11
US8437983B2 (en) 2013-05-07
US20110184698A1 (en) 2011-07-28

Similar Documents

Publication Publication Date Title
US7721003B2 (en) System and method to synchronize OSGi bundle inventories between an OSGi bundle server and a client
US9485134B2 (en) Managing configurations of system management agents in a distributed environment
US9253265B2 (en) Hot pluggable extensions for access management system
US10491704B2 (en) Automatic provisioning of cloud services
US8756343B2 (en) Data management method and node apparatus
CN110651256B (zh) 用于在软件更新期间防止服务中断的系统和方法
JP2012520504A (ja) デバイスおよびウェブ・サービスにわたってブラウザー・キャッシュを同期させるためのプログラミング・モデル
JP2015018295A (ja) アプリケーション管理装置、アプリケーション管理システムおよびプログラム
US8266301B2 (en) Deployment of asynchronous agentless agent functionality in clustered environments
JP6700308B2 (ja) データ・コピー方法及びデバイス
US8473702B2 (en) Information processing apparatus, execution environment transferring method and program thereof
JP7345921B2 (ja) マスタースレーブアーキテクチャのota差分更新方法とシステム
CN110912977A (zh) 一种配置文件的更新方法、装置、设备及存储介质
JP6028851B2 (ja) 情報処理装置、プログラム更新方法、及びプログラム
JP5445177B2 (ja) 確定クロック判定プログラム及び方法、並びにノード装置
TW201523447A (zh) 伺服器系統與韌體更新方法
US10185735B2 (en) Distributed database system and a non-transitory computer readable medium
US9880855B2 (en) Start-up control program, device, and method
US20170262201A1 (en) Information processing apparatus, information processing system and program medium
CN114930313A (zh) 用于管理区块链节点的系统和方法
US9336063B1 (en) Distributed task management
US8429136B2 (en) Information processing method and information processing apparatus
JP6007753B2 (ja) 管理サーバ、ハードウェア管理装置、情報処理装置、ハードウェア管理システム、ハードウェア管理方法、および、コンピュータ・プログラム
JP2011108093A (ja) 高可用サーバシステム、高可用サーバシステムの障害時復旧方法、および高可用サーバ
US10642844B2 (en) Non-materialized tables with standing queries

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121005

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131108

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131209

R150 Certificate of patent or registration of utility model

Ref document number: 5445177

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150