JP2015170056A - トランザクション処理装置、トランザクション処理プログラム及び分散処理システム - Google Patents

トランザクション処理装置、トランザクション処理プログラム及び分散処理システム Download PDF

Info

Publication number
JP2015170056A
JP2015170056A JP2014043344A JP2014043344A JP2015170056A JP 2015170056 A JP2015170056 A JP 2015170056A JP 2014043344 A JP2014043344 A JP 2014043344A JP 2014043344 A JP2014043344 A JP 2014043344A JP 2015170056 A JP2015170056 A JP 2015170056A
Authority
JP
Japan
Prior art keywords
processing
server
update process
request
target data
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.)
Granted
Application number
JP2014043344A
Other languages
English (en)
Other versions
JP6311359B2 (ja
Inventor
宗則 前田
Munenori Maeda
宗則 前田
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 JP2014043344A priority Critical patent/JP6311359B2/ja
Priority to US14/631,139 priority patent/US20150254098A1/en
Publication of JP2015170056A publication Critical patent/JP2015170056A/ja
Application granted granted Critical
Publication of JP6311359B2 publication Critical patent/JP6311359B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory
    • 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/2365Ensuring data consistency and integrity

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】分散トランザクション処理におけるデータの整合性を簡便に保証する。【解決手段】トランザクション処理装置は、処理の対象となる対象データを保持する保持装置と、対象データへの処理を要求する第1及び第2の処理装置を含むシステム中の第1の処理装置として動作する処理装置である。処理装置は、要求部、送信部、取得部を備える。要求部は、保持装置に、対象データに対する第1の更新処理を要求する。送信部は、第1の更新処理の終了後に、第2の処理装置に、第1の更新処理と不可分な第2の更新処理の開始を要求する要求信号を送信する。取得部は、対象データに対して行われている処理の要求元の処理装置の情報を、保持装置から取得する。第2の更新処理の要求後に、第1の処理装置により要求された処理が対象データに対して行われていることを示す情報を、取得部が取得した場合、要求部は、対象データを第1の更新処理の前の状態に戻す要求を、保持装置に出す。【選択図】図1

Description

この発明は、トランザクション処理に関する。
データベースを使用する処理で、分散トランザクションが使用されることがある。分散トランザクション処理は、1つのトランザクション中に、複数のサーバにより、データベースが参照又は更新される不可分な一連の情報処理である。不可分な一連の情報処理の例として、銀行の口座Aから口座Bに金銭を振り込む場合が挙げられる。
ここで、口座のデータを管理するシステムは、例えば、銀行の口座のデータを保持するデータベースを備えるDBサーバと、データベースの更新処理をする複数のサーバを備えるものとする。口座Aから口座Bに金銭を振り込む分散トランザクション処理では、口座Aのデータから取引金額分を減算する減算要求をDBサーバに出すサーバと、口座Bのデータに取引金額分を加算する加算要求をDBサーバに出すサーバとが異なる。減算要求を出すサーバは、まず、DBサーバに、口座Aのデータから取引金額分を減算させる減算要求を出す。DBサーバは、要求に応じて、口座Aのデータから取引金額分を減算させる処理を実行する。減算要求を出すサーバは、データベースに対する減算処理をコミット(確定処理)する。減算要求を出すサーバからのコミットにより、更新されたデータは、永続化される。次に、加算要求を出すサーバは、DBサーバに、口座Bのデータに取引金額分を加算させる加算要求を出す。DBサーバは、要求に応じて、口座Bのデータに取引金額分を加算させる処理を実行する。加算要求を出すサーバは、データベースへの加算処理をコミットする。このように、加算処理及び減算処理が正常に終了した振込み処理では、口座間のデータの整合性が保証される。
銀行の口座に関する処理では、処理が失敗した場合に誤って2重に引き落としなどを発生させることを防ぐため、エラーを検出したサーバは、データベースの内容を処理前の状態に戻す(ロールバック)ことが多い。しかし、支払い元の口座中の金銭の減算と、支払い先の口座への加算が異なるサーバによって行われることにより、整合がとれなくなることがある。口座Aへの減算処理がコミットされ、口座Bへの加算処理が失敗した場合、DBサーバは、処理に失敗した口座Bのデータをロールバックする。すると、口座Bへの加算処理がロールバックされたにも関わらず、口座Aへの減算処理がロールバックされないという事態が起こりうる。このような不整合を防止するため、加算処理と減算処理とをデータベースに行い、どちらかの処理が失敗した場合に、両方の処理をロールバックする2フェーズコミットの技術が知られている。
データの整合性を保つトランザクション処理について、トランザクションをグループに分割し、各グループをセットとして処理することで、ACID処理結果を保証する技術が知られている(例えば、特許文献1を参照)。
トランザクション処理に関する技術として、同期点処理の間に個別に動作するメンバーが互いに通信する処理を減らす技術が知られている(例えば、特許文献2を参照)。
トランザクション処理に関する技術として、複数のエージェントから使用可能か不可能かの信号を受信し、コーディネータによるコミット又はバックアウトの判断をすることで、トランザクション処理を同期する技術が知られている(例えば、特許文献3を参照)。
特許公開平10−069418号公報 特許公開2001−306381号公報 特許公表平10−510651号公報
1つのトランザクション処理に含まれる加算処理又は減算処理のうち、どちらかの処理が失敗した場合に、両方の処理がロールバックされなければ、データの整合性を保証できない。分散トランザクションを行うときに整合性を担保するためには、システム中のサーバを、2フェーズコミットに対応したサーバに置き換えることになる。しかし、こうしたサーバは2フェーズコミットに対応していないサーバに比べて非常に高価であったり、置き換えに煩雑な作業を要したりすることがある。例えば、作業中に口座のデータを保持するデータベースが更新されると不具合が発生する可能性が高いため、データベースを使用できないようにすることになる。すると、2フェーズコミットに対応したシステムの追加が終了するまで、システム全体が使用できなくなる。また、作業中に行われた口座間の取引のデータなどを、データベースに反映させる作業も起こりうる。このため、全てのサーバを2フェーズコミットに対応したサーバに置き換えることは困難である。また、口座に限らず、分散トランザクションを、2フェーズコミットに対応していないサーバで行う場合には同様の問題が発生しうる。
1つの側面において、本発明の目的は、簡便に分散トランザクションでのデータの整合性を保証することである。
トランザクション処理装置は、処理の対象となる対象データを保持する保持装置と、対象データへの処理を要求する第1及び第2の処理装置を含むシステム中の第1の処理装置として動作する処理装置である。処理装置は、要求部、送信部、取得部を備える。要求部は、保持装置に、対象データに対する第1の更新処理を要求する。送信部は、第1の更新処理の終了後に、第2の処理装置に、第1の更新処理と不可分な第2の更新処理の開始を要求する要求信号を送信する。取得部は、対象データに対して行われている処理の要求元の処理装置の情報を、保持装置から取得する。第2の更新処理の要求後に、第1の処理装置により要求された処理が対象データに対して行われていることを示す情報を、取得部が取得した場合、要求部は、対象データを第1の更新処理の前の状態に戻す要求を、保持装置に出す。
分散トランザクション処理におけるデータの整合性を簡便に保証することである。
本実施形態に係る分散トランザクション処理の例を説明するシステムの図である。 サーバ及びDBサーバのハードウェア構成の例を示す。 障害がない場合の分散トランザクション処理の例を説明するシーケンス図である。 ハンドシェークが失敗した場合にシステムで行われる処理の例(その1)を説明するシーケンス図である。 ハンドシェークが失敗した場合にシステムで行われる処理の例(その2)を説明するシーケンス図である。 トランザクション処理が失敗したことを示す応答信号が送信された場合の例を説明するシーケンス図である。 応答信号が遅延した場合のトランザクション処理の例(その1)を説明するシーケンス図である。 応答信号が遅延した場合のトランザクション処理の例(その2)を説明するシーケンス図である。 本実施形態に係るサーバA側のトランザクション処理の例を説明するフローチャートである。 本実施形態に係るサーバA側のトランザクション処理の例を説明するフローチャートである。 本実施形態に係るサーバA側のトランザクション処理の例を説明するフローチャートである。 本実施形態に係るサーバA側のトランザクション処理の例を説明するフローチャートである。 本実施形態に係るサーバB側のトランザクション処理の例を説明するフローチャートである。 本実施形態に係るサーバB側のトランザクション処理の例を説明するフローチャートである。 RPC信号に対応する応答信号を使用しない分散トランザクション処理の例(その1)を説明するシーケンス図である。 RPC信号に対応する応答信号を使用しない分散トランザクション処理の例(その2)を説明するシーケンス図である。 RPC信号に対応する応答信号を使用しない分散トランザクション処理の例(その3)を説明するシーケンス図である。 RPC信号に対応する応答信号を使用しない分散トランザクション処理の例(その4)を説明するシーケンス図である。 RPC信号に対応する応答信号を使用しない分散トランザクション処理の例(その5)を説明するシーケンス図である。
以下、本実施形態について、図面を参照しながら詳細に説明する。
図1は、本実施形態に係る分散トランザクション処理の例を説明するシステム構成図である。図1を参照しながら、分散トランザクション処理が口座Aから口座Bに金銭を振り込む処理である場合の例について説明する。口座のデータを管理するシステム100は、例えば、銀行の口座のデータを保持するデータベース121を備えるDBサーバ120と、データベース121の更新処理をする複数のサーバ110(110a、110b)を備える。サーバ110とDBサーバ120とは、ネットワークで接続されている。DBサーバ120は、全サーバ110が参照可能なデータを記憶する記憶領域を保持する。DBサーバ120及びサーバ110は、サーバの数を限定するものではない。
サーバ110は、制御部111、要求部112、RPC(Remote Procedure Call)送信部113、RPC受信部114、処理部115、記憶部116を有する。制御部111は、データベース121のデータを更新する際に、他のプロセスとの競合を避けるために用いる同期プリミティブを制御する。また、制御部111に含まれる取得部117は、制御情報122の情報を取得する。要求部112は、DBサーバ120に、データベース121のデータの更新要求を出力する。
RPC送信部113とRPC受信部114は、サーバ111aとサーバ111b間で整合性を取るために実施されるサーバ間での呼び出し処理に用いられるメッセージ(RPC)の送受信を行う。一例として、RPCは、サーバ111bで実行される処理を、サーバ111a側からサーバ111bに要求する要求信号である。処理部115は、RPCより要求された処理を実行する。記憶部116は、制御部111、要求部112、RPC送信部113、RPC受信部114、処理部115で使用するデータを記憶する。
次に、DBサーバ120は、記憶部121と、処理部124を備える。処理部124は、サーバ110からの要求に応じた処理を実行する。記憶部121は、制御情報122とデータベース123を有する。制御情報122は、制御部111から送信されてきた同期プリミティブにより更新される制御情報であり、各サーバが、更新中のデータの状況をチェックするために用いられる。データベース123は、例えば、口座の残金などの情報を保持する。制御情報122は、各サーバ111から共通でアクセス可能な記憶領域に記憶されている。
口座Aから口座Bに金銭を振り込む分散トランザクション処理は、口座Aのデータから取引金額分を減算する減算要求と、口座Bのデータに取引金額分を加算する加算要求を、DBサーバ120に通知する不可分の処理である。
以下の(A1)〜(A14)に、本実施形態に係る障害がない場合の分散トランザクション処理を順に説明する。口座Aの減算処理と口座Bの加算処理の一連の不可分な処理では、まず、サーバ110a側から、分散トランザクション処理を開始するプログラムが起動される。
(A1)サーバ110aの制御部111aは、サーバ110aがサーバ110b側のRPC処理が開始されたことをチェックするために用いる情報であるチェックレコードをDBサーバ120に書き込む信号を、DBサーバ120に通知する。チェックレコードを書き込む信号は、プリミティブで実現される。チェックレコードを書き込む信号のプリミティブには、一例として、putIfAbsent命令が用いられる。putIfAbsent命令は、トランザクション処理が完了するまで、他のプロセスからはその途中データを観測できないようにする性質を持つ命令である。以降、putIfAbsent命令を用いたプリミティブを、プリミティブ(putIfAbsent)と記載する。
(A2)DBサーバ120の処理部124は、記憶部121に、サーバ110b側のRPC処理が開始されていないことを示す制御情報を記憶させる。制御情報には、サーバ110aからの要求処理であることを示す情報が含まれてもよい。
(A3)サーバ110aの要求部112aは、DBサーバ120に、口座Aのデータから取引金額分を減算させる減算要求を出す。
(A4)DBサーバ120の処理部123は、要求に応じて、口座Aのデータから取引金額分を減算させる処理を実行する。この時点で、サーバ110aは、口座Aのデータの更新をコミットしない。
(A5)口座Aの減算処理と口座Bの加算処理は、一連の不可分な処理である。そのため、サーバ110aのRPC送信部113aは、口座Aのデータをコミットする前に、口座Bのデータ更新をするサーバ110bにRPC信号を送信する。RPC信号は、口座Aからの減算分を口座Bに加算する処理を開始する要求である。サーバ110bのRPC受信部113bは、RPC信号を受信する。
(A6)サーバ110bは、トランザクション処理を開始する。サーバ110bの制御部111bは、サーバ110bがRPC処理を開始したことを示す信号をDBサーバ120に通知する。RPC処理を開始したことを示す信号は、例えば、プリミティブで実現される。RPC処理を開始したことを示す信号のプリミティブには、一例としてremove命令が用いられる。remove命令は、プリミティブ(putIfAbsent)による、他のプロセスからは途中データが観測できない状態を解除する命令である。以降、remove命令を用いたプリミティブを、プリミティブ(remove)と記載する。
(A7)DBサーバ120の処理部124は、記憶部121から、サーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)を削除する。
(A8)サーバ110bの制御部111bは、サーバ110aがサーバ110b側のRPC処理が失敗したかのチェックをするために用いる情報であるキャンセルレコードをDBサーバ120に書き込む信号を、DBサーバ120に通知する。キャンセルレコードを書き込む信号は、プリミティブで実現される。キャンセルレコードを書き込む信号のプリミティブには、一例として、putIfAbsent命令が用いられる。DBサーバ120の処理部124は、記憶部121に、サーバ110aがサーバ110b側のRPC処理が失敗したかのチェックをするために用いる制御情報(キャンセルレコード)を記憶させる。
(A9)サーバ110bのRPC送信部113bは、RPC信号を正常に受信したことを示すRPC_ACK信号を、サーバ110aに送信する。サーバ110aのRPC受信部114aは、RPC_ACK信号を受信する。
(A10)サーバ110bの要求部112bは、DBサーバ120に、口座Bのデータに取引金額分を加算させる加算要求を出す。
(A11)DBサーバ120の処理部123は、要求に応じて、口座Bのデータに取引金額分を加算させる処理を実行する。
(A12)サーバ110bの処理部115bは、口座Bのデータの更新をコミットする。
(A13)サーバ110bのRPC送信部113bは、RPC信号から呼び出された処理が正常に終了したことを示す情報を含む応答信号をサーバ110aに送信する。応答信号は、(A5)で受信したRPC信号に対する処理の成否応答である。サーバ110aのRPC受信部114aは、応答信号を受信する。
(A14)サーバ110aの処理部115aは、口座Aのデータの更新をコミットする。
(A1)〜(A14)の処理により、RPCの呼び出し元のサーバ110aは、RPCの呼び出し先のサーバ110b側の処理がコミットされた後から、自身の処理をコミットする。これにより、呼び出し元の口座Aのデータと呼び出し先の口座Bのデータは、整合性を取ることができる。なお、(A14)で一連のトランザクション処理が終了すると、(A8)で記憶部に記憶されたキャンセルレコードは、削除される。
以下に、サーバ110b側の処理について、障害が発生した場合の分散トランザクション処理を順に説明する。なお、(A1)〜(A7)の処理が、(B1)の処理の前に行われる。
(B1)(A8)又は(A9)で処理が失敗した場合、サーバ110bのRPC送信部113bは、RPC信号を正常に受信したことを示すRPC_ACK信号を、サーバ110aに送信しない。サーバ110bの要求部112bは、口座Bに関するトランザクション処理を、(A5)のRPC信号を受信した時点までロールバックする要求をDBサーバ120に出す。DBサーバ120は、ロールバックの要求を受けると、(A7)で削除されたサーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)を再生成する。DBサーバ120は、(A5)の時点の制御情報及び口座Bのデータを記憶している。
(B2)RPC信号から呼び出された処理が失敗したことを示す情報を含む応答信号を、サーバ110aのRPC受信部114aが受信した場合、サーバ110aの処理部115aは、サーバ110b側の処理が失敗し、サーバ110bから要求された処理が、DBサーバ120でロールバックされたと判定する。
(B3)所定の時間が経過しても、RPC_ACK信号や応答信号を、サーバ110aのRPC受信部114aが受信できない場合、サーバ110aの取得部117aは、制御情報122から、制御情報を取得する。サーバ110aの制御部111aは、サーバ110b側のRPC処理が行われているにも関わらず、チェックレコードを取得した場合、サーバ110b側の処理が失敗し、サーバ110bから要求された処理が、DBサーバ120でロールバックされたと判定する。再生成されたチェックレコードは、サーバ110bから要求された処理が、DBサーバ120でロールバックされたことを示す情報である。
(B4)サーバ110bから要求された処理がDBサーバ120でロールバックされた場合、サーバ110aの要求部112aは、口座Aに関するトランザクション処理を、(A1)の時点までロールバックする要求をDBサーバ120に出す。DBサーバ120は、(A1)の時点まで口座Aのデータをロールバックする。
(B2)の処理により、サーバ110aは、DBサーバ120の制御情報に基づいて、サーバ110b側から要求された処理がロールバックしたことを検知することができる。そのため、サーバ110a側も、自身が要求したトランザクション処理をロールバックさせる。このようにしてトランザクション処理は、口座Aと口座Bのデータの整合性が保たれる。また、2フェーズコミットのように、加算及び減算処理を管理する管理サーバを備えなくとも、口座Aと口座Bのデータの整合性が保たれる。
以下に、サーバ110b側の処理について、障害が発生した場合の分散トランザクション処理の別の例を順に説明する。なお、(A1)〜(A7)の処理が、(C1)の処理の前に行われる。(C1)の処理の後には、(B2)〜(B4)の処理が実行される。
(C1)(A10)〜(A11)で処理が失敗した場合、サーバ110bのRPC送信部113bは、RPC信号から呼び出された処理が正常に終了したことを示す情報を含む応答信号をサーバ110a側に送信しない。サーバ110bの要求部112bは、口座Bに関するトランザクション処理を、(A5)のRPC信号を受信した時点までロールバックする要求をDBサーバ120に出す。DBサーバ120は、(A5)の時点の制御情報及び口座Bのデータを記憶している。そのため、DBサーバ120は、口座Bのデータを(A5)の時点まで戻す。また、DBサーバ120は、(A7)で削除されたチェックレコードを再生成する。サーバ110bのRPC送信部113bが、RPC信号から呼び出された処理が失敗したことを示す情報を含む応答信号をサーバ110aに送信してもよい。
RPCの呼び出し元のサーバ110aは、DBサーバ120が処理対象として、サーバ110aからの要求処理であることを示す情報を保持している場合に、RPCの呼び出し先のサーバから要求された処理がDBサーバ120でロールバックしていると判定する。その後、呼び出し元のサーバ110aは、自身もロールバックをする要求をDBサーバ120に出す。RPCの呼び出し元のサーバ110aは、RPCの呼び出し先のサーバ110bが処理をコミットしている場合に、自身も処理をコミットする。このため、RPCの呼び出し先でロールバックが行われた場合、呼び出し元のサーバもロールバックを行うことができる。トランザクション処理において、呼び出し元からの処理対象データと呼び出し先の処理対象データの整合性が保たれる。また、2フェーズコミットのように、呼び出し元の処理と呼び出し先の処理を管理する管理サーバを備えなくとも、呼び出し元からの処理対象データと呼び出し先の処理対象データの整合性が保たれる。
図2は、サーバ及びDBサーバのハードウェア構成の例を示す。サーバ110及びDBサーバ120は、プロセッサ11、メモリ12、バス15、外部記憶装置16、ネットワーク接続装置19を備える。さらにオプションとして、サーバ110及びDBサーバ120は、入力装置13、出力装置14、媒体駆動装置17を備えてもよい。サーバ110及びDBサーバ120は、例えば、コンピュータなどで実現されることがある。
プロセッサ11は、Central Processing Unit(CPU)を含む任意の処理回路とすることができる。プロセッサ11は、サーバ110内の制御部111、要求部112、RPC送信部113、RPC受信部114、処理部115として動作する。プロセッサ11は、DBサーバ120内の処理部124として動作する。なお、プロセッサ11は、例えば、外部記憶装置16に記憶されたプログラムを実行することができる。メモリ12は、サーバ110内の記憶部116として動作する。メモリ12は、DBサーバ120内の記憶部124として動作し、データベース123、制御情報122を保持する。さらに、メモリ12は、プロセッサ11の動作により得られたデータや、プロセッサ11の処理に用いられるデータも、適宜、記憶する。ネットワーク接続装置19は、他の装置との通信に使用される。
入力装置13は、例えば、ボタン、キーボード、マウス等として実現され、出力装置14は、ディスプレイなどとして実現される。バス15は、プロセッサ11、メモリ12、入力装置13、出力装置14、外部記憶装置16、媒体駆動装置17、ネットワーク接続装置19の間を相互にデータの受け渡しが行えるように接続する。外部記憶装置16は、プログラムやデータなどを格納し、格納している情報を、適宜、プロセッサ11などに提供する。媒体駆動装置17は、メモリ12や外部記憶装置16のデータを可搬記憶媒体18に出力することができ、また、可搬記憶媒体18からプログラムやデータ等を読み出すことができる。ここで、可搬記憶媒体18は、フロッピイディスク、Magnet−Optical(MO)ディスク、Compact Dsic Recordabe(CD−R)やDigital Versatile Disk Recordable(DVD−R)を含む、持ち運びが可能な任意の記憶媒体とすることができる。
図3は、障害がない場合の分散トランザクション処理の例を説明するシーケンス図である。サーバ110aは、DBサーバ120に、口座Aのデータを対象としたプリミティブ(putIfAbsent)を通知する。DBサーバ120は、記憶部121に、サーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)を記憶する(ステップS101)。サーバ110aは、口座Aのデータを更新するトランザクション処理を開始する。トランザクション処理においてロールバックが実行されると、「begin」で示す時点(ステップS102)以降の処理は、全て無効とされる。なお、DBサーバ120は、「begin」で示す時点の口座Aのデータ及び制御情報を記憶している。サーバ110aは、DBサーバ120に口座Aのデータから取引金額分を減算させる減算要求を出す。DBサーバ120は、要求に応じて、口座Aのデータから取引金額分を減算させる処理を実行する(ステップS103)。サーバ110aは、RPC信号をサーバ110bに送信する(ステップS104)。
RPC信号を受信すると、サーバ110bは、トランザクション処理を開始する。トランザクション処理においてサーバ110bからロールバックが要求されると、「begin」で示す時点(ステップS105)以降の処理は、全て無効とされる。サーバ110bは、プリミティブ(remove)をDBサーバ120に通知する。DBサーバ120は、制御情報122から、チェックレコードを削除する(ステップS106)。サーバ110bは、DBサーバ120に、口座Bのデータを対象としたプリミティブ(putIfAbsent)を通知する。DBサーバ120は、記憶部121に、サーバ110aがサーバ110b側のRPC処理が失敗したかのチェックをするために用いる制御情報(キャンセルレコード)を記憶する(ステップS107)。サーバ110bは、サーバ110aにRPC_ACK信号を送信する(ステップS108)。サーバ110bは、DBサーバ120に口座Bのデータに取引金額分を加算させる加算要求を出す。DBサーバ120は、要求に応じて、口座Bのデータに取引金額分を加算させる処理を実行する(ステップS109)。サーバ110bは、口座Bの更新後のデータをコミットする(ステップS110)。サーバ110bは、RPC信号から呼び出された処理が正常に終了したことを示す情報を含む応答信号をサーバ110aに送信する(ステップS111)。サーバ110aは、口座Aの更新後のデータをコミットする(ステップS112)。S101〜S112で、口座Aから口座Bに金銭を振り込む分散トランザクション処理が完了する。分散トランザクション処理の終了に伴い、S107で記憶部121に記憶されたキャンセルレコードは削除される。
図4は、ハンドシェークが失敗した場合にシステムで行われる処理の例(その1)を説明するシーケンス図である。ハンドシェークは、サーバ110aとサーバ110b間のRPC信号が正常に送受信されたかの確認処理である。例えば、図3のS104のRPC信号をサーバ110bが受信し、RPC信号が正常に受信されたかを示すS108のRPC_ACK信号をサーバ110aが受信した場合に、ハンドシェークが成功している。図4のS201〜S206は、図3のS101〜S106と同じ処理であるため、説明を省略する。
サーバ110aは、RPC_ACK信号を受信できないため、S204のRPC信号送信後、所定の時間が経過すると、制御情報を確認し、サーバ110bの処理状況を確認する。サーバ110aは、DBサーバ120から、チェックレコード及びキャンセルレコードを取得する(ステップS207)。サーバ110bは、DBサーバ120に、口座Bのデータを対象としたプリミティブ(putIfAbsent)を通知する。DBサーバ120は、記憶部121に、サーバ110aがサーバ110b側のRPC処理が失敗したかのチェックをするために用いる制御情報(キャンセルレコード)を記憶する(ステップS208)。サーバ110bは、S208後の処理で失敗したため、S205の時点まで、サーバ110b側からの処理をロールバックする要求をDBサーバ120に出す要求をDBサーバ120に出す(ステップS209)。S209の処理において、サーバ110bは、S208で記憶部121に記憶させた情報を無効とする要求をDBサーバ120に出す。併せて、サーバ110bは、S206で削除したサーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)を再生成する要求をDBサーバ120に出す。DBサーバ120は、要求されたロールバック処理を行う。
サーバ110aは、S207の制御情報の取得処理をS207から所定の時間、繰り返す。その結果、サーバ110aは、制御情報122に、サーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)が再生成されていることを検知する。サーバ110aは、チェックレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する。DBサーバ120は、制御情報122から、サーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)を削除する。サーバ110aは、S202の時点まで、サーバ110a側からの処理をロールバックする要求をDBサーバ120に出す(ステップS211)。S211のロールバックで、サーバ110aは、口座AのデータをS203の処理前の状態とする要求をDBサーバ120に送信する。DBサーバ120は、サーバ110aからの要求に応じた処理を実行し、口座AのデータをS203の処理前の状態とする。また、S202の時点で、DBサーバ120は、サーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)を記憶していたため、S211のロールバックで、DBサーバ120は、チェックレコードを再生成する。
S207の取得処理を繰り返すことで、サーバ110aは、チェックレコードが再生成されていることを検知することができる。サーバ110aは、チェックレコードが再生成されていることにより、サーバ110bがロールバックしたことを検知する。そのため、サーバ110b側のロールバック処理にあわせて、サーバ110aの口座Aへのデータ更新処理もロールバックする。これにより、口座Aと口座Bとは整合性が保たれる。
図5は、ハンドシェークが失敗した場合にシステムで行われる処理の例(その2)を説明するシーケンス図である。図5の例では、ロールバックの際に、ロールバックを行う原因となったエラーの情報を、ロールバックの際に削除しないように変形されたシステムの動作例を説明する。なお、図5のS301〜S306は、図3のS101〜S106と同じ処理であるため、説明を省略する。
サーバ110aは、S304のRPC信号送信処理以降、定期的に、DBサーバ120から、口座Aや口座Bの状態を示す制御情報を取得する(ステップS307)。サーバ110bからのDBサーバ120へのプリミティブ(putIfAbsent)処理が失敗する。DBサーバ120は、記憶部121に、キャンセルレコードの生成に失敗したことを示す制御情報を記憶する(ステップS308)。サーバ110bは、S305の時点まで、サーバ110b側からの処理をロールバックする要求をDBサーバ120に出す(ステップS309)。S309のロールバックで、DBサーバ120は、S306のチェックレコードの削除処理を無効とし、チェックレコードを再生成する。S309のロールバックで、DBサーバ120は、S308のキャンセルレコードの生成に失敗したことを示す制御情報を削除しない。これにより、システムの管理者は、S308の処理でキャンセルレコードの生成に失敗したことを知ることができる。
S307の制御情報の取得処理は、S307の処理以降、所定の時間、処理を繰り返す。その結果、サーバ110aは、制御情報122に、サーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)があることを検知する。サーバ110aは、チェックレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する。DBサーバ120は、制御情報122から、チェックレコードを削除する(ステップS310)。サーバ110aは、S302の時点まで、サーバ110a側からの処理をロールバックする要求をDBサーバ120に出す(ステップS311)。S311のロールバックで、サーバ110aは、口座AのデータをS303の処理前の状態とする要求をDBサーバ120に送信する。DBサーバ120は、サーバ110aからの要求に応じた処理を実行し、口座AのデータをS303の処理前の状態とする。次に、S311のロールバックでDBサーバ120は、S302の時点で記憶されているチェックレコードを再生成しない。キャンセルレコードの生成に失敗したことを示す制御情報が記憶部121に記憶されている場合、DBサーバ120は、チェックレコードを再生成させないと判定する。
S307の取得処理を繰り返すことで、サーバ110aは、チェックレコードが再生成されていることを検知する。サーバ110aは、チェックレコードが再生成されていることにより、サーバ110b側の処理がロールバックしたことを検知する。サーバ110b側のロールバックにあわせて、サーバ110aの口座Aへのデータ更新処理もロールバックする。これにより、口座Aと口座Bとは整合性が保もたれる。なお、図5のトランザクション処理において、管理者は、処理終了後に制御情報を確認することで、S308の口座Bに関する制御情報の更新に失敗したことを知ることができる。
図6は、トランザクション処理が失敗したことを示す応答信号が送信された場合の例を説明するシーケンス図である。なお、図5のS401〜S409は、図3のS101〜S109と同じであるため、説明を省略する。
S409の処理の後にサーバ110bで障害が発生したため、サーバ110bは、S405の時点まで、サーバ110b側からの処理をロールバックする要求をDBサーバ120に出す(ステップS410)。S410のロールバックで、サーバ110bは、口座Bに関するデータをS409の処理前の状態とする要求をDBサーバ120に送信する。DBサーバ120は、サーバ110bからの要求に応じた処理を実行し、口座BのデータをS409の処理前の状態とする。S410の処理の際、DBサーバ120は、S407で記憶部121に記憶させた情報を無効とする。併せて、S410の処理において、DBサーバ120は、チェックレコードを再生成する。
サーバ110bは、RPC信号から呼び出された処理が失敗したことを示す情報を含む応答信号をサーバ110aに送信する(ステップS411)。サーバ110aは、S402の時点まで、サーバ110a側からの処理をロールバックする要求をDBサーバ120に出す(ステップS412)。S412のロールバックで、サーバ110aは、口座AのデータをS403の処理前の状態とする要求をDBサーバ120に送信する。DBサーバ120は、サーバ110aからの要求に応じた処理を実行し、口座AのデータをS403の処理前の状態とする。DBサーバ120は、S412の時点で、チェックレコードを記憶しているため、再生成処理は行わない。サーバ110aは、チェックレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する。DBサーバ120は、制御情報122から、チェックレコードを削除する(ステップS413)。
サーバ110aは、S411のRPC信号から呼び出された処理が失敗したことを示す情報を含む応答信号を受信すると、制御情報の取得処理を行う。制御情報の取得処理により、サーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)が再生成されていることを検知し、サーバ110bがロールバックしたことを検知できる。このようにして、サーバ110b側のロールバックにあわせて、サーバ110aの口座Aへのデータ更新処理もロールバックするため、口座Aと口座Bとは、整合性が保たれる。
図7は、応答信号が遅延した場合のトランザクション処理の例(その1)を説明するシーケンス図である。図7のシーケンス図では、図5の応答信号(S411)が遅延した場合の例である。なお、図7のS501〜S509は、図3のS101〜S109と同じであるため、説明を省略する。
サーバ110aは、S508のRPC_ACK信号の受信以降、所定の時間を超えても応答信号を受信しない場合、チェックレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する。プリミティブ(remove)により、サーバ110aは、チェックレコードが再生成されていることとサーバ110b側の処理がロールバックされたかを判定できる。しかし、DBサーバ120は、記憶部121にチェックレコードを記憶していないため、プリミティブ(remove)の処理は実行されない(ステップS510)。S509の処理の後にサーバ110bで障害が発生したため、サーバ110bは、S505の時点まで、サーバ110b側からの処理をロールバックする要求をDBサーバ120に出す(ステップS511)。S511のロールバックで、サーバ110bは、口座BのデータをS509の処理前の状態とする要求をDBサーバ120に送信する。DBサーバ120は、サーバ110aからの要求に応じた処理を実行し、口座BのデータをS509の処理前の状態とする。S511の処理において、DBサーバ120は、S507で記憶部121に記憶させた情報を無効とする。併せて、S511の処理において、DBサーバ120は、チェックレコードを再生成する。
S511のロールバックで、チェックレコードが再生成されたため、DBサーバ120がS510で受信したプリミティブ(remove)の処理が実行できる。DBサーバ120は、制御情報122からチェックレコードを削除し、チェックレコードの削除が成功したことをサーバ110aに通知する(ステップS512)。サーバ110aは、S502の時点まで、サーバ110a側からの処理をロールバックする要求をDBサーバ120に出す(ステップS513)。S513のロールバックで、サーバ110aは、口座AのデータをS503の処理前の状態とする要求をDBサーバ120に送信する。DBサーバ120は、サーバ110aからの要求に応じた処理を実行し、口座AのデータをS503の処理前の状態とする。また、S513のロールバックで、DBサーバ120は、チェックレコードを再生成する。その後、サーバ110bは、RPC信号から呼び出された処理が失敗したことを示す情報を含む応答信号をサーバ110aに送信する(ステップS514)。
図7のシステムにおいて、サーバ110aは、S512のプリミティブ(remove)の処理が成功したことを受信することにより、サーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)が再生成されたことを検知できる。更に、チェックレコードが再生成されたことにより、サーバ110b側からの処理がロールバックしたことを検知できる。このようにして、サーバ110b側からの処理のロールバックにあわせて、サーバ110aの口座Aへのデータ更新処理もロールバックするため、口座Aと口座Bとは、整合性が保たれる。
図8は、応答信号が遅延した場合のトランザクション処理の例(その2)を説明するシーケンス図である。図8のシーケンス図は、サーバ110bの更新データがコミットされたにも関わらず、応答信号が遅延した場合の例である。なお、図8のS601〜S610は、図3のS101〜S110と同じであるため、説明を省略する。
S610で、サーバ110bの口座Bの更新処理はコミットされている。しかし、図1のS112のRPC信号から呼び出された処理が成功したことを示す情報を含む応答信号が遅延し、所定の時間経過しても受信できない場合、サーバ110aは、S611以降の処理を行う。サーバ110aは、所定の時間を超えても応答信号を受信しない場合、チェックレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する。しかし、DBサーバ120は、記憶部121にチェックレコードを記憶していないため、プリミティブ(remove)の処理は実行されない(ステップS611)。S610で、サーバ110bの口座Bの更新処理はコミットされたため、チェックレコードは再生成されない。そのため、所定の時間が経過しても、プリミティブ(remove)の対象となる制御情報がないため、プリミティブ(remove)処理は失敗する(ステップS612)。サーバ110aは、S602の時点まで、サーバ110a側からの処理をロールバックする要求をDBサーバ120に出す(ステップS613)。S613のロールバックで、サーバ110aは、口座AのデータをS603の処理前の状態とする要求をDBサーバ120に送信する。DBサーバ120は、サーバ110aからの要求に応じた処理を実行し、口座AのデータをS603の処理前の状態とする。S613のロールバックにおいて、DBサーバ120は、チェックレコードを再生成しない。
その後、サーバ110bは、RPC信号から呼び出された処理が成功したことを示す情報を含む応答信号(遅延)をサーバ110aに送信する(ステップS614)。しかし、サーバ110a側の処理は既にロールバック処理をしているため、サーバ110bにデータベースの無効処理を要求する(ステップS615)。サーバ110bは、S609のデータベースへの更新処理を無効とする(ステップS616)。図8のシーケンス図の例は、サーバ110b側の処理がコミットされているにも関わらず、サーバ110a側の処理がロールバックされた場合である。そのため、サーバ110aは、サーバ110b側のコミット済みの処理を無効化する。このようにして、サーバ110a側のロールバックにあわせて、サーバ110bの口座Bへのデータ更新処理もロールバックするため、口座Aと口座Bとは、整合性が保たれる。
図9A〜図9Dは、本実施形態に係るサーバA側のトランザクション処理の例を説明するフローチャートである。トランザクション処理は、口座Aから口座Bへの金銭の振込み処理についての、不可分な一連の加算処理と減算処理について説明する。
図9Aは、サーバA側のトランザクション処理の例を説明するフローチャートである。サーバ110aの処理部115は、サーバ110bとの通信経路を確保する(ステップS1001)。サーバ110aの処理部115は、実行するトランザクション処理のRPCに、識別番号を割り当てる(ステップS1002)。サーバ110aの制御部111aは、サーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)の書き込み命令であるプリミティブ(putIfAbsent)をDBサーバ120に通知する(ステップS1003)。サーバ110aの処理部115は、チェックレコードの書き込み命令がDBサーバ120側で正常に処理されたかを判定する(ステップS1004)。正常にされている場合、DBサーバ120は、チェックレコードが、記憶部121に記憶される。サーバ110aの処理部115は、トランザクション処理を開始(begin)する (ステップS1005、ステップS1004でYES)。
図9Bは、図9AのS1005後の処理の例を説明するフローチャートである。チェックレコードの書き込み命令がDBサーバ120側で正常に処理されない場合、DBサーバ120は、チェックレコードを、記憶部121に記憶していない。サーバ110aの処理部115は、トランザクション処理を終了する(ステップS1006、ステップS1004でNO)。サーバ110aの要求部112aは、DBサーバ120に、口座Aのデータから取引金額分を減算させる減算要求を出す(ステップS1007)。DBサーバ120の処理部123は、要求に応じて、口座Aのデータから取引金額分を減算させる処理を実行する。口座Aのデータをコミットする前に、サーバ110aのRPC送信部113aは、口座Bのデータ更新をするサーバ110bにRPC信号を送信する(ステップS1008)。口座Aから口座Bへの振込みをする場合、口座Aの減算処理と口座Bの加算処理は、一連の不可分な処理である。RPC信号は、まだ実行されていない加算処理を開始する要求である。
サーバ110aの処理部115は、サーバ110bがRPC信号を正常に受信したことを示すRPC_ACK信号を、RPC受信部114aが受信したかを判定する(ステップS1009)。サーバ110aの処理部115は、RPC信号を送信してから所定の時間が経過したかを判定する(ステップS1010、ステップS1009でNO)。S1010で所定の時間が経過している場合、サーバ110aは、処理をS1021に移行する。S1010で所定の時間が経過していない場合、サーバ110aは、S1009の処理を繰り返す。
サーバ110aの処理部115は、S1008で送信されたRPC信号により呼び出されたサーバ110b側の処理が正常に処理されたかの結果情報を含むレスポンス信号を、RPC受信部114aが受信したかを判定する(ステップS1011、ステップS1009でYES)。サーバ110aの処理部115は、RPC信号を送信してから所定の時間が経過したかを判定する(ステップS1012、ステップS1011でNO)。S1012で所定の時間が経過している場合、サーバ110aは、処理をS1031に移行する。S1012で所定の時間が経過していない場合、サーバ110aは、S1011の処理を繰り返す。
サーバ110aの処理部115aは、受信したレスポンス信号にRPC信号により呼び出されたサーバ110b側の処理が正常に処理されたかの結果が、成功かどうかを判定する(ステップS1013、ステップS1011でYES)。サーバ110aの処理部115aは、S1007で処理された口座Aのデータの更新をコミットする(ステップS1014、ステップS1013でYES)。サーバ110aの処理部115aは、S1014で実行されたコミット処理が成功したかを判定する(ステップS1015)。サーバ110aは、S1005以降に実行された処理をロールバックする要求をDBサーバ120に出す(ステップS1016、ステップS1013でNO、ステップS1015でNO)。サーバ110aの処理部115aは、トランザクション処理を終了する(ステップS1015でYES)。
図9Cは、図9BのS1010でYESと判定された場合の処理の例を説明するフローチャートである。サーバ110aの取得部117aは、定期的に制御情報122を取得する(ステップS1021)。サーバ110aの制御部111aは、サーバ110b側の処理が完了後に、キャンセルレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する(ステップS1022)。サーバ110aの処理部115aは、キャンセルレコードを対象としたプリミティブ(remove)の処理が実行されたかを判定する(ステップS1023)。サーバ110aの処理部115aは、サーバ110b側のトランザクション処理がロールバックしていることを検知する(ステップS1024、ステップS1023でYES)。サーバ110aは、S1005以降に実行された処理をロールバックする要求をDBサーバ120に出す(ステップS1025)。サーバ110aの処理部115aは、サーバ110b側のデータベース更新がコミットされたと判定する(ステップS1026、ステップS1023でNO)。サーバ110aは、S1005以降に実行された処理をロールバックする要求をDBサーバ120に出す(ステップS1027)。サーバ110aの処理部115aは、S1008のRPC信号から呼び出されたプロシージャから更新された口座Bのデータの更新処理を無効化する要求を出す(ステップS1028)。
図9Dは、図9BのS1012でYESと判定された場合の処理の例を説明するフローチャートである。サーバ110aの制御部111aは、サーバ110b側の処理が完了後に、キャンセルレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する(ステップS1031)。サーバ110aは、S1005以降に実行された処理をロールバックする要求をDBサーバ120に出す(ステップS1032)。サーバ110aの処理部115aは、キャンセルレコードを対象としたプリミティブ(remove)の処理が実行されたかを判定する(ステップS1033)。サーバ110aの処理部115aは、サーバ110b側のトランザクション処理がロールバックしていることを検知する(ステップS1034、ステップS1033でYES)。サーバ110aの処理部115aは、サーバ110b側のデータベース更新がコミットされたと判定する(ステップS1035、ステップS1033でNO)。サーバ110aの処理部115aは、S1008のRPC信号から呼び出されたプロシージャから更新された口座Bのデータの更新処理を無効化する要求を出す(ステップS1036)。サーバ110aの制御部111aは、サーバ110b側の処理が完了後に、キャンセルレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する(ステップS1037、ステップS1306処理後)。
図10A〜図10Bは、本実施形態に係るサーバB側のトランザクション処理の例を説明するフローチャートである。トランザクション処理は、口座Aから口座Bへの金銭の振込み処理についての、不可分な一連の加算処理と減算処理について説明する。
サーバ110bの処理部115bは、サーバ110aからの通信経路の確保要求を承認する(ステップS2001)。サーバ110bのRPC受信部114bは、サーバ110aから口座Bの更新要求を含むRPC信号を受信する(ステップS2002)。サーバ110bの処理部115bは、トランザクション処理を開始(begin)する (ステップS2003)。サーバ110bの制御部111bは、チェックレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する(ステップS2004)。S2004のチェックレコードは、S2002で受信したRPC信号に含まれるRPC識別番号から判別される。サーバ110bの処理部115bは、チェックレコードを対象としたプリミティブ(remove)の処理が実行されたかを判定する(ステップS2005)。サーバ110bの処理部115bは、S2003以降に実行された処理をロールバックする要求をDBサーバ120に出す(ステップS2006、ステップS2005でNO)。サーバ110bの制御部111bは、サーバ110aがサーバ110b側のRPC処理が失敗したかのチェックをするために用いる制御情報(キャンセルレコード)の書き込み命令であるプリミティブ(putIfAbsent)をDBサーバ120に通知する(ステップS2007)。サーバ110bの処理部115bは、キャンセルレコードの書き込み命令がDBサーバ120側で正常に処理されたかを判定する(ステップS2008)。サーバ110bの処理部115bは、S2003以降に実行された処理をロールバックする要求をDBサーバ120に出す(ステップS2009、ステップS2008でNO)。S2006及びS2009処理後、サーバ110b側のトランザクション処理は終了する。
図10Bは、S2008後の処理を示すフローチャートである。サーバ110bのRPC送信部113bは、RPC_ACK信号をサーバ110aに送信する(ステップS2010)。サーバ110bの要求部112bは、DBサーバ120に、口座Bのデータに取引金額分を加算する加算要求を出す(ステップS2011)。サーバ110bの処理部115bは、口座Bのデータの加算処理後のデータをコミットする(ステップS2012)。サーバ110bの処理部115bは、コミット処理が成功したかを判定する(ステップS2013)。サーバ110bの処理部115bは、S2003以降に実行された処理をロールバックする要求をDBサーバ120に出す(ステップS2014、ステップS2013でNO)。サーバ110bのRPC送信部113bは、S2002で受信したRPC信号後の処理が成功したかの情報を含む応答信号をサーバ110aに送信する(ステップS2015、ステップS2013でYES)。
RPCの呼び出し元のサーバ110aは、DBサーバ120が処理対象として、サーバ110aからの要求処理であることを示す情報を保持している場合に、RPCの呼び出し先のサーバから要求された処理がDBサーバ120でロールバックしていると判定する。その後、呼び出し元のサーバ110aは、自身もロールバックをする要求をDBサーバ120に出す。RPCの呼び出し元のサーバ110aは、RPCの呼び出し先のサーバ110bが処理をコミットしている場合に、自身も処理をコミットする。このため、RPCの呼び出し先でロールバックが行われた場合、呼び出し元のサーバもロールバックを行うことができる。トランザクション処理において、呼び出し元からの処理対象データと呼び出し先の処理対象データの整合性が保たれる。また、2フェーズコミットのように、呼び出し元の処理と呼び出し先の処理を管理する管理サーバを備えなくとも、呼び出し元からの処理対象データと呼び出し先の処理対象データの整合性が保たれる。
<その他>
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例を述べる。
図11は、RPC信号に対応する応答信号を使用しない分散トランザクション処理の例(その1)を説明するシーケンス図である。図11の分散トランザクション処理には、図1のシステム構成と同様のものを用いてよい。なお、図11のS701〜S710は、図3のS101〜S110と同じであるため、説明を省略する。
サーバ110aは、S708の処理後から所定の時間経過後、チェックレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する。しかし、DBサーバ120は、記憶部121にサーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)を記憶していないため、プリミティブ(remove)の処理は実行されない(ステップS711)。S711処理後から所定の時間が経過しても、プリミティブ(remove)の対象となるチェックレコードがないため、プリミティブ(remove)処理は失敗する(ステップS712)。サーバ110aは、記憶部121にサーバ110b側のRPC処理が開始されていないことを示す制御情報(チェックレコード)が記憶されていない場合に、サーバ110b側のトランザクション処理が正常に終了したと判定する。サーバ110aは、口座Aの更新後のデータをコミットする(ステップS713)。
図12は、RPC信号に対応する応答信号を使用しない分散トランザクション処理の例(その2)を説明するシーケンス図である。図12のシーケンス図は、プリミティブ(putIfAbsent)処理が失敗したことでハンドシェークに失敗した場合のトランザクション処理の例である。なお、図12のS801〜S806は、図11のS701〜S706と同じであるため、説明を省略する。
サーバ110aは、S804のRPC信号送信処理以降、定期的に、DBサーバ120から、制御情報を取得する(ステップS807)。サーバ110bからのDBサーバ120へのプリミティブ(putIfAbsent)処理が失敗する。DBサーバ120は、記憶部121に、キャンセルレコードの生成に失敗したことを示す制御情報を記憶する(ステップS808)。サーバ110bは、S805の時点まで、サーバ110b側からの処理をロールバックする要求をDBサーバ120に出す(ステップS809)。S809のロールバックで、DBサーバ120は、S806のチェックレコードの削除処理を無効とし、チェックレコードを再生成する。S809のロールバックで、DBサーバ120は、S808のキャンセルレコードの生成に失敗したことを示す制御情報を削除しない。これにより、システムの管理者は、S808の処理でキャンセルレコードの生成処理に失敗したことを知ることができる。
サーバ110aは、S807の処理後から所定の時間経過後、チェックレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する。しかし、DBサーバ120は、記憶部121にチェックレコードを記憶していないため、プリミティブ(remove)の処理は実行されない(ステップS810)。なお、図12のシーケンス図は、S810の処理がS809よりも先に処理されている。S809のロールバックで、チェックレコードが再生成されたため、DBサーバ120がS810で受信したプリミティブ(remove)の処理が実行できる。DBサーバ120は、制御情報122からチェックレコードを削除し、削除が成功したことをサーバ110aに通知する(ステップS811)。サーバ110aは、S802の時点まで、サーバ110a側からの処理をロールバックする要求をDBサーバ120に出す(ステップS812)。S812のロールバックで、サーバ110aは、口座AのデータをS803の処理前の状態とする要求をDBサーバ120に送信する。DBサーバ120は、サーバ110aからの要求に応じた処理を実行し、口座AのデータをS803の処理前の状態とする。次に、S812のロールバックでDBサーバ120は、S802の時点で記憶されているチェックレコードを再生成しない。キャンセルレコードの生成に失敗したことを示す制御情報が記憶部121に記憶されている場合、DBサーバ120は、チェックレコードを再生成しないと判定する。
図13は、RPC信号に対応する応答信号を使用しない分散トランザクション処理の例(その3)を説明するシーケンス図である。図13のシーケンス図は、サーバ110b側からサーバ110a側にRPC_ACK信号が送信されないために、ハンドシェークに失敗した場合の例である。なお、図13のS901〜S906は、図11のS701〜S706と同じであるため、説明を省略する。
サーバ110aは、S904のRPC信号送信処理以降、定期的に、DBサーバ120から、制御情報を取得する(ステップS907)。サーバ110bは、DBサーバ120に、キャンセルレコードの書き込み命令であるプリミティブ(putIfAbsent)を通知する。DBサーバ120は、記憶部121に、キャンセルレコードを記憶する(ステップS908)。サーバ110bは、S905の時点まで、サーバ110b側からの処理をロールバックする要求をDBサーバ120に出す(ステップS909)。S909のロールバックで、DBサーバ120は、S906のチェックレコードの削除処理を無効とし、チェックレコードを再生する。S909のロールバックで、DBサーバ120は、S908で生成されたキャンセルレコードを削除する。
サーバ110aは、S907の処理後から所定の時間経過後、チェックレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する。しかし、DBサーバ120は、記憶部121にチェックレコードを記憶していないため、プリミティブ(remove)の処理は実行されない(ステップS910)。なお、図13のシーケンス図は、S910の処理がS909よりも先に処理されている。S909のロールバックで、チェックレコードが再生成されたため、DBサーバ120がS910で受信したプリミティブ(remove)の処理が実行できる。DBサーバ120は、制御情報122からチェックレコードを削除し、削除が成功したことをサーバ110aに通知する(ステップS911)。サーバ110aは、S902の時点まで、サーバ110a側からの処理をロールバックする要求をDBサーバ120に出す(ステップS912)。S912のロールバックで、サーバ110aは、口座AのデータをS903の処理前の状態とする要求をDBサーバ120に送信する。DBサーバ120は、サーバ110aからの要求に応じた処理を実行し、口座AのデータをS903の処理前の状態とする。次に、S912のロールバックでDBサーバ120は、S902の時点で記憶されているチェックレコードを再生成する。
図14は、RPC信号に対応する応答信号を使用しない分散トランザクション処理の例(その4)を説明するシーケンス図である。図14のシーケンス図は、サーバ110bの口座Bのデータの更新処理で失敗した場合の例である。なお、図14のS3001〜S3009は、図11のS701〜S709と同じであるため、説明を省略する。
サーバ110bは、S3009の口座Bのデータの更新処理中又は処理後に失敗が発生したため、S3005の時点まで、サーバ110b側からの処理をロールバックする要求をDBサーバ120に出す(ステップS3010)。DBサーバ120は、サーバ110bからの要求に応じた処理を実行し、口座BのデータをS3009の処理前の状態とする。S3010の処理の際、DBサーバ120は、S3007で記憶部121に記憶させた情報を無効とする。併せて、S3010の処理において、DBサーバ120は、S3005の時点でDBサーバ120に記憶されているチェックレコードを再生成する。
サーバ110aは、S3008の処理後から所定の時間経過後、チェックレコードを対象としたプリミティブ(remove)をDBサーバ120に通知する。しかし、DBサーバ120は、記憶部121にチェックレコードを記憶していないため、プリミティブ(remove)の処理は実行されない(ステップS3011)。なお、図14のシーケンス図は、S3011の処理がS3010よりも先に処理されている。S3010のロールバックで、チェックレコードが再生成されたため、DBサーバ120がS910で受信したプリミティブ(remove)の処理が実行できる。DBサーバ120は、制御情報122からチェックレコードを削除し、削除が成功したことをサーバ110aに通知する(ステップS3012)。サーバ110aは、S3002の時点まで、サーバ110a側からの処理をロールバックする要求をDBサーバ120に出す(ステップS3013)。S3013のロールバックで、サーバ110aは、口座AのデータをS3003の処理前の状態とする。そのため、S3013のロールバックで、サーバ110aは、口座AのデータをS3003の処理前の状態とする要求をDBサーバ120に送信する。DBサーバ120は、サーバ110aからの要求に応じた処理を実行し、口座AのデータをS3003の処理前の状態とする。S3008でRPC_ACK信号を受信している場合、DBサーバ120は、S3013のロールバックで、S3002の時点で記憶されているチェックレコードを再生成しない。
図15は、RPC信号に対応する応答信号を使用しない分散トランザクション処理の例(その5)を説明するシーケンス図である。図15のシーケンス図は、サーバ110b側の処理がコミットされたにも関わらず、サーバ110a側の処理がプリミティブ(remove)に関する処理で失敗し、サーバ110a側の処理をロールバックした場合の例である。なお、図15のS4001〜S4012は、図11のS701〜S712と同じであるため、説明を省略する。
サーバ110aは、サーバ110b側の処理がコミット済みであるにも関わらず、S4002の時点まで、サーバ110a側からの処理をロールバックする要求をDBサーバ120に出す(ステップS4013)。S4013のロールバックで、サーバ110aは、口座AのデータをS4003の処理前の状態とする。そのため、S4013のロールバックで、サーバ110aは、口座AのデータをS4003の処理前の状態とする要求をDBサーバ120に送信する。DBサーバ120は、サーバ110aからの要求に応じた処理を実行し、口座AのデータをS4003の処理前の状態とする。S4008でRPC_ACK信号を受信しているため、DBサーバ120は、S4013のロールバックで、S4002の時点で記憶されているチェックレコードを再生成しない。サーバ110aは、サーバ110b側の処理がコミット済みであるにも関わらず、サーバ110a側の処理をロールバックしているため、サーバ110b側のS4009の処理の無効化する命令を出す(ステップS4014)。
なお、図7、図12、図13、図14において、サーバ110aは、サーバ110b側の処理がロールバックされた後に、プリミティブ(remove)をDBサーバ120に送信した場合、DBサーバ120は、その場で、要求された命令を実行する。
RPCの呼び出し元のサーバ110aは、DBサーバ120が処理対象として、サーバ110aからの要求処理であることを示す情報を保持している場合に、RPCの呼び出し先のサーバから要求された処理がDBサーバ120でロールバックしていると判定する。その後、呼び出し元のサーバ110aは、自身もロールバックをする要求をDBサーバ120に出す。RPCの呼び出し元のサーバ110aは、RPCの呼び出し先のサーバ110bが処理をコミットしている場合に、自身も処理をコミットする。このため、RPCの呼び出し先でロールバックが行われた場合、呼び出し元のサーバもロールバックを行うことができる。トランザクション処理において、呼び出し元からの処理対象データと呼び出し先の処理対象データの整合性が保たれる。また、2フェーズコミットのように、呼び出し元の処理と呼び出し先の処理を管理する管理サーバを備えなくとも、呼び出し元からの処理対象データと呼び出し先の処理対象データの整合性が保たれる。
110 サーバ
111 制御部
112 要求部
113 RPC送信部
114 RPC受信部
115 処理部
116 記憶部
117 取得部
120 DBサーバ
121 記憶部
122 制御情報
123 データベース
124 処理部

