JP2022115672A - 多重系処理システム及び多重系処理システムの制御方法 - Google Patents

多重系処理システム及び多重系処理システムの制御方法 Download PDF

Info

Publication number
JP2022115672A
JP2022115672A JP2021012370A JP2021012370A JP2022115672A JP 2022115672 A JP2022115672 A JP 2022115672A JP 2021012370 A JP2021012370 A JP 2021012370A JP 2021012370 A JP2021012370 A JP 2021012370A JP 2022115672 A JP2022115672 A JP 2022115672A
Authority
JP
Japan
Prior art keywords
task
transaction
event
nodes
execution control
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.)
Pending
Application number
JP2021012370A
Other languages
English (en)
Inventor
英宏 河合
Hidehiro Kawai
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2021012370A priority Critical patent/JP2022115672A/ja
Publication of JP2022115672A publication Critical patent/JP2022115672A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

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

Abstract

【課題】アクセス対象のデータのバージョンを事前に一括してノード間で合意を形成することで同期に要する遅延を削減する。【解決手段】プロセッサとメモリと通信装置を含むノードを複数有し、前記複数のノードをネットワークを介して接続し、前記複数のノードが入力に対して一意の出力を行う1以上のタスクをそれぞれ実行する多重系処理システムであって、前記ノードは、イベントを受け付けて、前記イベントに対応する前記タスクを実行するトランザクションを開始するタスク実行制御部と、前記タスクがアクセスするデータベースのデータのバージョンを管理するステート管理部と、を有し、前記タスク実行制御部は、前記タスクの処理を開始する以前に、前記データベースで前記タスクが参照するデータのバージョン又は前記タスクが更新するデータのバージョンを一括して前記ノード間で合意を形成することを特徴とする多重系処理システム。【選択図】図21

Description

