(57)【要約】【課題】メッセージの欠損を抑制することを目的としている。【解決手段】他のサービスと連携したサービスを実行させるメッセージと、前記サービスの状態の遷移との関係を示す状態遷移情報を用いて、前記他のサービスから受信しメッセージキューに保持されたメッセージ列を短縮させる短縮メッセージ列を特定し、前記メッセージ列から前記短縮メッセージ列を検出するメッセージ列検出部と、前記短縮メッセージ列に応じて、前記メッセージキューに保持されたメッセージ列を短縮させる短縮処理部と、を有する。【選択図】図１４
2019086913.tif 000002
【特許請求の範囲】
【請求項１】
他のサービスと連携したサービスを実行させるメッセージと、前記サービスの状態の遷移との関係を示す状態遷移情報を用いて、前記他のサービスから受信しメッセージキューに保持されたメッセージ列を短縮させる短縮メッセージ列を特定し、前記メッセージ列から前記短縮メッセージ列を検出するメッセージ列検出部と、
前記短縮メッセージ列に応じて、前記メッセージキューに保持されたメッセージ列を短縮させる短縮処理部と、を有する情報処理装置。
【請求項２】
前記短縮メッセージ列は、
前記サービスが前記短縮メッセージ列を受信する前の状態と、前記短縮メッセージ列を受信した後の状態とが同一となる削除メッセージ列であり、
前記短縮処理部は、
前記メッセージキューに保持されたメッセージ列から前記削除メッセージ列を削除する、請求項１記載の情報処理装置。
【請求項３】
前記削除メッセージ列は、
前記状態遷移情報を示す行列をべき乗した状態遷移行列における対角要素に含まれるメッセージ列である、請求項２記載の情報処理装置。
【請求項４】
前記短縮メッセージ列は、
前記メッセージキューに保持されたメッセージ列において、前記短縮メッセージ列よりもメッセージ列の長さが短い他のメッセージ列に置換される置換メッセージ列であり、
前記短縮処理部は、
前記置換メッセージ列を前記他のメッセージ列に置き換える、請求項１乃至３の何れか一項に記載の情報処理装置。
【請求項５】
前記他のメッセージ列は、
前記状態遷移情報を示す行列をべき乗した状態遷移行列において、前記置換メッセージ列が含まれる要素に含まれるメッセージ列のうち、メッセージ列の長さが最も短いメッセージである、請求項４記載の情報処理装置。
【請求項６】
前記メッセージキューに保持されたメッセージ列に、短縮を禁止することを示す識別情報が付与されたメッセージが含まれる場合、前記識別情報が付与されたメッセージは、前記短縮メッセージ列から除外される、請求項１乃至５の何れか一項に記載の情報処理装置。
【請求項７】
複数のサービスをメッセージにより連携させる分散処理システムであって、
前記サービスは、
前記サービスを実行させるメッセージと、前記サービスの状態の遷移との関係を示す状態遷移情報を用いて、他のサービスから受信しメッセージキューに保持されたメッセージ列を短縮させる短縮メッセージ列を特定し、前記メッセージ列から前記短縮メッセージ列を検出するメッセージ列検出部と、
前記短縮メッセージ列に応じて、前記メッセージキューに保持されたメッセージ列を短縮させる短縮処理部と、を有する、分散処理システム。
【請求項８】
他のサービスと連携したサービスを実行させるメッセージと、前記サービスの状態の遷移との関係を示す状態遷移情報を用いて、前記他のサービスから受信しメッセージキューに保持されたメッセージ列を短縮させる短縮メッセージ列を特定し、前記メッセージ列から前記短縮メッセージ列を検出する処理と、
前記短縮メッセージ列に応じて、前記メッセージキューに保持されたメッセージ列を短縮させる処理と、をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、分散処理システム及びプログラムに関する。
【背景技術】
【０００２】
近年では、ネットワークへ接続できるセンサや家電等のＩｏＴ（Internet of Things）デバイスが数多く登場している。さらに、近年では、センサによるセンシングや携帯端末による操作等によりＩｏＴデバイスを制御するサービスが増えつつある。
【０００３】
このようなサービスは、マイクロサービスアーキテクチャと呼ばれる分散型システムとして構築されることがある。マイクロサービスの多くは、検索や認証等の単機能を提供するサービスである。分散型システムでは、複数のマイクロサービスを組合せ、マイクロサービス同士をメッセージのやり取りで連携させて、サービスを構築する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開２０１２／０３５９４７号公報
【特許文献２】特開２００２−１１７０４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述した分散システムでは、メッセージを送信する側のマイクロサービスが、メッセージを受信する側のマイクロサービスの処理速度を超える速度でメッセージを送信する場合がある。この場合には、メッセージが受信側のマイクロサービスのキューから溢れて欠損し、マイクロサービス同士が正しく連携されなくなる可能性がある。
【０００６】
１つの側面では、本発明は、メッセージの欠損を抑制することを目的としている。
【課題を解決するための手段】
【０００７】
一つ態様では、他のサービスと連携したサービスを実行させるメッセージと、前記サービスの状態の遷移との関係を示す状態遷移情報を用いて、前記他のサービスから受信しメッセージキューに保持されたメッセージ列を短縮させる短縮メッセージ列を特定し、前記メッセージ列から前記短縮メッセージ列を検出するメッセージ列検出部と、前記短縮メッセージ列に応じて、前記メッセージキューに保持されたメッセージ列を短縮させる短縮処理部と、を有する情報処理装置である。
【０００８】
上記各部は、上記各部を実現する手順、各処理としても良く、各処理をコンピュータに実行させるプログラムを記憶したコンピュータ読み取り可能な記憶媒体とすることもできる。
【発明の効果】
【０００９】
メッセージの欠損を抑制できる。
【図面の簡単な説明】
【００１０】
【図１】マイクロサービスの仕組みについて説明する図である。
【図２】削除メッセージ列について説明する図である。
【図３】メッセージと、ディスプレイの状態との関係を示す図である。
【図４】状態遷移情報と削除メッセージ列について説明する図である。
【図５】メッセージの削除について説明する図である。
【図６】分散処理システムのシステム構成の一例を示す図である。
【図７】第一の実施形態の情報処理装置のハードウェア構成の一例を示す図である。
【図８】第一の実施形態の分散処理システムの機能を説明する図である。
【図９】第一の実施形態の状態遷移情報の一例を示す図である。
【図１０】第一の実施形態の削除メッセージ列情報の一例を示す図である。
【図１１】第一の実施形態の削除メッセージ列情報を生成する処理を説明するフローチャートである。
【図１２】第一の実施形態のメッセージ処理部の処理を説明するフローチャートである。
【図１３】第一の実施形態におけるメッセージを削除する処理を説明するフローチャートである。
【図１４】第一の実施形態におけるメッセージの削除を具体的に説明する図である。
【図１５】第二の実施形態の分散処理システムの機能を説明する図である。
【図１６】第二の実施形態におけるメッセージの置換を説明する図である。
【図１７】第二の実施形態のメッセージ処理部の処理を説明するフローチャートである。
【図１８】第二の実施形態におけるメッセージを置換する処理を説明するフローチャートである。
【図１９】第二の実施形態おけるメッセージの置換を具体的に説明する図である。
【図２０】第三の実施形態の分散処理システムの機能を説明する図である。
【図２１】第三の実施形態の状態遷移情報と状態遷移行列の一例を示す図である。
【図２２】第三の実施形態におけるメッセージを削除する処理を説明するフローチャートである。
【図２３】第三の実施形態におけるメッセージを置き換える処理を説明するフローチャートである。
【図２４】第三の実施形態におけるメッセージの削除と置き換えを説明する図である。
【発明を実施するための形態】
【００１１】
（第一の実施形態）
以下に、図面を参照して第一の実施形態について説明する。図１は、マイクロサービスの仕組みについて説明する図である。
【００１２】
本実施形態のマイクロサービスとは、単機能を実現するアプリケーションである。本実施形態では、複数のマイクロサービスをメッセージによって連携させることで、１つのサービスが実現される。以下の説明では、複数のマイクロサービスを組み合わせて１つのサービスを提供するシステムを、分散処理システムと呼ぶ。
【００１３】
図１では、マイクロサービス２００と、マイクロサービス３００とにより構築された分散処理システムにおいて、マイクロサービス２００と、マイクロサービス３００とが、メッセージによって連携している。図１の例では、マイクロサービス２００は、メッセージを送信する送信側のマイクロサービスであり、マイクロサービス３００は、メッセージを受信する受信側のマイクロサービスである。
【００１４】
図１の例では、マイクロサービス２００は、メッセージを送信し続ける。送信されたメッセージは、マイクロサービス３００のキューに、ＦＩＦＯ（First In, First Out）形式で保持される。マイクロサービス３００は、キューからのメッセージの取り出しと実行を繰り返す。このようにすることで、メッセージを用いてマイクロサービス２００、３００を連携させる。
【００１５】
本実施形態では、受信側のマイクロサービスのキューから、メッセージが溢れて欠損することを抑制する。より具体的には、本実施形態では、キューに保持されたメッセージから、削除することができるメッセージ列を検出し、検出されたメッセージ列を削除することで、キューからメッセージが溢れることを抑制する。以下の説明では、削除することができるメッセージ列を削除メッセージ列と呼ぶ。
【００１６】
以下に、図２及び図３を参照して、本実施形態の削除メッセージ列について説明する。図２は、削除メッセージ列について説明する図である。
【００１７】
図２では、送信側のマイクロサービス２００は、例えば、端末装置２を、ディスプレイ３の表示を制御するコントローラとして機能させるコントローラサービスである。端末装置２は、例えば、スマートフォンやタブレット端末等である。
【００１８】
また、受信側のマイクロサービス３００は、例えば、ディスプレイ３の表示を制御するディスプレイ制御サービスである。ディスプレイ３は、例えば、テレビ等であっても良い。
【００１９】
マイクロサービス２００、１ｂは、ネットワーク上に構築されている。本実施形態では、例えば、マイクロサービス２００は、端末装置２からディスプレイ３の操作要求を受け付けると、端末装置２にコントロール画面２ａを表示させ、端末装置２をディスプレイ３のコントローラとして機能させる。
【００２０】
端末装置２において、ディスプレイ３に対する操作指示が入力されると、マイクロサービス２００は、操作指示と対応するメッセージをマイクロサービス３００に送信する。マイクロサービス３００は、メッセージを受信すると、キューに受信したメッセージを保持する。そして、マイクロサービス３００は、キューに保持されたメッセージを取り出して、ディスプレイ３をメッセージと対応する状態に遷移させる。また、マイクロサービス３００は、キューにメッセージが所定数保持されると、保持されたメッセージのから削除メッセージ列を検出し、削除する。
【００２１】
図３は、メッセージと、ディスプレイの状態との関係を示す図である。図３では、端末装置２に表示されたコントロール画面２ａに対する入力をメッセージとした場合の、ディスプレイ３の状態の遷移の例を示す。
【００２２】
状態１は、ディスプレイ３が、端末装置２からの操作を受けていない状態を示す。言い換えれば、状態１は、ディスプレイ３の初期状態を示す。
【００２３】
状態２は、状態１においてコントロール画面２ａで「ａ」ボタンが操作され、マイクロサービス２００がメッセージ「ａ」をマイクロサービス３００に送信し、マイクロサービス３００がメッセージ「ａ」を取り出して実行したときのディスプレイ３の状態を示す。状態３は、状態２においてコントロール画面２ａで「ｎ」ボタンが操作され、マイクロサービス２００がメッセージ「ｎ」をマイクロサービス３００に送信し、マイクロサービス３００がメッセージ「ｎ」を取り出して実行したときのディスプレイ３の状態を示す。状態４は、状態３においてコントロール画面２ａで「ｎ」ボタンが操作され、マイクロサービス２００がメッセージ「ｎ」をマイクロサービス３００に送信し、マイクロサービス３００がメッセージ「ｎ」を取り出して実行したときのディスプレイ３の状態を示す。
【００２４】
状態５は、状態１においてコントロール画面２ａで「ｂ」ボタンが操作され、マイクロサービス２００がメッセージ「ｂ」をマイクロサービス３００に送信し、マイクロサービス３００がメッセージ「ｂ」を取り出して実行したときのディスプレイ３の状態を示す。状態６は、状態５においてコントロール画面２ａで「ｎ」ボタンが操作され、マイクロサービス２００がメッセージ「ｎ」をマイクロサービス３００に送信し、マイクロサービス３００がメッセージ「ｎ」を取り出して実行したときのディスプレイ３の状態を示す。状態７は、状態１においてコントロール画面２ａで「ｎ」ボタンが操作され、マイクロサービス２００がメッセージ「ｎ」をマイクロサービス３００に送信し、マイクロサービス３００がメッセージ「ｎ」を取り出して実行したときのディスプレイ３の状態を示す。
【００２５】
また、状態２〜状態７において、コントロール画面２ａで「ｄ」ボタンが操作されると、ディスプレイ３の状態は、状態１に戻る。また、状態４において、コントロール画面２ａで「ｎ」ボタンが操作されると、ディスプレイ３の状態は状態２に戻り、状態７において、コントロール画面２ａで「ｎ」ボタンが操作されると、ディスプレイ３の状態は状態５に戻る。
【００２６】
本実施形態では、このように、端末装置２からマイクロサービス２００に対してディスプレイ３の操作指示を行うことで、マイクロサービス３００が、制御対象となるディスプレイ３の状態を、操作指示と対応した状態に遷移させる。
【００２７】
以下に、図３に示すメッセージとディスプレイ３の状態の遷移との関係と、削除メッセージ列との関係について説明する。
【００２８】
図４は、状態遷移情報と削除メッセージ列について説明する図である。図４（Ａ）は、状態遷移情報の一例を示し、図４（Ｂ）は、隣接行列の一例を示し、図４（Ｃ）は、隣接行列をべき乗した結果を示している。
【００２９】
本実施形態の削除メッセージ列は、マイクロサービス２００から送信されたメッセージと、マイクロサービス３００により制御されるディスプレイ３の状態とを対応付けた状態遷移情報から特定される。したがって、本実施形態の状態遷移情報とは、マイクロサービス３００がメッセージを受け付けたときのサービスの状態を示す状態である。
【００３０】
図４（Ａ）に示す状態遷移情報４では、メッセージによる遷移前の状態Ｓｓを縦方向に、遷移後の状態Ｓｔを横方向に示している。図４（Ｂ）に示す隣接行列Ａとは、状態遷移情報４を行列で示したものである。例えば、状態遷移情報４では、状態１において、マイクロサービス２００からマイクロサービス３００にメッセージ「ａ」が送信されると、ディスプレイ３の状態が状態２へ遷移することがわかる。また、状態遷移情報４では、状態４において、マイクロサービス２００からマイクロサービス３００にメッセージ「ｄ」が送信されると、ディスプレイ３の状態が状態１へ遷移することがわかる。
【００３１】
隣接行列Ａでは、状態Ｓｓからメッセージａで状態Ｓｔに遷移することを、要素Ａ（Ｓｓ，Ｓｔ）＝ａと示す。また、要素Ａ（Ｓｓ，Ｓｔ）＝０の場合は、状態が遷移しないことを示す。
【００３２】
本実施形態では、状態遷移情報４と対応する隣接行列Ａをべき乗した結果である行列ＡＮを求める。言い換えれば、本実施形態では、マイクロサービス２００からマイクロサービス３００に、Ｎ回メッセージが送信された場合、つまり、マイクロサービス３００がＮ個のメッセージを受信した場合の、ディスプレイ３の遷移前の状態と、遷移後の状態とを対応付けを求める。
【００３３】
図４（Ｃ）では、隣接行列Ａを２乗（Ｎ＝２）した結果である行列Ａ２を示している。行列ＡＮの要素ＡＮ（Ｓｓ，Ｓｔ）は、状態Ｓｓから状態ＳｔへのＮ回の遷移を意味しており、要素ＡＮ（Ｓｓ，Ｓｔ）の値は、メッセージ列である。メッセージ列とは、言い換えれば、メッセージの集合である。また、Ｎは、ＡＮ−１≠ＡＮ＝ＡＮ＋１が成り立つＮとする。
【００３４】
例えば、要素Ａ２（１，１）は、以下の式（１）で求められる。
【００３５】
要素Ａ２（１，１）＝００｜ａｄ｜０ｄ｜０ｄ｜ｂｄ｜０ｄ｜０ｄ＝ａｄ｜ｂｄ
尚、隣接行列Ａのべき乗は、通常の行列積の計算にしたがって行われる。ただし、本実施形態の行列積では、掛算はメッセージの連結、足し算はメッセージ列集合の和とする。例えば、メッセージ「ａ」とメッセージ「ｄ」の掛算の結果は、メッセージ列「ａｄ」である。これはメッセージ「ａ」の後メッセージ「ｄ」を受信した、という意味になる。また、本実施形態の行列積では、メッセージ列「ａｄ」とメッセージ列「ｂｄ」との足し算の結果は、メッセージ列集合の和「ａｄ｜ｂｄ」である。これはメッセージ列「ａｄ」又はメッセージ列「ｂｄ」という意味になる。
【００３６】
ここで、本実施形態では、マイクロサービス３００が複数のメッセージを含むメッセージ列を受信することで、ディスプレイ３の状態が、メッセージ列を受信する前の状態と同じ状態に戻る場合があることに着目する。ディスプレイ３の状態が、メッセージ列の受信前の状態に戻る場合、このメッセージ列を削除したとしても、状態の遷移に影響することがない。
【００３７】
そこで、本実施形態では、メッセージ列の受信後に、マイクロサービスによる制御対象となるデバイスの状態が、メッセージ列の受信前の状態に戻るメッセージ列を、削除メッセージ列に特定する。
【００３８】
例えば、図４（Ｃ）の行列Ａ２では、状態１のときに、メッセージ列「ａｄ」又はメッセージ列「ｂｄ」を受信すると、状態１に戻ることがわかる。また、行列Ａ２では、状態２のときに、メッセージ列「ｄａ」を受信すると、状態２に戻ることがわかる。
【００３９】
したがって、この場合、メッセージ列「ａｄ」、「ｂｄ」、「ｄａ」は、削除メッセージ列に特定される。
【００４０】
このように、本実施形態では、隣接行列Ａをべき乗した結果の行列ＡＮの対角要素の値であるメッセージ列を、削除メッセージ列に特定する。尚、以下の説明では、隣接行列Ａをべき乗した結果の行列ＡＮを、状態遷移行列Ｐと呼ぶ。
【００４１】
図５は、メッセージの削除について説明する図である。図５（Ａ）は、マイクロサービス３００が、メッセージ列「ａ」、「ｎ」、「ｎ」、「ｄ」を受信した場合のディスプレイ３の状態の遷移を示している。図５（Ｂ）は、マイクロサービス３００のキューに保持されるメッセージ列を示している。
【００４２】
図５（Ｃ）に示すように、ディスプレイ３の状態が、状態１の場合に、マイクロサービス３００がメッセージ列「ａ」、「ｎ」、「ｎ」、「ｄ」、「ａ」、「ｄ」を受信すると、ディスプレイ３の状態は、状態１から状態２、状態２から状態３、状態３から状態４、状態４から状態１、状態１から状態２、状態２から状態１と遷移する。
【００４３】
ここで、状態１から受信する２つのメッセージ「ａ」、「ｄ」が示すメッセージ列「ａｄ」は、行列Ａ２に基づき削除メッセージ列に特定されたメッセージ列である。
【００４４】
したがって、本実施形態では、キューに保持されるメッセージ列「ａｎｎｄａｄ」から、メッセージ列「ａｄ」を削除する。その結果、キューに保持されるメッセージ列は、「ａｎｎｄ」となり、キューに保持されるメッセージの数が少なくなり、状態の遷移に影響を及ぼさずに、キューからメッセージが溢れて欠損することを抑制できる。このため、本実施形態によれば、分散システムによるサービスを適切に提供することができる。
【００４５】
以下に、本実施形態の分散処理システムについて、さらに説明する。図６は、分散処理システムのシステム構成の一例を示す図である。
【００４６】
本実施形態の分散処理システム１００は、サービス要求を受けてメッセージを送信する送信側のマイクロサービス２００と、メッセージを受信してメッセージに応じたサービスを実行する受信側のマイクロサービス３００とを含む。
【００４７】
マイクロサービス２００とマイクロサービス３００とは、それぞれが、１つの機能を実現するアプリケーションである。
【００４８】
尚、本実施形態の分散処理システム１００は、マイクロサービス２００とマイクロサービス３００を有するものとしたが、これに限定されない。分散処理システム１００は、マイクロサービス２００、３００以外のマイクロサービスを含むシステムとして構築されても良い。
【００４９】
本実施形態の分散処理システム１００は、例えば、図６（Ａ）に示すように、情報処理装置４００内で構築されても良い。言い換えれば、マイクロサービス２００とマイクロサービス３００のそれぞれを実現するアプリケーションが、情報処理装置４００にインストールされていても良い。
【００５０】
また、分散処理システム１００は、例えば、図６（Ｂ）に示すようにマイクロサービス２００と、マイクロサービス３００とが異なる情報処理装置４００−１、４００−２に設けられても良い。言い換えれば、マイクロサービス２００とマイクロサービス３００とは。それぞれが、別の情報処理装置にインストールされていても良い。
【００５１】
以下に、本実施形態の情報処理装置４００ついて説明する。図７は、第一の実施形態の情報処理装置のハードウェア構成の一例を示す図である。
【００５２】
本実施形態の情報処理装置４００は、それぞれバスＢで相互に接続されている入力装置４１、出力装置４２、ドライブ装置４３、補助記憶装置４４、メモリ装置４５、演算処理装置４６及びインターフェース装置４７を含む情報処理装置である。
【００５３】
入力装置４１は、各種の情報の入力を行うための装置であり、例えばキーボードやポインティングデバイス等により実現される。出力装置４２は、各種の情報の出力を行うためものであり、例えばディスプレイ等により実現される。インターフェース装置４７は、ＬＡＮカード等を含み、ネットワークに接続する為に用いられる。
【００５４】
本実施形態のマイクロサービスを実現するプログラムは、情報処理装置４００を制御する各種プログラムの少なくとも一部である。プログラムは、例えば、記憶媒体４８の配布やネットワークからのダウンロード等によって提供される。プログラムを記録した記憶媒体４８は、ＣＤ−ＲＯＭ、フレキシブルディスク、光磁気ディスク等の様に情報を光学的、電気的或いは磁気的に記録する記憶媒体、ＲＯＭ、フラッシュメモリ等の様に情報を電気的に記録する半導体メモリ等、様々なタイプの記憶媒体を用いることができる。
【００５５】
また、プログラムは、プログラムを記録した記憶媒体４８がドライブ装置４３にセットされると、記憶媒体４８からドライブ装置４３を介して補助記憶装置４４にインストールされる。ネットワークからダウンロードされたプログラムは、インターフェース装置４７を介して補助記憶装置４４にインストールされる。
【００５６】
補助記憶装置４４は、インストールされたプログラムを格納すると共に、必要なファイル、データ等を格納する。メモリ装置４５は、情報処理装置４００の起動時に補助記憶装置４４からプログラムを読み出して格納する。そして、演算処理装置４６はメモリ装置４５に格納されたプログラムに従って、後述するような各種処理を実現している。
【００５７】
次に、図８を参照して、本実施形態の分散処理システム１００の機能について説明する。図８は、第一の実施形態の分散処理システムの機能を説明する図である。
【００５８】
本実施形態の分散処理システム１００は、マイクロサービス２００と、マイクロサービス３００とを有する。
【００５９】
本実施形態のマイクロサービス２００は、メッセージ処理部２１０と、サービス実行部２２０とを有する。また、マイクロサービス３００は、メッセージ処理部３１０と、サービス実行部３２０とを有する。
【００６０】
メッセージ処理部２１０と、メッセージ処理部３１０とは、マイクロサービス２００とマイクロサービス３００のそれぞれにおいて、キューに保持されたメッセージ列から、削除メッセージ列を検出し、削除する。メッセージ処理部２１０とメッセージ処理部３１０とは、それぞれが同様の機能を有するため、図８では、メッセージ処理部３１０についての説明を後述する。
【００６１】
サービス実行部２２０と、サービス実行部３２０とは、それぞれが、サービスを実行する。具体的には、サービス実行部２２０は、サービス要求を受け付けて、サービス要求に対応したメッセージをマイクロサービス３００へ送信する。サービス実行部３２０は、キューに保持されたメッセージを取り出して実行する。
【００６２】
また、本実施形態のサービス実行部３２０は、サービスが実行されて、制御対象のデバイス（例えば、ディスプレイ３等）の状態が変わると、現在のデバイスの状態をメッセージ処理部３１０に通知しても良い。
【００６３】
以下に、メッセージ処理部３１０について説明する。メッセージ処理部３１０は、メッセージキュー３１１、メッセージ列変更指示部３１２、状態遷移情報管理部３１３、メッセージ列管理部３１４、削除メッセージ列検出部３１５、メッセージ列削除部３１６を有する。
【００６４】
メッセージキュー３１１は、マイクロサービス３００がマイクロサービス２００から受信したメッセージが保持されるキューである。
【００６５】
メッセージ列変更指示部３１２は、削除メッセージ列検出部３１５に対し、メッセージキュー３１１から削除メッセージ列を検出する処理の実行を指示する。具体的には、メッセージ列変更指示部３１２は、メッセージキュー３１１に保持されたメッセージの数が所定数より大きくなった場合に、削除メッセージ列検出部３１５に対して指示を行う。
【００６６】
状態遷移情報管理部３１３は、状態遷移情報３３０を保持する。状態遷移情報管理部３１３は、例えば、マイクロサービス３００の構成情報から状態遷移情報３３０を取得しても良い。構成情報とは、例えば、マイクロサービス３００の仕様を記述した情報等である。
【００６７】
尚、状態遷移情報３３０は、例えば、様々なメッセージをマイクロサービス３００に与え、メッセージと、マイクロサービス３００による制御の対象となる対象物の状態の遷移と、対応付ける処理によって生成されても良い。
【００６８】
また、本実施形態の状態遷移情報管理部３１３は、サービス実行部３２０から、サービスを実行した後のデバイスの状態を示す通知を受け付けると、この通知が示す状態を、デバイスの現在の状態として保持しても良い。
【００６９】
メッセージ列管理部３１４は、状態遷移情報３３０から削除メッセージ列を特定し、特定した削除メッセージ列を示す削除メッセージ列情報３４０を保持する。メッセージ列管理部３１４の処理の詳細は後述する。
【００７０】
削除メッセージ列検出部３１５は、メッセージ列変更指示部３１２からの指示を受けて、削除メッセージ列情報３４０を参照し、メッセージキュー３１１に保持されたメッセージ列から、削除メッセージ列を検出する。
【００７１】
メッセージ列削除部３１６は、削除メッセージ列検出部３１５によって検出された削除メッセージ列を、メッセージキュー３１１から削除する。
【００７２】
次に、図９を参照して、状態遷移情報管理部３１３が保持する状態遷移情報３３０について説明する。
【００７３】
図９は、第一の実施形態の状態遷移情報の一例を示す図である。図９（Ａ）は、状態遷移情報のデータ構造を示す図であり、図９（Ｂ）は、状態遷移情報を示す記述を示している。
【００７４】
本実施形態では、図９（Ａ）に示すように、状態遷移情報３３０をテーブルとして記述した情報であっても良い。
【００７５】
状態遷移情報３３０は、遷移前状態、遷移後状態、遷移メッセージ列が対応付けられている。
【００７６】
遷移前状態とは、メッセージと対応する制御が行われる前の制御対象の状態を示す。遷移後状態とは、メッセージと対応する制御が行われた後の制御対象の状態を示す。ここで、制御対象とは、例えば、マイクロサービス３００のサービス実行部３２０による制御が行われるデバイス（例えば、ディスプレイ３等）である。遷移メッセージ列とは、マイクロサービス３００が受信するメッセージ列を示す。
【００７７】
図９（Ｂ）に示すように、状態遷移情報３３０では、例えば、制御対象のデバイスの状態は、状態１の場合にマイクロサービス２００からメッセージａがマイクロサービス３００に送信されると、状態２に遷移することがわかる。
【００７８】
次に、図１０を参照して、本実施形態のメッセージ列管理部３１４が保持する削除メッセージ列情報３４０について説明する。
【００７９】
図１０は、第一の実施形態の削除メッセージ列情報の一例を示す図である。本実施形態の削除メッセージ列情報３４０では、情報の項目として、状態と、削除メッセージ列とを有する。
【００８０】
項目「状態」の値は、マイクロサービス３００による制御対象のデバイスの状態を示す。項目「削除メッセージ列」の値は、削除メッセージ列を示す。
【００８１】
図１０の削除メッセージ列情報３４０では、デバイスの状態が「状態１」のとき、受信したメッセージ列の中に、削除メッセージ列「ａｄ」が含まれる場合には、メッセージ列「ａｄ」が削除される。
【００８２】
次に、図１１を参照して、本実施形態のメッセージ列管理部３１４による、削除メッセージ列を特定する処理について説明する。図１１は、第一の実施形態の削除メッセージ列情報を生成する処理を説明するフローチャートである。
【００８３】
図１１に示す本実施形態のメッセージ列管理部３１４の処理は、分散処理システム１００によるサービスの提供を開始する前に、事前処理として実行されるものである。
【００８４】
本実施形態のメッセージ列管理部３１４は、状態遷移情報３３０を受け取り、保持する（ステップＳ１１０１）。
【００８５】
続いて、メッセージ列管理部３１４は、状態遷移情報３３０から、状態遷移行列Ｐを求める（ステップＳ１１０２）。より具体的には、メッセージ列管理部３１４は、状態遷移情報３３０から、隣接行列を求め、隣接行列をＮ乗することで、状態遷移行列Ｐを求める。
【００８６】
尚、Ｎの値は、任意の値であって良い。例えば、Ｎの値は、隣接行列を（Ｎ−１）乗したときの結果と、隣接行列をＮ乗したときの結果とが、同一となる値であっても良い。
【００８７】
続いて、メッセージ列管理部３１４は、状態遷移行列Ｐの要素であるメッセージ列から、メッセージキュー３１１のサイズを求める（ステップＳ１１０３）。具体的には、メッセージ列管理部３１４は、例えば、状態遷移行列Ｐの要素であるメッセージ列のうち、メッセージが最も多く含まれているメッセージ列におけるメッセージの数を、メッセージキュー３１１のサイズとしても良い。
【００８８】
続いて、メッセージ列管理部３１４は、ステップＳ１１０３で求めたサイズをメッセージキュー３１１に設定する（ステップＳ１１０４）。
【００８９】
続いて、メッセージ列管理部３１４は、状態遷移行列Ｐから、削除メッセージ列を特定する（ステップＳ１１０５）。具体的には、メッセージ列管理部３１４は、例えば、状態遷移行列Ｐの対角要素の値を削除メッセージ列として特定する。
【００９０】
続いて、メッセージ列管理部３１４は、特定した削除メッセージ列を状態と対応付けて、削除メッセージ列情報３４０とし、削除メッセージ列情報３４０を保持する（ステップＳ１１０６）。
【００９１】
次に、図１２を参照して、本実施形態のメッセージ処理部３１０の処理について説明する。図１２は、第一の実施形態のメッセージ処理部の処理を説明するフローチャートである。
【００９２】
マイクロサービス３００は、マイクロサービス２００からメッセージを受信すると、メッセージ処理部３１０を起動させ、メッセージの中継を開始する（ステップＳ１２０１）。具体的には、メッセージ処理部３１０は、受信したメッセージをメッセージキュー３１１に保持し、サービス実行部３２０がメッセージを取り出して、サービスを実行できるようにする。
【００９３】
続いて、メッセージ処理部３１０は、メッセージ列変更指示部３１２により、メッセージキュー３１１内に保持されたメッセージの数Ｍを取得する（ステップＳ１２０２）。続いて、メッセージ処理部３１０は、メッセージ列変更指示部３１２により、取得したＭが所定の値θより大きいか否かを判定する（ステップＳ１２０３）。尚、所定の値θは、例えば、メッセージキュー３１１のサイズとして設定されたメッセージ数の８割程度のメッセージ数を示す値としても良い。
【００９４】
ステップＳ１２０３において、Ｍがθよりも大きくない場合、つまり、Ｍがθ以下である場合、メッセージ処理部３１０は、ステップＳ１２０２に戻る。
【００９５】
ステップＳ１２０３において、Ｍがθより大きい場合、メッセージ列変更指示部３１２は、削除メッセージ列検出部３１５に対して削除メッセージ列の検出を指示し、削除メッセージ列検出部３１５に検出された削除メッセージ列を削除させる（ステップＳ１２０４）。ステップＳ１２０４の処理の詳細は後述する。
【００９６】
続いて、メッセージ処理部３１０は、例えば、制御対象のデバイス（例えば、ディスプレイ３）がシャットダウンされたか否かを判定する（ステップＳ１２０５）。ステップＳ１２０５において、シャットダウンされていない場合、メッセージ処理部３１０は、ステップＳ１２０２に戻る。
【００９７】
ステップＳ１２０５において、シャットダウンされた場合、メッセージ処理部３１０は、処理を終了する。
【００９８】
尚、図１２の例では、メッセージキュー３１１に格納されたメッセージ数に応じて、メッセージの削除を行うものとしたが、これに限定されない。本実施形態では、例えば、マイクロサービス３００と、ディスプレイ３との通信が切断された場合等にも、メッセージの削除を行っても良い。
【００９９】
次に、図１３を参照して、本実施形態のメッセージ処理部３１０によるメッセージの削除について説明する。図１３は、第一の実施形態におけるメッセージを削除する処理を説明するフローチャートである。
【０１００】
メッセージ処理部３１０において、削除メッセージ列検出部３１５は、メッセージ列変更指示部３１２から削除メッセージ列の検出を指示されると、状態遷移情報管理部３１３によって保持されている現在のデバイスの状態Ｓｃを示す情報を取得する（ステップＳ１３０１）。続いて、削除メッセージ列検出部３１５は、状態Ｓｓ＝状態Ｓｃとし、メッセージキュー３１１の先頭に格納されたデータをα番目のデータとする（ステップＳ１３０２）。
【０１０１】
続いて、削除メッセージ列検出部３１５は、α番目のデータが、メッセージキュー３１１に最後の格納されたデータ（メッセージ）であるか否かを判定する（ステップＳ１３０３）。ステップＳ１３０３において、α番目のデータが最後の格納されたデータである場合、削除メッセージ列検出部３１５は、処理を終了する。
【０１０２】
ステップＳ１３０３において、α番目のデータが最後の格納されたデータでない場合、削除メッセージ列検出部３１５は、削除メッセージ列情報３４０を参照し、状態Ｓｓと対応する削除メッセージ列をα番目のデータから探す（ステップＳ１３０４）。言い換えれば、削除メッセージ列検出部３１５は、削除メッセージ列情報３４０に、状態Ｓｓと対応付けられており、且つ、メッセージキュー３１１においてα番目に格納されたメッセージを含む削除メッセージ列が存在するか否かを判定している。
【０１０３】
続いて、削除メッセージ列検出部３１５は、該当する削除メッセージ列が存在する場合（ステップＳ１３０５でＹｅｓ）、メッセージ列削除部３１６に、該当する削除メッセージ列をメッセージキュー３１１から削除させ（ステップＳ１３０６）、ステップＳ１３０２へ戻る。
【０１０４】
削除メッセージ列検出部３１５は、該当する削除メッセージ列が存在しない場合（ステップＳ１３０５でＮｏ）、削除メッセージ列検出部３１５は、α番目のメッセージｍを取得する（ステップＳ１３０７）。
【０１０５】
続いて、削除メッセージ列検出部３１５は、状態遷移情報３３０を参照し、状態Ｓｓを、メッセージｍによって遷移した後のデバイスの状態へ更新し、メッセージキュー３１１に保持されたα＋１番目のデータをα番目のデータとし（ステップＳ１３０８）、ステップＳ１３０３へ戻る。
【０１０６】
以下に、図１４を参照して、メッセージ処理部３１０によるメッセージの削除について、具体的に説明する。
【０１０７】
図１４は、第一の実施形態におけるメッセージの削除を具体的に説明する図である。図１４（Ａ）は、メッセージと、デバイスの状態の遷移との関係を示す図である。図１４（Ｂ）は、図１４（Ａ）に基づく削除メッセージ列情報を示す図である。図１４（Ｃ）は、メッセージの削除を説明する図である。
【０１０８】
図１４（Ａ）に示すメッセージと状態の遷移との関係は、図３に示したメッセージと、ディスプレイの状態との関係と同様であるから、説明を省略する。
【０１０９】
図１４の例では、図１４（Ａ）に示すメッセージと状態の遷移との関係を示す隣接行列を、３乗した状態遷移行列Ｐを求め、図１４（Ｂ）に示す削除メッセージ列情報を生成したものとする。
【０１１０】
この場合に、例えば、状態遷移情報管理部３１３に保持されたデバイスの状態が状態２であったとする。図１４（Ｃ）では、状態Ｓｓ＝２であるときの、メッセージの削除の様子を示している。
【０１１１】
図１４（Ｃ）のステップＳ１では、状態Ｓｓを現在のデバイスの状態２とし、メッセージキュー３１１の先頭のメッセージをα番目のメッセージとしている。したがって、α番目のメッセージは、「ｎ」である。
【０１１２】
このとき、削除メッセージ列検出部３１５は、図１４（Ｂ）の削除メッセージ列情報を参照して、メッセージキュー３１１のメッセージ列において、α番目のメッセージ「ｎ」から始まり、且つ、状態２と対応付けられた削除メッセージ列「ｎｎｎ」を検出する。
【０１１３】
ステップＳ１では、メッセージキュー３１１において、α番目のメッセージ「ｎ」を含むメッセージ列「ｎｎｎ」が存在する。したがって、メッセージ列削除部３１６は、このメッセージ列「ｎｎｎ」をメッセージキュー３１１から削除する。
【０１１４】
図１４のステップＳ２では、メッセージキュー３１１からメッセージ列「ｎｎｎ」が削除された状態を示す。この場合、デバイスの状態は変わらないため、状態Ｓｓ＝２のままである。また、メッセージキュー３１１の先頭のメッセージをα番目のメッセージとした場合、α番目のメッセージは「ｄ」となる。
【０１１５】
このとき、状態２と対応付けられており、且つ、メッセージ「ｄ」から始まる削除メッセージ列は存在しない。
【０１１６】
したがって、削除メッセージ列検出部３１５は、デバイスの状態を、状態２においてメッセージ「ｄ」を受信したときの状態に更新し、メッセージキュー３１１のうち、先頭から２番目に格納されたメッセージをα番のメッセージとする。
【０１１７】
図１４（Ｃ）のステップＳ３では、デバイスの状態が状態２から状態１に更新されており、α番目のメッセージが「ｂ」とされた状態を示している。
【０１１８】
このとき、状態１と対応付けられており、且つ、メッセージ「ｂ」から始まる削除メッセージ列は存在しない。
【０１１９】
したがって、削除メッセージ列検出部３１５は、デバイスの状態を、状態１においてメッセージ「ｂ」を受信したときの状態に更新し、メッセージキュー３１１において、α番目の次に格納されたメッセージをα番のメッセージとする。
【０１２０】
図１４（Ｃ）のステップＳ４では、デバイスの状態Ｓｓが、状態１においてメッセージ「ｂ」を受信したときの状態５に更新されており、メッセージキュー３１１の先頭から３番目に格納されたメッセージ「ｎ」がα番目のメッセージとされている。
【０１２１】
この場合、状態５と対応付けられており、且つ、メッセージ「ｎ」から始まる削除メッセージ列「ｎｎｎ」が存在する。したがって、メッセージ列削除部３１６は、ステップＳ４に示すメッセージキュー３１１に保持されたメッセージ列から、削除メッセージ列「ｎｎｎ」を検出し、削除する。
【０１２２】
この場合、デバイスの状態は変わらないため、状態Ｓｓ＝５である。また、ステップＳ５では、ステップＳ４のメッセージキュー３１１において、削除メッセージ列「ｎｎｎ」の次に格納されていたメッセージが、α番目のメッセージとなる。
【０１２３】
ステップＳ５におけるα番目のメッセージ「ｎ」は、メッセージキュー３１１に格納されたメッセージ列のうち、最後のメッセージである。したがって、メッセージを削除する処理は、図１４（Ｃ）のステップＳ５の状態で終了する。
【０１２４】
このように、本実施形態では、メッセージを削除することで、メッセージキュー３１１に保持されるメッセージの数を、図１４（Ｃ）のステップＳ１に示す数から、ステップＳ５に示す数まで削減することができる。
【０１２５】
言い換えれば、メッセージキュー３１１に保持されているメッセージ列を短縮することができる。つまり、本実施形態では、メッセージキュー３１１において検出された削除メッセージ列は、メッセージキュー３１１に保持されたメッセージ列を短縮させる短縮メッセージ列と言える。したがって、本実施形態の削除メッセージ列検出部３１５は、メッセージキュー３１１から短縮メッセージ列を検出するメッセージ列検出部であり、本実施形態のメッセージ列削除部３１６は、メッセージキュー３１１に保持されたメッセージ列を短縮させる短縮処理部である。
【０１２６】
したがって、本実施形態によれば、メッセージキュー３１１からメッセージが溢れることを抑制できる。
【０１２７】
また、何らかの理由で、メッセージを受信する側のマイクロサービス３００がメッセージをメッセージキュー３１１から取り出して実行するメッセージ処理が停止したとする。この場合、マイクロサービス３００がメッセージ処理を再開する際に、停止中にメッセージキュー３１１に溜まったメッセージを全て実行することになり、復帰に時間がかかったり、無駄なリソースを使うことになる。
【０１２８】
本実施形態では、メッセージ処理部３１０により、メッセージキュー３１１に保持されるメッセージ列を短縮する。このため、本実施形態によれば、例えば、メッセージ処理が停止した後に再開される場合等に、メッセージキュー３１１に保持されたメッセージを実行する時間を短縮し、無駄なリソースが使われることを抑制できる。
【０１２９】
（第二の実施形態）
以下に図面を参照して、第二の実施形態について説明する。第二の実施形態は、メッセージの削除の加え、メッセージの置き換えを行う点が、第一の実施形態と相違する。よって、以下の第二の実施形態の説明では、第一の実施形態との相違点について説明し、第一の実施形態と同様の機能構成を有するものには、第一の実施形態の説明で用いた符号と同様の符号を付与し、その説明を省略する。
【０１３０】
図１５は、第二の実施形態の分散処理システムの機能を説明する図である。本実施形態の分散処理システム１００Ａは、マイクロサービス２００Ａとマイクロサービス３００Ａと、を有する。
【０１３１】
マイクロサービス２００Ａは、メッセージ処理部２１０Ａと、サービス実行部２２０とを有する。メッセージ処理部２１０Ａは、マイクロサービス３００Ａの有するメッセージ処理部３１０Ａと同様の構成であるから、説明を省略する。
【０１３２】
マイクロサービス３００Ａは、メッセージ処理部３１０Ａとサービス実行部３２０とを有する。
【０１３３】
メッセージ処理部３１０Ａは、メッセージキュー３１１、メッセージ列変更指示部３１２、状態遷移情報管理部３１３、メッセージ列管理部３１４Ａ、削除メッセージ列検出部３１５、メッセージ列削除部３１６、置換メッセージ検出部３１７、メッセージ置換部３１８を有する。
【０１３４】
メッセージ列管理部３１４Ａは、削除メッセージ列情報３４０と、状態遷移行列情報３５０と、を保持する。より具体的には、メッセージ列管理部３１４Ａは、削除メッセージ列情報３４０を生成する際に求められる状態遷移行列Ｐを、状態遷移行列情報３５０として保持する。
置換メッセージ列検出部３１７は、メッセージキュー３１１に格納されたメッセージ列から、メッセージ数の少ないメッセージ列に置換できるメッセージ列を検出する。
【０１３５】
メッセージ置換部３１８は、置換メッセージ検出部３１７により、置換が可能なメッセージ列が検出されると、検出されたメッセージ列を、メッセージ数の少ないメッセージ列に置換する。
【０１３６】
以下に、図１６を参照して、本実施形態におけるメッセージ列の置換について説明する。図１６は、第二の実施形態におけるメッセージの置換を説明する図である。図１６（Ａ）は、メッセージと、デバイスの状態の遷移との関係を示す図である。図１６（Ｂ）は、状態遷移行列情報３５０の一例を示す図である。
【０１３７】
図１６の例では、図１６（Ａ）に示すように、デバイスの状態は、状態１のときにマイクロサービス３００Ａがメッセージａ１を受信し、メッセージａ１に対応するサービスを実行すると、状態２に遷移する。
【０１３８】
また、デバイスの状態は、状態２のときにマイクロサービス３００Ａがメッセージａ２を受信してサービスを実行すると状態３に遷移し、状態３においてマイクロサービス３００Ａがメッセージａ３を受信してサービスを実行すると状態４に遷移する。また、デバイスの状態は、状態４のときにマイクロサービス３００Ａがメッセージａ４を受信してサービスを実行すると、状態５に遷移する。
【０１３９】
さらに、デバイスの状態は、状態２のときにマイクロサービス３００Ａがメッセージｂ１を受信してサービスを実行すると、状態５に遷移する。
【０１４０】
図１６（Ｂ）に示す状態遷移行列情報３５０では、図１６（Ａ）に示すメッセージと状態の遷移を示す隣接行列を４乗（Ｎ＝４）した結果の状態遷移行列Ｐを示す。
【０１４１】
この状態遷移行列Ｐでは、状態２から状態５に遷移させるメッセージ列が、「ｂ１」と、「ａ２ａ３ａ４」の２通りあることがわかる。
【０１４２】
このように、本実施形態の状態遷移行列情報３５０では、第一の状態から第二の状態へ遷移させるメッセージ列が複数存在する場合には、複数のメッセージ列が、要素として含まれる。
【０１４３】
そこで、本実施形態では、置換メッセージ検出部３１７により、メッセージキュー３１１に格納されたメッセージ列の中から、第一の状態から第二の状態へ遷移させるメッセージ列が複数存在するメッセージ列を検出する。そして、本実施形態では、メッセージ置換部３１８により、検出されたメッセージ列を、複数のメッセージ列のうち、メッセージ数が最も少ないメッセージ列に置換する。
【０１４４】
次に、図１７を参照して、本実施形態のメッセージ処理部３１０Ａの処理について説明する。図１７は、第二の実施形態のメッセージ処理部の処理を説明するフローチャートである。
【０１４５】
図１７のステップＳ１７０１からステップＳ１７０４までの処理は、図１２のステップＳ１２０１からステップＳ１２０４までの処理と同様であるから、説明を省略する。
【０１４６】
ステップＳ１７０４に続いて、置換メッセージ検出部３１７とメッセージ置換部３１８は、メッセージの置換を行い（ステップＳ１７０５）、ステップＳ１７０６へ進む。ステップＳ１７０５の詳細は後述する。
【０１４７】
ステップＳ１７０６の処理は、図１２のステップＳ１２０５の処理と同様であるから、説明を省略する。
【０１４８】
次に、図１８を参照して、置換メッセージ検出部３１７、メッセージ置換部３１８の処理について説明する。図１８は、第二の実施形態におけるメッセージを置換する処理を説明するフローチャートである。
【０１４９】
図１８のステップＳ１８０１からステップＳ１８０３までの処理は、図１３のステップＳ１３０１からステップＳ１３０３までの処理と同様であるから、説明を省略する。
【０１５０】
ステップＳ１８０３において、α番目のメッセージが最後に格納されたメッセージでない場合、置換メッセージ検出部３１７は、α番目から（Ｎ−１）個後にメッセージキュー３１１に格納されたデータ（メッセージ）をβ番目のデータとする（ステップＳ１８０４）。
【０１５１】
続いて、置換メッセージ検出部３１７は、β番目のメッセージがメッセージキュー３１１に最後に格納されたメッセージよりも後ろのメッセージとなるか否かを判定する（ステップＳ１８０５）。
【０１５２】
ステップＳ１８０５において、β番目のメッセージが、最後のメッセージよりも後ろにならない場合、つまり、α番目のメッセージからＮ個以上のメッセージがメッセージキュー３１１に格納されている場合、置換メッセージ検出部３１７は、後述するステップＳ１８０７へ進む。
【０１５３】
ステップＳ１８０５において、β番目のメッセージが、最後のメッセージよりも後ろとなる場合、メッセージキュー３１１に格納された最後のメッセージをβ番目とする（ステップＳ１８０６）。
【０１５４】
続いて、置換メッセージ検出部３１７は、状態遷移行列情報３５０が示す状態遷移行列Ｐにおいて、メッセージキュー３１１に格納されたα番目からβ番目までのメッセージ列Ａを含む要素（Ｓｓ，ＳＮ）を特定する（ステップＳ１８０７）。
【０１５５】
続いて、置換メッセージ検出部３１７は、要素（Ｓｓ，ＳＮ）に含まれるメッセージ列のうち、最短のメッセージ列Ｂを特定する（ステップＳ１８０８）。尚、最短のメッセージ列とは、メッセージ数が最もすくないメッセージ列のことである。
【０１５６】
続いて、置換メッセージ検出部３１７は、メッセージ列Ｂがメッセージ列Ａよりも短いか否かを判定する（ステップＳ１８０９）。
【０１５７】
ステップＳ１８０９において、メッセージ列Ａの長さが、メッセージ列Ｂの長さより長い場合、つまり、メッセージ列Ａに含まれるメッセージの数が、メッセージ列Ｂに含まれるメッセージの数より多い場合、置換メッセージ検出部３１７は、ステップＳ１８１０へ進む。
【０１５８】
メッセージ処理部３１０Ａは、メッセージ置換部３１８により、メッセージキュー３１１に保持されたメッセージ列Ａを、メッセージ列Ｂに置換する（ステップＳ１８１０）。続いて、メッセージ置換部３１８は、状態Ｓｓを状態ＳＮへ更新し、β番目の次に格納されたメッセージをα番目のメッセージとして（ステップＳ１８１１）、ステップＳ１８０３に戻る。尚、状態ＳＮとは、状態Ｓｓのデバイスに対して、メッセージ列Ａと対応するサービスを行った後のデバイスの状態を示す。
【０１５９】
ステップＳ１８０９において、メッセージ列Ａの長さが、メッセージ列Ｂの長さ以下である場合、つまり、メッセージ列Ａに含まれるメッセージの数が、メッセージ列Ｂに含まれるメッセージの数以下であった場合、置換メッセージ検出部３１７は、ステップＳ１８１２へ進む。
置換メッセージ列検出部３１７は、状態遷移情報３３０を参照し、状態Ｓｓを、メッセージｍによって遷移した後のデバイスの状態へ更新し、メッセージキュー３１１に保持されたα＋１番目のデータをα番目のデータとし（ステップＳ１８１２）、ステップＳ１８０３へ戻る。
【０１６０】
以下に、図１９を参照して、本実施形におけるメッセージの置換について具体的に説明する。図１９は、第二の実施形態おけるメッセージの置換を具体的に説明する図である。
【０１６１】
図１９におけるステップＳ１は、デバイスの状態Ｓｓ＝１であり、メッセージキュー３１１に４つのメッセージが格納されており、先頭のメッセージはメッセージ「ａ１」である場合を示している。
【０１６２】
ここは、先頭のメッセージをα番目のメッセージとし、α番目から（Ｎ−１）個後の格納されたメッセージをβ番目のメッセージとする。図１９の例では、状態遷移行列情報３５０が示す状態遷移行列Ｐは、状態遷移情報を示す隣接行列を４乗した行列であり、Ｎ＝４である。
【０１６３】
したがって、ここでは、先頭のメッセージをα番目のメッセージとし、α番目から３個後に格納されたメッセージ「ａ４」がβ番目のメッセージとなる（図１６参照）。したがって、ここでは、メッセージ列Ａ＝ａ１ａ２ａ３ａ４となる。
【０１６４】
したがって、置換メッセージ検出部３１７は、状態遷移行列情報３５０が示す状態遷移行列Ｐから、状態Ｓｓ＝１であり、メッセージ列Ａを含む要素（Ｓｓ，ＳＮ）を特定する。
【０１６５】
ここで、該当する要素（Ｓｓ，ＳＮ）の値は、メッセージ列Ａのみであり、複数のメッセージ列は含まれない。
【０１６６】
したがって、置換メッセージ検出部３１７は、図１９のステップＳ２に示すように、α＋１番目のメッセージ「ａ２」をα番目のメッセージとして、β番目のメッセージを求める。ここでは、メッセージキュー３１１には４つのメッセージしか保持されておらず、メッセージ「ａ２」の３つ後のメッセージは存在しない。よって、置換メッセージ検出部３１７は、メッセージキュー３１１に最後に格納されたメッセージ「ａ４」をβ番目のメッセージとする。したがって、ここでは、メッセージ列Ａ＝ａ２ａ３ａ４となる。
【０１６７】
また、置換メッセージ検出部３１７は、デバイスの状態Ｓｓ＝１を、デバイスに対してメッセージａ１と対応するサービスが実行された後の状態Ｓｓ＝２に更新する（図１６参照）。
【０１６８】
次に、置換メッセージ検出部３１７は、状態遷移行列情報３５０が示す状態遷移行列Ｐから、状態Ｓｓ＝２であり、メッセージ列Ａを含む要素（Ｓｓ，ＳＮ）を特定する。
【０１６９】
ここで、該当する要素（Ｓｓ，ＳＮ）の値は、メッセージ列「ｂ１｜ａ２ａ３ａ４」であり、メッセージ列Ａの他のメッセージ列が含まれる。つまり、要素（Ｓｓ，ＳＮ）の値には、複数のメッセージ列が含まれる。よって、置換メッセージ検出部３１７は、複数のメッセージ列のうち、最短のメッセージ列Ｂを特定する。ここでは、メッセージ列Ｂ＝ｂ１である。
【０１７０】
メッセージ列Ｂは、メッセージ列Ａよりも短い。したがって、メッセージ置換部３１８は、メッセージ列Ａをメッセージ列Ｂに置き換える。
【０１７１】
ステップＳ３では、メッセージ列Ａである「ａ２ａ３ａ４」が、メッセージ列Ｂである「ｂ１」に置き換えられている。
【０１７２】
また、デバイスの状態Ｓｓの値は、状態Ｓｓ＝２において、デバイスに対してメッセージｂ１と対応するサービスが実行された後の状態Ｓｓ＝５に更新される（図１６参照）。
【０１７３】
このように、本実施形態では、第一の状態から第二の状態に遷移される複数のメッセージ列が複数ある場合には、メッセージキュー３１１に保持するメッセージ列を、長さが最も短いメッセージ列とする。
【０１７４】
このため、本実施形態では、メッセージキュー３１１に保持されるメッセージの数を減らし、メッセージキュー３１１に保持されるメッセージ列の長さを短くすることができる。つまり、本実施形態のメッセージ列Ａは、メッセージキュー３１１に保持されたメッセージ列を短縮させる短縮メッセージ列と言える。また、メッセージ列Ａは、メッセージ列Ｂに置き換えられる置換メッセージ列と言える。
【０１７５】
したがって、本実施形態の置換メッセージ検出部３１７は、短縮メッセージ列を検出するメッセージ列検出部であり、本実施形態のメッセージ置換部３１８は、メッセージキュー３１１に保持されたメッセージ列を短縮メッセージ列に応じて短縮する短縮処理部である。
よって、本実施形態によれば、メッセージキュー３１１からメッセージが溢れて欠損することを抑制できる。
【０１７６】
尚、本実施形態では、メッセージ列の削除を行った後に、メッセージ列の置き換えを行うことで、メッセージ列の削除のみを行う場合よりも、メッセージ列をさらに短くするようにしているが、これに限定されない。メッセージ処理部３１０Ａは、例えば、メッセージ列の置き換えのみを行っても良い。
【０１７７】
また、本実施形態では、状態遷移行列Ｐの対角要素から削除メッセージ列を特定する際に、対角要素に含まれるメッセージ列のうち、最も長いメッセージ列を削除メッセージ列としても良い。このように削除メッセージ列を特定すれば、メッセージキュー３１１からより長いメッセージ列を削除することができ、メッセージキュー３１１に保持されるメッセージ列を短くすることができる。したがって、メッセージキュー３１１からメッセージが溢れることを抑制できる。
【０１７８】
（第三の実施形態）
以下に、図面を参照して、第三の実施形態について説明する。第三の実施形態では、状態遷移情報に、削除や置換が禁止されたメッセージが含まれる点が、第二の実施形態と相違する。よって、以下の第三の実施形態の説明では、第二の実施形態との相違点についてのみ説明し、第二の実施形態と同様の機能構成を有するものには、第二の実施形態の説明で用いた符号と同様の符号を付与し、その説明を省略する。
【０１７９】
図２０は、第三の実施形態の分散処理システムの機能を説明する図である。本実施形態の分散処理システム１００Ｂは、マイクロサービス２００Ｂとマイクロサービス３００Ｂとを有する。
【０１８０】
マイクロサービス２００Ｂは、メッセージ処理部２１０Ｂと、サービス実行部２２０とを有する。メッセージ処理部２１０Ａは、マイクロサービス３００Ｂの有するメッセージ処理部３１０Ｂと同様の構成であるから、説明を省略する。
【０１８１】
マイクロサービス３００Ｂは、メッセージ処理部３１０Ｂとサービス実行部３２０とを有する。
【０１８２】
メッセージ処理部３１０Ｂは、メッセージキュー３１１、メッセージ列変更指示部３１２、状態遷移情報管理部３１３Ａ、メッセージ列管理部３１４Ｂ、削除メッセージ列検出部３１５Ａ、メッセージ列削除部３１６、置換メッセージ検出部３１７Ａ、メッセージ置換部３１８を有する。
【０１８３】
状態遷移情報管理部３１３Ａは、状態遷移情報３３０Ａを保持している。状態遷移情報３３０Ａの詳細は後述する。
【０１８４】
メッセージ列管理部３１４Ｂは、削除メッセージ列情報３４０と状態遷移行列情報３５０Ａとを保持している。
【０１８５】
削除メッセージ列検出部３１５Ａは、メッセージキュー３１１の保持されたメッセージ列の中から、削除が禁止されたメッセージを含まない削除メッセージ列を検出する。
置換メッセージ列検出部３１７Ａは、メッセージキュー３１１に保持されたメッセージ列の中から、置換が禁止されたメッセージを含まないメッセージ列であり、且つ、より短いメッセージ列に置換できるメッセージ列を検出する。
【０１８６】
以下に、図２１を参照して、本実施形態の状態遷移情報３３０Ａと、状態遷移行列情報３５０Ａについて説明する。図２１は、第三の実施形態の状態遷移情報と状態遷移行列の一例を示す図である。図２１（Ａ）は、状態遷移情報３３０Ａの一例を示す図であり、図２１（Ｂ）は、状態遷移行列情報３５０Ａの一例を示す図である。
【０１８７】
本実施形態の状態遷移情報３３０Ａには、状態遷移の中で、削除や置換を行うことができないメッセージに対し、特定の識別情報が付与されている。つまり、メッセージに付与された特定の識別情報は、このメッセージの短縮が禁止されていることを示す情報であり、このメッセージを短縮メッセージ列に含めないことを示す情報である。
【０１８８】
図２１（Ａ）の例では、特定の識別情報として、エクスクラメーションマークが付与されているが、付与されるマークはこれに限定されず、どのようなマークであっても良い。
【０１８９】
状態遷移情報３３０Ａでは、例えば、状態１において受信すると、状態１を状態２へ遷移させるメッセージ「ａ」は、削除や置換を行うことが禁止されていることがわかる。また、状態遷移情報３３０Ａでは、例えば、状態１において受信すると、状態１を状態５へ遷移させるメッセージ「ｂ」は、削除や置換を行うことが禁止されていることがわかる。
【０１９０】
本実施形態の状態遷移行列情報３５０Ａでは、状態遷移情報３３０Ａにおいて付与された識別情報（マーク）が、そのまま残される。
【０１９１】
したがって、例えば、状態遷移行列情報３５０の対角要素となるメッセージ列に、特定の識別情報が付与されたメッセージが含まれる場合には、このメッセージ列は、削除メッセージ列とはならない。
【０１９２】
次に、図２２を参照して、本実施形態の削除メッセージ列検出部３１５Ａとメッセージ列削除部３１６による、メッセージを削除する処理について説明する。図２２は、第三の実施形態におけるメッセージを削除する処理を説明するフローチャートである。
【０１９３】
図２２のステップＳ２２０１からステップＳ２２０３までの処理は、図１３のステップＳ１３０１からステップＳ１３０３までの処理と同様であるから、説明を省略する。
【０１９４】
ステップＳ２２０３において、α番目のメッセージがメッセージキュー３１１に最後に格納されたメッセージではない場合、削除メッセージ列検出部３１５Ａは、状態Ｓｓと対応する削除メッセージ列をα番目のデータから探し（ステップＳ２２０４）、ステップＳ２２０５へ進む。
【０１９５】
言い換えれば、削除メッセージ列検出部３１５Ａは、削除メッセージ列情報３４０に、状態Ｓｓと対応付けられており、且つ、メッセージキュー３１１においてα番目に格納されたメッセージを含む削除メッセージ列が存在するか否かを判定している。尚、本実施形態では、削除メッセージ列には、特定の識別情報が付与されたメッセージは含まれない。
【０１９６】
ステップＳ２２０５とステップＳ２２０６の処理は、図１３のステップＳ１３０５とステップＳ１３０６の処理と同様であるから、説明を省略する。
【０１９７】
ステップＳ２２０５において、削除メッセージ列がない場合、削除メッセージ列検出部３１５Ａは、α番目から最も近くにある、識別情報が付与されたメッセージｍを探す（ステップＳ２２０７）。
【０１９８】
続いて、削除メッセージ列検出部３１５Ａは、メッセージキュー３１１内に、該当するメッセージｍが存在するか否かを判定する（ステップＳ２２０８）。ステップＳ２２０８において、該当するメッセージｍが存在する場合、削除メッセージ列検出部３１５Ａは、状態遷移情報３３０Ａを参照し、状態Ｓｓを、α番目のメッセージからメッセージｍまでのメッセージ列による遷移後の状態Ｓｔの値を求める（ステップＳ２２０９）。
【０１９９】
続いて、削除メッセージ列検出部３１５Ａは、メッセージキュー３１１において、メッセージｍの次に保持されたメッセージをα番目のメッセージとし、状態Ｓｓの値を、状態Ｓｔの値に更新し（ステップＳ２２１０）、ステップＳ２２０３に戻る。
【０２００】
ステップＳ２２０８において、該当するメッセージｍが存在しない場合、削除メッセージ列検出部３１５Ａは、α番目のメッセージｍを取得する（ステップＳ２２１１）。続いて、削除メッセージ列検出部３１５Ａは、状態Ｓｓの値を、メッセージｍによる遷移後の状態に更新し、α＋１番目のメッセージをα番目のメッセージとし（ステップＳ２２１２）、ステップＳ２２０３へ戻る。
【０２０１】
次に、図２３を参照し、本実施形態の置換メッセージ検出部３１７Ａと、メッセージ置換部３１８による、メッセージを置換する処理について説明する。
【０２０２】
図２３は、第三の実施形態におけるメッセージを置き換える処理を説明するフローチャートである。
【０２０３】
図２３のステップＳ２３０１からステップＳ２３０６までの処理は、図１８のステップＳ１８０１からステップＳ１８０６までの処理と同様であるから、説明を省略する。
【０２０４】
ステップＳ２３０６に続いて、置換メッセージ検出部３１７Ａは、α番目からβ番目までのメッセージ列Ａに、マーク付きのメッセージが含まれるか否かを判定する（ステップＳ２３０７）。
【０２０５】
ステップＳ２３０７において、マーク付きのメッセージが含まれない場合、後述するステップＳ２３１４へ進む。
【０２０６】
ステップＳ２３０７において、マーク付きのメッセージが含まれる場合、置換メッセージ検出部３１７Ａは、メッセージキュー３１１におけるα番目のメッセージから最も近いマーク付きメッセージｍを探す（ステップＳ２３０８）。
【０２０７】
ステップＳ２３０８からステップＳ２３１１までの処理は、図２２のステップＳ２２０７からステップＳ２２１２までの処理と同様であるから、説明を省略する。
【０２０８】
ステップＳ２３０７にマーク付きのメッセージが含まれない場合のステップＳ２３１４からステップＳ２３１８までの処理は、図１８のステップＳ１８０７からステップＳ１８１１までの処理と同様であるから、説明を省略する。尚、ステップＳ２３１６において、メッセージ列Ａの長さがメッセージ列Ｂの長さ以下であった場合には、置換メッセージ検出部３１７Ａは、ステップＳ２３１３へ進む。
【０２０９】
次に、図２４を参照して、本実施形態のメッセージ処理部３１０Ｂの処理を具体的に説明する。図２４は、第三の実施形態におけるメッセージの削除と置き換えを説明する図である。図２４（Ａ）は、メッセージと、デバイスの状態の遷移との関係を示す図である。図２４（Ｂ）は、メッセージの置換を説明する図である。
【０２１０】
図２４の例では、図２４（Ａ）に示すように、デバイスを状態１から状態２へ遷移させるメッセージａ、状態１から状態５に遷移させるメッセージｂ、状態５から状態６に遷移させるメッセージｎに、エクスクラメーションマークが付与されている。したがって、図２４の例では、状態１におけるメッセージａ，ｂと、状態５におけるメッセージｎと、がマーク付きメッセージとなる。
【０２１１】
図２４（Ｂ）のステップＳ１は、デバイスの状態が状態１の場合のメッセージキュー３１１に保持されたメッセージ列を示す。
【０２１２】
ここでは、先頭のメッセージａは、マーク付きメッセージである。削除メッセージ列情報３４０には、マーク付きメッセージは含まれない。したがって、削除メッセージ列検出部３１５Ａは、デバイスの状態をメッセージａによって遷移した後の状態２に更新し、メッセージａの次に保持されたメッセージｎをα番目のメッセージとする。
【０２１３】
削除メッセージ列情報３４０には、状態２と対応付けられており、メッセージｎを含む削除メッセージ列「ｎｎｎ」が存在する（図１４（Ｂ）参照）。したがって、図２４（Ｂ）のステップＳ２では、メッセージキュー３１１からメッセージ列「ｎｎｎ」が削除される。
【０２１４】
また、ステップＳ２において、マーク付きメッセージａから３つ後に保持されているメッセージｎをβ番目のメッセージとする。この場合、α番目のメッセージａからβ番目のメッセージｎまでのメッセージ列には、マーク付きメッセージが含まれる。
【０２１５】
したがって、置換メッセージ検出部３１７Ａは、状態２を、α番目からβ番目までのメッセージ列による遷移後の状態６に更新する。そして、β番目のメッセージの次に保持されたメッセージｎをα番目のメッセージとする。このとき、メッセージキュー３１１に最後に保持されたメッセージｄが、β番目のメッセージとなるため、α番目からβ番目までのメッセージ列Ａは、「ｎｄ」となる。
【０２１６】
この場合、状態遷移行列Ｐの状態６の行において、メッセージ列Ａを含む要素（Ｓｓ，ＳＮ）の値は、「ｄ｜ｎｄ」であったとする。この場合、要素（Ｓｓ，ＳＮ）に含まれる最短のメッセージ列Ｂは「ｄ」であり、メッセージ列Ａよりもメッセージ数が少ない。
【０２１７】
したがって、図２４（Ｂ）のステップＳ３では、メッセージ列Ａである「ｎｄ」が、メッセージ列Ｂである「ｄ」に置換される。
【０２１８】
このように、本実施形態によれば、削除や置換をすることができないメッセージは残したまま、メッセージキュー３１１に保持されたメッセージ列を短くすることができ、キューからメッセージが溢れてメッセージが欠損することを抑制できる。
【０２１９】
開示の技術では、以下に記載する付記のような形態が考えられる。
（付記１）
他のサービスと連携したサービスを実行させるメッセージと、前記サービスの状態の遷移との関係を示す状態遷移情報を用いて、前記他のサービスから受信しメッセージキューに保持されたメッセージ列を短縮させる短縮メッセージ列を特定し、前記メッセージ列から前記短縮メッセージ列を検出するメッセージ列検出部と、
前記短縮メッセージ列に応じて、前記メッセージキューに保持されたメッセージ列を短縮させる短縮処理部と、を有する情報処理装置。
（付記２）
前記短縮メッセージ列は、
前記サービスが前記短縮メッセージ列を受信する前の状態と、前記短縮メッセージ列を受信した後の状態とが同一となる削除メッセージ列であり、
前記短縮処理部は、
前記メッセージキューに保持されたメッセージ列から前記削除メッセージ列を削除する、付記１記載の情報処理装置。
（付記３）
前記削除メッセージ列は、
前記状態遷移情報を示す行列をべき乗した状態遷移行列における対角要素に含まれるメッセージ列である、付記２記載の情報処理装置。
（付記４）
前記削除メッセージ列は、
前記対角要素に複数のメッセージ列が含まれる場合に、最も長いメッセージ列とする、付記３記載の情報処理装置。
（付記５）
前記短縮メッセージ列は、
前記メッセージキューに保持されたメッセージ列において、前記短縮メッセージ列よりもメッセージ列の長さが短い他のメッセージ列に置換される置換メッセージ列であり、
前記短縮処理部は、
前記置換メッセージ列を前記他のメッセージ列に置き換える、付記１乃至４の何れか一項に記載の情報処理装置。
（付記６）
前記他のメッセージ列は、
前記状態遷移情報を示す行列をべき乗した状態遷移行列において、前記置換メッセージ列が含まれる要素に含まれるメッセージ列のうち、メッセージ列の長さが最も短いメッセージである、付記５記載の情報処理装置。
（付記７）
前記メッセージキューに保持されたメッセージ列に、短縮を禁止することを示す識別情報が付与されたメッセージが含まれる場合、前記識別情報が付与されたメッセージは、前記短縮メッセージ列から除外される、付記１乃至６の何れか一項に記載の情報処理装置。
（付記８）
複数のサービスをメッセージにより連携させる分散処理システムであって、
前記サービスは、
前記サービスを実行させるメッセージと、前記サービスの状態の遷移との関係を示す状態遷移情報を用いて、他のサービスから受信しメッセージキューに保持されたメッセージ列を短縮させる短縮メッセージ列を特定し、前記メッセージ列から前記短縮メッセージ列を検出するメッセージ列検出部と、
前記短縮メッセージ列に応じて、前記メッセージキューに保持されたメッセージ列を短縮させる短縮処理部と、を有する、分散処理システム。
（付記９）
他のサービスと連携したサービスを実行させるメッセージと、前記サービスの状態の遷移との関係を示す状態遷移情報を用いて、前記他のサービスから受信しメッセージキューに保持されたメッセージ列を短縮させる短縮メッセージ列を特定し、前記メッセージ列から前記短縮メッセージ列を検出する処理と、
前記短縮メッセージ列に応じて、前記メッセージキューに保持されたメッセージ列を短縮させる処理と、をコンピュータに実行させるプログラム。
（付記１０）
コンピュータによる分散処理方法であって、該コンピュータが、
他のサービスと連携したサービスを実行させるメッセージと、前記サービスの状態の遷移との関係を示す状態遷移情報を用いて、前記他のサービスから受信しメッセージキューに保持されたメッセージ列を短縮させる短縮メッセージ列を特定し、前記メッセージ列から前記短縮メッセージ列を検出し、
前記短縮メッセージ列に応じて、前記メッセージキューに保持されたメッセージ列を短縮させる、分散処理方法。
【０２２０】
本発明は、具体的に開示された実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【０２２１】
１００  分散処理システム
２００、３００  マイクロサービス
２１０、３１０、２１０Ａ、３１０Ａ、２１０Ｂ、３１０Ｂ  メッセージ処理部
２２０、３２０  サービス実行部
３１１  メッセージキュー
３１２  メッセージ列変更指示部
３１３  状態遷移情報管理部
３１４、３１４Ａ  メッセージ列管理部
３１５、３１５Ａ  削除メッセージ列検出部
３１６  メッセージ列削除部
３１７、３１７Ａ  置換メッセージ列検出部
３１８  メッセージ置換部
３３０  状態遷移情報
３４０  削除メッセージ列情報
３５０  態遷移行列情報
【図１】
2019086913.tif 000003
【図２】
2019086913.tif 000004
【図３】
2019086913.tif 000005
【図４】
2019086913.tif 000006
【図５】
2019086913.tif 000007
【図６】
2019086913.tif 000008
【図７】
2019086913.tif 000009
【図８】
2019086913.tif 000010
【図９】
2019086913.tif 000011
【図１０】
2019086913.tif 000012
【図１１】
2019086913.tif 000013
【図１２】
2019086913.tif 000014
【図１３】
2019086913.tif 000015
【図１４】
2019086913.tif 000016
【図１５】
2019086913.tif 000017
【図１６】
2019086913.tif 000018
【図１７】
2019086913.tif 000019
【図１８】
2019086913.tif 000020
【図１９】
2019086913.tif 000021
【図２０】
2019086913.tif 000022
【図２１】
2019086913.tif 000023
【図２２】
2019086913.tif 000024
【図２３】
2019086913.tif 000025
【図２４】
2019086913.tif 000026