Claims (11)

  1. 処理の対象となる対象データを保持する保持装置と、前記対象データへの処理を要求する第1及び第2の処理装置を含むシステム中の前記第1の処理装置として動作する処理装置であって、
    前記保持装置に、前記対象データに対する第1の更新処理を要求する要求部と、
    前記第1の更新処理の終了後に、前記第2の処理装置に、前記第1の更新処理と不可分な第2の更新処理の開始を要求する要求信号を送信する送信部と、
    前記対象データに対して行われている処理の要求元の処理装置の情報を、前記保持装置から取得する取得部と、を備え、
    前記第2の更新処理の要求後に、前記第1の処理装置により要求された処理が前記対象データに対して行われていることを示す情報を、前記取得部が取得した場合、前記要求部は、前記対象データを前記第1の更新処理の前の状態に戻す要求を、前記保持装置に出す
    ことを特徴とするトランザクション処理装置。
  2. 前記第2の更新処理が正常に終了したかの情報を含む応答信号を、前記第2の処理装置から受信する受信部を更に備え、
    前記要求部は、
    所定の時間が経過しても前記受信部が前記応答信号を受信できない場合、前記対象データを前記第1の更新処理の前の状態に戻す要求を、前記保持装置に出す
    ことを特徴とする請求項1に記載のトランザクション処理装置。
  3. 前記第2の更新処理が正常に終了したかの情報を含む応答信号を、前記第2の処理装置から受信する受信部を更に備え、
    前記要求部は、
    前記第2の更新処理が正常に終了したことを示す応答信号が前記受信部で受信されると、前記第1の更新処理に対する確定処理を行い、
    前記第2の更新処理が失敗したことを示す応答信号が前記受信部で受信されると、前記対象データを前記第1の更新処理の前の状態に戻す要求を、前記保持装置に出す
    ことを特徴とする請求項1に記載のトランザクション処理装置。
  4. 処理の対象となる対象データを保持する保持装置と、前記対象データへの処理を要求する第1及び第2の処理装置を含むシステム中の前記第2の処理装置として動作する処理装置であって、
    前記保持装置中の前記対象データに対して前記保持装置が行う第1の更新処理が終了した後に、前記第1の更新処理と不可分な第2の更新処理の開始を要求する要求信号を受信する受信部と、
    前記保持装置に、前記対象データに対する第2の更新処理を要求する要求部と、
    前記第2の更新処理が正常に実行されない場合に、前記対象データを前記第2の更新処理が開始される前の状態に戻すことと、前記対象データに対する前記第1の更新処理の要求元の処理装置の情報の再生成とを、前記保持装置に要求するための制御を行う制御部と、を備える
    ことを特徴とするトランザクション処理装置。
  5. 処理の対象となる対象データを保持する保持装置と、前記対象データへの処理を要求する第1及び第2の処理装置を含むシステム中の前記第1の処理装置として動作する処理装置で実行されるトランザクション処理プログラムであって、
    前記保持装置に、前記対象データに対する第1の更新処理を要求し、
    前記第1の更新処理の終了後に、前記第2の処理装置に、前記第1の更新処理と不可分な第2の更新処理の開始を要求する要求信号を送信し、
    前記対象データに対して行われている処理の要求元の処理装置の情報を、前記保持装置から取得し、
    前記第2の更新処理の要求後に、前記第1の処理装置により要求された処理が前記対象データに対して行われていることを示す情報を、取得した場合、前記対象データを前記第1の更新処理の前の状態に戻す要求を前記保持装置に出す
    処理を処理装置に実行させるトランザクション処理プログラム。
  6. 前記第2の更新処理が正常に終了したかの情報を含む応答信号を、前記第2の処理装置から受信し、
    所定の時間が経過しても前記応答信号を受信できない場合、前記対象データを前記第1の更新処理の前の状態に戻す要求を、前記保持装置に出す
    処理を処理装置に実行させる請求項5に記載のトランザクション処理プログラム。
  7. 前記第2の更新処理が正常に終了したかの情報を含む応答信号を、前記第2の処理装置から受信し、
    前記第2の更新処理が正常に終了したことを示す応答信号が受信されると、前記第1の更新処理に対する確定処理を行い、
    前記第2の更新処理が失敗したことを示す応答信号が受信されると、前記対象データを前記第1の更新処理の前の状態に戻す要求を、前記保持装置に出す
    処理を処理装置に実行させる請求項5に記載のトランザクション処理プログラム。
  8. 処理の対象となる対象データを保持する保持装置と、前記対象データへの処理を要求する第1及び第2の処理装置を含むシステム中の前記第2の処理装置として動作する処理装置で実行されるトランザクション処理プログラムであって、
    前記保持装置中の前記対象データに対して前記保持装置が行う第1の更新処理が終了した後に、前記第1の更新処理と不可分な第2の更新処理の開始を要求する要求信号を受信し、
    前記保持装置に、前記対象データに対する第2の更新処理を要求し、
    前記第2の更新処理が正常に実行されない場合に、前記対象データを前記第2の更新処理が開始される前の状態に戻すことと、前記対象データに対する前記第1の更新処理の要求元の処理装置の情報の再生成とを、前記保持装置に要求するための制御を行う
    処理を処理装置に実行させるトランザクション処理プログラム。
  9. 処理の対象となる対象データと、前記対象データに対して行われている処理の要求元の処理装置の情報とを保持する保持装置と、
    前記対象データに対する第1の更新処理を前記保持装置に要求する第1の処理装置と、
    前記第1の更新処理と不可分な第2の更新処理を前記対象データに行うことを、前記保持装置に要求する第2の処理装置と、を含むシステムであって、
    前記第2の処理装置は、
    前記第1の更新処理の終了後に前記第1の処理装置から前記第2の更新処理を要求されてから、前記第2の更新処理を前記保持装置に要求し、
    前記第2の更新処理が正常に実行されない場合に、前記対象データを前記第2の更新処理が開始される前の状態に戻すことと、前記対象データに対する前記第1の更新処理の要求元の処理装置の情報の再生成とを、前記保持装置に要求し、
    前記第1の処理装置は、
    前記第2の更新処理の要求後に、前記第1の処理装置により要求された処理が前記対象データに対して行われていることを示す情報を取得した場合、前記対象データを前記第1の更新処理の前の状態に戻す要求を、前記保持装置に出す
    ことを特徴とする分散処理システム。
  10. 前記第1の処理装置は、
    前記第2の更新処理が正常に終了したかの情報を含む応答信号を、前記第2の処理装置から受信し、
    所定の時間が経過しても前記応答信号を受信できない場合、前記対象データを前記第1の更新処理の前の状態に戻す要求を、前記保持装置に出す
    ことを特徴とする請求項9に記載の分散処理システム。
  11. 前記第1の処理装置は、
    前記第2の更新処理が正常に終了したかの情報を含む応答信号を、前記第2の処理装置から受信し、
    前記第2の更新処理が正常に終了したことを示す応答信号が受信されると、前記第1の更新処理に対する確定処理を行い、
    前記第2の更新処理が失敗したことを示す応答信号が受信されると、前記対象データを前記第1の更新処理の前の状態に戻す要求を、前記保持装置に出す
    ことを特徴とする請求項9に記載の分散処理システム。