本発明は、フォールトトレラントシステムの技術を適用する多重系処理システムに関する。
多重化された計算機(ノード)間で同じ処理を実施し、いずれかの計算機に障害が発生しても無停止で業務を継続可能とするフォールトトレラントシステム(fault-tolerant system)が知られている。
また、多重化の一例としては、ステートマシンレプリケーション(State Machine Replication)が知られている。ステートマシンレプリケーションは、各複製ノードに対して同じ入力に対して決定性の処理を行うことで、同じ出力をして同じステートを維持し、ノードに障害が発生した場合にシームレスな主従系交替を実現する。
複数のタスクを並列実行する構成のアプリケーションの場合、各タスクへの入力内容をノード間で一致化させることで、全体としての決定性を保証する技術として、例えば、特許文献1が知られている。特許文献1は、共有データへのアクセスを行う際、リーダ-フォロワ型の合意形成プロトコルによってアクセス順を決定して処理を実行することで、複製ノード間での決定性を保証する。
国際公開第2012/127652号
上記特許文献1では、タスク間の共有データ(=ステート)へのアクセスの順序を、アクセスの都度、ノード間で一致化することで決定性を保証している。すなわち、特許文献1では、タスク間で共有されるデータへのアクセス要求が発生する都度、リーダノードとフォロワノード間で通信が発生するため、ワークロードによっては同期のための負荷が増大する恐れがあった。
そこで本発明は、上記問題点に鑑みてなされたもので、アクセス対象の共有データのバージョンを事前に一括してノード間で合意を形成することで同期に要する遅延を削減することを目的とする。
本発明は、プロセッサとメモリと通信装置を含むノードを複数有し、前記複数のノードをネットワークを介して接続し、前記複数のノードが入力に対して一意の出力を行う1以上のタスクをそれぞれ実行する多重系処理システムであって、前記ノードは、イベントを受け付けて、前記イベントに対応する前記タスクを実行するトランザクションを開始するタスク実行制御部と、前記タスクがアクセスするデータベースのデータのバージョンを管理するステート管理部と、を有し、前記タスク実行制御部は、前記タスクの処理を開始する以前に、前記データベースで前記タスクが参照するデータのバージョン又は前記タスクが更新するデータのバージョンを一括して前記ノード間で合意を形成することを特徴とする多重系処理システム。
したがって、本発明は、同時に複数のバージョンのデータ(ステート)を管理し、アクセス対象のデータのバージョンを事前に一括してノード間で合意を形成することで同期に要する遅延を削減することができる。そして、各ノードをリーダ-フォロワ方式で構成することで、リーダノードは合意形成前にタスクの実行を開始し、フォロワノードは合意形成の後にタスクの実行を開始することで、少なくともリーダノードは合意形成待ちによる遅延を回避することが可能となる。
本明細書において開示される主題の、少なくとも1つの実施の詳細は、添付されている図面と以下の記述の中で述べられる。開示される主題のその他の特徴、態様、効果は、以下の開示、図面、請求項により明らかにされる。
本発明の実施例1を示し、多重系の計算機システムの一例を示すブロック図である。 本発明の実施例1を示し、ノードの一例を示すブロック図である。 本発明の実施例1を示し、ノードで行われる処理の一例を示すフローチャートである。 本発明の実施例1を示し、タスクの一例を示す図である。 本発明の実施例1を示し、ノードで行われる受信処理の一例を示す図である。 本発明の実施例1を示し、メッセージのヘッダの一例を示す図である。 本発明の実施例1を示し、ステート管理部の機能の一例を示す図である。 本発明の実施例1を示し、データベース管理テーブルの一例を示す図である。 本発明の実施例1を示し、テーブル管理テーブルの一例を示す図である。 本発明の実施例1を示し、データベースのテーブルの一例を示す図である。 本発明の実施例1を示し、リードオンリのトランザクションの開始処理の一例を示すフローチャートである。 本発明の実施例1を示し、ハンドルの一例を示す図である。 本発明の実施例1を示し、指定されたテーブルへのリードオンリのトランザクションの開始要求の一例を示すフローチャートである。 本発明の実施例1を示し、リードオンリのトランザクションの終了要求の一例を示すフローチャートである。 本発明の実施例1を示し、リードライトのトランザクションの開始要求の一例を示すフローチャートである。 本発明の実施例1を示し、ハンドルの一例を示す図である。 本発明の実施例1を示し、リードライトのトランザクションの終了要求の一例を示すフローチャートである。 本発明の実施例1を示し、ノード間で行われる合意形成の一例を示す図である。 本発明の実施例1を示し、タスクの初期化処理の一例を示すシーケンス図である。 本発明の実施例1を示し、タスク管理テーブルの一例を示す図である。 本発明の実施例1を示し、タスク処理の一例を示すシーケンス図である。 本発明の実施例1を示し、イベント登録処理の一例を示すフローチャートである。 本発明の実施例1を示し、イベント管理キューの一例を示す図である。 本発明の実施例1を示し、リーダノードで行われるトランザクション開始処理の一例を示すフローチャートである。 本発明の実施例1を示し、フォロワノードで行われるトランザクション開始処理の一例を示すフローチャートである。 本発明の実施例1を示し、送信処理の一例を示す図である。 本発明の実施例2を示し、ステート管理部で行われる処理の一例を示すフローチャートである。 本発明の実施例2を示し、ハンドルの一例を示す図である。
以下、本発明の実施形態を添付図面に基づいて説明する。
図1は、本発明の実施例1を示し、多重系処理システムの一例を示すブロック図である。図示の例では、3つのノード1-1~1-3がリーダ-フォロワ型で構成されて、リーダノード1-1の複製をフォロワノード1-2~1-3とした多重系処理システムを示す。
なお、以下の説明では、ノードの説明の際に、リーダノードとフォロワノードを区別しない場合には、「-」以降を省略した符号「1」を用いる。なお、他の構成要素の符号が「-」を含む場合も同様である。
各クライアントアプリケーション2は同一のクライアント計算機4上で動作するプロクシ3と接続し、プロクシ3はネットワーク5を介して各ノード1に接続する。
本実施例の多重系の計算機システムは、多重化されたノード1-1~1-3それぞれの上で複製された同一状態のサーバアプリケーション20(図2参照)が動作する。クライアントアプリケーション2はサーバアプリケーション20宛てのリクエストメッセージ300をプロクシ3に送信し、プロクシ3はこれを複製して各ノード1に配信する。各ノード1上で動作するサーバアプリケーション20はそれぞれ同一の処理を実施し、その処理結果をプロクシ3を経由してクライアントアプリケーション2へ応答する。プロクシ3は各クライアントアプリケーション2と同じクライアント計算機4上で動作する。このためプロクシ3が単一障害点となることはない。
本実施例の多重系の概要は次の通りである。まず、クライアントアプリケーション2が各ノード1上に複製されたサーバアプリケーション宛てのリクエストメッセージを送信し、仲介役のプロクシ3が一旦これを受信する(S1)。プロクシ3は、クライアントアプリケーション2から受信したリクエストメッセージを複製し、各ノード1へ配信する(S2)。
リーダノード1-1は、フォロワノード1-2、1-3との間で、各ノード上で動作するサーバアプリケーションが決定性の振る舞いをするよう、合意を形成する(S3)。なお、各ノード1間の合意の形成には、RAFT等の周知又は公知の分散合意アルゴリズムを採用すればよいので、本実施例では詳述しない。
各ノード1上のサーバアプリケーションは、前述の合意結果に基づき決定性の振る舞いにてクライアントアプリケーション2からのリクエストメッセージを処理し、結果をプロクシ3へ応答する(S4)。
プロクシ3は、予め設定したポリシー(多数決等)に基づいて、各ノード1からの処理結果を1つ選択してクライアントアプリケーション2へ応答する(S5)。
本実施例では、クライアントアプリケーション2と多重化されたノード1は、いずれかのノード1に障害が発生しても、アクセス要求や処理結果を紛失することなく処理を続行することができる。
本実施例のノード1は、後述するように、同時に複数のバージョンのステート(共有データ=データベース100)をMVCC(MultiVersion Concurrency Control)方式で管理し、アクセス対象のデータのバージョンを事前に一括してノード1間で合意を形成することで同期に要する負荷を削減することができる。
<ノードの構成>
図2は、ノード1の一例を示すブロック図である。リーダノード1-1とフォロワノード1-2、1-3は同様の構成であるので、以下ノード1として説明する。
ノード1は、プロセッサ11と、メモリ12と、通信インタフェース(又は通信装置)13を含む計算機である。通信インタフェース13は、ネットワーク5に接続されて、クライアント計算機4や他のノード1と通信を行う。
メモリ12には、サーバアプリケーション20と、多重化処理部30がロードされてプロセッサ11によって実行される。また、メモリ12には、後述するタスク群21から共有される共有メモリ90が設定されて、共有メモリ90内にサーバアプリケーション20のステートを格納するデータベース100を配置する。また、データベース100は前記ステートの他、データベース管理テーブル200と、テーブル管理テーブル210-1~210-3も保持し、ステート管理部60によって利用される。
また、メモリ12は、タスク管理テーブル220を格納し、多重化処理部30によって利用される。
本実施例では、ノード1の共有メモリ90に格納されたデータベース100に対してそれぞれの多重化処理部30がアクセスする例を示すが、これに限定されるものではない。例えば、各ノード1からアクセス可能なストレージ装置(図示省略)にデータベース100を格納してもよい。
サーバアプリケーション20は、1以上のタスク21-A~21-Nで構成することができる。各タスク21は、プロクシ3から受信したメッセージを入力として、ステート管理部60が管理するデータベース100に格納されたステート(共有データ)に基づいて、決定性の処理(ステートの更新や外部への送信)を行う。
多重化処理部30は、外部通信部40と、タスク実行制御部50と、ステート管理部60と、ノード間通信部70と、イベント管理キュー80を含む。外部通信部40と、タスク実行制御部50と、ステート管理部60と、ノード間通信部70の各機能部はプログラムとしてメモリ12にロードされる。
プロセッサ11は、各機能部のプログラムに従って処理を実行することによって、所定の機能を提供する機能部として稼働する。例えば、プロセッサ11は、タスク実行制御グラムに従って処理を実行することでタスク実行制御部50として機能する。他のプログラムについても同様である。さらに、プロセッサ11は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
外部通信部40は、プロクシ3を介してクライアント計算機4からメッセージ(サーバアプリケーション20に対するサービスリクエスト)を受け付けてタスク実行制御部50に通知し、また、各タスク21の処理結果をプロクシ3を介してクライアントアプリケーション2へ応答する。
タスク実行制御部50は、イベント(タイマイベントやメッセージの受信等)の管理と、イベントに基づくタスク21の駆動を行う。このタスク21の駆動に際し、タスク実行制御部50はステート管理部60を通し、当該タスクがアクセスするステートのトランザクションの制御を行う。また、タスク実行制御部50は、ノード間通信部70を使用して、1つのイベントの処理順序(アクセス対象のデータのバージョン)についてノード1間で一括して合意を形成する。
ステート管理部60は、ステートフルなサーバアプリケーション20のステートをバージョン毎に管理する。ステートのバージョンはトランザクション番号として表現され、トランザクションを開始する毎に1ずつ加算されていく。
ノード間通信部70は、ノード1間で合意形成プロトコルを実行する。イベント管理キュー80は、タスク21を駆動させるイベントを順に保持する。イベント管理キュー80は、例えば、FIFOで構成することができる。
メモリ12に格納されたデータベース管理テーブル200は、コミット済みのトランザクションの番号、及び最後に開始したトランザクションの番号を保持し、ステート管理部60によって管理される。データベース100は一つ以上のテーブルを持つことができる。テーブル管理テーブル210-1~210-3は、データベース100内のテーブル単位でトランザクションの状態を管理する。これらはステート管理部60によって管理される。
タスク管理テーブル220は、タスク実行制御部50によって管理され、タスク毎に駆動の契機となるイベントと、当該タスクが更新対象とするテーブル名を管理する。
<タスクのモデル>
図3は、ノード1上で動作するタスク21の振る舞いの一例を示すフローチャートである。本実施例のサーバアプリケーション20は一つ以上のイベント駆動型タスク21から構成される。各タスク21は起動後、まずリソースの確保などの初期化を実施する(S6)。
次に各タスク21は、イベントを待つ(S7)。イベントは、タイマイベントやメッセージの受信や所定の条件の成立などであり、予め設定されたものである。タスク21は、イベントを受け付けると、入力(クライアントアプリケーション2から受信したリクエストメッセージや、データベース100上のステート、等)に対して一意の処理を実行して、一意の処理結果を出力する(S8)。すなわちタスク21は、処理結果を送信メッセージとして出力したり、データベース100のステートの更新を実施したりする。
そして、タスク21は、1つのイベントに対する処理が完了すると、ステップS7のイベント待ちに戻って、上記処理を繰り返す。なお、本実施例では、更新対象のステート(データ)はタスク21毎に固有とし、複数のタスク21から同じステートが更新されることはないものとする。したがって、特定のステートを更新するタスク21は1つのみとなり、更新の競合は発生しない。参照については他のタスクからも可能とする。
図4は、タスク21のイベント駆動パターンの一例を示す図である。タスクA(21-A)は、自身による周期タイマイベントによって駆動される。タイマイベントの情報には、対象タスクIDと、周期や起床時刻などを設定することができる。タスクA(21-A)は、100ms毎に繰り返して実行する。
イベントがタイマ駆動のタスク21-Aについては、タイマが起動してからタイマが作動(カウントアップ)する前に、予めアクセス対象のステートのバージョンについて一括してノード1間で合意を形成することができる。これにより、フォロワノード1-2、1-3も含めて合意形成待ちによる処理の遅延と周期抜けのリスクを削減することができる。
タスクB(21-B)は、タイマイベントによってタスクC(21-C)を駆動する。図示の例では、タスクB(21-B)がタイマをセットした100ms後にタスクC(21-C)が実行される。タイマイベントの情報には対象タスクIDと起床時刻などを設定することができる。
タスクD(21-D)は、メッセージの受信イベントで駆動される。イベントの情報には、対象タスクIDや受信メッセージなどを設定することができる。タスクE(21-E)は所定の条件が成立した場合にタスクF(21-F)を起床させる。イベントの情報には対象タスクIDと起床要因などを設定することができる。
<外部通信部40>
図5は、ノード1の外部通信部40で行われる受信処理の一例を示す図である。プロクシ3は、クライアントアプリケーション2からサーバアプリケーション20に対するリクエストメッセージ300を受信し、メッセージ300に管理用のヘッダ310を付与し、サーバアプリケーション20が動作する各ノード1に同一のメッセージ300を転送する。
図6は、ヘッダ310の一例を示す図である。ヘッダ310は少なくとも、クライアント計算機4とノード1間の複数のコネクションを区別するためのコネクションID311と、同コネクションを用いて送信されたメッセージの通し番号であるメッセージID312と、元のメッセージのサイズ313を含む。
コネクションID311は、例えば、クライアント計算機4のIPアドレスと、プロクシ3とのコネクションが確立された度に加算される通し番号のタプルにて、一意のIDを割り当てる。
リクエストメッセージ300を受信した外部通信部40は、管理用のヘッダ310のメッセージサイズ313を参照して、1メッセージ分のデータの受信が完了するのを待つ。外部通信部40は、1メッセージ分のデータを受信したら、コネクションID311を参照して当該メッセージ300を待ち受けているタスク21のタスクIDを特定する。
外部通信部40は、タスク21を駆動させるためのイベントを生成し、管理用のヘッダ310を取り除いたメッセージ300を、生成したそのイベントに紐づけて、イベント管理キュー80に追加する。
<ステート管理部60>
図7は、ステート管理部60の機能の一例を示す図である。ステート管理部60は、MVCC方式のデータベース100で複数のステートを管理する。MVCCは複数のバージョンのデータセットを平行して読み書きする機能を有する。
ステート管理部60は、共有メモリ90上のデータベース100にて、タスク21間で共有されるステート全体を管理する。ステート管理部60は、1つのデータベース100に含まれる1以上のテーブルについて、テーブル単位で各ステートを管理する。また、本実施例では上述したように、特定のステート(テーブル)を更新するタスク21は1つのみという前提である。
タスク実行制御部50は、タスク21の駆動要求が発生した場合、所定のルールに基づいて、当該タスク21がステートにアクセスするためのトランザクションの開始をステート管理部60に要求し、その応答としてステート(テーブル)のハンドルを取得して当該タスク21にハンドルを渡す。なお、各タスク21は、ハンドルを介して、ステート管理部60経由でステートの参照又は更新を実行する。
タスク実行制御部50は、所属するノード1がリーダノード1-1の場合、処理に併せてトランザクションを構成するタスク21のアクセス対象について一括して合意形成処理を開始する。一方、所属するノード1がフォロワノード1-2、1-3の場合、タスク実行制御部50は、合意形成処理が完了してから、その合意内容に基づいてトランザクションの開始をステート管理部60に要求し、当該タスク21の駆動を行う。
タスク21で1つのイベント分の処理が終わり、イベント待ち状態に戻る際、タスク実行制御部50は、当該タスク21のトランザクションの終了をステート管理部60に要求する。ステート管理部60は、要求を受け付けると後述する管理テーブルに当該トランザクションの番号を設定してトランザクションを終了する。
<管理テーブル>
図8は、データベース管理テーブル200の一例を示す図である。データベース管理テーブル200は、1以上のテーブル110を含むデータベース100の全体を管理するテーブルである。
データベース管理テーブル200は、トランザクションの状態を格納するトランザクション状態201と、トランザクションの番号を格納するXNO202を1つのレコードに含む。
トランザクション状態201が「Committed」のレコードには、コミット済みのトランザクション番号の最大値が格納される。図示の例では、XNO202が「102」までのトランザクションがコミット済みであることを示す。なお、XNO202が「104」のトランザクションがコミット済みであっても、XNO202が「103」のトランザクションが未コミットの場合は、「Committed」のXNO202は「102」となる。
トランザクション状態201が「Last」のレコードには、最後に開始したリード/ライトのトランザクション(以下、RWトランザクションとする)の連番がトランザクション番号としてXNO202に設定される。
図9は、テーブル管理テーブル210の一例を示す図である。テーブル管理テーブル210-1~210-3は、データベース100内のテーブル単位でトランザクションを管理する。本実施例では、データベース100内にfoo、bar、bazの3つのテーブルを有する例を示す。
テーブル管理テーブル210は、テーブル名211と、Committed212と、Inprogress213の項目で構成される。Committed212は、当該テーブルにおいて最後にコミットが完了したトランザクション番号(XNO)を格納する。
InProgress213は、当該テーブルで現在進行中のRWトランザクション番号(XNO)が格納される。なお、トランザクションの開始時などでトランザクション番号が未定の場合には無効値(例えば、-1等)を設定する。
<データベース>
図10は、データベース100のテーブル110-1~110-3の一例を示す図である。テーブル110-1は、テーブル名がfooである。テーブル110-2は、テーブル名がbarである。テーブル110-3は、テーブル名がbazである。
各テーブル110は、1つのステート(共有データ)を管理する。各テーブル110の行(レコード)は、ステートがリストやKey-Value構造を持つ場合、各要素に対応する。各行は、XNO111と、Index112と、Value113を含む。
XNO111は、当該行を更新したトランザクションの番号を格納する。過去の行も上書きせずに残しておくことができる。例えば、barテーブル110-2のindex=1は、2つの更新履歴(XNO=102、104)を残している。
Index112は、テーブル110内の行を識別する通し番号が格納される。なお、データベース100がKey-Value型の場合ではKeyを格納することができる。Value113は、データ本体は格納される。データベース100がRDBであればカラム群で構成され、KVS(Key-Value Store)であればValueの部分が格納される。
<MVCC方式>
本実施例のデータベース100は、上述したようにMVCC方式でデータのバージョンが管理され、ROトランザクションとRWトランザクションをサポートする。
ROトランザクションはデータベース100の全テーブル110、又は特定のテーブル110に対して参照のみのアクセス権を与える。
RWトランザクションはデータベース100内の特定のテーブル110に対して、参照及び更新のアクセス権を与える。RWトランザクションの対象となるテーブル110は、当該テーブル110において進行中のRWトランザクションがコミットされるまで、当該テーブル110に対する次のRWトランザクションは開始できない。また、前提として、あるステート(テーブル110)を更新するタスク21は1つのみとしているため、このようなRWトランザクションが開始できないケースは発生しない。
また、本実施例のMVCC方式は、データベース100全体としてのバージョンをトランザクション番号(XNO)で管理する。各テーブル110内のレコードは、当該レコードを更新したトランザクション番号XNOとセットで管理される。
トランザクション番号XNO=Nの全テーブル110に対するROトランザクションでは、トランザクション番号XNOがN以下の、全テーブル110のコミット済みの最新レコードを参照することができる。なお、XNO=Nの特定テーブルに対するROトランザクションについては後述する。
トランザクション番号XNO=NのRWトランザクションでは、指定されたテーブル110を更新でき、かつテーブル110のコミット済みの最新のレコードを参照することができる。ステート管理部60は、最新のトランザクション番号XNOがNのとき、新たなRWトランザクションの番号と最新のトランザクション番号XNOをN+1とする。
<ROトランザクション開始処理>
図11は、リードオンリ(RO)のトランザクションの開始処理の一例を示すフローチャートである。この処理は、ステート管理部60がタスク実行制御部50からリードオンリのトランザクションの開始要求を受け付けた場合に開始される。
ステート管理部60は、タスク実行制御部50からのトランザクションの開始要求にトランザクションの番号(XNO)が指定されているか否かを判定する(S11)。トランザクションの番号が指定されていなければステップS12へ進み、指定されていればステップS13に進む。
ステップS12では、ステート管理部60がデータベース管理テーブル200を参照して、トランザクション状態201が「Committed」のXNO202を取得して当該トランザクション番号に対応するハンドルを生成してタスク実行制御部50に応答する。図8のデータベース管理テーブル200では、ステート管理部60がXNO202=102のトランザクション番号を取得して、各テーブル110でトランザクション番号が102以下の最新の行(レコード)を参照するハンドルを生成する。
ステップS13では、指定されたトランザクション番号が、データベース管理テーブル200のトランザクション状態201が「Committed」のXNO202に等しいか否かを判定する。指定されたトランザクション番号がXNO202と等しい場合には、ステート管理部60がXNO202のトランザクション番号で各テーブル110を参照するハンドルを生成してタスク実行制御部50に応答する。
一方、指定されたトランザクション番号がXNO202と等しくない場合には、ステート管理部60はタスク実行制御部50にエラーを通知して処理を終了する。
上記処理によって、ステート管理部60は、データベース100の全体に対してコミット済みのデータを参照するためのハンドルを生成して、タスク実行制御部50に応答する。
図12は、ハンドルの一例を示す図である。図11のステップS14で生成されたハンドル510は、対象テーブル511がデータベース100の全体で、トランザクション番号(XNO)が指定されたトランザクション番号で、かつテーブル110へのアクセスモードがリードオンリ(RO)であることを示す。
図13は、指定されたテーブルへのリードオンリのトランザクション(以下、ROトランザクションとする)の開始要求の一例を示すフローチャートである。この処理は、ステート管理部60がタスク実行制御部50から指定されたテーブル110に対してROトランザクションの開始要求を受け付けた場合に開始される。
ステート管理部60は、指定されたテーブル110のテーブル管理テーブル210を参照して、トランザクションの開始要求で指定されたトランザクション番号が、InProgress213のトランザクション番号-1以下、すなわち、コミット済みであるか否かを判定する(S21)。
ステート管理部60は、コミット済みであればステップS22へ進んで、当該テーブル110に対するハンドルを生成してタスク実行制御部50に応答し、未コミットであればステップS23へ進んで、タスク実行制御部50にエラーを通知する。
<ROトランザクション終了処理>
図14は、ROトランザクションの終了要求の一例を示すフローチャートである。この処理は、ステート管理部60がタスク実行制御部50からROトランザクションの終了要求を受け付けた場合に実行される。
ステート管理部60は、アクセスが完了したハンドルを解放して処理を終了する(S25)。
上記処理によって、ステート管理部60は、ROトランザクションの開始及び終了の処理でハンドルの生成と解放を実行する。
<RWトランザクション開始処理>
図15は、指定されたテーブルへのRWトランザクションの開始要求の一例を示すフローチャートである。この処理は、ステート管理部60がタスク実行制御部50から指定されたテーブル110に対してRWトランザクションの開始要求を受け付けた場合に開始される。
ステート管理部60は、指定されたテーブル110のテーブル管理テーブル210を参照して、InProgress213の値が無効値であるか否か、すなわち、処理中のRWトランザクションが存在するか否かを判定する(S31)。InProgress213の値が無効値であれば処理中のRWトランザクションは存在しないとみなし、ステップS32へ進み、無効値ではない場合(トランザクションの処理中)であればステップS34に進む。
ステップS32では、ステート管理部60がデータベース管理テーブル200のトランザクション状態201がLASTのレコードのXNO202の値に1を加算して更新し、指定されたテーブル110のトランザクション番号とする。ステート管理部60は、指定されたテーブル110のテーブル管理テーブル210のInprogress213に当該トランザクション番号を設定する。
ステップS33では、指定されたテーブル110を参照するハンドルを生成してタスク実行制御部50に応答する。
一方、ステップS34では、指定されたテーブル110のテーブル管理テーブル210でInProgress213の値が無効値ではない場合は、現在トランザクションの処理中であるので、ステート管理部60はタスク実行制御部50にエラーを通知して処理を終了する。
上記処理によって、ステート管理部60は、指定されたテーブル110がトランザクションの処理中ではない場合には、当該テーブル110をアクセスするハンドルを生成して、タスク実行制御部50に応答する。
図16は、ハンドルの一例を示す図である。図15のステップS33で生成されたハンドル510は、対象テーブル511が指定されたテーブル110で、トランザクション番号(XNO)がデータベース管理テーブル200のLASTに対応するXNO202を更新した結果である「105」、かつテーブル110へのアクセスモードがリード/ライトであることを示す。
特定のテーブル110に対するRWトランザクションの一例について、図9を参照して以下に説明する。
テーブル名211=「foo」と「bar」のテーブル管理テーブル210-1、210-2のInprogress213には、未コミットのRWトランザクション番号が設定されているため、新たなRWトランザクションの開始はできない。
テーブル名211=「baz」のテーブル110に対してRWトランザクションの開始を要求した場合、データベース管理テーブル200のトランザクション状態201が「Last」のXNO202に格納されている「104」に1を加算した値=「105」を、データベース管理テーブル200のLastのXNO202と、テーブル名211=「baz」のテーブル管理テーブル210のInProgress213にセットする。以後、トランザクションの要求に応じてテーブル名213=「baz」のテーブル110-3を更新した場合、XNO111=「105」の行がテーブル110-3に追加される。
<RWトランザクション終了処理>
図17は、RWのトランザクションの終了要求の一例を示すフローチャートである。この処理は、ステート管理部60がタスク実行制御部50からRWトランザクション終了要求(コミット完了)を受け付けた場合に開始される。
ステート管理部60は、タスク実行制御部50から受け付けた終了要求のテーブル110とトランザクション番号を受け付けて、該当するテーブル110のテーブル管理テーブル210のCommitted212に、上記受け付けたトランザクション番号を設定し、Inprogress213には無効値を設定する(S41)。
ステート管理部60は、データベース管理テーブル200を参照してトランザクション状態201が「Committed」のレコードのXNO202の値が、トランザクションの終了要求を受け付けたテーブル管理テーブル210のCommitted212のトランザクション番号-1の場合には、テーブル管理テーブル210のCommitted212及びトランザクション番号を、トランザクション状態201が「Committed」のレコードのXNO202に設定する。
次にステップS43~S46では、ステート管理部60は、データベース管理テーブル200を参照してトランザクション状態201が「Committed」のレコードのXNO202の値に1を加算したトランザクション番号から、トランザクション状態201が「Last」のレコードのXNO202のトランザクション番号についてコミット済みであるかを判定してデータベース管理テーブル200を更新する。
ステップS43では、ステート管理部60が、トランザクション状態201が「Committed」のレコードのXNO202に1を加算した値を変数iに設定する。ステップS44では、ステート管理部60が、テーブル管理テーブル210を参照してトランザクション番号=iがコミット済みであるか否かを判定する。ステート管理部60は、コミット済みであればステップS45に進み、そうでない場合には処理を終了する。
ステップS45では、ステート管理部60が、データベース管理テーブル200のトランザクション状態201が「Committed」のレコードのXNO202に変数iの値を設定する。ステップS46では、変数iに1を加算してから、ステップS44に戻って上記処理を繰り返す。
上記処理によって、RWトランザクションのうちコミット済みのトランザクション番号がテーブル管理テーブル210とデータベース管理テーブル200に設定されて、コミット完了の設定が終了する。
<タスク実行制御部50>
図18は、ノード1間で行われる合意形成の一例を示す図である。合意形成の処理は、タスク実行制御部50が主体となって実行する。
タスク実行制御部50は、イベントに基づいて所定のタスク21を駆動する他、ノード1間で決定的な動作をするようにタスク21の実行やステート管理部60上のトランザクションをコントロールする。
まず、タスク実行制御部50はノード間通信部70を介して合意形成プロトコルを実行して、イベント管理キュー80内のイベントについてイベントの処理順序、及びイベント情報をノード1間で合意する(S51)。ここでいうイベント情報とは、後述するイベント管理キュー80に登録されたエントリに含まれる要求元タスクID82、対象タスクID,イベント詳細84、ハンドル86である。ハンドル86には駆動対象のタスク21が、データベース100のテーブル110のいずれのバージョン(トランザクション番号XNO)のデータに対して参照及び更新するのか、といった情報を含む。
次に、リーダノード1-1のタスク実行制御部50は、イベント管理キュー80のイベントについて、FIFO(First In First Out)にて当該イベントを待つタスク21の駆動を行う(S52)。フォロワノード1-2、1-3のタスク実行制御部50は合意済みイベントのみ、タスク21の駆動を実施する。
タスク実行制御部50は、上記タスク21の駆動に先立ち、当該タスク21がアクセスするステート(共有データ)に対するROトランザクションやRWのトランザクションの開始をステート管理部60に要求する。タスク実行制御部50は、当該要求に対する応答として、アクセス用のハンドルをステート管理部60から受け取る(S53)。
このハンドルは、タスク21の駆動の際にタスク実行制御部50が当該タスク21に渡す。駆動されたタスク21は、タスク実行制御部50から渡されたハンドルを用いて所定のバージョンのステート(データ)にアクセスし、再びイベント待ちに入る際にタスク実行制御部50が当該ハンドルを解放し、RWトランザクションをコミットする。
タスク実行制御部50は、各タスク21に対して、タスク登録、イベント登録、イベント待ち、タスクの駆動、外部送信の機能を提供する。
タスク登録は、多重化対象のサーバアプリケーション20を構成するタスク21を、タスク実行制御部50の管理対象に登録する。そして、タスク実行制御部50は、タスク21の初期化処理時に当機能の呼び出しを行う。また、タスク実行制御部50は、タスク21が更新するステート(テーブル)のリストの登録も行う。
イベント登録は、タスク実行制御部50が、呼び出し元のタスク21又は他のタスク21を駆動させるイベントをイベント管理キュー80に追加する。
イベント待ちは、タスク実行制御部50が、呼び出し元のタスク21を駆動させるイベントが発生するまでタスク21を待ち状態にする。また、タスク実行制御部50は、呼び出し元のタスク21が保持しているハンドルについて、トランザクション終了処理を行う。
タスクの駆動については、タスク21を駆動するイベントが発生した際、タスク実行制御部50がイベント待ち状態の所定のタスク21を駆動させる。その際、ステート管理部60にトランザクション開始要求を出力し、タスク21が参照又は更新するステート(テーブル110)にアクセスするためのハンドルを生成させて、タスク実行制御部50が取得してからタスク21にハンドルを渡す。
ノード1がリーダノード1-1の場合、当該ノード1のタスク実行制御部50は、タスク21の駆動に平行して、イベントの処理順序についてフォロワノード1-2、1-3との間で一括して合意を形成する。すなわち、リーダノード1-1では、合意形成の以前にタスク21を開始しておくことで、合意形成(同期)に要する遅延を抑制して処理結果を出力することができる。
また、リーダノード1-1は、1つのイベントで駆動するタスク21が、データベース100のテーブル110のデータのいずれのバージョン(トランザクション番号XNO)に対して参照し、いずれのバージョンでデータを更新するのかも併せてフォロワノード1-2、1-3との間で合意を形成する。
リーダノード1-1は、フォロワノード1-2、1-3との間で、アクセス対象のバージョンを一括して合意を形成することで、前記従来例のように、タスク21がデータベース100へアクセスする度にノード1間で合意形成を行うのを回避して、同期による遅延を回避することができる。
一方、ノード1がフォロワノード1-2、1-3の場合、タスク実行制御部50は、合意が形成された後に、合意結果に基づいて対象のタスク21の駆動を行う(ハンドルの生成処理も含む)。
外部送信は、タスク実行制御部50が、タスク21に代わってクライアント計算機4等の外部へ応答(処理結果を含むメッセージ300)を送信する。また、タスク実行制御部50は、要求元のタスク21を駆動させたイベントについて、処理順序の合意形成が未完了の場合、合意形成が完了するまで実際の送信を保留する。また、タスク実行制御部50は、要求元のタスク21を駆動させたイベントについて、処理順序の合意形成に失敗した場合、送信予定であった処理結果を破棄する。
<タスク初期化処理>
図19は、タスクの初期化処理の一例を示すシーケンス図である。タスク実行制御部50がタスク21を起動すると(S61)、初期化処理を実行する(S62)。
各タスク21は初期化処理において、タスク実行制御部50の「タスク登録」機能を呼び出して、当該タスク21を多重化対象のタスク21としてタスク管理テーブル220へ登録する。当該タスク21は今後、更新し得るステート(テーブル110)のリストもタスク実行制御部50に伝える。タスク実行制御部50は、これらの情報をタスク管理テーブル220にて管理する。
初期化処理が完了すると、タスク21はイベント待ち状態になり(S63)、所定のイベント(タイマ、メッセージ受信、他のタスクからの駆動要求等)が発生するまでスリープする。
図20は、タスク管理テーブル220の一例を示す図である。タスク管理テーブル220は、タスク実行制御部50によって管理される。
タスク管理テーブル220は、タスクID221と、待ちイベント222と、更新対象テーブル223を1つのレコードに含む。タスクID221には、サーバアプリケーション20を構成するタスク21の識別子が格納される。
待ちイベント222は、タスク21を起動させる契機となるイベントを格納する。更新対象テーブル223は、タスク21の実行によって更新されるデータベース100のテーブル110の識別子(又は名称)を格納する。
タスク実行制御部50は、イベントが発生すると、タスク管理テーブル220の待ちイベント222に対応するタスク21を起動して、更新対象テーブル223をステート管理部60へ通知することができる。
<タスクの1イベント処理>
図21は、タスク処理の一例を示すシーケンス図である。図示の例では、リーダノード1-1のタスク21と、フォロワノード1-2、1-3のタスク21がそれぞれ起動して、イベント待ちの状態を示している(S71)。
<リーダノードの処理>
まず、リーダノード1-1が行う処理について説明する。リーダノード1-1は、タスク21が待ち受けているイベントを受け付ける。リーダノード1-1は、タスク実行制御部50がイベントをイベント管理キュー80に登録する(S72)。
タスク実行制御部50は、タスク管理テーブル220を参照して、待ちイベント222に対応するタスクID221を特定し、トランザクションの開始をステート管理部60に要求する(S73)。トランザクションは、タスクID221に対応するタスク21が参照するテーブル、又は全テーブルに対するROトランザクションや、更新対象テーブル223にて示されるテーブルのRWトランザクションである。
ステート管理部60は、トランザクションの種類(RO、RW)とアクセス対象のテーブル110に応じてハンドルを生成してタスク実行制御部50に応答する(S74)。タスク実行制御部50は、アクセス対象のステート(テーブル110)に対するハンドルを取得する。
タスク実行制御部50は、タスク21がどのバージョンのステート(テーブル110)に対して参照又は更新を行うかについて、他のノード1と合意を形成する(S76)。
タスク実行制御部50は、他のノード1との間で合意が形成されるのを待たずに、タスク21を駆動する(S77)。タスク実行制御部50は、ステップS74で取得したハンドルをタスク21に渡す。
タスク21は、タスク実行制御部50から受け取ったハンドルを経由してステート(テーブル110)に対してアクセス(参照、更新)を行う(S78)。タスク21は、共有メモリ90に格納されているデータベース100のテーブル110にノンブロッキングでアクセスする。
タスク21は、処理結果として外部への送信をタスク実行制御部50に要求する(S80)。
リーダノード1-1では、タスク21を開始した後に、フォロワノード1-2から合意の形成を受信する(S79)。
タスク実行制御部50は、ステップS79で受信した合意形成が完了済みであることを確認した後に、外部(プロクシ3)への送信を実行する(S81)。タスク実行制御部50は、合意形成が未完了だった場合は完了するまで送信を保留する。これにより、仮に合意形成に失敗して他のノード1にリーダを交替する場合、ノード1間で異なる処理結果を送信するのを防止する。なお、合意形成に失敗した場合には、上述のようにタスク実行制御部50は処理結果を破棄する。
タスク21は、1つのイベントの処理が完了するとイベント待ちの状態に移行して、再びスリープ状態となる(S82)。
タスク実行制御部50は、他のノード1と合意形成の完了を確認した後、ステート管理部60にタスク21を含むトランザクションの終了要求を出力し(S83)、ステート管理部60は、データベース管理テーブル200及びテーブル管理テーブル210でコミット完了を設定する。
タスク実行制御部50は、処理が完了した当該イベントをイベント管理キュー80から削除して1つのイベントに関する処理を終了する(S84)。
<フォロワノードの処理>
次に、フォロワノード1-2で行われる処理について説明する。なお、以下の説明では、フォロワノード1-2、1-3は同様であるので、フォロワノード1-2についてのみ説明する。
上述したように、フォロワノード1-2で起動したタスク21はイベント待ちの状態で(S71)、ステップS72でタスク実行制御部50がイベントを受け付けてイベント管理キュー80に登録する。
タスク実行制御部50は、リーダノード1-1からの合意形成の要求に応じて、タスク21を駆動させるイベントがイベント管理キュー80に登録済みであることを確認した後に、合意形成を返信する(S79)。
合意形成後、タスク実行制御部50は、合意内容に基づいてタスク管理テーブル220を参照して、待ちイベント222に対応するタスクID221を特定し、トランザクションの開始をステート管理部60に要求する(S85)。トランザクションは、リーダノード1-1との合意内容に含まれるハンドル510情報に基づき、所定のテーブル511、所定のトランザクション番号512、所定のモード513(RO、又はRW)にて開始する。
ステート管理部60は、トランザクションの種類(RO、RW)とアクセス対象のテーブル110に応じてハンドルを生成してタスク実行制御部50に応答する(S86)。タスク実行制御部50は、アクセス対象のステート(テーブル110)に対するハンドルを取得する。
タスク実行制御部50は、タスク21を駆動する(S87)。タスク実行制御部50は、ステップS86で取得したハンドルをタスク21に渡す。
タスク21は、タスク実行制御部50から受け取ったハンドルを経由してテーブル110(ステート)に対してアクセス(参照、更新)を行う(S88)。タスク21は、共有メモリ90に格納されているデータベース100のテーブル110にノンブロッキングでアクセスする。
タスク21は、処理結果として外部への送信をタスク実行制御部50に要求する(S89)。タスク実行制御部50は、外部(プロクシ3)への送信を実行する(S89、S90)。
タスク21は、1つのイベントの処理が完了するとイベント待ちの状態に移行して、再びスリープ状態となる(S91)。
タスク実行制御部50は、ステート管理部60にタスク21のトランザクションの終了要求を出力し、ステート管理部60は、データベース管理テーブル200及びテーブル管理テーブル210でコミット完了を設定する(S92)。
タスク実行制御部50は、処理が完了した当該イベントをイベント管理キュー80から削除して1つのイベントに関する処理を終了する(S93)。
<タスク実行制御部50のトランザクション終了要求>
上記の例ではタスク21のイベント待ちに併せ、暗黙的にタスク実行制御部50がステート管理部60に対してトランザクション終了要求を出力しているが、タスク21が明示的にトランザクションの終了要求を出力してもよい。
例えば、タスクA(21-A)がステートT1を更新し、続いてタスクB(21-B)を駆動する場合、ステートT1の更新結果をタスク21-Bに参照させることを保証するには、タスクAは明示的にステートT1の更新をコミットしてからタスクBを駆動する必要がある。
ステートT1をコミットした後、タスクAは次回のイベント駆動にてトランザクションを改めて開始するまでステートT1を更新できない。ステートT1の更新結果をタスクBに参照させる必要がない場合は、タスクAによる明示的なコミットは不要となる。この場合、タスクBには更新前のステートT1を参照させることになる。
<タスク実行制御部50のイベント登録処理>
図22は、タスク実行制御部50が実施するイベント登録処理の一例を示すフローチャートである。
まず、タスク実行制御部50は、タスク21からの要求に基づいてイベントを生成してイベント管理キュー80に登録する(S101)。イベントの生成については後述する。
タスク実行制御部50は、当該ノード1がリーダノード1-1であるか否かを判定する(S102)。リーダノード1-1であればステップS103へ進みフォロワノード1-2、1-3であればステップS106に進む。
ステップS103では、タスク実行制御部50が、所定のルールに基づいて、駆動対象のタスク21が使用するROトランザクションやRWトランザクションの開始要求をステート管理部60に出し、ステート管理部60からの応答としてアクセス用のハンドルを受け取る。このハンドルの参照を、上記ステップS101で生成したイベントにセットしておく。ハンドルをイベントにセットする手法については後述する。
リーダノード1-1のタスク実行制御部50は、当該イベントの処理順序、及びイベント情報について、フォロワノード1-2、1-3との間で合意形成を開始する(S104)。合意形成はリーダノード1-1におけるイベントの登録順に行う。
そして、リーダノード1-1では、合意形成の完了を待たずに対象のタスク21の駆動を開始する(S105)。最終的にタスク21のRWトランザクションの内容をステートに反映(コミット)する場合や、外部送信する場合にはタスク実行制御部50は、合意形成の完了を待ち合わせるので、その時点まで先行してタスク21の処理を進めておくことに問題はない。万が一、合意形成に失敗した場合は、タスク実行制御部50は、トランザクションの処理結果や外部送信データを破棄するので、誤った処理結果を出力することはない。なお、タスク実行制御部50が駆動するタスク21にはステップS103のハンドルが渡される。
当該ノード1がフォロワノード1-2の場合のステップS106では、フォロワノード1-2がハンドルの生成やタスク21の駆動前に当該イベントに対する合意形成の完了を待つ必要がある。
既にリーダノード1-1から合意形成の要求が来ていた場合、フォロワノード1-2は合意可能か(同じ内容のイベントがイベント管理キュー80存在するか)を判定し、判定結果を他のノード1に応答する(S106)。
タスク実行制御部50は、合意が形成済みであるか否かを判定する(S107)。当該イベントに対する合意形成が完了していた場合、タスク実行制御部50は、合意内容に従って、所定のトランザクション番号のROトランザクションやRWトランザクションの開始要求をステート管理部60に出力して、ステート管理部60からの応答としてハンドルを取得する(S108)。
そして、タスク実行制御部50は、当該イベントにより駆動されるタスク21を駆動して、ステップS108で取得したハンドルをタスク21に渡す(S109)。
上記処理によって、イベント管理キュー80にイベントが登録されて、タスク実行制御部50がステート管理部60からのハンドルをタスク21に渡して、タスク21の駆動が実施される。
<イベント管理キュー80の構成>
図23は、イベント管理キュー80の一例を示す図である。イベント管理キュー80は、イベントの識別子を格納するENO81と、要求元タスクID82と、対象タスクID83と、イベント詳細84と、合意形成情報85と、ハンドル86と、送信キュー87を1つのレコードに含む。
ENO81は、イベントの発生順にリーダノード1-1が割り当てる通し番号を格納する。フォロワノード1-2、1-3はENO81が未設定の状態でイベントを生成する。その後、リーダノード1-1から送信された合意形成情報を参照して内容が一致するイベントを検索し、合意形成情報に含まれるENOの値を自ノード1のイベント管理キュー80に設定する。
要求元タスクID82は、当該イベントを生成したタスクの識別子を格納する。対象タスクID83は、要求元タスクID82から渡されたイベント詳細84を参照して、同条件でイベント待ちしているタスク21を検索し、そのタスク21の識別子を設定するイベント詳細84は、図4に示したイベントの種類や周期を格納する。
合意形成情報85は、合意形成プロトコルで使用する情報を格納する。合意形成としてはRAFTなど、任意のリーダ-フォロワ型の合意形成プロトコルを使用することを想定している。合意形成情報85は、少なくとも、他のノード1から受信した合意形成内容や、合意形成完了か未完か、等の情報を含む。合意形成内容は当該イベントの情報(ENO、要求元タスクID82、対象タスクID83、イベント詳細84、ハンドル86)を含む。
ハンドル86は、ステート管理部60を介してステートを参照又は更新するための情報を格納する。すなわち図16に示す0個以上のハンドル510であり、アクセス対象テーブルの識別子、トランザクション番号、ROとRWのどちらか、といった情報を含む。フォロワノード1-2、1-3はリーダノード1-1から受信した合意形成内容に含まれるハンドル情報を参照し、同一内容のハンドルを生成するようステート管理部60に要求する。
送信キュー87は、当該イベントにより駆動したタスク21による外部送信メッセージ(処理結果)を格納する。タスク実行制御部50は、タスク21から外部への送信要求があった場合、まだ合意形成が未完だった場合、合意形成が完了するまで送信キューにて送信メッセージを保持する。
<リーダノードのトランザクション開始処理>
図24は、リーダノード1-1で行われるトランザクション開始処理の一例を示すフローチャートである。この処理は、タスク実行制御部50がトランザクションを開始する際に実行される。
まず、ステップS111では、タスク実行制御部50が、トランザクション番号(XNO202)を指定せずに、ROトランザクションの開始要求を出力する。トランザクション番号(XNO202)の指定はないので、データベース管理テーブル200のCommittedのXNO202の値がトランザクション番号として使用される。
ステート管理部60は、ROトランザクションの開始要求に応じてハンドルを生成し、タスク実行制御部50はステート管理部60からハンドルを取得する。
次に、タスク実行制御部50は、タスク管理テーブル220を参照して、駆動するタスクID221の行を参照して、更新対象テーブル223の内容をリストとして生成する(S112)。
タスク実行制御部50は、ステップS113~S115で、上記ステップS112で生成したリストのテーブル110についてステップS114の処理を繰り返して実行する。ステップS114では、タスク実行制御部50が、ステート管理部60に対して、現在処理対象のテーブルTのRWトランザクションの開始要求を出力し、ステート管理部60の応答からハンドルを取得する。
次に、タスク実行制御部50は、今回駆動されるタスク21が他のタスクから駆動されたものか否かを判定する(S116)。駆動対象のタスク21が他のタスク21からの駆動イベントによるものだった場合にはステップS117へ進み、駆動しない場合にはステップS122へ進む。
上記判定は、タスク実行制御部50がイベント管理キュー80を参照して、駆動対象の対象タスクID83が要求元タスクID82に含まれていれば、他のタスク21を駆動すると判定することができる。
タスクA(21-A)から別のタスクB(21-B)を駆動する場合、ステートの更新と参照の順序性を担保するため、駆動元のタスク21-Aが更新した内容を駆動先のタスクBに提供する必要がある。
例えば、上記ステップS111におけるROトランザクション番号XNOが100の場合、駆動元のタスクAが更新したテーブル110のトランザクション番号XNOが103だったとすると、ステップS111で取得したハンドルでは駆動元のタスクAが更新した内容を別のタスクBでは参照できない(より古い内容しか参照できない)。
そこで、タスク実行制御部50は、アクセス対象のテーブル110として当該テーブルを指定し、トランザクション番号XNO=103のROトランザクションの開始を要求する。なお、この場合、駆動元のタスクAがXNO=103のRWトランザクションを終了(コミット)するまで、当該テーブルのXNO=103のROトランザクションを開始できない。このため、トランザクション番号XNO=103のトランザクションの終了(コミット)が完了するのを待ってから処理を再開する。
ステップS117では、タスク実行制御部50がタスク管理テーブル220を参照して駆動元となるタスクAのタスクID221の行から更新対象テーブル223の値を取得して、アクセス可能なテーブルのリストとして生成する。
次に、タスク実行制御部50は、ステップS118~S121で、上記ステップS117で生成したリストの更新対象のテーブル110についてステップS119~S120の処理を繰り返して実行する。この処理は、駆動元のタスクAが更新したステートに対して、駆動先のタスクBがリードオンリで参照可能にするための処理である。
ステップS119では、タスク実行制御部50が上記リストの更新対象のテーブル110について、トランザクション番号(XNO202)が上記ステップS111で取得したハンドルに対応するテーブル110のトランザクション番号よりも大で、かつ当該テーブル110はコミット済みであるか否かを判定する。コミット済みであればステップS120へ進み、そうでない場合にはステップS121へ進む。
タスクAがタスクBを駆動し、タスクBがタスクCを駆動するような連鎖的に別のタスク21を駆動する場合も、タスクCはタスクAの更新結果を参照できる必要がある。よって、駆動元のタスクAが有するRWのトランザクションだけではなく、特定のテーブル110に対するROトランザクションも駆動先のタスクBに引き継ぐ必要がある。
ただし、現在処理対象のテーブル110のトランザクション番号(XNO)が、ステップS111でハンドルを取得した全テーブル110を対象とするROトランザクションのトランザクション番号(XNO)より小さくなった場合は、ステップS111で取得したハンドルにて目的のステートを参照可能であるので、新たにトランザクション開始を要求する必要はない。
ステップS120では、タスク実行制御部50がステート管理部60に、現在処理対象のテーブルTのROトランザクション開始要求を出力して、ステート管理部60からテーブルTに対するハンドルを取得する。
更新対象のトランザクションについてコミットが完了していない場合はトランザクションの開始に失敗するが、そのまま無視する。この場合は、当該ステートの更新内容を駆動先のタスクBに参照させないことを意図していると考えられるため、更新前の状態を駆動先のタスクBに参照させたとしてもアプリケーションロジック上は問題ない。
タスク実行制御部50が、ステップS120で取得したハンドル情報は、当該イベントに対応するイベント管理キュー80のハンドル86に設定される(S122)。ハンドル86は、(1)合意形成内容としてフォロワノード1-2、1-3へとトランザクション情報を伝えるため、又は(2)タスク21が当該イベントの処理を完了し、再びイベント待ちに入る際に、タスク実行制御部50が暗黙的にトランザクションを終了するために用いられる。
<フォロワノードのトランザクション開始処理>
図25は、フォロワノード1-2、1-3で行われるトランザクション開始処理の一例を示すフローチャートである。この処理は、リーダノード1-1から合意形成要求に対してフォロワノード1-2、1-3が合意した後に開始される。
ステップS131では、タスク実行制御部50がリーダノード1-1からの合意形成情報からハンドルを取得する。合意形成情報にはリーダノード1-1が取得したハンドル情報が含まれる。以降、このハンドルを参照して、どのテーブル110に対して、どのトランザクション番号(XNO202)でトランザクションを開始するか特定する。
ステップS132では、タスク実行制御部50が上記ステップS131で取得したハンドル情報から、リーダノード1-1と同じトランザクション番号(XNO202)を指定して、全てのテーブル110を参照するためのROトランザクションの開始要求をステート管理部60に出力し、ステート管理部60が生成したハンドルを取得する。
データベース管理テーブル200でトランザクション状態201が「Committed」の行のトランザクション番号(XNO202)が、上記ハンドルを取得したトランザクション番号(XNO)よりも小さい場合、トランザクションを開始できないので、進行中のトランザクションが完了してCommittedがXNOになるのを待ってから処理を再開する。
アクセス対象のテーブル110は、駆動対象のタスク21が更新し得るテーブル110に加えて、タスクAから別のタスクBを駆動する場合で駆動元のタスクAが更新したテーブル110も含む。駆動対象のタスク21はRWのトランザクションで、駆動元のタスクAが更新したテーブル110を参照する場合はROトランザクションである。なお、ステップS132と同様に、進行中のRWトランザクションが終了(コミット)するまで新たなトランザクションを開始できない場合があるので、適宜待ち合わせをしてから再開する。
ステップS133では、タスク実行制御部50が、タスク管理テーブル220を参照して、駆動するタスクID221の行を参照して、更新対象テーブル223の内容をリストとして生成する。
タスク実行制御部50は、ステップS134~S136で、上記生成したリスト内のテーブル110についてステップS135の処理を繰り返して実行する。ステップS135では、タスク実行制御部50が、ステート管理部60に対して、現在処理対象のテーブル110のROトランザクション及びRWトランザクションの開始要求を出力し、ステート管理部60の応答からハンドルを取得する。
ステップS137では、上記ステップS135で取得した全てのハンドルを、当該タスク21のイベント管理キュー80のハンドル86に設定する。
上記図24、図25の処理によって、リーダノード1-1とフォロワノード1-2、1-3でそれぞれトランザクションが開始される。
<合意形成失敗の場合>
ノード1間の合意形成は、失敗する場合も生じる。合意形成の失敗要因としては、通信異常やハードウェア障害に伴い、一部のノード1のみ通信メッセージ(合意形成情報)が欠損、あるいは遅延し、所定時間内に合意形成できなかった場合(タイムアウト)に発生する。
周知又は公知の例では、合意形成には自ノードを含め、過半数のノード1が合意すれば合意形成が完了となる。この際に合意できた過半数以上のノード1は合意成功、合意できなかったノード1は合意失敗となる
合意形成失敗時の処理としては、合意形成に失敗したノード1を除外し、残りのノード1でリーダの再選出を行う。なお、リーダの再選出方法は周知又は公知の合意形成プロトコルに含まれるので詳細は割愛する。
除外されたノード1は適宜、復旧処理を行う。例えば、元リーダノード1-1の場合、先行的に実行していたタスク21の処理を中断し、RWトランザクションをコミットせずに破棄し、送信データも破棄する。そして、タスク実行制御部50は合意結果に基づいてトランザクションを改めて開始して、タスク21を再駆動させる。
<外部通信部40>
図26は、送信処理の一例を示す図である。
各ノード1の外部通信部40は処理順序、イベント情報の合意済みイベント810に付随する外部送信用のメッセージ302と宛先情報を取得し、宛先(プロクシ3)に向けて当該メッセージを送信する。この場合、外部通信部40はメッセージ300のヘッダ310にコネクションIDとメッセージIDを付与する。
コネクションIDはクライアントアプリケーション2とプロクシ3とのコネクション確立時にプロクシ3が割り当てた一意のIDである。メッセージIDは当該コネクションにて外部通信部40が送信するメッセージ300に対して一意に割り当てられたID(通し番号)である。
あるコネクションに着目すると、各ノード1からは同じメッセージIDの同じメッセージ300がプロクシ3宛てに送信されることが期待される。プロクシ3はコネクションIDとメッセージIDを参照して同一メッセージを複数受信したことを確認し、所定のポリシーに基づいて1つのメッセージを選択し、ヘッダ310を取り除いたメッセージ300をクライアントアプリケーション2に転送する。上記ポリシーは、例えば、先着優先や、多数決、などを採用することができる。
上記構成により、一部のノード1が外部送信前に障害で停止しても合意を形成した他のノード1から処理結果のメッセージ300を取得することが可能となり、クライアントはタイムアウト&リトライをせずとも、滞りなく処理を継続することが可能となる。
前記実施例1では、処理時間の長いタスク21が存在した場合、RWトランザクションを開始してから終了(コミット)するまで、長時間を要する場合がある。この処理が完了するまでの間に他のテーブルに対するRWトランザクションが何度か起こったとしても、ステート全体(全テーブル)に対するROトランザクションは、それらの更新内容を参照することはできない。これは、ステート全体に対するROトランザクションは、未コミットのデータを参照しないよう、連番でコミット済みのトランザクション番号以降に更新されたデータを参照しないためである。
そこで、実施例2では、ステート管理部60が、コミット終了時までRWトランザクションのトランザクション番号(XNO202)を未定のままにしておく。リーダノード1-1のタスク実行制御部50がRWトランザクションをコミットする際に、どのハンドルをどの順序でコミットするかをノード1間で合意形成する。タスク実行制御部50は、合意が形成された場合のみ実際のコミットを実行する。
上記により、各ノード1は、必ずコミットの順序でコミット済みのトランザクション番号が更新されていくので、長時間RWトランザクションを保持し続けるタスク21があったとしても、最新バージョンのステート全体に対してROトランザクションが可能となる。
前記実施例1との相違点は、ステート管理部60の処理の一部と、タスク実行制御部50の処理の一部が変更され、その他の構成は前記実施例1と同様である。
図27は、RWのトランザクションの開始要求の一例を示すフローチャートである。この処理は、前記実施例1の図15の処理のステップS32、S33をステップS141、S142に置き換えたもので、その他の構成は図15と同様である。
ステート管理部60は、指定されたテーブル110のテーブル管理テーブル210を参照して、InProgress213の値が無効値であるか否か、すなわち、処理が開始されてトランザクション番号が未定であるか否かを判定する(S31)。InProgress213の値が無効値であればステップS141へ進み、無効値ではない場合(トランザクションの処理中)であればステップS34に進む。
ステップS141では、ステート管理部60がデータベース管理テーブル200のトランザクション状態201がLASTのレコードのXNO202の値に未定を意味する値(例えば、-2)を設定する。ステート管理部60は、指定されたテーブル110のテーブル管理テーブル210のInprogress213に未定値を設定する。
ステップS142では、テーブル110を参照するハンドル510を生成してタスク実行制御部50に応答する。ハンドル510は、図28で示すように、トランザクション番号のXNOに未定値である「-2」が設定される。
一方、ステップS34では、指定されたテーブル110のテーブル管理テーブル210でInProgress213の値が無効値ではない場合は、現在トランザクションの処理中であるので、ステート管理部60はタスク実行制御部50にエラーを通知して処理を終了する。
上記処理によって、ステート管理部60は、指定されたテーブル110がトランザクションの処理中ではない場合には、当該テーブル110をアクセスするハンドルに未定値を設定して、タスク実行制御部50に応答する。
そして、ステート管理部60は、RWトランザクションの終了の際に、データベース管理テーブル200のCommittedの値に1を加算し、当該トランザクションのXNO202を「未定値」から前記「Committed+1」の値に更新する。これに伴い、トランザクション番号XNOが「未定値」となっている更新対象のテーブル110のレコードについて、トランザクション番号XNOを前記「Committed+1」の新しい値に更新する
一方、タスク実行制御部50の処理は、次のように変更する。
タスク実行制御部50は、RWトランザクションの終了(コミット)を代行する場合、コミット対象のハンドルの順序についてノード1間で合意形成する処理を追加する。
そして、タスク実行制御部50は、コミットの順序の合意形成が完了してから、その順序の通りにコミットを実施する。リーダノード1-1もフォロワノード1-2、1-3も、合意形成が完了するまでコミットしない。この結果、タスク実行制御部50は処理結果の外部送信も保留する。
この合意形成を処理している間、タスク21はブロックせずに処理を可能とする(合意形成に失敗しても、タスクの実行には影響を与えないため)。
以上のように実施例2では、ノード1は、必ずコミットの順序でトランザクション番号が更新されるので、長時間のトランザクションがあったとしても、最新バージョンのステート全体に対してROトランザクションが可能となる。
<結び>
以上のように、上記実施例の多重系処理システムは、以下のような構成とすることができる。
(1)プロセッサ11とメモリ12と通信装置(通信インタフェース13)を含むノード(1)を複数有し、前記複数のノード(1)をネットワーク(5)を介して接続し、前記複数のノード(1)が入力に対して一意の出力を行う1以上のタスク(21)をそれぞれ実行する多重系処理システムであって、前記ノード(1)は、イベントを受け付けて、前記イベントに対応する前記タスク(21)を実行するトランザクションを開始するタスク実行制御部(50)と、前記タスクがアクセスするデータベース(100)のデータ(テーブル110内のデータ)のバージョンを管理するステート管理部(60)と、を有し、前記タスク実行制御部(50)は、前記タスク(21)の処理を開始する以前に、前記データベース(100)で前記タスク(21)が参照するデータのバージョン又は前記タスク(21)が更新するデータのバージョンを一括して前記ノード(1)間で合意を形成することを特徴とする多重系処理システム。
上記構成により、タスク21の処理を開始する前にどのバージョンのデータを参照し、どのバージョンとしてデータを更新するか多重系を構成するノード(1)間で合意形成することで、前記従来例のようにデータへの参照又は更新順をアクセスを行う度にノード(1)間で一致化させる必要がなくなって、同期に要する遅延を削減することができる。
(2)上記(1)に記載の多重系処理システムであって、
前記タスク実行制御部(50)は、1つの前記イベントの処理におけるデータのアクセスについて、一括して前記ノード(1)間で合意を形成することを特徴とする多重系処理システム。
上記構成により、一括して前記ノード1間でアクセス対象となるデータについて合意を形成することで、前記従来例のようにデータへの参照又は更新順をアクセスを行う度にノード(1)間で一致化させる必要がなくなって、同期に要する遅延を削減することができる。
(3)上記(2)に記載の多重系処理システムであって、前記タスク実行制御部(50)は、前記イベントがタイマイベントの場合には、前記タイマが作動する以前にアクセス対象のデータについて一括して前記ノード(1)間で合意を形成することを特徴とする多重系処理システム。
上記構成により、タイマイベントの場合、タスク実行制御部50はタイマが作動する前に、予めアクセス対象のデータのバージョンについて合意を形成することで、ノード1間の同期に要する遅延を削減することができる。
(4)上記(1)に記載の多重系処理システムであって、前記ノード(1)は、リーダノード(1-1)とフォロワノード(1-2、1-3)を含み、前記リーダノード(1-1)の前記タスク実行制御部(50)は、前記イベントを受け付けると、当該イベントに対応する前記タスク(21)がアクセスする前記データについて、前記フォロワノード(1-2、1-3)に合意の形成を依頼して、合意が形成される以前に前記タスク(21)を開始することを特徴とする多重系処理システム。
上記構成により、リーダノード1-1は合意形成前にタスク21の実行を開始し、フォロワノード1-2、1-3は合意形成の後にタスク21の実行を開始することで、少なくともリーダノード1-1は合意形成待ちによる遅延を回避することが可能となる。
(5)上記(4)に記載の多重系処理システムであって、前記リーダノード(1-1)の前記タスク実行制御部(50)は、前記合意の形成に失敗した場合には、処理を開始していた前記トランザクションを中断し、前記トランザクションの処理結果を破棄することを特徴とする多重系処理システム。
上記構成により、各ノード1は、必ずコミットの順序でコミット済みのトランザクション番号が更新されていくので、長時間RWトランザクションを保持し続けるタスク21があったとしても、最新バージョンのデータ(ステート)全体に対してROトランザクションが可能となる。
(6)上記(1)に記載の多重系処理システムであって、前記ステート管理部(60)は、前記トランザクションを識別する番号としてトランザクション番号(XNO)を前記トランザクションに付与し、前記トランザクションが処理した前記データベース(100)のデータのバージョンを前記トランザクション番号(XNO)で管理することを特徴とする多重系処理システム。
上記構成により、データベース100をMVCC方式で管理し、アクセス対象のデータのバージョンを事前に一括してノード1間で合意を形成することで同期に要する負荷を削減することができる。
(7)上記(6)に記載の多重系処理システムであって、前記ステート管理部(60)は、前記トランザクションがリードライトトランザクションの場合、当該リードライトトランザクションのコミットが完了するまで当該リードライトトランザクションのトランザクション番号を未定値とし、前記タスク実行制御部(50)が、前記リードライトトランザクションをコミットする場合、当該リードライトトランザクションでアクセするデータの順序について前記ノード(1)間で合意を形成することを特徴とする多重系処理システム。
上記構成により、各ノード1は、必ずコミットの順序でコミット済みのトランザクション番号が更新されていくので、長時間RWトランザクションを保持し続けるタスク21があったとしても、最新バージョンのステート全体に対してROトランザクションが可能となる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、又は、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
1-1~1-3 ノード
2 クライアントアプリケーション
3 プロクシ
4 クライアント計算機
5 ネットワーク
11 プロセッサ
12 メモリ
20 サーバアプリケーション
21-A~21-C タスク
30 多重化処理部
40 外部通信部
50 タスク実行制御部
60 ステート管理部
70 ノード間通信部
80 イベント管理キュー
90 共有メモリ
100 データベース
110-1~110-3 テーブル
200 データベース管理テーブル
210-1~210-3 テーブル管理テーブル

