(57)【要約】【課題】メッセージ到着遅れが生じても複数のマイクロサービスがそれぞれ正しいメッセージ到着順序でメッセージ処理できること。【解決手段】複数のマイクロサービスＡ〜Ｅ間でメッセージ通信し、それぞれがマイクロサービスをおこなう情報処置装置１０１（１０１ｂ）は、受信した複数のメッセージのタイムスタンプを比較し、遅延して到着したメッセージを判断し、メッセージを正しい到着順序で再度メッセージ処理し、メッセージを受信する下流の情報処理装置１０１（１０１ｃ〜１０１ｅ）に対し、正しいメッセージの到着順序で再度メッセージ処理させる修正通知を送信するメッセージ制御部を有する。【選択図】図１
2019169109.tif 000002
【特許請求の範囲】
【請求項１】
複数のマイクロサービス間でメッセージ通信し、それぞれが前記マイクロサービスをおこなう情報処置装置において、
受信した複数の前記メッセージのタイムスタンプを比較し、遅延して到着した前記メッセージを判断し、前記メッセージを正しい到着順序で再度メッセージ処理し、前記メッセージを受信する下流の情報処理装置に対し、正しいメッセージの到着順序で再度メッセージ処理させる修正通知を送信する、
メッセージ制御部を有することを特徴とする情報処理装置。
【請求項２】
受信したメッセージを到着順序で格納するキューと、
前記キューへの格納順に前記メッセージを読み出し、所定のメッセージ処理をおこなうサービス処理部と、を有し、
前記メッセージ制御部は、
前記サービス処理部のメッセージ処理毎の処理状態をスナップショットとして処理順に保持する履歴記録部と、
前記キューに格納された前記メッセージと、前記履歴記録部に保持された前記スナップショットに基づき、前記受信したメッセージの到着順序が正常か否かを検査し、検査結果を前記修正通知として送信する検査部と、
前記修正通知の受信時に、前記キューおよび前記サービス処理部に対し、正しいメッセージの到着順序で処理をおこなわせるロールバック制御をおこなうロールバック制御部と、を有する、
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記検査部は、
下流の情報処理装置に対する前記修正通知として、修正対象の前記メッセージの識別子と、到着順序を正しく修正した後のメッセージ列の先頭のメッセージの識別子の情報を送信することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記ロールバック制御部は、
前記修正通知の受信時に、当該修正通知に基づき、前記キューに対し、正しく修正した後のメッセージ列を格納し、前記サービス処理部に対し、遅延して到着した前記メッセージ以前のメッセージ処理状態にロールバックさせることを特徴とする請求項２または３に記載の情報処理装置。
【請求項５】
前記ロールバック制御部は、
前記修正通知の受信時に、当該修正通知に基づき、前記サービス処理部に対し、到着順序が正しくない前記メッセージのメッセージ処理をキャンセルさせることを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記ロールバック制御部は、
前記修正通知の受信時に、前記キューに格納された修正対象の前記メッセージを削除することを特徴とする請求項４または５に記載の情報処理装置。
【請求項７】
上流の複数の情報処理装置から合流して前記メッセージを受信するシステム構成の場合、
前記ロールバック制御部は、
前記修正通知の受信時に、前記サービス処理部によりメッセージ処理を停止し、前記キューの先頭のメッセージが正しく修正されたメッセージであれば前記停止を解除することを特徴とする請求項２または３に記載の情報処理装置。
【請求項８】
前記履歴記録部は、
下流の情報処理装置の前記サービス処理部の数と、キューサイズに基づく記録容量を有することを特徴とする請求項２〜７のいずれか一つに記載の情報処理装置。
【請求項９】
複数のマイクロサービス間でメッセージ通信し、それぞれが前記マイクロサービスをおこなう複数の情報処置装置を含む情報処理システムにおいて、
前記情報処理装置は、それぞれ、
受信したメッセージを到着順序で格納するキューと、
前記キューへの格納順に前記メッセージを読み出し、所定のメッセージ処理をおこなうサービス処理部と、
前記メッセージのタイムスタンプを比較し、遅延して到着した前記メッセージを判断し、前記メッセージを正しい到着順序で再度メッセージ処理し、前記メッセージを受信する下流の情報処理装置に対し、正しいメッセージの到着順序で再度メッセージ処理させる修正通知を送信するメッセージ制御部と、
を有することを特徴とする情報処理システム。
【請求項１０】
複数のマイクロサービス間でメッセージ通信し、それぞれが前記マイクロサービスをおこなう複数の情報処置装置と、メッセージ制御装置とを含む情報処理システムにおいて、
前記情報処理装置は、それぞれ、
受信したメッセージを到着順序で格納するキューと、
前記キューへの格納順に前記メッセージを読み出し、所定のメッセージ処理をおこなうサービス処理部と、を有し、
前記メッセージ制御装置は、
前記情報処理装置のメッセージのタイムスタンプを比較し、遅延して到着した前記メッセージを判断し、前記メッセージを正しい到着順序で再度メッセージ処理し、前記メッセージを受信する下流の情報処理装置に対し、正しいメッセージの到着順序で再度メッセージ処理させる修正通知を送信する、
ことを特徴とする情報処理システム。
【請求項１１】
複数のマイクロサービス間でメッセージ通信し、それぞれが前記マイクロサービスをおこなう情報処置装置のコンピュータに、
受信した複数の前記メッセージのタイムスタンプを比較し、遅延して到着した前記メッセージを判断し、
前記メッセージを正しい到着順序で再度メッセージ処理し、
前記メッセージを受信する下流の情報処理装置に対し、正しいメッセージの到着順序で再度メッセージ処理させる修正通知を送信する、
処理を実行させることを特徴とする情報処理プログラム。
【請求項１２】
前記修正通知の受信時に、当該修正通知に基づき、正しく修正した後のメッセージ列をキューに格納し、
前記マイクロサービスの処理をおこなうサービス処理部に対し、遅延して到着した前記メッセージ以前のメッセージ処理状態にロールバックさせる、
処理を実行させることを特徴とする請求項１１に記載の情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システムおよび情報処理プログラムに関する。
【背景技術】
【０００２】
主にクラウド上の分散処理システムでは、マイクロサービスアーキテクチャと呼ぶ分散型システムを構築し、マイクロサービスを分散処理する。マイクロサービスの多くは検索や認証など単機能の小さなマイクロサービスであり、複数のマイクロサービスを組合せてマイクロサービスを構築する。たとえば、Ｗｅｂインタフェースマイクロサービス、認証マイクロサービス、検索マイクロサービス、ショッピングカートマイクロサービス、データベースマイクロサービスの５つのマイクロサービスを組合せてネット販売マイクロサービスを構築する例がある。
【０００３】
マイクロサービスを組合せる方法としてメッセージングが広く用いられ、メッセージングによりマイクロサービス同士をメッセージのやり取りで連携させることができる。メッセージングでは、メッセージ送信側（上流）のマイクロサービスは、受信側（下流）のマイクロサービスでのメッセージ受信を待たずに、つぎのメッセージ処理をおこなう非同期実行に適している。
【０００４】
上流のマイクロサービスは、下流のマイクロサービスがメッセージ処理するか否かに関わらず、つぎのメッセージを順次送信し、下流のマイクロサービスは、メッセージをキューと呼ぶバッファに格納する。下流のマイクロサービスは、キューからメッセージを取り出し内容に応じたメッセージ処理をおこなうことを繰り返す。
【０００５】
従来技術として、第１の処理から第２の処理へ送信するメッセージの内容が一致するように、タイムスタンプを用いロールバックさせることで、並行処理を同期化させる技術が開示されている（たとえば、下記特許文献１参照。）。また、各応用プログラムが送受信ログを収集して半順序関係を示すタイムスタンプを付与し、応用プログラム間でロールバック可能な最新のチェックポイントを探索して、応用プログラムの回復をおこなう技術が開示されている（たとえば、下記特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平６−０２８１９９号公報
【特許文献２】特開平７−２７１６２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来技術では、マイクロサービス間でおこなうメッセージ通信のメッセージ順序を補償できなかった。
【０００８】
メッセージングでは、様々な原因でメッセージが送信時と異なる到着順序で下流に到着する場合がある。たとえば、メッセージが後発メッセージと異なる遅いネットワーク経路で伝送され、ネットワーク上でこのメッセージがロストすると、後発メッセージ送信後にメッセージが再送される。また、メッセージサイズが大きいため分割送信されると、分割した全てが下流に到着する前に後発のより小さいメッセージが先に下流に到着してしまう。
【０００９】
メッセージの到着順序が送信順序と異なると正しくマイクロサービスを処理できない場合がある。たとえば、センサや端末からのデータ（メッセージ）を扱うマイクロサービスは、メッセージの到着順序が変わると間違った処理をおこなう問題が生じる。たとえば、実世界で起きる事象をメッセージとして取り扱うマイクロサービスにおいては、事象に対応したメッセージを事象が起きた際の送信順序で処理する必要がある。しかし、メッセージの到着が遅れる原因は多様であり、伝送路で保証しようとすると、専用のネットワークを持つ高価なシステムが必要になってしまう。
【００１０】
また、従来のロールバック技術では、マイクロサービス状態の保存（スナップショット）をどこまで（何世代）保存すればよいかを定めることができず、運用者が経験上十分と考える任意の世代数に定めている。この場合、下流では余裕を持った世代数分のスナップショットを保存するため必要以上のスナップショットを保存することになり、主に記憶資源（ハードウェア）が高コスト化する問題が生じる。
【００１１】
ここで、送信側（上流）と受信側（下流）が１：１接続のマイクロサービス間ではＭＱ（メッセージキューイング）などの順序性保証機構によりメッセージの到着順序を補償する方法がある。しかし、マイクロサービス間の一部接続がｎ：１のシステムでは下流でのメッセージの到着順序を補償できない。
【００１２】
一つの側面では、本発明は、メッセージ到着遅れが生じても複数のマイクロサービスがそれぞれ正しいメッセージ到着順序でメッセージ処理をおこなうことを目的とする。
【課題を解決するための手段】
【００１３】
一つの実施の形態では、複数のマイクロサービス間でメッセージ通信し、それぞれが前記マイクロサービスをおこなう情報処置装置において、受信した複数の前記メッセージのタイムスタンプを比較し、遅延して到着した前記メッセージを判断し、前記メッセージを正しい到着順序で再度メッセージ処理し、前記メッセージを受信する下流の情報処理装置に対し、正しいメッセージの到着順序で再度メッセージ処理させる修正通知を送信する、情報処理装置、情報処理システムおよび情報処理プログラムが提供される。
【発明の効果】
【００１４】
本発明の一側面によれば、メッセージ到着遅れが生じても複数のマイクロサービスがそれぞれ正しいメッセージ到着順序でメッセージ処理をおこなうことができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、実施の形態にかかるシステムの全体構成の一例を示す説明図である。
【図２Ａ】図２Ａは、実施の形態にかかる情報処理装置の機能的構成の一例を示す説明図である。
【図２Ｂ】図２Ｂは、実施の形態にかかる情報処理装置間の接続構成の一例を示す説明図である。
【図３】図３は、実施の形態にかかる情報処理装置のハードウェア構成の一例を示すブロック図である。
【図４】図４は、実施の形態にかかる情報処理装置がおこなう全体の処理の手順の一例を示すフローチャートである。
【図５】図５は、実施の形態にかかる情報処理装置の実行中処理の手順の一例を示すフローチャート（その１）である。
【図６】図６は、実施の形態にかかる情報処理装置の実行中処理の手順の一例を示すフローチャート（その２）である。
【図７】図７は、実施の形態にかかる情報処理装置の停止中処理の手順の一例を示すフローチャートである。
【図８】図８は、実施の形態にかかる情報処理装置のメッセージ処理の一例を示す説明図（その１）である。
【図９】図９は、実施の形態にかかる情報処理装置のメッセージ処理の一例を示す説明図（その２）である。
【図１０】図１０は、実施の形態にかかる情報処理装置のメッセージ処理の一例を示す説明図（その３）である。
【図１１】図１１は、実施の形態にかかる情報処理装置に必要なスナップショットのサイズを示す説明図である。
【図１２】図１２は、従来技術によるメッセージ通信の例を示す説明図である。
【図１３】図１３は、ｎ：１のメッセージ通信で順序保証が必要な事象を示す説明図である。
【図１４Ａ】図１４Ａは、従来技術による複数のマイクロサービスを連携させたときの問題を示す説明図（その１）である。
【図１４Ｂ】図１４Ｂは、従来技術による複数のマイクロサービスを連携させたときの問題を示す説明図（その２）である。
【発明を実施するための形態】
【００１６】
以下に図面を参照して、開示の情報処理装置、情報処理システムおよび情報処理プログラムの実施の形態を詳細に説明する。
【００１７】
図１は、実施の形態にかかるシステムの全体構成の一例を示す説明図である。図１を用いて実施の形態の情報処理システムがおこなうメッセージの到着順序性の保証の概要を説明する。
【００１８】
実施の形態の情報処理システム１００は、受信した要求マイクロサービスに対し、マイクロサービスＡ〜Ｅ毎のマイクロサービス処理部１０１（１０１ａ〜１０１ｅ）がメッセージ（データ）に対し、それぞれ異なるメッセージ処理（データ処理）を分散しておこなう。
【００１９】
要求マイクロサービスとは、情報処理システム１００外部のクライアント、たとえば、ユーザの端末操作による所定のマイクロサービスの要求、あるいはセンサ装置等の検出データに基づくデータ処理の要求等である。
【００２０】
この際、図１の矢印（→）に示すように、複数のマイクロサービス処理部１０１は、それぞれ上流から入力されたメッセージをメッセージ処理した後、下流のマイクロサービス処理部１０１に送信する。
【００２１】
各マイクロサービス処理部１０１は、たとえば、クラウド上に配置された複数のサーバがネットワーク接続により相互にメッセージを送受信することができる。以下の説明では、上流、下流は、メッセージが流れる方向を示し、送信側のマイクロサービス処理部１０１が上流に位置してサービス処理の結果をメッセージとして送信し、受信側のマイクロサービス処理部１０１が下流に位置してメッセージを受信する。
【００２２】
図１に示す例では、マイクロサービスＡ１、Ａ２をそれぞれ並列しておこなうマイクロサービス処理部１０１ａを有する。このような構成においては、マイクロサービスＡ１、Ａ２のマイクロサービス処理部１０１ａは、順序保証をおこなわずにメッセージを送信する。
【００２３】
実施の形態では、メッセージ制御部１０２を設け、複数のマイクロサービス処理部１０１（１０１ａ〜１０１ｅ）でのメッセージの到着順序が正しくなるよう、到着順序性の制御（ロールバック制御）をおこなう。メッセージ制御部１０２は、図１に示すように、マイクロサービス処理部１０１と独立して配置してもよい。この場合、メッセージ制御部１０２は、サービス処理部１０１と異なる他の機器、たとえば、メッセージ・ブローカー（サーバ等を用いたメッセージ制御装置）として独立して配置することができる。また、後述するが、メッセージ制御部１０２は、各マイクロサービス処理部１０１と同一の機器内（たとえばサーバ）に配置してもよい。
【００２４】
上記情報処理システム１００には、最初の発生時を示すタイムスタンプを有するメッセージが入力される。そして、上流からメッセージを受信したマイクロサービス処理部１０１は、メッセージ処理毎のマイクロサービスのサービス状態のスナップショットを履歴として履歴記録部１０３に記録保持する。スナップショットはマイクロサービス処理終了時のタイムスタンプを含む。
【００２５】
メッセージ制御部１０２は、キュー２０１（図２参照）に入ったメッセージのタイムスタンプを参照し、キュー２０１内のメッセージのタイムスタンプ（時刻）を比較することで、メッセージの到着遅れを判断する。
【００２６】
また、メッセージ制御部１０２は、各マイクロサービス処理部１０１が受信したメッセージのタイムスタンプと、最新状態のスナップショットのタイムスタンプとを比較して、各マイクロサービス処理部１０１におけるメッセージの到着遅れの有無を判断する。
【００２７】
そして、メッセージ制御部１０２は、メッセージの到着遅れが生じたマイクロサービス処理部１０１および下流の全マイクロサービス処理部１０１に対し、遅れたメッセージ以前のメッセージ処理状態へロールバックする制御をおこなう。これにより、メッセージの到着遅れが生じたマイクロサービス処理部１０１および下流の全マイクロサービス処理部１０１は、正しいメッセージの到着順序でマイクロサービスを再実行する。これにより、要求メッセージに対して、情報処理システム１００内でメッセージの到着遅れが生じても、全てのメッセージ制御部１０２が順序保証してメッセージ処理できるようになる。
【００２８】
図２Ａは、実施の形態にかかる情報処理装置の機能的構成の一例を示す説明図である。図１に示した一つのマイクロサービスのマイクロサービス処理部１０１は、要求マイクロサービスのうち一つのマイクロサービス（データ処理）をおこなう一つの情報処理装置２００に配置される。
【００２９】
図２Ａの（ａ）は、一つの情報処理装置２００（マイクロサービス処理部１０１）毎にメッセージ制御部１０２を配置した構成例の機能ブロック図である。また、図２Ａの（ｂ）には、情報処理装置２００内で保持する情報例（メッセージ、データ等）の図表を示す。
【００３０】
図２Ａの（ａ）に示すように、情報処理装置２００は、上述したマイクロサービス処理部１０１と、メッセージ制御部１０２と、キュー２０１とを含む。また、メッセージ制御部１０２は、履歴記録部１０３と、検査部２１２と、ロールバック制御部２１３とを含む。
【００３１】
キュー２０１は、上流から受信したメッセージ（データ）を到着順に保持し、マイクロサービス処理部１０１に出力する。メッセージｍｉは、内容（データ）と、メッセージの識別子（ＩＤ）と、生成時刻（タイムスタンプ：ＳＴ）を含む（図２Ａの（ｂ）参照）。
【００３２】
マイクロサービス処理部１０１は、キュー２０１から出力されたメッセージ（データ）に対し、所定のマイクロサービス機能に基づくメッセージ処理（データ処理）をおこない、処理後のメッセージを下流の情報処理装置２００に送信する。
【００３３】
履歴記録部１０３は、マイクロサービス処理部１０１によるメッセージ処理毎の処理メッセージと、スナップショットを順次記録保持する。たとえば、履歴記録部１０３は、メッセージ処理順にスナップショットを図２Ａの（ｂ）のように下から上に順次蓄積記録していく。スナップショットはマイクロサービス処理部１０１によるマイクロサービス処理終了時のタイムスタンプを含む。
【００３４】
検査部２１２は、キュー２０１が受信したメッセージの到着遅れの有無を検出する。検査部２１２は、履歴記録部１０３で処理したメッセージ処理時のタイムスタンプを参照し、キュー２０１の該当するメッセージのタイムスタンプ（生成時刻ＳＴ）が新しいか、あるいは古いかに基づき、メッセージの到着遅れの有無を検出する。
【００３５】
そして、検査部２１２は、受信したメッセージのうち、どのメッセージの到着順序が正しくないか、たとえば到着遅れあり、を示す情報を修正通知として下流の情報処理装置２００に送信する。
【００３６】
修正通知は、修正対象メッセージＩＤリスト（ＣＭＬ）と、修正後先頭メッセージＩＤ（ＣＴＭ）を含む（図２Ａの（ｂ）参照）。修正対象メッセージＩＤリスト（ＣＭＬ）は、順序変更の影響を受けるメッセージのＩＤをリスト化した集合である。修正後先頭メッセージＩＤ（ＣＴＭ）は、到着順序を修正したメッセージ列の最初のメッセージのＩＤである。この修正通知は、メッセージの到着遅れを検出したメッセージ制御部１０２（検査部２１２）が生成および送信するものであり、上述したメッセージと同様に、上流の情報処理装置２００から下流の情報処理装置２００に向けて送信される。
【００３７】
また、図１のように、マイクロサービス処理部１０１と独立してメッセージ制御部１０２を集約する形で配置した場合、メッセージ制御部１０２は、該当する下流の複数のマイクロサービス処理部１０１（各サーバ等）に一斉に修正通知をブロードキャストする。
【００３８】
また、検査部２１２は、上流の情報処理装置２００から修正通知を受信した場合、キュー２０１に対し、まだ処理中のメッセージが残っている場合、キュー２０１内に残っているメッセージを削除（データ消去等）する制御をおこなう。また、検査部２１２は、メッセージ削除に対応してキュー２０１内のメッセージのソートをおこなう。
【００３９】
ロールバック制御部２１３は、上流の情報処理装置２００から修正通知を受信した場合、マイクロサービス処理部１０１に対するメッセージ処理をキャンセルし、修正対象のメッセージ処理前まで状態を戻すロールバック制御をおこなう。このロールバック制御では、修正通知の受信により、履歴記録部１０３が記録保持するスナップショットのうち、メッセージ到着遅れを起こしたメッセージをキュー２０１に戻す処理をおこなう。
【００４０】
図２Ｂは、実施の形態にかかる情報処理装置間の接続構成の一例を示す説明図である。図２Ｂには、複数のマイクロサービス間で接続した複数の情報処理装置２００Ａ、２００Ｂを示す。各情報処理装置２００Ａ、２００Ｂの内部構成は、図２Ａ（ａ）と同様である。図２Ｂに示すように、メッセージおよび修正通知は、上流の情報処理装置２００Ａから下流の情報処理装置２００Ｂに伝播される。
【００４１】
図３は、実施の形態にかかる情報処理装置のハードウェア構成の一例を示すブロック図である。図２Ａに示した情報処理装置２００は、図３に示すハードウェアを用いることができる。
【００４２】
たとえば、情報処理装置２００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１、メモリ３０２、ネットワークインタフェース（Ｉ／Ｆ）３０３、記録媒体Ｉ／Ｆ３０４、記録媒体３０５、を含む。３００は各部を接続するバスである。
【００４３】
ＣＰＵ３０１は、情報処理装置２００の全体の制御を司る制御部として機能する演算処理装置である。メモリ３０２は、不揮発性メモリおよび揮発性メモリを含む。不揮発性メモリは、たとえば、ＣＰＵ３０１のプログラムを格納するＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）である。揮発性メモリは、たとえば、ＣＰＵ３０１のワークエリアとして使用されるＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等である。
【００４４】
ネットワークＩ／Ｆ３０３は、ネットワーク３３０を通じて他の情報処理装置２００との間で処理に必要な情報（上記メッセージや修正通知等）を送受信する。ネットワークＩ／Ｆ３０３は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク３３０を介して他の情報処理装置２００に通信接続される。
【００４５】
記録媒体Ｉ／Ｆ３０４は、ＣＰＵ３０１が処理した情報を記録媒体３０５との間で読み書きするためのインタフェースである。記録媒体３０５は、メモリ３０２を補助する記録装置である。たとえば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュドライブ等を用いることができる。
【００４６】
メモリ３０２または記録媒体３０５に記録されたプログラムをＣＰＵ３０１が実行することにより、図２Ａに示した情報処理装置２００のマイクロサービス処理部１０１およびメッセージ制御部１０２（検査部２１２、ロールバック制御部２１３）の機能を実現する。また、メモリ３０２や記録媒体３０５を用いて、図２Ａに示したキュー２０１、履歴記録部１０３の情報を保持することができる。
【００４７】
また、図３に示したハードウェア構成は、図１のシステム構成例の場合、各マイクロサービスを実行処理するマイクロサービス処理部１０１の機能を有する所定のサーバ、メッセージ制御部１０２の機能を有するサーバ、にそれぞれ同様に適用することができる。これらの各サーバにおいても、ＣＰＵ３０１を用いてプログラム実行する場合、ＣＰＵ３０１がメモリ３０２や記録媒体３０５から読み出したプログラムを実行することにより、それぞれのサーバの機能を実現することができる。
【００４８】
図４は、実施の形態にかかる情報処理装置がおこなう全体の処理の手順の一例を示すフローチャートである。図４の処理は、一つの情報処理装置２００に設けられるメッセージ制御部１０２が主におこなう。
【００４９】
情報処理装置２００において、キュー２０１に受信したメッセージｍが時間順を有して入る（ステップＳ４０１）。キュー２０１は、メッセージｍをタイムスタンプの順番に保持する。
【００５０】
そして、メッセージ制御部１０２は、マイクロサービス処理部１０１のマイクロサービスが実行状態であるか、あるいは停止状態であるかを判断する（ステップＳ４０２）。マイクロサービスが実行状態であれば（ステップＳ４０２：実行状態）、マイクロサービス実行中に対応した実行中処理を実施する（ステップＳ４０３）。一方、マイクロサービスが停止状態であれば（ステップＳ４０２：停止状態）、マイクロサービス停止中に対応した停止中処理を実施する（ステップＳ４０４）。ステップＳ４０３あるいはステップＳ４０４の処理実行により、マイクロサービス処理部１０１は以上の処理を終了する。
【００５１】
これらマイクロサービスの実行状態、および停止状態については後述する。通常は、マイクロサービス処理部１０１によるマイクロサービス（メッセージ処理）が継続し、実行状態となっている（後述する問題ケース１〜３の処理時に相当）。一方、上流からの修正通知に基づきマイクロサービス処理部１０１によるマイクロサービスを停止（ｓｔｏｐ）させる場合、停止状態となる（後述する問題ケース４の処理時に相当）。
【００５２】
図５は、実施の形態にかかる情報処理装置の実行中処理の手順の一例を示すフローチャートである。図５の処理は、図４のステップＳ４０３の処理の詳細であり、上流に配置されてメッセージ到着遅れを検出した情報処理装置２００に設けられるメッセージ制御部１０２がおこなう。
【００５３】
はじめに、メッセージ制御部１０２の検査部２１２は、履歴記録部１０３に記録保持されているスナップショット（履歴記録）ＳＳ［ｉ］（ｉ＝１、…、ｎ）を調べる。そして、検査部２１２は、マイクロサービス処理部１０１がメッセージ処理したメッセージの中でキュー２０１の先頭メッセージｍよりもタイムスタンプが後のメッセージの集合ＭＭを求める（ステップＳ５０１）。このＭＭは、遅延等が生じた修正対象メッセージ集合である。
【００５４】
そして、検査部２１２は、ＭＭが空であるか否かを判断する（ステップＳ５０２）。ＭＭが空であれば（ステップＳ５０２：Ｙｅｓ）、ステップＳ５０７の処理に移行する。
【００５５】
一方、ＭＭが空でなければ（ステップＳ５０２：Ｎｏ）、検査部２１２は、メッセージｍが到着遅れと判定する。そして、検査部２１２は、下流に位置する全てのマイクロサービスに対応した各情報処理装置２００のメッセージ制御部１０２（ロールバック制御部２１３）へ修正通知（ＣＭＬおよびＣＴＭ）を送信する（ステップＳ５０３）。
【００５６】
修正対象メッセージＩＤ集合ＣＭＬは、上記ＭＭの要素のメッセージＩＤ集合であり、修正後先頭メッセージＩＤ（ＣＴＭ）は、メッセージｍのＩＤである。
【００５７】
つぎに、メッセージ制御部１０２のロールバック制御部２１３は、履歴記録部１０３に記録保持されているスナップショットＳＳ［ｉ］（ｉ＝１、…、ｎ）から、ロールバック状態ＳＳ［ｒ］を求める（ステップＳ５０４）。ここで、ｍｊはメッセージｍのタイムスタンプよりも後のメッセージで、かつ、スナップショットＳＳの中で最もタイムスタンプが早いメッセージである。そして、このｍｊをマイクロサービス処理部１０１がメッセージ処理したときのスナップショットＳＳ［ｒ＋１］を求め、ＳＳ［ｒ＋１］の直前のスナップショットＳＳ［ｒ］のロールバック状態を求める。
【００５８】
つぎに、ロールバック制御部２１３は、マイクロサービス処理部１０１のマイクロサービス状態をＳＳ［ｒ］に戻し、履歴記録部１０３が記録保持するスナップショットのうち、スナップショットＳＳ［ｒ＋１］〜ＳＳ［ｎ］を破棄する。また、変数ｎ＝ｒとする（ステップＳ５０５）。
【００５９】
つぎに、ロールバック制御部２１３は、キュー２０１にメッセージｍとＭＭの各メッセージを時間順（タイムスタンプ順）でセットする（ステップＳ５０６）。そして、マイクロサービス処理部１０１は、キュー２０１からメッセージｍを取り出しマイクロサービスを実行する（ステップＳ５０７）。この後、履歴記録部１０３は、その時点のマイクロサービスの状態とメッセージｍをスナップショットＳＳ［ｎ＋１］として追加記録し（ステップＳ５０８）、以上の処理を終了する。なお、履歴記録部１０３のスナップショット記録にかかる記録容量（最大サイズ）については後述する。
【００６０】
図６は、実施の形態にかかる情報処理装置の実行中処理の手順の一例を示すフローチャートである。図６の処理は、図４のステップＳ４０３の処理の詳細であり、下流に配置され修正通知を受信した情報処理装置２００に設けられるメッセージ制御部１０２（ロールバック制御部２１３）がおこなう。
【００６１】
ロールバック制御部２１３は、上流の情報処理装置２００のメッセージ制御部１０２から修正通知を受信する（ステップＳ６０１）。この修正通知の受信時、ロールバック制御部２１３は、履歴記録部１０３に記録保持されているスナップショットＳＳ［ｉ］（ｉ＝１、…、ｎ）から、ロールバック状態ＳＳ［ｒ］を求める（ステップＳ６０２）。ＳＳ［ｒ］はマイクロサービス処理部１０１がメッセージ処理したメッセージＩＤが修正通知のＣＭＬにあるスナップショットの中で、処理したメッセージのタイムスタンプが最も古いスナップショットＳＳ［ｒ＋１］の直前のスナップショットＳＳ［ｒ］である。
【００６２】
つぎに、ロールバック制御部２１３は、履歴記録部１０３内のＳＳ［ｒ］の有無を判断する（ステップＳ６０３）。履歴記録部１０３にＳＳ［ｒ］がない場合（ステップＳ６０３：Ｎｏ）、以降の処理をおこなわずに処理終了する。これは、メッセージ到着遅れを起こしたメッセージよりも古いメッセージ処理しか実行していない状態であり、ロールバックは不要である。
【００６３】
一方、ロールバック制御部２１３は、履歴記録部１０３にＳＳ［ｒ］がある場合（ステップＳ６０３：Ｙｅｓ）、メッセージ到着遅れを起こしたメッセージの後続メッセージをマイクロサービス処理部１０１で先にメッセージ処理してしまった状態を意味する。この場合、ロールバック制御部２１３は、履歴記録部１０３のスナップショットＳＳ［ｊ］（ｊ＝１、…、ｎ）の処理メッセージの中で、修正通知のＣＭＬにＩＤが含まれないメッセージを時間順（タイムスタンプ順）にキュー２０１へ戻す（ステップＳ６０４）。
【００６４】
そして、ロールバック制御部２１３は、マイクロサービス状態をＳＳ［ｒ］に戻す。また、履歴記録部１０３に記録保持されているＳＳ［ｒ］以後のスナップショットＳＳ［ｒ＋１］〜ＳＳ［ｎ］を破棄する。また、ｎ＝ｒとする（ステップＳ６０５）。
【００６５】
この後、ロールバック制御部２１３は、マイクロサービスを停止状態にし（ステップＳ６０６）、以上の処理を終了する。この後、マイクロサービスが停止状態となった情報処理装置２００のメッセージ制御部１０２は、図４に示した停止中処理（ステップＳ４０４）を実行する。
【００６６】
上述したように、マイクロサービス処理部１０１が実行するマイクロサービスには、実行状態と停止状態の２つの状態がある。実行状態では上述した図５のステップＳ５０７の処理でメッセージをキュー２０１から取り出して実行する。一方、ロールバック制御部２１３が修正通知を受信すると図６のステップＳ６０６でマイクロサービスが停止状態になる。この停止状態の期間中は、マイクロサービス処理部１０１のマイクロサービス（メッセージ処理）の動作は停止（ｓｔｏｐ）し、キュー２０１からのメッセージ取得をおこなわない。
【００６７】
図７は、実施の形態にかかる情報処理装置の停止中処理の手順の一例を示すフローチャートである。図７の処理は、図４のステップＳ４０４の処理の詳細であり、下流に配置され修正通知を受信した情報処理装置２００に設けられるメッセージ制御部１０２がおこなう。
【００６８】
メッセージ制御部１０２は、マイクロサービス停止中にメッセージを受信した場合、図４に示したステップＳ４０４の停止中処理を実行する。この停止中処理では、はじめにメッセージ制御部１０２の検査部２１２がキュー２０１の先頭メッセージのＩＤ（ＩＤｔ）と、修正通知の修正後先頭メッセージＩＤ（ＣＴＭ）とを比較する（ステップＳ７０１）。
【００６９】
この後、検査部２１２は、先頭メッセージのＩＤ（ＩＤｔ）と、修正通知の修正後先頭メッセージＩＤ（ＣＴＭ）とが同じであるか否かを判断する（ステップＳ７０２）。判断の結果、ＩＤｔがＣＴＭと異なっていれば（ステップＳ７０２：Ｎｏ）、再実行するメッセージが到着していないと判断し、以後の処理をおこなわずに処理終了する。
【００７０】
一方、判断の結果、ＩＤｔがＣＴＭと同一であれば（ステップＳ７０２：Ｙｅｓ）、再実行するメッセージである。このため、メッセージ制御部１０２（検査部２１２）は、マイクロサービスを実行状態へ変え、マイクロサービス処理部１０１に対し、キュー２０１からメッセージを取り出し、マイクロサービスを実行させる（ステップＳ７０３）。
【００７１】
図８〜図１０は、実施の形態にかかる情報処理装置のメッセージ処理の一例を示す説明図である。これらの図を用いて情報処理装置２００におけるメッセージの到着順序が異なる各問題ケースに対応した修正処理の概要を説明する。これら図８〜図１０には、所定のマイクロサービスを実行する一つの情報処理装置２００あたり、一つのキュー２０１とマイクロサービス処理部１０１の組として記載してある。
【００７２】
図８には、（ａ）メッセージの到着順序が正常な場合の処理例、（ｂ）問題ケース１に対する修正処理例１、（ｃ）問題ケース２に対する修正処理例２を示す。
【００７３】
図８（ａ）メッセージの到着順序が正常な場合、（１）メッセージｍ１、ｍ２の順序で受信すると、まずメッセージｍ１がキュー２０１に入る。この後、（２）マイクロサービス処理部１０１がメッセージｍ１をメッセージ処理し、この際、メッセージｍ２がキュー２０１に入る。この後、（３）マイクロサービス処理部１０１はメッセージ処理後のメッセージｍ１を送信し、メッセージｍ２をメッセージ処理する。この際、キュー２０１は空となる。
【００７４】
図８（ｂ）問題ケース１は、一つの情報処理装置２００内のみでメッセージの到着順序に遅れが生じた状態を示す。本来は図８（ａ）に示すように、メッセージｍ１、ｍ２の順序に受信するが、メッセージｍ１に遅延が生じたとする。そして（１）メッセージｍ２、ｍ１の順序で受信すると、メッセージｍ２が先にキュー２０１に入る。この後、（２）マイクロサービス処理部１０１がメッセージｍ２をメッセージ処理し、メッセージｍ１がキュー２０１に入る。
【００７５】
上述したように、メッセージｍ１、ｍ２はタイムスタンプ（生成時刻）を持つ。そして、実施の形態では、情報処理装置２００（メッセージ制御部１０２）がタイムスタンプによりメッセージｍ１の到着遅れ（順序の逆転）を判断する。そして、メッセージ制御部１０２のロールバックにより、メッセージを正常な到着順序ｍ１、ｍ２に修正する。
【００７６】
これにより、（３）キュー２０１には、メッセージｍ１、ｍ２の順序で入り、マイクロサービス処理部１０１はメッセージｍ２のメッセージ処理をキャンセルする。この後、（４）正常なメッセージの到着順序ｍ１、ｍ２でメッセージ処理することができる。この問題ケース１のように、一つの情報処理装置２００内でのメッセージの到着遅れの影響は、タイムスタンプを用いた比較のみで修正処理できる。
【００７７】
図８（ｃ）問題ケース２では、上流の情報処理装置２００Ａと、下流の情報処理装置２００Ｂのキュー２０１およびマイクロサービス処理部１０１を記載し、メッセージｍ１の遅延が下流の情報処理装置２００Ｂにまで及ぶケースを示す。
【００７８】
はじめに、（１）メッセージｍ２、ｍ１の順序を有し、メッセージｍ２は上流の情報処理装置２００Ａではメッセージ処理済みであり、下流の情報処理装置２００Ｂのキュー２０１に入り、メッセージｍ１が上流の情報処理装置２００Ａで未受信とする。
【００７９】
この後、（２）上流の情報処理装置２００Ａのキュー２０１にメッセージｍ１が入り、下流の情報処理装置２００Ｂはマイクロサービス処理部１０１がメッセージｍ２をメッセージ処理したとする。
【００８０】
実施の形態では、上流の情報処理装置２００Ａのマイクロサービス処理部１０１は、メッセージ処理時のスナップショットｍ２を記録保持している。情報処理装置２００Ａのメッセージ制御部１０２は、キュー２０１のメッセージｍ１のタイムスタンプと、スナップショットｍ２の比較により、メッセージｍ１の到着遅れ（順序の逆転）を判断する。そして、情報処理装置２００Ａ、２００Ｂでは、メッセージ制御部１０２がｍ２処理前までロールバックすることにより、メッセージを正常な到着順序ｍ１、ｍ２に修正する。
【００８１】
この際、メッセージの到着順序が正常でないと判断した情報処理装置２００Ａは、下流の情報処理装置２００Ｂに対して上述した修正通知を送信する。
【００８２】
これにより、（３）上流の情報処理装置２００Ａのキュー２０１には、メッセージｍ１、ｍ２の順序で入る。また、下流の情報処理装置２００Ｂのマイクロサービス処理部１０１はメッセージｍ２のメッセージ処理をキャンセルする。この後、（４）上流の情報処理装置２００Ａでは、正常なメッセージの到着順序ｍ１、ｍ２でメッセージ処理することができる。なお、下流の情報処理装置２００Ｂでも、上流の情報処理装置２００Ａからメッセージｍ１、ｍ２の順序にメッセージを受信し、正常にメッセージ処理できる。
【００８３】
図９には、問題ケース３に対する修正処理例３を示す。この問題ケース３では、正常時の到着順序がメッセージｍ１、ｍ２、ｍ３、ｍ４、ｍ５、ｍ６であるが、メッセージｍ１が遅延したため、到着順序がｍ２、ｍ３、ｍ４、ｍ５、ｍ６、ｍ１の順序に入れ替わった状態を示す。
【００８４】
はじめに、（１）メッセージｍ２、ｍ３、ｍ４、ｍ５、ｍ６、ｍ１のうち、メッセージｍ２は最下流の情報処理装置２００Ｃのキュー２０１に入ったとする。メッセージｍ３は中間の情報処理装置２００Ｂのマイクロサービス処理部１０１でメッセージ処理し、メッセージｍ４が情報処理装置２００Ｂのキュー２０１に入ったとする。また、メッセージｍ５は最上流の情報処理装置２００Ａのマイクロサービス処理部１０１でメッセージ処理し、メッセージｍ６が情報処理装置２００Ａのキュー２０１に入ったとする。また、メッセージｍ１は情報処理装置２００Ａで未受信とする。
【００８５】
この場合、実施の形態では、最上流の情報処理装置２００Ａでは、メッセージｍ２、ｍ３、ｍ４、ｍ５のスナップショットを記録保持している。中間の情報処理装置２００Ｂでは、メッセージｍ２、ｍ３のスナップショットを記録保持している。
【００８６】
そして、（２）情報処理装置２００Ａのメッセージ制御部１０２は、キュー２０１のメッセージｍ１のタイムスタンプと、スナップショットｍ２〜ｍ６とを比較する。この比較により、メッセージｍ１の到着遅れ（順序の逆転）を判断し、また、メッセージｍ２〜ｍ６が順序の修正対象であると判断する。そして、情報処理装置２００Ａのメッセージ制御部１０２は、ｍ２処理前までロールバックすることにより、メッセージを正常な到着順序ｍ１、ｍ２、ｍ３、ｍ４、ｍ５、ｍ６に修正する。
【００８７】
これにより、（３）最上流の情報処理装置２００Ａでは、キュー２０１にメッセージｍ１、ｍ２、ｍ３、ｍ４、ｍ５、ｍ６の順序で入り、マイクロサービス処理部１０１のメッセージｍ６のメッセージ処理をキャンセルする。また、中間の情報処理装置２００Ｂでは、キュー２０１の修正対象メッセージｍ５を削除し、マイクロサービス処理部１０１はメッセージｍ４のメッセージ処理をキャンセルする。また、最下流の情報処理装置２００Ｃでは、キュー２０１の修正対象メッセージｍ３を削除し、マイクロサービス処理部１０１はメッセージｍ２のメッセージ処理をキャンセルする。
【００８８】
この際、メッセージの到着順序が正常でないと判断した情報処理装置２００Ａは、下流の全ての情報処理装置２００Ｂ、２００Ｃに対して上述した修正通知を送信する。
【００８９】
これにより、上流の情報処理装置２００Ａでは、正常なメッセージの到着順序ｍ１、ｍ２、ｍ３、ｍ４、ｍ５、ｍ６でメッセージ処理することができる。また、中間および下流の情報処理装置２００Ｂ、２００Ｃでも、上流の情報処理装置２００Ａからメッセージｍ１、ｍ２の順序でメッセージを受信し、正常にメッセージ処理できる。
【００９０】
なお、この後に、たとえば、中間の情報処理装置２００Ｂがメッセージを正常な到着順序で受信できない場合が生じれば、中間の情報処理装置２００Ｂと下流の情報処理装置２００Ｃ側は上記同様の修正処理を実行する。このように、複数の情報処理装置２００のいずれの伝送路上でメッセージ遅延が生じた場合であっても、各情報処理装置２００はメッセージの到着順序を修正してそれぞれ正常にメッセージ処理できるようになる。そして、図９に示すように、複数のマイクロサービスが連携し、情報処理装置２００の段数が増え、影響を受けるメッセージの数が増えた場合でも同様の修正処理でメッセージの到着順序を正常に修正することができる。
【００９１】
図１０には、問題ケース４に対する修正処理例４を示す。この問題ケース４では、送信側２：受信側１のマイクロサービス間接続の例として、上流に複数のマイクロサービス（２つのマイクロサービス）が配置され、下流の一つのマイクロサービス（一つのマイクロサービス）に合流するシステム構成例を示す。
【００９２】
図１０には、上流側の２つのマイクロサービスのうち一方の情報処理装置２００Ａがメッセージｍ１〜ｍ４を送信し、他方の情報処理装置（不図示）がメッセージｘ１を送信する。そして、これらのメッセージｍ１〜ｍ４、ｘ１が下流側の情報処理装置２００Ｂで合流して受信する構成例を記載してある。
【００９３】
そして、正常時の到着順序がメッセージｍ１、ｍ２、ｘ１、ｍ３、ｍ４であるとする。ここで、（１）メッセージｍ１が遅延したため、到着順序がｍ２、ｘ１、ｍ３、ｍ４、ｍ１の順序に入れ替わった状態を示す。この際、下流の情報処理装置２００Ｂのキュー２０１にメッセージｍ２が入ったとする。また、上流の情報処理装置２００Ａでは、メッセージｍ２、ｍ３のスナップショットを記録保持し、キュー２０１にはメッセージｍ４が入っている。
【００９４】
つぎに、（２）下流の情報処理装置２００Ｂでは、マイクロサービス処理部１０１がメッセージｍ２をメッセージ処理し、メッセージｍ２のスナップショットを記録保持する。また、上流の情報処理装置２００Ａでは、マイクロサービス処理部１０１がメッセージｍ４をメッセージ処理し、メッセージｍ２〜ｍ４のスナップショットを記録保持する。また、キュー２０１にメッセージｍ１が入る。
【００９５】
ここで、実施の形態では、情報処理装置２００Ａのメッセージ制御部１０２は、キュー２０１のメッセージｍ１のタイムスタンプと、スナップショットｍ２〜ｍ４の比較により、メッセージｍ１の到着遅れ（順序の逆転）を判断する。また、メッセージｍ２〜ｍ４が順序の修正対象であると判断する。そして、情報処理装置２００Ａのメッセージ制御部１０２は、ｍ２処理前までロールバックすることにより、メッセージを正常な到着順序ｍ１、ｍ２、ｍ３、ｍ４に修正する。
【００９６】
これにより、（３）上流の情報処理装置２００Ａでは、キュー２０１にメッセージｍ１、ｍ２、ｍ３、ｍ４の順序で入り、マイクロサービス処理部１０１はメッセージｍ４のメッセージ処理をキャンセルし、スナップショットｍ２〜ｍ４を削除する。
【００９７】
また、下流の情報処理装置２００Ｂでは、キュー２０１の修正対象メッセージｍ３を削除し、キュー２０１にはメッセージｘ１のみとなる。この際、マイクロサービス処理部１０１はメッセージｍ２のメッセージ処理をキャンセルし、メッセージ処理を停止（ｓｔｏｐ）する。
【００９８】
この際、メッセージの到着順序が正常でないと判断した情報処理装置２００Ａは、下流の情報処理装置２００Ｂに対して上述した修正通知を送信する。
【００９９】
つぎに、（４）上流の情報処理装置２００Ａでは、マイクロサービス処理部１０１がメッセージｍ１をメッセージ処理し、スナップショットｍ１を記録保持する。下流の情報処理装置２００Ｂでは、マイクロサービス処理部１０１はメッセージ処理が停止したままである。
【０１００】
この後、（５）上流の情報処理装置２００Ａでは、マイクロサービス処理部１０１がメッセージｍ２をメッセージ処理し、スナップショットｍ１、ｍ２を記録保持する。キュー２０１には、メッセージｍ３、ｍ４がある。下流の情報処理装置２００Ｂでは、メッセージ制御部１０２が受信メッセージを時間順でソートし、キュー２０１にはメッセージｍ１、ｘ１の順に入る。この際、キュー２０１の先頭が修正後のメッセージ（ｍ１）であれば、メッセージ制御部１０２は、マイクロサービス処理部１０１の停止を解除する。
【０１０１】
この後、（６）上流の情報処理装置２００では、正常化されたメッセージの到着順序ｍ１、ｍ２、ｍ３、ｍ４をメッセージ処理することができる。また、下流の情報処理装置２００Ｂでも、合流するメッセージｍ１、ｍ２、ｘ１、ｍ３、ｍ４の順序を有して正常にメッセージ処理できる。
【０１０２】
実施の形態では、上記の問題ケース１〜４に基づき、スナップショットを保持するための最大の記録容量（サイズＮmax）を下記式（１）に基づき設定する。
【０１０３】
【数１】
2019169109.tif 000003
【０１０４】
ただし、ｍ：下流のマイクロサービス数（マイクロサービス処理部１０１の数）、Ｑi＝下流ｉ番目のマイクロサービスのキューサイズである。
【０１０５】
図１１は、実施の形態にかかる情報処理装置に必要なスナップショットのサイズを示す説明図である。３つのマイクロサービス処理部１０１（情報処理装置２００Ａ〜２００Ｃ）を有し、メッセージ到着順序がｍ１〜ｍ８、ｍｘである場合（メッセージｍｘはマイクロサービス処理前の状態）を例に説明する。
【０１０６】
この場合、最上流の情報処理装置２００Ａのマイクロサービス処理部Ｓ１（１０１）が修正をおこなうには、最大でメッセージｍ１〜ｍ８が対象となる（スナップショットの数＝８）。中間の情報処理装置２００Ｂのマイクロサービス処理部Ｓ２（１０１）が修正をおこなうには、最大でメッセージｍ１〜ｍ４が対象となる（スナップショットの数＝４）。最下流の情報処理装置２００Ｃのマイクロサービス処理部Ｓ３（１０１）が修正をおこなうには、最大でメッセージｍ１が対象となる（スナップショットの数＝１）。
【０１０７】
このように、実施の形態によれば、下流のマイクロサービス（マイクロサービス処理部１０１）になるほどスナップショット記録数は少なくて済む。すなわち、実施の形態では、上流から下流までの全てのマイクロサービスのスナップショット記録数を同じ（最上流マイクロサービスで必要な記録数）にする必要はなく、システム全体で必要な記憶資源（履歴記録部１０３）のサイズを小さくすることができる。
【０１０８】
また、メッセージの到着遅れにより生じた間違ったマイクロサービス実行を正しいマイクロサービス実行にリカバリすることができ、かつ、履歴記録部１０３で必要なスナップショット記録数を必要最小限に抑えることができる。
【０１０９】
また、メッセージ制御部１０２は、最初にメッセージの到着遅れを検知するまでは、スナップショットを記録せず、最初のメッセージ到着遅れ検出の後、下流のマイクロサービスも含めスナップショット記録を開始してもよい。この場合、メッセージ制御部１０２は、最初のメッセージの到着遅れによる誤ったマイクロサービス処理のリカバリ（修正処理）はおこなわないこととする。
【０１１０】
また、メッセージ制御部１０２（検査部２１２）は、最初のメッセージ到着遅れを検知するまで、マイクロサービス処理部１０１が最後に処理したメッセージのタイムスタンプｔ＿ａを保持する。そして、到着したメッセージのタイムスタンプｔ＿ｂと比較して、ｔ＿ｂがｔ＿ａよりも古い場合、到着遅れと判定してもよい。
【０１１１】
この場合、メッセージ到着遅れ検出後のリカバリは、２回目のメッセージ到着遅れからとなる。しかし、メッセージ制御部１０２は、全てのマイクロサービス処理部１０１でのスナップショットを記録する必要がなくなるため、スナップショット記録に必要な記憶資源（履歴記録部１０３）のサイズを削減できる。
【０１１２】
履歴記録部１０３は、マイクロサービスの初期状態のスナップショットＳＳ［０］と、処理したメッセージだけを記録してもよい。スナップショットＳＳ［ｉ］（ｉ＝１、…、ｎ）はメッセージの記録のみとなる。この場合、ロールバック制御部２１３によるロールバック処理は、マイクロサービスの状態をＳＳ［０］へ戻し、求めたＳＳ［ｒ］までのメッセージを順番に実行させる。これにより、スナップショットのサイズを小さくすることができ、スナップショット記録に必要な記憶資源（履歴記録部１０３）のサイズを削減できる。
【０１１３】
（従来技術について）
図１２は、従来技術によるメッセージ通信の例を示す説明図である。図１２（ａ）は、マイクロサービス１２０１と、マイクロサービス１２０２が１：１の場合のシステム１２００の構成例、図１２（ｂ）は、ｎ：１の場合のシステム１２１０の構成例を示す。
【０１１４】
図１２（ａ）の１：１のシステム１２００では、マイクロサービスＡ（１２０１）がメッセージａ、ｂの順序で送信した後、経路上での通信の輻輳等によりメッセージａに遅延Ｘが生じたとする。この場合、たとえば、ＭＱなどの従来の順序性保証機構により、マイクロサービスＢ（１２０２）では正常なメッセージａ、ｂの順序で受信することができる。
【０１１５】
しかし、従来技術では、図１２（ｂ）のｎ：１のシステム１２１０では、メッセージの順序性を保証することができない。上流に２つのマイクロサービスＡ１（１２０１ａ）、Ａ２（１２０１ｂ）が配置され、マイクロサービスＡ１（１２０１ａ）がメッセージａを送信し、マイクロサービスＡ２（１２０１ｂ）がメッセージｂを送信する。下流のマイクロサービスＢ（１２０２）は、上流の２つのマイクロサービスＡ１、Ａ２（１２０１ａ、１２０１ｂ）のメッセージａ、ｂが合流する形で受信する。
【０１１６】
このような経路上で合流を含むシステム１２１０では、メッセージの順序性を保証できない。図１２（ｂ）の場合、下流側ではメッセージａ、ｂ、あるいはメッセージｂ、ａの到着順序で受信するが、順序性保証機構を用いてもいずれの順序が正しいものであるか判断できない。
【０１１７】
通信の輻輳などでメッセージの到着順序が変わると、誤った処理結果がメッセージとして下流へ伝播し、下流全ての処理が誤った結果となる。従来技術では、古いメッセージが到着してはじめてメッセージの到着遅れを判断できるため、必ず誤った処理後のメッセージを送った後になり、下流へメッセージを送る前に止めることはできない。
【０１１８】
たとえば、システム１２１０においてマイクロサービスＢ（１２０２）が正しいメッセージａ、ｂの順序で受信した場合には、この到着順序ａ、ｂで正しくメッセージ処理できる。しかし、メッセージａに遅延が生じて、マイクロサービスＢ（１２０２）がメッセージｂ、ａの順序で受信した場合には、この到着順序ｂ、ａでメッセージ処理し下流に送信する。マイクロサービスＢ（１２０２）は、メッセージａ、ｂが揃った後にタイムスタンプを比較する等してメッセージａの到着遅れを検出するが、この到着遅れの検出は、既に誤った処理結果を送出した後である。誤った処理結果はシステム１２１０の下流の全てのマイクロサービスに伝播してしまう。
【０１１９】
図１３は、ｎ：１のメッセージ通信で順序保証が必要な事象を示す説明図である。近年、ＩｏＴ（Ｉｎｔｅｒｎｅｔ  ｏｆ  Ｔｈｉｎｇｓ）技術により実世界で発生した事象をクラウド上のメッセージ（イベント）に変換し、マイクロサービス間のメッセージ通信で処理するようになってきている。
【０１２０】
図１３には、実世界で走行する車両の速度違反システムの例を示す。実世界では車両に設けられたセンサ等により車両の現在位置（一般道または高速道路）と、車両の速度を検出する。クラウド側のシステム１３００は、マイクロサービスＡ１（１３０１ａ）が車両の現在位置のメッセージ処理をおこない、マイクロサービスＡ２（１３０１ｂ）が車両の速度検出のメッセージ処理をおこなう。そして、マイクロサービスＢ（１３０２）は、マイクロサービスＡ１、Ａ２（１３０１ａ、１３０１ｂ）のメッセージを合流して受信し、スピード違反のメッセージ処理をおこない、マイクロサービスＣ（１３０３）は免許証の減点のメッセージ処理をおこなう。
【０１２１】
上記マイクロサービスのシステム１３００において、実世界での車両の現在位置と速度は、正しくはメッセージａ、ｂの順序であったとする。メッセージａは現在位置が高速道路であり、メッセージｂが速度１００ｋｍ／ｈであるとする。
【０１２２】
しかし、メッセージａに遅延Ｘが生じた場合、マイクロサービスＢ（１３０２）では誤った到着順序ｂ、ａでメッセージ処理してしまう。この場合、実世界の車両は高速道路上で１００ｋｍ／ｈの速度で走行しているところ、マイクロサービスＢ（１３０２）では車両が高速道路ではない現在位置（一般道）上で速度１００ｋｍ／ｈで走行するため、スピード違反であるとメッセージ処理してしまう。さらに、下流のマイクロサービスＣ（１３０３）では、スピード違反のメッセージ処理に基づき所定の減点のメッセージ処理をしてしまう。
【０１２３】
このように、クラウド上のシステム１３００では、実世界の事象発生に伴うメッセージを正しい順序で伝播させないと誤った処理結果を生み出し、一つのマイクロサービスで生じた誤りをさらに下流のマイクロサービスに伝播させてしまう。
【０１２４】
図１４Ａ、図１４Ｂは、従来技術による複数のマイクロサービスを連携させたときの問題を示す説明図である。これら図１４Ａ、図１４Ｂには、ある部屋の省エネ効果測定を５つのマイクロサービスで連携して処理するシステムを示す。図１４Ａは、マイクロサービス間でのメッセージ順序が正しい場合、図１４Ｂは、マイクロサービス間でのメッセージ順序が入れ替わった場合を示す。
【０１２５】
図１４Ａの（ａ）は、システム１４００の構成例であり、図１４Ａの（ａ）に示す実世界に配置した入退室検知器Ａは部屋へ入室した人体の数を入退室カード等によりユーザ別（個別）に検出し、電力計測器Ｂは部屋で消費する電力を検出する。システム１４００の５つのマイクロサービスは、在室者カウンタ（マイクロサービス）１４０１が入退室検知器Ａの検知情報に基づき、部屋への人体の入退室をカウント（加減算）し、現在部屋にいる人体の数を判断するメッセージ処理おこなう。消費電力計測（マイクロサービス）１４０２は、電力計測器Ｂの計測の情報に基づき、部屋の消費電力を計測するメッセージ処理をおこなう。
【０１２６】
効率計算（マイクロサービス）１４０３は、在室者カウンタ１４０１と、消費電力計測１４０２のマイクロサービスの合流したメッセージを受信し、現在部屋にいる人体の数あたりの電力消費の効率（Ｗ／人）を求めるメッセージ処理をおこなう。省エネ評価（マイクロサービス）１４０４は、効率計算の結果に基づく省エネ状態を点数で評価するメッセージ処理をおこなう。月間効果測定（マイクロサービス）１４０５は、部屋の月間の省エネ効果の評価（たとえば、点数の推移、月間の評価の点数の平均、前回評価の点数に対する差分等）のメッセージ処理をおこなう。
【０１２７】
図１４Ａの（ｂ）には、メッセージの到着順序が正常時のシステム１４００の各マイクロサービスの動作例を示すシーケンス図を示す。はじめに、入退室検知器Ａが部屋から一人の退室を検知し、このときの在室者カウンタ（マイクロサービス）１４０１が在室者一人と判断したとする。そして、電力計測器Ｂが２００Ｗの消費電力を計測すると、効率計算（マイクロサービス）１４０３は２００Ｗ／人の効率計算をおこなう。そして、省エネ評価（マイクロサービス）１４０４は在室者の省エネ評価を６０点と評価する。月間効果測定（マイクロサービス）１４０５は前回の省エネ評価時ｔ１〜今回の省エネ評価時ｔ２の点数推移を求める。たとえば前回の点数が８０点だった場合、ｔ１〜ｔ２が８０点として出力する。
【０１２８】
この後、入退室検知器Ａが部屋へ一人の入室を検知し、このときの在室者カウンタ（マイクロサービス）１４０１が在室者２人と判断したとすると、効率計算（マイクロサービス）１４０３は１００Ｗ／人の効率計算をおこなう。そして、省エネ評価（マイクロサービス）１４０４は在室者の省エネ評価を１００点と評価する。月間効果測定（マイクロサービス）１４０５はｔ２〜ｔ３が６０点である情報（メッセージ）を出力する。
【０１２９】
つぎに、図１４Ｂに示すマイクロサービス間でのメッセージの到着順序が入れ替わった場合について説明する。図１４Ｂの（ａ）に示すように、システム１４００の在室者カウンタ（マイクロサービス）１４０１のメッセージに遅延Ｘが発生したとする。
【０１３０】
図１４Ｂの（ｂ）に示すように、遅延Ｘの発生が一人入室時に生じた場合、在室者カウンタ（マイクロサービス）１４０１から出力されるメッセージは、効率計算（マイクロサービス）１４０３に本来の到達時点（時期ｔ０）で受信される。しかし、遅延Ｘにより、在室者カウンタ（マイクロサービス）１４０１から出力されるメッセージが実際には時期ｔｘで効率計算（マイクロサービス）１４０３に到達（受信）したとする。
【０１３１】
この場合、遅延Ｘによる期間Ｔの間、効率計算（マイクロサービス）１４０３は、一人の入室にかかるメッセージを受信しない状態のままメッセージ処理をおこなう。この場合、本来入室は二人であるところ、一人しか入室していない状態（合計一人）だけで電力計測器Ｂが検出した消費電力８００Ｗに基づく効率計算（８００Ｗ／一人）をおこなう。この結果、下流の省エネ評価（マイクロサービス）１４０４は１０点と評価し、月間効果測定（マイクロサービス）１４０５もｔ２〜ｔ４が６０点と判断してしまう。図中×印は、本来必要なメッセージ処理であるが未処理となったメッセージ処理結果、△印は誤った処理によるメッセージ処理結果である。
【０１３２】
遅延Ｘのメッセージによる期間Ｔ経過後、システム１４００の消費電力計測（マイクロサービス）は、遅延したメッセージが時期ｔｘで実際に到着した時点ではじめてこのメッセージの到着遅れを検出する。このように、従来技術では、メッセージに遅延が生じた場合、遅延した期間Ｔまでの間、メッセージの遅延の有無を判断できずにメッセージ処理をおこなってしまい、下流の全てのマイクロサービスも同様に誤ったメッセージ処理をおこなう問題が生じた。
【０１３３】
これに対し、実施の形態によれば、各マイクロサービスにマイクロサービス間のメッセージの伝播状態と、メッセージ処理時のタイムスタンプによりメッセージの到着遅れを検知できる。一つのマイクロサービスのメッセージ遅延はキュー内でのタイムスタンプの比較だけで簡単に検出でき、正しいメッセージ順序に修正できる。
【０１３４】
また、メッセージの遅延が複数のマイクロサービスに影響を与える場合、たとえば、遅延したメッセージのメッセージ処理を実行せずに下流に処理後のメッセージを出した場合にも対応できる。この場合、メッセージ処理後のスナップショットを参照して、ロールバック制御することで、正しいメッセージ順序に修正でき、再度メッセージ処理できるようになる。具体的には、下流のマイクロサービスでは、到着遅れメッセージより先行したメッセージをメッセージ処理した以前の状態のスナップショットを参照して状態を戻し、到着遅れのメッセージから正しいメッセージ順序でメッセージ処理を再実行することができる。
【０１３５】
また、上流の複数のマイクロサービスのメッセージが合流して下流の一つのマイクロサービスで受信するシステム構成においても、修正通知によりサービス処理部でのメッセージ処理を停止する。このように上流で並列にメッセージ処理する場合において、たとえば一方のメッセージに到着遅れが生じても、自身のマイクロサービスでは正しいメッセージ到着順序に修正できる。加えて、下流のマイクロサービスでは、メッセージ処理を停止することで誤ったメッセージ処理結果をさらに下流に伝播させることを防ぐことができる。また、キューの先頭のメッセージが正しく修正されたメッセージになれば停止を解除して、メッセージ処理を再開できる。
【０１３６】
また、サービス処理部の処理時のスナップショットは、キューサイズから求めた所定数分だけ保存すればよい。この際、保持するスナップショットは、下流の情報処理装置のサービス処理部の数と、キューサイズに基づく記録容量とすることができ、下流のマイクロサービスに至るにつれて記録容量を小さくできる。これにより、システム全体でのスナップショットを保持するための記録容量を削減できるようになる。
【０１３７】
従来スナップショットを保持する記録容量は、運用者が勘により経験上十分と考える世代数分にするため、余裕を持った世代数となり、必要以上のスナップショットを保存していた。これに対し、実施の形態では、スナップショットの記録容量を削減でき、記憶資源にかかるコストを低コスト化できるようになる。
【０１３８】
そして、実施の形態によれば、上流のマイクロサービスで到着遅れを検出して下流のマイクロサービスに修正通知を送信するため、簡単な構成で正しいメッセージ順序に修正できる。このため、メッセージの順序保証を伝送路等でおこなう必要がなく、高価な専用システムを用いる必要がない。
【０１３９】
そして、実施の形態によれば、所定のサービスを提供する複数のマイクロサービスのいずれかでメッセージ到着遅れが生じても、簡単な処理と低コストな構成で全てのマイクロサービスがそれぞれ正しいメッセージ到着順序でメッセージ処理できるようになる。
【０１４０】
なお、本発明の実施の形態で説明した情報処理プログラムは、あらかじめ用意されたプログラムをサーバ等のプロセッサに実行させることにより実現することができる。本制御方法は、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、フラッシュメモリ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本制御方法は、インターネット等のネットワークを介して配布してもよい。
【０１４１】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１４２】
（付記１）複数のマイクロサービス間でメッセージ通信し、それぞれが前記マイクロサービスをおこなう情報処置装置において、
受信した複数の前記メッセージのタイムスタンプを比較し、遅延して到着した前記メッセージを判断し、前記メッセージを正しい到着順序で再度メッセージ処理し、前記メッセージを受信する下流の情報処理装置に対し、正しいメッセージの到着順序で再度メッセージ処理させる修正通知を送信する、
メッセージ制御部を有することを特徴とする情報処理装置。
【０１４３】
（付記２）受信したメッセージを到着順序で格納するキューと、
前記キューへの格納順に前記メッセージを読み出し、所定のメッセージ処理をおこなうサービス処理部と、を有し、
前記メッセージ制御部は、
前記サービス処理部のメッセージ処理毎の処理状態をスナップショットとして処理順に保持する履歴記録部と、
前記キューに格納された前記メッセージと、前記履歴記録部に保持された前記スナップショットに基づき、前記受信したメッセージの到着順序が正常か否かを検査し、検査結果を前記修正通知として送信する検査部と、
前記修正通知の受信時に、前記キューおよび前記サービス処理部に対し、正しいメッセージの到着順序で処理をおこなわせるロールバック制御をおこなうロールバック制御部と、を有する、
ことを特徴とする付記１に記載の情報処理装置。
【０１４４】
（付記３）前記検査部は、
下流の情報処理装置に対する前記修正通知として、修正対象の前記メッセージの識別子と、到着順序を正しく修正した後のメッセージ列の先頭のメッセージの識別子の情報を送信することを特徴とする付記２に記載の情報処理装置。
【０１４５】
（付記４）前記ロールバック制御部は、
前記修正通知の受信時に、当該修正通知に基づき、前記キューに対し、正しく修正した後のメッセージ列を格納し、前記サービス処理部に対し、遅延して到着した前記メッセージ以前のメッセージ処理状態にロールバックさせることを特徴とする付記２または３に記載の情報処理装置。
【０１４６】
（付記５）前記ロールバック制御部は、
前記修正通知の受信時に、当該修正通知に基づき、前記サービス処理部に対し、到着順序が正しくない前記メッセージのメッセージ処理をキャンセルさせることを特徴とする付記４に記載の情報処理装置。
【０１４７】
（付記６）前記ロールバック制御部は、
前記修正通知の受信時に、前記キューに格納された修正対象の前記メッセージを削除することを特徴とする付記４または５に記載の情報処理装置。
【０１４８】
（付記７）上流の複数の情報処理装置から合流して前記メッセージを受信するシステム構成の場合、
前記ロールバック制御部は、
前記修正通知の受信時に、前記サービス処理部によりメッセージ処理を停止し、前記キューの先頭のメッセージが正しく修正されたメッセージであれば前記停止を解除することを特徴とする付記２または３に記載の情報処理装置。
【０１４９】
（付記８）前記履歴記録部は、
下流の情報処理装置の前記サービス処理部の数と、キューサイズに基づく記録容量を有することを特徴とする付記２〜７のいずれか一つに記載の情報処理装置。
【０１５０】
（付記９）前記履歴記録部は、
前記スナップショットとして、前記サービス処理部のメッセージ処理毎のサービス状態の履歴を記録保持することを特徴とする付記２〜８のいずれか一つに記載の情報処理装置。
【０１５１】
（付記１０）複数のマイクロサービス間でメッセージ通信し、それぞれが前記マイクロサービスをおこなう複数の情報処置装置を含む情報処理システムにおいて、
前記情報処理装置は、それぞれ、
受信したメッセージを到着順序で格納するキューと、
前記キューへの格納順に前記メッセージを読み出し、所定のメッセージ処理をおこなうサービス処理部と、
前記メッセージのタイムスタンプを比較し、遅延して到着した前記メッセージを判断し、前記メッセージを正しい到着順序で再度メッセージ処理し、前記メッセージを受信する下流の情報処理装置に対し、正しいメッセージの到着順序で再度メッセージ処理させる修正通知を送信するメッセージ制御部と、
を有することを特徴とする情報処理システム。
【０１５２】
（付記１１）複数のマイクロサービス間でメッセージ通信し、それぞれが前記マイクロサービスをおこなう複数の情報処置装置と、メッセージ制御装置とを含む情報処理システムにおいて、
前記情報処理装置は、それぞれ、
受信したメッセージを到着順序で格納するキューと、
前記キューへの格納順に前記メッセージを読み出し、所定のメッセージ処理をおこなうサービス処理部と、を有し、
前記メッセージ制御装置は、
前記情報処理装置のメッセージのタイムスタンプを比較し、遅延して到着した前記メッセージを判断し、前記メッセージを正しい到着順序で再度メッセージ処理し、前記メッセージを受信する下流の情報処理装置に対し、正しいメッセージの到着順序で再度メッセージ処理させる修正通知を送信する、
ことを特徴とする情報処理システム。
【０１５３】
（付記１２）複数のマイクロサービス間でメッセージ通信し、それぞれが前記マイクロサービスをおこなう情報処置装置のコンピュータに、
受信した複数の前記メッセージのタイムスタンプを比較し、遅延して到着した前記メッセージを判断し、
前記メッセージを正しい到着順序で再度メッセージ処理し、
前記メッセージを受信する下流の情報処理装置に対し、正しいメッセージの到着順序で再度メッセージ処理させる修正通知を送信する、
処理を実行させることを特徴とする情報処理プログラム。
【０１５４】
（付記１３）前記修正通知の受信時に、当該修正通知に基づき、正しく修正した後のメッセージ列をキューに格納し、
前記マイクロサービスの処理をおこなうサービス処理部に対し、遅延して到着した前記メッセージ以前のメッセージ処理状態にロールバックさせる、
処理を実行させることを特徴とする付記１２に記載の情報処理プログラム。
【符号の説明】
【０１５５】
１００  情報処理システム
１０１  マイクロサービス処理部
１０２  メッセージ制御部
１０３  履歴記録部
２００（２００Ａ〜２００Ｃ）  情報処理装置
２０１  キュー
２１２  検査部
２１３  ロールバック制御部
３０１  ＣＰＵ
３０２  メモリ
３０３  ネットワークインタフェース
３０５  記録媒体
３３０  ネットワーク
【図１】
2019169109.tif 000004
【図２Ａ】
2019169109.tif 000005
【図２Ｂ】
2019169109.tif 000006
【図３】
2019169109.tif 000007
【図４】
2019169109.tif 000008
【図５】
2019169109.tif 000009
【図６】
2019169109.tif 000010
【図７】
2019169109.tif 000011
【図８】
2019169109.tif 000012
【図９】
2019169109.tif 000013
【図１０】
2019169109.tif 000014
【図１１】
2019169109.tif 000015
【図１２】
2019169109.tif 000016
【図１３】
2019169109.tif 000017
【図１４Ａ】
2019169109.tif 000018
【図１４Ｂ】
2019169109.tif 000019