JP2014043344A 2014-03-05 2014-03-05 トランザクション処理装置、トランザクション処理プログラム及び分散処理システム Active JP6311359B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014043344A JP6311359B2 (ja) 2014-03-05 2014-03-05 トランザクション処理装置、トランザクション処理プログラム及び分散処理システム
US14/631,139 US20150254098A1 (en) 2014-03-05 2015-02-25 Transaction processing apparatus and distributed processing system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014043344A JP6311359B2 (ja) 2014-03-05 2014-03-05 トランザクション処理装置、トランザクション処理プログラム及び分散処理システム

Publications (2)

Publication Number Publication Date
JP2015170056A true JP2015170056A (ja) 2015-09-28
JP6311359B2 JP6311359B2 (ja) 2018-04-18

Family

ID=54017460

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014043344A Active JP6311359B2 (ja) 2014-03-05 2014-03-05 トランザクション処理装置、トランザクション処理プログラム及び分散処理システム

Country Status (2)

Country Link
US (1) US20150254098A1 (ja)
JP (1) JP6311359B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109426571B (zh) * 2017-08-28 2022-05-13 阿里巴巴集团控股有限公司 函数调用和数据访问的方法、系统、存储介质、处理器和装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08221307A (ja) * 1995-02-15 1996-08-30 Nec Corp 分散トランザクション制御システム
JPH0981437A (ja) * 1995-09-19 1997-03-28 Hitachi Ltd トランザクション処理方法
JP2000020619A (ja) * 1998-06-30 2000-01-21 Oki Electric Ind Co Ltd トランザクション補償システム
WO2004055674A1 (ja) * 2002-12-18 2004-07-01 Fujitsu Limited 分散トランザクション処理装置、分散トランザクション処理プログラム、分散トランザクション処理方法および分散トランザクション処理システム
US20090193280A1 (en) * 2008-01-30 2009-07-30 Michael David Brooks Method and System for In-doubt Resolution in Transaction Processing

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8073962B2 (en) * 2008-03-03 2011-12-06 Oracle International Corporation Queued transaction processing
US9754007B2 (en) * 2013-09-16 2017-09-05 International Business Machines Corporation Checkpoint capture and tracking in a high availability system

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08221307A (ja) * 1995-02-15 1996-08-30 Nec Corp 分散トランザクション制御システム
JPH0981437A (ja) * 1995-09-19 1997-03-28 Hitachi Ltd トランザクション処理方法
JP2000020619A (ja) * 1998-06-30 2000-01-21 Oki Electric Ind Co Ltd トランザクション補償システム
WO2004055674A1 (ja) * 2002-12-18 2004-07-01 Fujitsu Limited 分散トランザクション処理装置、分散トランザクション処理プログラム、分散トランザクション処理方法および分散トランザクション処理システム
US20090193280A1 (en) * 2008-01-30 2009-07-30 Michael David Brooks Method and System for In-doubt Resolution in Transaction Processing