Claims (14)

  1. プロセッサとメモリと通信装置を含むノードを複数有し、前記複数のノードをネットワークを介して接続し、前記複数のノードが入力に対して一意の出力を行う1以上のタスクをそれぞれ実行する多重系処理システムであって、
    前記ノードは、
    イベントを受け付けて、前記イベントに対応する前記タスクを実行するトランザクションを開始するタスク実行制御部と、
    前記タスクがアクセスするデータベースのデータのバージョンを管理するステート管理部と、を有し、
    前記タスク実行制御部は、
    前記タスクの処理を開始する以前に、前記データベースで前記タスクが参照するデータのバージョン又は前記タスクが更新するデータのバージョンを一括して前記ノード間で合意を形成することを特徴とする多重系処理システム。
  2. 請求項1に記載の多重系処理システムであって、
    前記タスク実行制御部は、
    1つの前記イベントの処理におけるデータのアクセスについて、一括して前記ノード間で合意を形成することを特徴とする多重系処理システム。
  3. 請求項2に記載の多重系処理システムであって、
    前記タスク実行制御部は、
    前記イベントがタイマイベントの場合には、タイマが作動する以前にアクセス対象のデータについて一括して前記ノード間で合意を形成することを特徴とする多重系処理システム。
  4. 請求項1に記載の多重系処理システムであって、
    前記ノードは、
    リーダノードとフォロワノードを含み、
    前記リーダノードの前記タスク実行制御部は、
    前記イベントを受け付けると、当該イベントに対応する前記タスクがアクセスする前記データについて、前記フォロワノードに合意の形成を依頼して、合意が形成される以前に前記タスクを開始することを特徴とする多重系処理システム。
  5. 請求項4に記載の多重系処理システムであって、
    前記リーダノードの前記タスク実行制御部は、
    前記合意の形成に失敗した場合には、処理を開始していた前記トランザクションを中断し、前記トランザクションの処理結果を破棄することを特徴とする多重系処理システム。
  6. 請求項1に記載の多重系処理システムであって、
    前記ステート管理部は、
    前記トランザクションを識別する番号としてトランザクション番号を前記トランザクションに付与し、前記トランザクションが処理した前記データベースのデータのバージョンを前記トランザクション番号で管理することを特徴とする多重系処理システム。
  7. 請求項6に記載の多重系処理システムであって、
    前記ステート管理部は、
    前記トランザクションがリードライトトランザクションの場合、当該リードライトトランザクションのコミットが完了するまで当該リードライトトランザクションのトランザクション番号を未定とし、
    前記タスク実行制御部が、
    前記リードライトトランザクションをコミットする場合、当該リードライトトランザクションでアクセするデータの順序について前記ノード間で合意を形成することを特徴とする多重系処理システム。
  8. プロセッサとメモリと通信装置を含むノードを複数有し、前記複数のノードをネットワークを介して接続し、前記複数のノードが入力に対して一意の出力を行う1以上のタスクをそれぞれ実行する多重系処理システムの制御方法であって、
    前記ノードは、イベントを受け付けて、前記イベントに対応する前記タスクを実行するトランザクションを開始するタスク実行制御ステップと、
    前記ノードは、前記タスクがアクセスするデータベースのデータのバージョンを管理するステート管理ステップと、を含み、
    前記タスク実行制御ステップは、
    前記タスクの処理を開始する以前に、前記データベースで前記タスクが参照するデータのバージョン又は前記タスクが更新するデータのバージョンを一括して前記ノード間で合意を形成することを特徴とする多重系処理システムの制御方法。
  9. 請求項8に記載の多重系処理システムの制御方法であって、
    前記タスク実行制御ステップは、
    1つの前記イベントの処理におけるデータのアクセスについて、一括して前記ノード間で合意を形成することを特徴とする多重系処理システムの制御方法。
  10. 請求項9に記載の多重系処理システムの制御方法であって、
    前記タスク実行制御ステップは、
    前記イベントがタイマイベントの場合には、タイマが作動する以前にアクセス対象のデータについて一括して前記ノード間で合意を形成することを特徴とする多重系処理システムの制御方法。
  11. 請求項8に記載の多重系処理システムの制御方法であって、
    前記ノードは、リーダノードとフォロワノードを含み、
    前記リーダノードの前記タスク実行制御ステップは、
    前記イベントを受け付けると、当該イベントに対応する前記タスクがアクセスする前記データについて、前記フォロワノードに合意の形成を依頼して、合意が形成される以前に前記タスクを開始することを特徴とする多重系処理システムの制御方法。
  12. 請求項11に記載の多重系処理システムの制御方法であって、
    前記リーダノードの前記タスク実行制御ステップは、
    前記合意の形成に失敗した場合には、処理を開始していた前記トランザクションを中断し、前記トランザクションの処理結果を破棄することを特徴とする多重系処理システムの制御方法。
  13. 請求項8に記載の多重系処理システムの制御方法であって、
    前記ステート管理ステップは、
    前記トランザクションを識別する番号としてトランザクション番号を前記トランザクションに付与し、前記トランザクションが処理した前記データベースのデータのバージョンを前記トランザクション番号で管理することを特徴とする多重系処理システムの制御方法。
  14. 請求項13に記載の多重系処理システムの制御方法であって、
    前記ステート管理ステップは、
    前記トランザクションがリードライトトランザクションの場合、当該リードライトトランザクションのコミットが完了するまで当該リードライトトランザクションのトランザクション番号を未定とし、
    前記タスク実行制御ステップは、
    前記リードライトトランザクションをコミットする場合、当該リードライトトランザクションでアクセするデータの順序について前記ノード間で合意を形成することを特徴とする多重系処理システムの制御方法。
