(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-06-26
(45)【発行日】2025-07-04
(54)【発明の名称】計算機システム及び分散トランザクションの制御方法
(51)【国際特許分類】
G06F 11/14 20060101AFI20250627BHJP
G06F 9/52 20060101ALI20250627BHJP
【FI】
G06F11/14 607
G06F11/14 674
G06F9/52 150Z
(21)【出願番号】P 2023154171
(22)【出願日】2023-09-21
【審査請求日】2024-02-19
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】山本 展之
(72)【発明者】
【氏名】西谷 淳平
(72)【発明者】
【氏名】馬庭 尚志
【審査官】坂東 博司
(56)【参考文献】
【文献】特表2015-514247(JP,A)
【文献】米国特許第09830223(US,B1)
【文献】米国特許出願公開第2011/0246822(US,A1)
【文献】国際公開第2007/113550(WO,A1)
【文献】Ge-Ming Chiu et al.,Efficient Rollback-Recovery Technique in Distributed Computing Systems,IEEE Transactions on Parallel and Distributed systems, VOL.7, NO.6,VOL.7, NO.6,米国,IEEE,1996年06月,pp.565-577,[online],[令和7年1月6日検索],インターネット <URL:https://ieeexplore.ieee.org/abstract/document/506695>,DOI:10.1109/71.506695
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/14
G06F 9/52
(57)【特許請求の範囲】
【請求項1】
分散トランザクションを実行するアプリケーションを実現するサービスを実行する複数のサービス実行システムから構成される計算機システムであって、
前記複数のサービス実行システムの各々は、障害発生時に前記サービスを再起動させることができ、
前記複数のサービス実行システムは、分散トランザクションの実行中に、いずれかの前記サービス実行システムにおける前記サービスの再起動に伴う前記分散トランザクションのロールバックの要否を判定するための判定情報を生成し、他の前記サービス実行システムに送信する前記サービス実行システムと、前記判定情報を用いて、前記分散トランザクションのロールバックが必要であるか否かを判定する前記サービス実行システムと、を含み、
前記サービスの実行を指示する呼出リクエストを受信した前記サービス実行システムは、
前記サービスを実行した後、前記サービス実行システムの呼出状態を示す呼出フラグを前記判定情報として生成し、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムは、
前記分散トランザクションに関わる前記サービスを実行する前記サービス実行システムから前記呼出フラグを取得して、保存し、
前記分散トランザクションに関わる前記サービスを実行する前記サービス実行システム毎に、初めて前記呼出リクエストを受信したことを示す前記呼出フラグが二つ以上存在するか否かを判定し、
初めて前記呼出リクエストを受信したことを示す前記呼出フラグが二つ以上存在する前記サービス実行システムが少なくとも一つ存在する場合、前記分散トランザクションのロールバックが必要であると判定することを特徴とする計算機システム。
【請求項2】
請求項1に記載の計算機システムであって、
前記呼出リクエストを受信した前記サービス実行システムは、
初めて前記呼出リクエストを受信した場合、初回の呼出であることを示す前記呼出フラグを前記判定情報として生成し、
2回目以降の前記呼出リクエストを受信した場合、2回目以降の呼出であることを示す前記呼出フラグを前記判定情報として生成することを特徴とする計算機システム。
【請求項3】
分散トランザクションを実行するアプリケーションを実現するサービスを実行する複数のサービス実行システムから構成される計算機システムであって、
前記複数のサービス実行システムは、分散トランザクションの実行中に、いずれかの前記サービス実行システムにおける前記サービスの再起動に伴う前記分散トランザクションのロールバックの要否を判定するための判定情報を生成し、他の前記サービス実行システムに送信する前記サービス実行システムと、前記判定情報を用いて、前記分散トランザクションのロールバックが必要であるか否かを判定する前記サービス実行システムと、を含み、
前記複数のサービス実行システムの各々は、
起動時に前記サービスの起動回数を設定し、
障害発生時に前記サービスを再起動させることができ、
前記サービスの実行を指示する呼出リクエストを受信した前記サービス実行システムは、前記サービスを実行した後、前記サービスの起動回数を前記判定情報として生成し、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムは、
前記分散トランザクションに関わる前記サービスを実行する前記サービス実行システムから前記サービスの起動回数を取得して、保存し、
前記分散トランザクションに関わる前記サービスを実行する前記サービス実行システム毎に、前回受信した前記サービスの起動回数と、今回受信した前記サービスの起動回数とが一致するか否かを判定し、
前回受信した前記サービスの起動回数と、今回受信した前記サービスの起動回数とが一致しない前記サービス実行システムが少なくとも一つ存在する場合、前記分散トランザクションのロールバックが必要であると判定することを特徴とする計算機システム。
【請求項4】
請求項3に記載の計算機システムであって、
前記サービス実行システムは、前記サービスを実行する複数のインスタンスを含み、
前記呼出リクエストを受信した前記サービス実行システムは、前記サービスの起動回数及び前記インスタンスの識別情報を前記判定情報として生成し、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムは、
前記分散トランザクションに関わる前記サービスを実行する前記サービス実行システム毎に、前回受信した前記サービスの起動回数及び前記インスタンスの識別情報の組みと、今回受信した前記サービスの起動回数及び前記インスタンスの識別情報の組みとが一致するか否かを判定し、
前回受信した前記サービスの起動回数及び前記インスタンスの識別情報の組みと、今回受信した前記サービスの起動回数及び前記インスタンスの識別情報の組みとが一致しない前記サービス実行システムが少なくとも一つ存在する場合、前記分散トランザクションのロールバックが必要であると判定することを特徴とする計算機システム。
【請求項5】
分散トランザクションを実行するアプリケーションを実現するサービスを実行する複数のサービス実行システムから構成される計算機システムであって、
前記複数のサービス実行システムの各々は、障害発生時に前記サービスを再起動させることができ、
前記複数のサービス実行システムは、分散トランザクションの実行中に、いずれかの前記サービス実行システムにおける前記サービスの再起動に伴う前記分散トランザクションのロールバックの要否を判定するための判定情報を生成し、他の前記サービス実行システムに送信する前記サービス実行システムと、前記判定情報を用いて、前記分散トランザクションのロールバックが必要であるか否かを判定する前記サービス実行システムと、を含み、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムは、
他の前記サービス実行システムの呼出状態を示す呼出フラグを前記判定情報として生成し、
他の前記サービス実行システムに、前記判定情報と共に、前記サービスの実行を指示する呼出リクエストを送信し、
他の前記サービス実行システムから前記呼出リクエストに対する応答を受信した場合、前記呼出フラグを更新し、
前記呼出リクエストを受信した前記サービス実行システムは、
前記呼出フラグが記録されていない場合、受信した前記呼出フラグが初めてサービスの呼出を行うことを示す前記呼出フラグであるか否かを判定し、受信した前記呼出フラグが初めてサービスの呼出を行うことを示す前記呼出フラグでない場合、前記分散トランザクションのロールバックが必要であると判定し、
前記呼出フラグが記録されている場合、前回受信した前記呼出フラグと、今回受信した前記呼出フラグとが一致するか否かを判定し、前回受信した前記呼出フラグと、今回受信した前記呼出フラグとが一致しない場合、前記分散トランザクションのロールバックが必要であると判定し、
前記分散トランザクションのロールバックが必要でない場合、受信した前記呼出フラグを記録することを特徴とする計算機システム。
【請求項6】
分散トランザクションを実行するアプリケーションを実現するサービスを実行する複数のサービス実行システムから構成される計算機システムであって、
前記複数のサービス実行システムの各々は、障害発生時に前記サービスを再起動させることができ、
前記複数のサービス実行システムは、分散トランザクションの実行中に、いずれかの前記サービス実行システムにおける前記サービスの再起動に伴う前記分散トランザクションのロールバックの要否を判定するための判定情報を生成し、他の前記サービス実行システムに送信する前記サービス実行システムと、前記判定情報を用いて、前記分散トランザクションのロールバックが必要であるか否かを判定する前記サービス実行システムと、を含み、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムは、
呼出先の前記サービス実行システムの呼出状態を示す呼出フラグと、呼出先の前記サービス実行システムが実行する前記サービスの識別情報を登録したリストと、を前記判定情報として生成し、
他の前記サービス実行システムに、前記判定情報と共に、前記サービスの実行を指示する呼出リクエストを送信し、
前記サービス実行システムは、
前記呼出リクエストを受信した場合、
前記リストを記録する処理と、
前記呼出フラグが記録されていない場合、受信した前記呼出フラグが初めてサービスの呼出を行うことを示す前記呼出フラグであるか否かを判定し、受信した前記呼出フラグが初めてサービスの呼出を行うことを示す前記呼出フラグでない場合、前記分散トランザクションのロールバックが必要であると判定し、前記呼出フラグが記録されている場合、前回受信した前記呼出フラグと、今回受信した前記呼出フラグとが一致するか否かを判定し、前回受信した前記呼出フラグと、今回受信した前記呼出フラグとが一致しない場合、前記分散トランザクションのロールバックが必要であると判定する処理と、
前記分散トランザクションのロールバックが必要でない場合、受信した前記呼出フラグを記録する処理と、
前記サービスを実行する処理と、を実行し、
前記サービスを実行した後、新たに前記呼出リクエストを送信する場合、
受信した前記呼出リクエストとともに受信した前記判定情報に含まれる前記リストに、呼出先の前記サービス実行システムの識別情報が含まれるか否かを判定する処理と、
前記リストに呼出先の前記サービス実行システムの識別情報が含まれる場合、呼出が行われたことがあることを示す前記呼出フラグを設定し、当該呼出フラグ及び受信した前記リストから構成される前記判定情報とともに、前記呼出リクエストを送信し、前記リストに呼出先の前記サービス実行システムの識別情報が含まれない場合、呼出先の前記サービス実行システムが実行する前記サービスの識別情報を、記憶した前記リストに登録し、受信した前記呼出フラグ及び前記リストから構成される前記判定情報とともに、前記呼出リクエストを送信する処理と、を実行することを特徴とする計算機システム。
【請求項7】
分散トランザクションを実行するアプリケーションを実現するサービスを実行する複数のサービス実行システムから構成される計算機システムであって、
前記複数のサービス実行システムの各々は、障害発生時に前記サービスを再起動させることができ、
前記複数のサービス実行システムは、分散トランザクションの実行中に、いずれかの前記サービス実行システムにおける前記サービスの再起動に伴う前記分散トランザクションのロールバックの要否を判定するための判定情報を生成し、他の前記サービス実行システムに送信する前記サービス実行システムと、前記判定情報を用いて、前記分散トランザクションのロールバックが必要であるか否かを判定する前記サービス実行システムと、を含み、
前記サービス実行システムは、前記サービスを実行する複数のインスタンスを含み、
前記計算機システムは、前記分散トランザクションの開始及び前記サービスの起動をイベントの発生として検知し、イベントの発生を検知した場合、世代番号を設定して前記イベントの発生元となる前記サービス実行システムに送信する世代管理装置を含み、
前記サービス実行システムは、起動時に、前記世代管理装置から取得した前記世代番号を前記インスタンスの世代として設定し、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムは、前記分散トランザクションの開始時に、前記世代管理装置から取得した前記世代番号を前記分散トランザクションの世代として設定し、当該分散トランザクションの世代を前記判定情報として生成し、
他の前記サービス実行システムに、前記判定情報と共に、前記サービスの実行を指示する呼出リクエストを送信し、
前記呼出リクエストを受信した前記サービス実行システムは、前記インスタンスの世代及び前記分散トランザクションの世代の比較処理に基づいて、前記分散トランザクションのロールバックが必要であるか否かを判定することを特徴とする計算機システム。
【請求項8】
請求項7に記載の計算機システムであって、
前記サービス実行システムは、前記サービスを実行する複数のインスタンスを含み、
前記分散トランザクションの識別子と、呼び出す前記インスタンスの識別情報とを対応づけた経路情報に基づいて、前記分散トランザクションにおける前記サービスの呼出を制御する負荷分散部を備え、
前記負荷分散部は、
前記経路情報と、前記分散トランザクションの世代とを対応づけて管理し、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムから前記呼出リクエストを受信した場合、前記呼出リクエストに含まれる前記分散トランザクションの世代と、最新の前記経路情報とを対応づけて記録し、
前記呼出リクエストに含まれる前記分散トランザクションの世代に対応づけられる前記経路情報を用いて、前記呼出リクエストの転送を制御することを特徴とする計算機システム。
【請求項9】
分散トランザクションを実行するアプリケーションを実現するサービスを実行する複数のサービス実行システムから構成される計算機システムの分散トランザクションの制御方法であって、
前記複数のサービス実行システムの各々は、障害発生時に前記サービスを再起動させることができ、
前記複数のサービス実行システムは、分散トランザクションの実行中に、いずれかの前記サービス実行システムにおける前記サービスの再起動に伴う前記分散トランザクションのロールバックの要否を判定するための判定情報を生成し、他の前記サービス実行システムに送信する前記サービス実行システムと、前記判定情報を用いて、前記分散トランザクションのロールバックが必要であるか否かを判定する前記サービス実行システムと、を含み、
前記分散トランザクションの制御方法は、
前記サービスの実行を指示する呼出リクエストを受信した前記サービス実行システムが、前記サービスを実行した後、前記サービス実行システムの呼出状態を示す呼出フラグを前記判定情報として生成するステップと、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムが、前記分散トランザクションに関わる前記サービスを実行する前記サービス実行システムから前記呼出フラグを取得して、保存するステップと、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムが、前記分散トランザクションに関わる前記サービスを実行する前記サービス実行システム毎に、初めて前記呼出リクエストを受信したことを示す前記呼出フラグが二つ以上存在するか否かを判定するステップと、
初めて前記呼出リクエストを受信したことを示す前記呼出フラグが二つ以上存在する前記サービス実行システムが少なくとも一つ存在する場合、前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムが、前記分散トランザクションのロールバックが必要であると判定するステップと、
を含むことを特徴とする分散トランザクションの制御方法。
【請求項10】
分散トランザクションを実行するアプリケーションを実現するサービスを実行する複数のサービス実行システムから構成される計算機システムの分散トランザクションの制御方法であって、
前記複数のサービス実行システムの各々は、障害発生時に前記サービスを再起動させることができ、
前記複数のサービス実行システムは、分散トランザクションの実行中に、いずれかの前記サービス実行システムにおける前記サービスの再起動に伴う前記分散トランザクションのロールバックの要否を判定するための判定情報を生成し、他の前記サービス実行システムに送信する前記サービス実行システムと、前記判定情報を用いて、前記分散トランザクションのロールバックが必要であるか否かを判定する前記サービス実行システムと、を含み、
前記分散トランザクションの制御方法は、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムが、他の前記サービス実行システムの呼出状態を示す呼出フラグを前記判定情報として生成するステップと、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムが、他の前記サービス実行システムに、前記判定情報と共に、前記サービスの実行を指示する呼出リクエストを送信するステップと、
前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムが、他の前記サービス実行システムから前記呼出リクエストに対する応答を受信した場合、前記呼出フラグを更新するステップと、
前記呼出リクエストを受信した前記サービス実行システムが、前記呼出フラグが記録されていない場合、受信した前記呼出フラグが初めてサービスの呼出を行うことを示す前記呼出フラグであるか否かを判定し、受信した前記呼出フラグが初めてサービスの呼出を行うことを示す前記呼出フラグでない場合、前記分散トランザクションのロールバックが必要であると判定するステップと、
前記呼出リクエストを受信した前記サービス実行システムが、前記呼出フラグが記録されている場合、前回受信した前記呼出フラグと、今回受信した前記呼出フラグとが一致するか否かを判定し、前回受信した前記呼出フラグと、今回受信した前記呼出フラグとが一致しない場合、前記分散トランザクションのロールバックが必要であると判定するステップと、
前記呼出リクエストを受信した前記サービス実行システムが、前記分散トランザクションのロールバックが必要でない場合、受信した前記呼出フラグを記録するステップと、
を含むことを特徴とする分散トランザクションの制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、分散トランザクションを実行するアプリケーションにおけるデータの不整合の発生可能性を検知する技術に関する。
【背景技術】
【0002】
近年、複数のサービスを連結させて一つのアプリケーションを実現するマイクロサービスの利用が広まっている。マイクロサービスでは、分散トランザクションによるデータの整合性の維持が難しいことが知られている。これに対して、TCCパターン及びSagaパターンが知られている。
【0003】
サービスが再起動した場合、当該サービスに関わるトランザクションの情報が失われる。そのため、従来技術では対応することが難しい。これに対して、特許文献1に記載の技術が知られている。
【0004】
特許文献1には、「データベースへのトランザクションログのインライン委譲に基づいたトランザクションリカバリをサポートするためのシステムおよび方法が提供される。このシステムは、あるトランザクションのトランザクションリカバリ情報を、永続性記憶装置から取得することができる。準備フェーズ中、トランザクションリカバリ情報は、永続性記憶装置に関連付けられたリソースマネージャにおいて持続させる。さらに、このトランザクションの、1つ以上の参加リソースマネージャから、システムは、1つ以上のインダウトトランザクションを取得することができる。次に、システムは、上記1つ以上のインダウトトランザクションを上記トランザクションリカバリ情報と突き合わせることによって、上記1つ以上のインダウトトランザクションをコミットするかまたはロールバックするかを判断することができる。」ことが記載されている。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1では、トランザクションリカバリ情報を保存する必要があり、リソースマネージャに障害が発生した場合当該情報が失われる可能性がある。本発明は、分散トランザクションを実行するアプリケーションにおいて、サービスの再起動に伴うデータの不整合の発生可能性を検知する技術を提供する。
【課題を解決するための手段】
【0007】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、分散トランザクションを実行するアプリケーションを実現するサービスを実行する複数のサービス実行システムから構成される計算機システムであって、前記複数のサービス実行システムの各々は、障害発生時に前記サービスを再起動させることができ、前記複数のサービス実行システムは、分散トランザクションの実行中に、いずれかの前記サービス実行システムにおける前記サービスの再起動に伴う前記分散トランザクションのロールバックの要否を判定するための判定情報を生成し、他の前記サービス実行システムに送信する前記サービス実行システムと、前記判定情報を用いて、前記分散トランザクションのロールバックが必要であるか否かを判定する前記サービス実行システムと、を含み、前記サービスの実行を指示する呼出リクエストを受信した前記サービス実行システムは、前記サービスを実行した後、前記サービス実行システムの呼出状態を示す呼出フラグを前記判定情報として生成し、前記分散トランザクションの起点となる前記サービスを実行する前記サービス実行システムは、前記分散トランザクションに関わる前記サービスを実行する前記サービス実行システムから前記呼出フラグを取得して、保存し、前記分散トランザクションに関わる前記サービスを実行する前記サービス実行システム毎に、初めて前記呼出リクエストを受信したことを示す前記呼出フラグが二つ以上存在するか否かを判定し、初めて前記呼出リクエストを受信したことを示す前記呼出フラグが二つ以上存在する前記サービス実行システムが少なくとも一つ存在する場合、前記分散トランザクションのロールバックが必要であると判定する。
【発明の効果】
【0008】
本発明によれば、分散トランザクションを実行するアプリケーションにおいて、サービスの再起動に伴うデータの不整合の発生可能性を検知できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【0009】
【
図1】実施例1のシステムの構成の一例を示す図である。
【
図2】実施例1のサービス実行システムを構成する計算機のハードウェア構成の一例を示す図である。
【
図3】実施例1のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【
図4】実施例1のサービス実行システムが保持する呼出状態管理情報の一例を示す図である。
【
図5】実施例1のサービス実行システムが実行する処理の一例を説明するフローチャートである。
【
図6】実施例1のサービス実行システムが実行する判定処理の一例を説明するフローチャートである。
【
図7】実施例2のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【
図8】実施例2のサービス実行システムが保持する呼出状態管理情報の一例を示す図である。
【
図9】実施例2のサービス実行システムが実行する処理の一例を説明するフローチャートである。
【
図10】実施例2のサービス実行システムが実行する判定処理の一例を説明するフローチャートである。
【
図11】実施例3のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【
図12】実施例3のサービス実行システムが実行する判定処理の一例を説明するフローチャートである。
【
図13】実施例4のシステムの構成の一例を示す図である。
【
図14】実施例4の世代管理装置が実行する処理の一例を説明するフローチャートである。
【
図15】実施例4のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【
図16】実施例4のサービス実行システムが実行する判定処理の一例を説明するフローチャートである。
【
図17】実施例5のシステムの構成の一例を示す図である。
【
図18A】実施例5のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【
図18B】実施例5のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【
図19A】実施例5の経路管理情報の一例を示す図である。
【
図19B】実施例5の経路管理情報の一例を示す図である。
【
図19C】実施例5の経路管理情報の一例を示す図である。
【
図19D】実施例5の経路管理情報の一例を示す図である。
【
図20】実施例5の負荷分散装置が実行する経路管理情報更新処理の一例を説明するフローチャートである。
【
図21A】実施例6のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【
図21B】実施例6のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【
図22A】実施例6の経路管理情報の一例を示す図である。
【
図22B】実施例6の経路管理情報の一例を示す図である。
【
図23】実施例7の分散トランザクションの一例を示す図である。
【
図24A】実施例7のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【
図24B】実施例7のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【
図25】実施例7のサービス実行システムが実行する呼出処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【0010】
以下、本発明の実施例を、図面を用いて説明する。ただし、本発明は以下に示す実施例の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【0011】
以下に説明する発明の構成において、同一又は類似する構成又は機能には同一の符号を付し、重複する説明は省略する。
【0012】
本明細書等における「第1」、「第2」、「第3」等の表記は、構成要素を識別するために付するものであり、必ずしも、数又は順序を限定するものではない。
【実施例1】
【0013】
図1は、実施例1のシステムの構成の一例を示す図である。
図2は、実施例1のサービス実行システム100を構成する計算機のハードウェア構成の一例を示す図である。
【0014】
システムは、複数のサービス実行システム100から構成される。各サービス実行システム100は、LAN(Local Area Network)及びWAN(Wide Area Network)等のネットワークを介して互いに接続される。
【0015】
サービス実行システム100は、アプリケーションを構成するサービスを実行するシステムであり、例えば、
図2に示すような計算機200から構成される。計算機200は、プロセッサ201、主記憶装置202、副記憶装置203、及びネットワークインタフェース204を有する。サービス実行システム100は、サービスインスタンス110、送受信部111、トランザクション制御部112、判定部113、及び判定情報記憶部114を有する。サービス実行システム100は、図示しないデータベースと接続する。
【0016】
サービスインスタンス110は、サービスを実行する実体である。サービス実行システム100の負荷分散のために複数のサービスインスタンス110が稼働する。実施例1では、サービスインスタンス110の数は固定されているものとする。
【0017】
送受信部111は、リクエストの受信及び処理結果の送信等を制御する。トランザクション制御部112は、分散トランザクションを構成するローカルトランザクションを制御する。判定部113は、分散トランザクションにおけるデータの不整合の発生可能性を検知する。判定情報記憶部114は、判定部113が用いる情報を記憶する。
【0018】
図3は、実施例1のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【0019】
サービスAを実行するサービス実行システム100-1は、分散トランザクションの開始に伴ってサービスBを実行するサービス実行システム100-2に呼出リクエストを送信する(ステップS101)。呼出リクエストには、分散トランザクションの識別情報及びサービスの識別情報(サービスB)が含まれる。
【0020】
なお、呼出リクエストは、送受信部111によって任意のサービスインスタンス110宛てに送信されるように制御される。これは、分散トランザクションにおいて同一サービスを複数呼び出す場合、処理の整合性を保つために同一のサービスインスタンス110が処理する必要があるためである。同一のサービスインスタンス110を呼び出す仕組みをアフィニティと呼ぶ。
【0021】
同一のサービスインスタンス110を呼び出す方法としては、例えば、分散トランザクションの識別子と呼び出すサービスインスタンス110の識別情報とを対応づけた経路情報を用いる方法と、ハッシュ値計算を用いる方法とがある。
【0022】
サービス実行システム100-2は、サービスを実行した後、サービス実行システム100-1に応答及び判定情報を送信する(ステップS102)。
【0023】
実施例1では、サービスの呼出状態を示す呼出フラグ、サービスの識別情報、及び分散トランザクションの識別情報が判定情報として送信される。初めて呼出リクエストを受信した場合、呼出フラグ「初回」が送信され、2回目以降の呼出リクエストの場合、呼出フラグ「継続」が送信される。
【0024】
サービス実行システム100-1は、応答及び判定情報を受信した場合、サービス実行システム100-2の再起動に伴う分散トランザクションのロールバックが必要か否かを判定するための判定処理を実行する(ステップS103)。判定処理の詳細は後述する。ここでは、ロールバックは必要ないと判定される。
【0025】
サービス実行システム100-1は、同一分散トランザクションにおいて、サービス実行システム100-2に呼出リクエストを送信する(ステップS104)。
【0026】
サービス実行システム100-2は、サービスを実行した後、サービス実行システム100-1に応答及び判定情報を送信する(ステップS105)。ここでは、呼出フラグ「継続」が送信される。
【0027】
サービス実行システム100-1は、応答及び判定情報を受信した場合、判定処理を実行する(ステップS106)。ここでは、ロールバックは必要ないと判定される。
【0028】
サービス実行システム100-2は、障害が発生し、再起動した後、サービス実行システム100-1から同一の分散トランザクションにおける呼出リクエストを受信する(ステップS107)。この場合、サービス実行システム100-2は、サービスを実行した後、サービス実行システム100-1に応答及び判定情報を送信する(ステップS108)。サービス実行システム100-2は、再起動しているため、初めて呼出リクエストを受信したものと判定する。そのため、サービス実行システム100-2は、呼出フラグ「初回」を送信する。
【0029】
サービス実行システム100-1は、応答及び判定情報を受信した場合、判定処理を実行する(ステップS109)。ここでは、ロールバックが必要であると判定される。
【0030】
なお、3つ以上のサービスが呼び出される分散トランザクションの場合、起点となるサービス実行システム100に、各サービス実行システム100が送信した判定情報が転送されるようにする。具体的には、各サービス実行システム100の判定情報記憶部114は他のサービス実行システム100から受信した判定情報を記録し、サービスの実行後、送受信部111が当該サービス実行システム100の判定情報と、判定情報記憶部114が記録した判定情報とを送信する。そして、起点となるサービス実行システム100が、各サービス実行システム100について判定処理を実行する。
【0031】
図4は、実施例1のサービス実行システム100-1が保持する呼出状態管理情報400の一例を示す図である。
【0032】
呼出状態管理情報400は、トランザクションID401、サービスID402、及び呼出フラグ403を含むエントリを格納する。一つのエントリは一つの判定情報に対応する。
【0033】
トランザクションID401は、分散トランザクションの識別情報を格納するフィールドである。サービスID402は、判定情報を送信したサービス実行システム100が実行するサービスの識別情報を格納するフィールドである。呼出フラグ403は、呼出フラグを格納するフィールドである。
【0034】
送受信部111は、判定情報を受信した場合、判定情報記憶部114に判定情報を転送する。判定情報記憶部114は、呼出状態管理情報400に判定情報に対応するエントリを登録する。
【0035】
なお、サービス実行システム100-1の起動時又は再起動時に、判定情報記憶部114は呼出状態管理情報400を初期化する。
【0036】
図5は、実施例1のサービス実行システム100-2が実行する処理の一例を説明するフローチャートである。
【0037】
サービス実行システム100-2の送受信部111は、呼出リクエストを監視する(ステップS201)。
【0038】
呼出リクエストを受信した場合、送受信部111は、サービスインスタンス110に呼出リクエストを転送する(ステップS202)。このとき、送受信部111は、分散トランザクションの識別情報及びサービスの識別情報を判定部113に転送する。
【0039】
判定部113は、判定情報記憶部114に、分散トランザクションの識別情報及びサービスの識別情報の組みが登録されているか否かを判定する(ステップS203)。
【0040】
分散トランザクションの識別情報及びサービスの識別情報の組みが登録されている場合、判定部113は、呼出フラグ「継続」を送受信部111に出力する(ステップS204)。
【0041】
送受信部111は、サービスインスタンス110から処理完了を受け付けた場合、応答及び判定情報をサービス実行システム100-1に送信する(ステップS205)。判定情報には呼出フラグ「継続」が含まれる。その後、送受信部111は、呼出リクエストの監視を継続する。
【0042】
分散トランザクションの識別情報及びサービスの識別情報の組みが登録されていない場合、判定部113は、呼出フラグ「初回」を送受信部111に出力する(ステップS206)。このとき、判定部113は、判定情報記憶部114に、分散トランザクションの識別情報及びサービスの識別情報の組みを送信する。
【0043】
送受信部111は、サービスインスタンス110から処理完了を受け付けた場合、応答及び判定情報をサービス実行システム100-1に送信する(ステップS207)。判定情報には呼出フラグ「初回」が含まれる。その後、送受信部111は、呼出リクエストの監視を継続する。
【0044】
図6は、実施例1のサービス実行システム100-1が実行する判定処理の一例を説明するフローチャートである。
【0045】
送受信部111は、応答を受信した場合、判定部113に判定処理の実行を指示する。まず、判定部113は、呼出状態管理情報400を参照し、判定情報に含まれる分散トランザクションの識別情報及びサービスの識別情報と一致し、かつ、呼出フラグ403が「初回」であるエントリの数を計数する(ステップS301)。
【0046】
判定部113は、エントリの数が「1」であるか否かを判定する(ステップS302)。
【0047】
エントリの数が「1」である場合、判定部113は判定処理を終了する。エントリの数が「1」より大きい場合、判定部113は、分散トランザクションのロールバックが必要と判定し、ロールバックを開始する(ステップS303)。その後、判定部113は判定処理を終了する。なお、分散トランザクションのロールバックは、判定部113が実行してもよいし、トランザクション制御部112が実行してもよい。
【0048】
実施例1によれば、サービスの再起動に伴う、分散トランザクションを実行するアプリケーションにおけるデータの不整合の発生可能性を検知できる。再起動したサービスの情報が失われた場合でもデータの不整合の発生可能性を検知することができる。
【実施例2】
【0049】
実施例2では、判定情報に含めるデータ及び判定処理の内容が実施例1と異なる。以下、実施例1との差異を中心に実施例2について説明する。
【0050】
実施例2のシステムの構成は実施例1と同一である。実施例2では、判定情報に含めるデータが異なる。
【0051】
図7は、実施例2のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【0052】
サービス実行システム100-1は、分散トランザクションの開始に伴ってサービス実行システム100-2に呼出リクエストを送信する(ステップS401)。呼出リクエストには、分散トランザクションの識別情報及びサービスの識別情報(サービスA)が含まれる。
【0053】
サービス実行システム100-2は、サービスを実行した後、サービス実行システム100-1に応答及び判定情報を送信する(ステップS402)。
【0054】
実施例2では、サービスの起動回数、サービスの識別情報、サービスを実行したサービスインスタンス110の識別情報、及び分散トランザクションの識別情報が判定情報として送信される。
【0055】
サービス実行システム100-1は、応答及び判定情報を受信した場合、分散トランザクションのロールバックが必要か否かを判定するための判定処理を実行する(ステップS403)。判定処理の詳細は後述する。ここでは、ロールバックは必要ないと判定される。
【0056】
サービス実行システム100-2は、障害が発生し、再起動した後、サービス実行システム100-1から同一の分散トランザクションにおける呼出リクエストを受信する(ステップS404)。この場合、サービス実行システム100-2は、サービスを実行した後、サービス実行システム100-1に応答及び判定情報を送信する(ステップS405)。起動回数は前回の値に1を加算した値となる。
【0057】
サービス実行システム100-1は、応答及び判定情報を受信した場合、判定処理を実行する(ステップS406)。ここでは、ロールバックが必要であると判定される。
【0058】
なお、3つ以上のサービスが呼び出される分散トランザクションの場合、起点となるサービス実行システム100に、各サービス実行システム100が送信した判定情報が転送されるようにする。具体的には、各サービス実行システム100の判定情報記憶部114は他のサービス実行システム100から受信した判定情報を記録し、サービスの実行後、送受信部111が当該サービス実行システム100の判定情報と、判定情報記憶部114が記録した判定情報とを送信する。そして、起点となるサービス実行システム100が、各サービス実行システム100について判定処理を実行する。
【0059】
図8は、実施例2のサービス実行システム100-1が保持する呼出状態管理情報800の一例を示す図である。
【0060】
呼出状態管理情報800は、トランザクションID801、サービスID802、インスタンスID803、及び起動回数804を含むエントリを格納する。一つのエントリは一つの判定情報に対応する。
【0061】
トランザクションID801及びサービスID802は、トランザクションID401及びサービスID402と同一のフィールドである。
【0062】
インスタンスID803は、サービスインスタンス110の識別情報を格納するフィールドである。起動回数804は、サービスの起動回数を格納するフィールドである。
【0063】
送受信部111は、判定情報を受信した場合、判定情報記憶部114に判定情報を転送する。判定情報記憶部114は、呼出状態管理情報800に判定情報に対応するエントリを登録する。
【0064】
なお、サービス実行システム100-1の起動時又は再起動時に、判定情報記憶部114は呼出状態管理情報800を初期化する。
【0065】
図9は、実施例2のサービス実行システム100-2が実行する処理の一例を説明するフローチャートである。
【0066】
サービス実行システム100-2のトランザクション制御部112は、起動回数をカウントアップし、不揮発性記憶装置に記録する(ステップS501)。
【0067】
サービス実行システム100-2の送受信部111は、呼出リクエストを監視する(ステップS502)。
【0068】
呼出リクエストを受信した場合、送受信部111は、サービスインスタンス110に呼出リクエストを転送する(ステップS503)。
【0069】
送受信部111は、サービスインスタンス110から処理完了を受け付けた場合、応答及び判定情報をサービス実行システム100-1に送信する(ステップS504)。判定情報にはサービスの起動回数、サービスの識別情報、サービスを実行したサービスインスタンス110の識別情報、及び分散トランザクションの識別情報が含まれる。その後、送受信部111は、呼出リクエストの監視を継続する。
【0070】
図10は、実施例2のサービス実行システム100-1が実行する判定処理の一例を説明するフローチャートである。
【0071】
送受信部111は、応答を受信した場合、判定部113に判定処理の実行を指示する。まず、判定部113は、呼出状態管理情報800を参照し、判定情報に含まれる分散トランザクションの識別情報及びサービスの識別情報が一致するエントリを検索する(ステップS601)。
【0072】
判定部113は、全てのエントリの起動回数及びサービスインスタンス110の組みが同一であるか否かを判定する(ステップS602)。
【0073】
全てのエントリの起動回数及びサービスインスタンス110の組みが同一で場合、判定部113は判定処理を終了する。
【0074】
起動回数及びサービスインスタンス110の組み異なるエントリが少なくとも一つ存在する場合、判定部113は、分散トランザクションのロールバックが必要と判定し、ロールバックを開始する(ステップS603)。その後、判定部113は判定処理を終了する。なお、分散トランザクションのロールバックは、判定部113が実行してもよいし、トランザクション制御部112が実行してもよい。
【0075】
実施例2によれば、サービスの再起動及び分散トランザクション内の異なるサービスインスタンス110の呼出のいずれかに伴うデータの不整合の発生可能性を検知できる。
【0076】
なお、判定情報にはサービスインスタンス110の識別情報が含まれていなくてもよい。この場合、サービスの再起動に伴うデータの不整合の発生可能性を検知できる。
【実施例3】
【0077】
実施例3では、呼出リクエストを受信したサービス実行システム100-2が判定処理を実行する。以下、実施例1との差異を中心に実施例3について説明する。
【0078】
実施例3のシステムの構成は実施例1と同一である。
図11は、実施例3のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【0079】
サービス実行システム100-1は、分散トランザクションの開始に伴ってサービス実行システム100-2に呼出リクエスト及び判定情報を送信する(ステップS701)。呼出リクエストには、分散トランザクションの識別情報、及びサービスの識別情報(サービスA)が含まれる。判定情報には、サービスの呼出状態を示す呼出フラグが含まれる。初めて呼出リクエストを送信する場合、呼出フラグ「初回」が送信され、2回目以降の呼出リクエストを送信する場合、呼出フラグ「継続」が送信される。
【0080】
サービス実行システム100-2は、呼出リクエスト及び判定情報を受信した場合、分散トランザクションのロールバックが必要か否かを判定するための判定処理を実行する(ステップS702)。判定処理の詳細は後述する。ここでは、ロールバックは必要ないと判定される。
【0081】
サービス実行システム100-2は、サービスを実行した後、サービス実行システム100-1に応答及び判定情報を送信する(ステップS703)。
【0082】
実施例3では、呼出フラグ、サービスの識別情報、及び分散トランザクションの識別情報が判定情報として送信される。
【0083】
サービス実行システム100-1は、応答及び判定情報を受信した場合、呼出フラグを記録する。
【0084】
サービス実行システム100-1は、同一分散トランザクションにおいて、サービス実行システム100-2に呼出リクエスト及び判定情報を送信する(ステップS704)。サービス実行システム100-1は、サービス実行システム100-2から呼出フラグ「初回」を受信しているため、呼出フラグ「継続」を送信する。
【0085】
サービス実行システム100-2は、呼出リクエスト及び判定情報を受信した場合、判定処理を実行する(ステップS705)。ここでは、ロールバックは必要ないと判定される。
【0086】
サービス実行システム100-2は、サービスを実行した後、サービス実行システム100-1に応答及び判定情報を送信する(ステップS706)。
【0087】
サービス実行システム100-2は、障害が発生し、再起動した後、サービス実行システム100-1から同一の分散トランザクションにおける呼出リクエストと、判定情報とを受信する(ステップS707)。この場合、サービス実行システム100-1は、サービス実行システム100-2から呼出フラグ「初回」を受信しているため、呼出フラグ「継続」を送信する。
【0088】
サービス実行システム100-2は判定処理を実行する(ステップS708)。ここでは、ロールバックが必要であると判定される。
【0089】
なお、3つ以上のサービスが呼び出される分散トランザクションの場合、呼出リクエストを受信するサービス実行システム100の各々が判定処理を実行する。
【0090】
図12は、実施例3のサービス実行システム100-2が実行する判定処理の一例を説明するフローチャートである。
【0091】
送受信部111は、呼出リクエストを受信した場合、判定部113に判定処理の実行を指示する。まず、判定部113は、判定情報記憶部114に、呼出フラグが記録されているか否かを問い合わせる(ステップS801)。
【0092】
呼出フラグが記録されていない場合、判定部113は、受信した呼出フラグが「初回」であるか否かを判定する(ステップS802)。
【0093】
受信した呼出フラグが「初回」ではない場合、判定部113は、分散トランザクションのロールバックが必要と判定し、ロールバックを開始する(ステップS806)。その後、判定部113は判定処理を終了する。なお、分散トランザクションのロールバックは、判定部113が実行してもよいし、トランザクション制御部112が実行してもよい。
【0094】
受信した呼出フラグが「初回」である場合、判定部113は、受信した呼出フラグを記録する(ステップS803)。具体的には、判定部113は、判定情報記憶部114に受信した呼出フラグを転送する。判定部113は、サービスインスタンス110に呼出リクエストを転送し(ステップS804)、その後、判定処理を終了する。
【0095】
呼出フラグが記録されている場合、判定部113は、受信した呼出フラグが「継続」であるか否かを判定する(ステップS805)。
【0096】
受信した呼出フラグが「継続」である場合、判定部113は、受信した呼出フラグを記録する(ステップS803)。判定部113は、サービスインスタンス110に呼出リクエストを転送し(ステップS804)、その後、判定処理を終了する。
【0097】
受信した呼出フラグが「継続」でない場合、判定部113は、分散トランザクションのロールバックが必要と判定し、ロールバックを開始する(ステップS806)。その後、判定部113は判定処理を終了する。
【0098】
実施例3によれば、サービス単位で、サービスの再起動に伴う、分散トランザクションにおけるデータの不整合の発生可能性を検知できる。
【実施例4】
【0099】
実施例4では、呼出リクエストを受信したサービス実行システム100-2が判定処理を実行する。以下、実施例1との差異を中心に実施例4について説明する。
【0100】
図13は、実施例4のシステムの構成の一例を示す図である。実施例4のシステムは、世代管理装置120を含む。なお、いずれかのサービス実行システム100が世代管理装置120の機能を有してもよい。
【0101】
実施例4では、世代管理装置120は、分散トランザクション及びサービスインスタンス110の世代を付与する。
【0102】
図14は、実施例4の世代管理装置120が実行する処理の一例を説明するフローチャートである。
【0103】
世代管理装置120は、起動後、世代番号に初期値「1」を設定し(ステップS901)、イベントの発生を監視する(ステップS902)。例えば、世代管理装置120は、分散トランザクションの開始及びサービスの起動等をイベントの発生として検知する。
【0104】
イベントが発生した場合、世代管理装置120は、世代番号を1インクリメントし(ステップS903)、イベントの発生元に世代番号を通知する(ステップS904)。その後、世代管理装置120は、イベントの発生を監視する。
【0105】
図15は、実施例4のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【0106】
サービス実行システム100-2は、起動時に、世代管理装置120から世代番号「1」を取得し、インスタンス世代として管理する。
【0107】
サービス実行システム100-1は、分散トランザクションの開始に伴ってサービス実行システム100-2に呼出リクエスト及び判定情報を送信する(ステップS1001)。呼出リクエストには、サービスの識別情報(サービスA)が含まれる。判定情報には、トランザクションの世代が含まれる。具体的には、サービス実行システム100-1は、世代管理装置120から世代番号「2」を取得し、トランザクション世代として送信する。
【0108】
サービス実行システム100-2は、呼出リクエスト及び判定情報を受信した場合、分散トランザクションのロールバックが必要か否かを判定するための判定処理を実行する(ステップS1002)。判定処理の詳細は後述する。ここでは、ロールバックは必要ないと判定される。
【0109】
サービス実行システム100-2は、サービスを実行した後、サービス実行システム100-1に応答を送信する(ステップS1003)。
【0110】
サービス実行システム100-2は、障害が発生し、再起動した後、サービス実行システム100-1から同一の分散トランザクションにおける呼出リクエストと、判定情報とを受信する(ステップS1004)。
【0111】
サービス実行システム100-2は、サービスの再起動に伴って、世代管理装置120から世代番号「3」を取得し、インスタンス世代として管理する。また、サービス実行システム100-1は、同一分散トランザクションの呼出リクエストであるため、前回と同一のトランザクション世代を送信する。
【0112】
サービス実行システム100-2は、判定処理を実行する(ステップS1005)。ここでは、ロールバックが必要であると判定される。
【0113】
なお、3つ以上のサービスが呼び出される分散トランザクションの場合、呼出リクエストを受信するサービス実行システム100の各々が判定処理を実行する。
【0114】
図16は、実施例4のサービス実行システム100-2が実行する判定処理の一例を説明するフローチャートである。
【0115】
送受信部111は、応答を受信した場合、判定部113に判定処理の実行を指示する。まず、判定部113は、トランザクション世代がインスタンス世代以上であるか否かを判定する(ステップS1101)。
【0116】
トランザクション世代がインスタンス世代以上である場合、判定部113は、サービスインスタンス110に呼出リクエストを転送し(ステップS1102)、その後、判定処理を終了する。
【0117】
トランザクション世代がインスタンス世代より小さい場合、分散トランザクションのロールバックが必要と判定し、ロールバックを開始する(ステップS1103)。その後、判定部113は判定処理を終了する。なお、分散トランザクションのロールバックは、判定部113が実行してもよいし、トランザクション制御部112が実行してもよい。
【0118】
実施例4によれば、サービス単位で、サービスの再起動に伴う、分散トランザクションにおけるデータの不整合の発生可能性を検知できる。
【実施例5】
【0119】
サービス実行システム100のサービスインスタンス110は、サービスの負荷に応じて数が変わる。分散トランザクションの実行中に、サービスインスタンス110の数が変更された場合、同一のサービスインスタンス110が呼び出されない可能性がある。実施例5のシステムは、ロールバックの要否を判定し、また、同一のサービスインスタンス110を呼び出す。
【0120】
図17は、実施例5のシステムの構成の一例を示す図である。実施例5のシステムは、世代管理装置120及び負荷分散装置130を含む。
【0121】
なお、いずれかのサービス実行システム100が世代管理装置120の機能を有してもよい。なお、いずれかのサービス実行システム100が負荷分散装置130の機能を有してもよい。
【0122】
実施例5の世代管理装置120は、実施例4の世代管理装置120と同一の機能を有する。負荷分散装置130は、経路情報を用いて、各サービスのサービスインスタンス110の呼出を制御する。実施例5の負荷分散装置130は経路管理情報1900を保持する。経路管理情報1900の詳細は後述する。
【0123】
【0124】
まず、
図18Aのシーケンス図について説明する。負荷分散装置130は、経路情報の生成時に、世代管理装置120から世代番号「1」を取得し、経路世代として管理する。このとき、負荷分散装置130は、経路世代1901に世代番号「1」が格納され、かつ、経路情報1903に経路情報が格納されたエントリを含む経路管理情報1900を生成する。サービス実行システム100-2は、起動時に、世代管理装置120から世代番号「2」を取得し、インスタンス世代として管理する。
【0125】
サービス実行システム100-1は、分散トランザクションの開始に伴ってサービス実行システム100-2に呼出リクエスト及び判定情報を送信する(ステップS1201)。呼出リクエストには、サービスの識別情報(サービスA)が含まれる。判定情報には、トランザクションの世代が含まれる。具体的には、サービス実行システム100-1は、世代管理装置120から世代番号「3」を取得し、トランザクション世代として送信する。
【0126】
負荷分散装置130は、呼出リクエスト及び判定情報を受信した場合、経路管理情報更新処理を実行する(ステップS1202)。ここでは、
図19Aに示すような経路管理情報1900が生成される。経路管理情報1900は、経路世代1901、トランザクション世代1902、及び経路情報1903を含むエントリを格納する。
【0127】
負荷分散装置130は、経路世代「1」に対応づけられる経路情報に基づいて、サービス実行システム100-2に、呼出リクエスト及び判定情報を送信する(ステップS1203)。
【0128】
サービス実行システム100-2は、呼出リクエスト及び判定情報を受信した場合、判定処理を実行する(ステップS1204)。実施例5の判定処理は実施例4の判定処理と同一であるため、説明を省略する。
【0129】
サービス実行システム100-1は、新たな分散トランザクションの開始に伴ってサービス実行システム100-2に呼出リクエスト及び判定情報を送信する(ステップS1205)。サービス実行システム100-1は、世代管理装置120から世代番号「4」を取得し、トランザクション世代として送信する。
【0130】
負荷分散装置130は、呼出リクエスト及び判定情報を受信した場合、経路管理情報更新処理を実行する(ステップS1206)。ここでは、
図19Bに示すような経路管理情報1900が更新される。
【0131】
ステップS1207及びステップS1208の処理はステップS1203及びステップS1204の処理と同一である。
【0132】
次に、
図18Bのシーケンス図について説明する。負荷分散装置130は、経路情報の生成時に、世代管理装置120から世代番号「1」を取得し、経路世代として管理する。このとき、負荷分散装置130は、経路世代1901に世代番号「1」が格納され、かつ、経路情報1903に経路情報が格納されたエントリを含む経路管理情報1900を生成する。サービス実行システム100-2は、起動時に、世代管理装置120から世代番号「2」を取得し、インスタンス世代として管理する。
【0133】
ステップS1201からステップS1204の処理は、
図18Aで説明した処理と同一である。
【0134】
サービス実行システム100-2のサービスインスタンス110の数の増減に伴って、負荷分散装置130は新たな経路情報を生成し(ステップS1251)、さらに、経路管理情報更新処理を実行する(ステップS1252)。負荷分散装置130は、経路情報の生成時に、世代管理装置120から世代番号「4」を取得し、経路世代として管理する。また、経路管理情報更新処理によって、
図19Cに示すように経路管理情報1900が更新される。
【0135】
サービス実行システム100-1は、新たな分散トランザクションの開始に伴ってサービス実行システム100-2に呼出リクエスト及び判定情報を送信する(ステップS1253)。サービス実行システム100-1は、世代管理装置120から世代番号「5」を取得し、トランザクション世代として送信する。
【0136】
負荷分散装置130は、呼出リクエスト及び判定情報を受信した場合、経路管理情報更新処理を実行する(ステップS1254)。ここでは、
図19Dに示すような経路管理情報1900が更新される。
【0137】
負荷分散装置130は、呼出リクエストを受信した場合、呼出リクエストに含まれるトランザクション世代に応じて使用する経路情報を切り替え、所定のサービスインスタンス110に呼出リクエストを転送する。これによって、サービスインスタンス110の数が変わっても同一のサービスインスタンス110の呼出を実現できる。
【0138】
図20は、実施例5の負荷分散装置130が実行する経路管理情報更新処理の一例を説明するフローチャートである。
【0139】
負荷分散装置130は、呼出リクエストの受信が実行契機であるか否かを判定する(ステップS1301)。
【0140】
呼出リクエストの受信が実行契機である場合、負荷分散装置130は、経路管理情報1900の現在の経路世代に対応するエントリに、呼出リクエストに含まれるトランザクション世代を登録する(ステップS1302)。その後、負荷分散装置130は、経路管理情報更新処理を終了する。
【0141】
呼出リクエストの受信が実行契機でない場合、負荷分散装置130は、世代管理装置120に世代更新を要求する(ステップS1303)。
【0142】
負荷分散装置130は、経路管理情報1900にエントリを追加し(ステップS1304)、経路管理情報更新処理を終了する。追加されたエントリの経路世代1901には、世代管理装置120から取得した世代番号が格納される。また、追加されたエントリの経路情報1903には新たに生成された経路情報が格納される。
【0143】
実施例5によれば、実施例4と同様に、サービス単位で、サービスの再起動に伴う、分散トランザクションにおけるデータの不整合の発生可能性を検知できる。また、サービスインスタンス110が増減した場合でも、分散トランザクションにおいて同じサービスインスタンス110が処理を実行するように制御できる。
【実施例6】
【0144】
実施例6は実施例5の変形例である。
図21A及び
図21Bは、実施例6のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
図22A及び
図22Bは、実施例6の経路管理情報2200の一例を示す図である。
【0145】
まず、
図21Aのシーケンス図について説明する。サービス実行システム100-2は、起動時に、所定の数のインスタンスを設定し、世代管理装置120から世代番号「1」を取得し、インスタンス世代として管理する。また、サービス実行システム100-2は、負荷分散装置130にインスタンスIDを通知する。負荷分散装置130は、サービス実行システム100-2から通知を受信した場合、世代管理装置120から世代番号「2」を取得し、経路世代として管理する。このとき、負荷分散装置130は、開始経路世代2201に世代番号「2」が格納され、かつ、インスタンスID2203にサービス実行システム100-2が管理するインスタンスのIDが格納されたエントリを含む経路管理情報2200を生成する。なお、終了経路世代2202には無限大を意味する値が設定される。例えば、
図22Aに示すような経路管理情報2200が生成される。
【0146】
サービス実行システム100-1は、分散トランザクションの開始に伴ってサービス実行システム100-2に呼出リクエスト及び判定情報を送信する(ステップS1401)。呼出リクエストには、サービスの識別情報(サービスA)が含まれる。判定情報には、トランザクションの世代が含まれる。具体的には、サービス実行システム100-1は、世代管理装置120から世代番号「3」を取得し、トランザクション世代として送信する。
【0147】
負荷分散装置130は、呼出リクエスト及び判定情報を受信した場合、送信先のインスタンスIDを決定する(ステップS1402)。具体的には、以下のような処理が実行される。
【0148】
(S1402-1)負荷分散装置130は、経路管理情報2200の各エントリの開始経路世代2201及び終了経路世代2202によって定まる範囲を特定する。
【0149】
(S1402-2)負荷分散装置130は、トランザクション世代を含む範囲を特定する。
【0150】
(S1402-3)負荷分散装置130は、トランザクションIDをキーとするハッシュ分散アルゴリズムに基づいて、特定された範囲に対応するエントリのインスタンスID2203の中からインスタンスIDを選択する。
【0151】
負荷分散装置130は、サービス実行システム100-2の決定したインスタンスIDに、呼出リクエスト及び判定情報を送信する(ステップS1403)。
【0152】
サービス実行システム100-2は、呼出リクエスト及び判定情報を受信した場合、判定処理を実行する(ステップS1404)。実施例6の判定処理は実施例4の判定処理と同一であるため、説明を省略する。
【0153】
サービス実行システム100-1は、新たな分散トランザクションの開始に伴ってサービス実行システム100-2に呼出リクエスト及び判定情報を送信する(ステップS1405)。サービス実行システム100-1は、世代管理装置120から世代番号「4」を取得し、トランザクション世代として送信する。
【0154】
負荷分散装置130は、呼出リクエスト及び判定情報を受信した場合、送信先のインスタンスIDを決定する(ステップS1406)。ステップS1406の処理はステップS1402の処理と同一である。
【0155】
ステップS1407及びステップS1408の処理はステップS1403及びステップS1404の処理と同一である。
【0156】
次に、
図21Bのシーケンス図について説明する。サービス実行システム100-2は、起動時に、所定の数のインスタンスを設定し、世代管理装置120から世代番号「1」を取得し、インスタンス世代として管理する。また、サービス実行システム100-2は、負荷分散装置130にインスタンスIDを通知する。負荷分散装置130は、サービス実行システム100-2から通知を受信した場合、世代管理装置120から世代番号「2」を取得し、経路世代として管理する。このとき、負荷分散装置130は、開始経路世代2201に世代番号「2」が格納され、かつ、インスタンスID2203にサービス実行システム100-2が管理するインスタンスのIDが格納されたエントリを含む経路管理情報2200を生成する。なお、終了経路世代2202には無限大を意味する値が設定される。例えば、
図22Aに示すような経路管理情報2200が生成される。
【0157】
ステップS1401からステップS1404の処理は、
図21Aで説明した処理と同一である。
【0158】
サービス実行システム100-2は、サービスインスタンス110の数の増減に伴ってインスタンスIDを通知する。負荷分散装置130は、経路管理情報2200を更新する(ステップS1451)。具体的には、以下のような処理が実行される。
【0159】
(S1451-1)負荷分散装置130は、経路管理情報2200から終了経路世代2202に無限大を示す値を格納するエントリを検索する。負荷分散装置130は、検索されたエントリの終了経路世代2202に、取得した世代番号から1を減算した値を設定する。
【0160】
(S1451-2)負荷分散装置130は、経路管理情報2200にエントリを追加し、追加されたエントリの開始経路世代2201に取得した世代番号を設定し、インスタンスID2203に通知されたインスタンスのIDを設定する。終了経路世代2202には無限大を示す値が設定される。
【0161】
以上の処理によって、経路管理情報2200は、例えば、
図22Bに示すように更新される。
【0162】
サービス実行システム100-1は、新たな分散トランザクションの開始に伴ってサービス実行システム100-2に呼出リクエスト及び判定情報を送信する(ステップS1452)。サービス実行システム100-1は、世代管理装置120から世代番号「5」を取得し、トランザクション世代として送信する。
【0163】
負荷分散装置130は、呼出リクエスト及び判定情報を受信した場合送信先のインスタンスIDを決定する(ステップS1453)。ステップS1453の処理はステップS1402の処理と同一である。なお、ステップS1453では、経路管理情報2200に新たに追加されたエントリに基づいてインスタンスが決定される。
【0164】
ステップS1454及びステップS1455の処理はステップS1403及びステップS1404の処理と同一である。
【実施例7】
【0165】
実施例7は、実施例3の変形例である。
図23は、実施例7の分散トランザクションの一例を示す図である。
【0166】
図23に示す分散トランザクションでは、サービスAから、サービスB及びサービスDの順に呼出が行われた後、サービスAから、サービスC及びサービスDの順に呼出が行われる。
【0167】
図24A及び
図24Bは、実施例7のシステムにおける分散トランザクションの処理の流れを説明するシーケンス図である。
【0168】
サービス実行システム100-1は、分散トランザクションの開始に伴って、呼出処理を実行する(ステップS1501)。呼出処理では、呼出フラグ及びサービスリストの設定が行われる。呼出処理の詳細は後述する。ここでは、呼出フラグ「初回」が設定され、また、サービスBが登録されたサービスリストが設定される。
【0169】
サービス実行システム100-1は、サービス実行システム100-2に呼出リクエスト及び判定情報を送信する(ステップS1502)。呼出リクエストには、分散トランザクションの識別情報が含まれる。実施例7では、呼出フラグ及びサービスリストが判定情報として送信される。
【0170】
サービス実行システム100-2は、呼出リクエスト及び判定情報を受信した場合、判定情報に含まれるサービスリストを記憶し、その後、分散トランザクションのロールバックが必要か否かを判定するための判定処理を実行する(ステップS1503)。判定処理の詳細は実施例3と同一である。ここでは、ロールバックは必要ないと判定される。
【0171】
サービス実行システム100-2は、サービスを実行した後、サービス実行システム100-4の呼出が必要であると判定し、呼出処理を実行する(ステップS1504)。ここでは、呼出フラグ「初回」が設定され、また、サービスB及びサービスDが登録されたサービスリストが設定される。
【0172】
サービス実行システム100-2は、サービス実行システム100-4に呼出リクエスト及び判定情報を送信する(ステップS1505)。呼出リクエストには、分散トランザクションの識別情報が含まれる。ステップS1505では、サービスB及びサービス実行システム100-4が実行するサービスDが登録されたサービスリストが送信される。
【0173】
サービス実行システム100-4は、呼出リクエスト及び判定情報を受信した場合、判定情報に含まれるサービスリストを記憶し、その後、判定処理を実行する(ステップS1506)。ここでは、ロールバックは必要ないと判定される。
【0174】
サービス実行システム100-4は、サービスを実行した後、サービス実行システム100-2に応答及び判定情報を送信する(ステップS1507)。
【0175】
サービス実行システム100-2は、応答及び判定情報を受信した場合、判定情報に含まれる呼出フラグ及びサービスリストを記録し、その後、サービス実行システム100-1に応答を転送する(ステップS1508)。
【0176】
サービス実行システム100-1は、応答及び判定情報を受信した場合、判定情報に含まれる呼出フラグ及びサービスリストを記録する。その後、サービス実行システム100-1は、サービス実行システム100-3に呼出リクエストを送信するために、呼出処理を実行する(ステップS1509)。ここでは、呼出フラグ「初回」が設定され、また、サービスB、サービスD、及びサービス実行システム100-3が実行するサービスCが登録されたサービスリストが設定される。
【0177】
サービス実行システム100-1は、サービス実行システム100-3に呼出リクエスト及び判定情報を送信する(ステップS1510)。
【0178】
サービス実行システム100-3は、呼出リクエスト及び判定情報を受信した場合、判定情報に含まれるサービスリストを記憶し、その後、分散トランザクションのロールバックが必要か否かを判定するための判定処理を実行する(ステップS1511)。ここでは、ロールバックは必要ないと判定される。
【0179】
サービス実行システム100-3は、サービスを実行した後、サービス実行システム100-4の呼出が必要であると判定し、呼出処理を実行する(ステップS1512)。ここでは、呼出フラグ「継続」が設定され、また、サービスB、サービスC、及びサービスDが登録されたサービスリストが設定される。サービス実行システム100-3は、サービス実行システム100-4に呼出リクエスト及び判定情報を送信する(ステップS1513)。
【0180】
サービス実行システム100-4は、呼出リクエスト及び判定情報を受信した場合、判定情報に含まれるサービスリストを記憶し、その後、判定処理を実行する(ステップS1514)。ここでは、ロールバックは必要ないと判定される。
【0181】
サービス実行システム100-4は、サービスを実行した後、サービス実行システム100-3に応答及び判定情報を送信する(ステップS1515)。
【0182】
サービス実行システム100-3は、応答及び判定情報を受信した場合、判定情報に含まれる呼出フラグ及びサービスリストを記録し、その後、サービス実行システム100-1に応答を転送する(ステップS1516)。
【0183】
サービス実行システム100-1は、応答及び判定情報を受信した場合、判定情報に含まれる呼出フラグ及びサービスリストを記録する。
【0184】
呼出処理を実行しない場合、サービス実行システム100-3からサービス実行システム100-4には呼出フラグ「初回」が送信される。このとき、同一分散トランザクション内ですでにサービス実行システム100-2から呼び出されている。したがって、サービス実行システム100-4はロールバックが必要と判定する。実施例7では、上記のようなロールバックを防ぐために、分散トランザクション内のサービスの呼出状況を把握するためのサービスリストを判定情報に含め、呼出フラグを調整している。
【0185】
図25は、実施例7のサービス実行システム100が実行する呼出処理の一例を説明するフローチャートである。
【0186】
トランザクション制御部112は、判定情報記憶部114に記憶されているサービスリストに呼出先のサービスが登録されているか否かを判定する(ステップS1601)。
【0187】
なお、起点のサービス実行システム100は、分散トランザクションの開始時には、判定情報記憶部114にサービスリストが存在しない。そのため、起点のサービス実行システム100は、判定情報記憶部114に空のサービスリストを生成し、ステップS1603に進む。
【0188】
サービスリストに呼出先のサービスが登録されている場合、トランザクション制御部112は、呼出フラグ「継続」を設定する(ステップS1602)。トランザクション制御部112は、呼出フラグ「継続」及び判定情報記憶部114に記憶されているサービスリストを判定情報とともに、呼出対象のサービスを実行するサービス実行システム100に呼出リクエストを送信する(ステップS1605)。
【0189】
サービスリストに呼出先のサービスが登録されていない場合、トランザクション制御部112は、判定情報記憶部114に記憶されているサービスリストに呼出先のサービスを登録する(ステップS1603)。
【0190】
トランザクション制御部112は、呼出フラグ「初回」を設定する(ステップS1604)。トランザクション制御部112は、呼出フラグ「初回」及び判定情報記憶部114に記憶されているサービスリストを判定情報とともに、呼出対象のサービスを実行するサービス実行システム100に呼出リクエストを送信する(ステップS1605)。
【0191】
実施例7によれば、複数の経路で同一のサービスを呼び出す分散トランザクションについてもデータの不整合の発生可能性を検知できる。
【0192】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【0193】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD-ROM、DVD-ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD-R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
【0194】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Python、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。
【0195】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はCD-RW、CD-R等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【0196】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【0197】
100 サービス実行システム
110 サービスインスタンス
111 送受信部
112 トランザクション制御部
113 判定部
114 判定情報記憶部
120 世代管理装置
130 負荷分散装置
200 計算機
201 プロセッサ
202 主記憶装置
203 副記憶装置
204 ネットワークインタフェース
400、800 呼出状態管理情報
1900 経路管理情報