Also Published As

Publication number Publication date
JP6311359B2 (ja) 2018-04-18
US20150254098A1 (en) 2015-09-10

Similar Documents

Publication Publication Date Title
KR102121159B1 (ko) 이벤트-구동 블록체인 워크플로우 프로세싱
CN107885758B (zh) 一种虚拟节点的数据迁移方法和虚拟节点
WO2020155832A1 (zh) 跨链用权系统及方法、装置、电子设备、存储介质
JP5088734B2 (ja) 耐障害性トランザクション処理システム及び処理方法
US20230025016A1 (en) Systems and Methods for Facilitation Communications Among Customer Relationship Management Users
CN106462631A (zh) 在最终一致系统中分区数据的一致视图
JP2017524190A (ja) データベース障害時のデータ記憶
US8719313B2 (en) Distributed data store with a designated master to ensure consistency
JP6311359B2 (ja) トランザクション処理装置、トランザクション処理プログラム及び分散処理システム
JP2016212551A (ja) ストレージ制御装置、ストレージ制御プログラム、およびストレージシステム
CN109271367A (zh) 分布式文件系统多节点快照回滚方法及系统
US11157456B2 (en) Replication of data in a distributed file system using an arbiter
CN110555317A (zh) 一种应用文件更改处理方法、装置及系统
US10169441B2 (en) Synchronous data replication in a content management system
CN108984779A (zh) 分布式文件系统快照回滚元数据处理方法、装置及设备
CN110196788A (zh) 一种数据读取方法、装置、系统及存储介质
CN104850548B (zh) 一种实现大数据平台输入/输出处理的方法及系统
KR20150010242A (ko) 비대칭 파일 시스템의 데이터 복제 방법
JP7008051B2 (ja) 生存確認システム、方法、およびコンピュータプログラム
Molina-Jiménez et al. The benefits of deploying smart contracts on trusted third parties
US20220035772A1 (en) System and method for mirroring a file system journal
Kumar et al. Calibre: A better consistency-latency tradeoff for quorum based replication systems
US20170161190A1 (en) Recovery point objective via dynamic usage of bind segments in a global mirror environment
CN110505277A (zh) 一种数据缓存方法、装置及客户端
JP6172294B2 (ja) トランザクション分散処理装置、方法、システム、および、記憶媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161102

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170814

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170829

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171026

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171205

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180202

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180305

R150 Certificate of patent or registration of utility model

Ref document number: 6311359

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150