JP2021012370A 2021-01-28 2021-01-28 多重系処理システム及び多重系処理システムの制御方法 Pending JP2022115672A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021012370A JP2022115672A (ja) 2021-01-28 2021-01-28 多重系処理システム及び多重系処理システムの制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021012370A JP2022115672A (ja) 2021-01-28 2021-01-28 多重系処理システム及び多重系処理システムの制御方法

Publications (1)

Publication Number Publication Date
JP2022115672A true JP2022115672A (ja) 2022-08-09

Family

ID=82747644

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021012370A Pending JP2022115672A (ja) 2021-01-28 2021-01-28 多重系処理システム及び多重系処理システムの制御方法

Country Status (1)

Country Link
JP (1) JP2022115672A (ja)

Similar Documents

Publication Publication Date Title
US11687555B2 (en) Conditional master election in distributed databases
US11853263B2 (en) Geographically-distributed file system using coordinated namespace replication over a wide area network
US11120044B2 (en) System and method for maintaining a master replica for reads and writes in a data store
US20220345358A1 (en) System and method for data replication using a single master failover protocol
JP6688835B2 (ja) マルチアイテムトランザクションサポートを有するマルチデータベースログ
US11341115B2 (en) Multi-database log with multi-item transaction support
US9619544B2 (en) Distributed state management using dynamic replication graphs
US10282228B2 (en) Log-based transaction constraint management
US20150378774A1 (en) Log-based concurrency control using signatures
US20150379100A1 (en) Coordinated suspension of replication groups
US11550820B2 (en) System and method for partition-scoped snapshot creation in a distributed data computing environment
US20030028594A1 (en) Managing intended group membership using domains
JP3846852B2 (ja) 分散コンピューティング環境の処理グループを管理する方法、システム、およびプログラム製品
US20030145050A1 (en) Node self-start in a decentralized cluster
JP2022115672A (ja) 多重系処理システム及び多重系処理システムの制御方法
JP5480046B2 (ja) 分散トランザクション処理システム、装置、方法およびプログラム
Li et al. Enhancing throughput of partially replicated state machines via multi-partition operation scheduling
Lu et al. Software-Defined, Fast and Strongly-Consistent Data Replication for RDMA-Based PM Datastores
Wang et al. Fast log replication in highly available data store
Balakrishnan et al. Going beyond paxos
Nath Fault tolerance of the application manager in Vigne

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230512

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20240215

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240319

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240516