(57)【特許請求の範囲】
【請求項１】
信号を送受信する通信システムであって、
前記信号を格納するキューを有する複数のデータストアサーバと、前記データストアサーバに信号を振り分けるキュー管理サーバと、を有し、
前記キュー管理サーバは、
前記信号を前記複数のデータストアサーバに振り分ける方法を示す分散方法情報を保持し、
受信した複数の信号が順序を保証する必要があることを示す順序保証キーを含み、かつ、前記複数の信号の前記順序保証キーが同じである場合、前記分散方法情報に基づいて、前記複数のデータストアサーバの中の一つのデータストアサーバが有する一つのキューに前記複数の信号の振分け先を決定し、
前記複数のデータストアサーバは、
前記キューに格納される前記信号の数及び格納順を示すキュー管理情報を保持し、
前記信号が前記キューに振り分けられた場合、前記キュー管理情報を更新し、
前記キューから前記信号を取得する要求を、前記キュー管理サーバから受信した場合、前記キュー管理情報を参照し、前記キューに格納された時刻が最も古い信号を、前記キュー管理サーバに出力し、
前記複数のデータストアサーバの数が更新される前に使用するキューである更新前キューと、前記複数のデータストアサーバの数が更新された後に使用するキューである更新後キューとを有し、
前記キュー管理サーバは、前記信号の振分け先を前記更新前キューに決定した後、前記複数のデータストアサーバの数の更新を通知された場合、前記信号の振分け先を前記更新後キューに決定することを特徴とする通信システム。
【請求項２】
請求項１に記載の通信システムであって、
前記キュー管理サーバは、
前記信号の振分け先を前記更新後キューに決定した後、前記信号の取得要求を受信した場合、前記更新前キューに前記信号が格納されているかを判定し、
前記更新前キューに信号が格納されている場合、前記更新前キューから前記信号を取得することを特徴とする通信システム。
【請求項３】
請求項２に記載の通信システムであって、
前記キュー管理情報は、前記更新前キュー及び前記更新後キューに格納された前記信号の数を示し、
前記キュー管理サーバは、
前記キュー管理情報を、前記複数のデータストアサーバから複数回取得し、
前記取得したキュー管理情報に基づいて、前記更新前キューに格納された信号の数と、前記更新後キューに格納された信号の数とを、時系列で表示するためのデータを出力することを特徴とする通信システム。
【請求項４】
請求項３に記載の通信システムであって、
前記キュー管理サーバは、
前記キュー管理情報を所定の時間ごとに取得し、
前記キュー管理情報に基づいて、前記更新前キューに前記信号が格納されているかを判定することを特徴とする通信システム。
【請求項５】
請求項１に記載の通信システムであって、
前記通信システムは、複数のキュー管理サーバを有し、
前記複数のデータストアサーバは、代表データストアサーバを含み、
前記代表データストアサーバは、前記複数のキュー管理サーバがシステムの更新に合意したかを示す合意情報を保持し、
前記複数のキュー管理サーバは、通知された前記複数のデータストアサーバの数の更新に合意する場合、前記合意情報を更新し、
前記合意情報が、全ての前記複数のキュー管理サーバがシステムの更新に合意したことを示す場合、前記キュー管理サーバは、前記信号の振分け先を前記更新後キューに決定することを特徴とする通信システム。
【請求項６】
請求項１に記載の通信システムであって、
前記通信システムは、前記信号に前記順序保証キーを含めるメッセージサーバを有し、
前記キュー管理サーバは、前記メッセージサーバから前記順序保証キーを含む信号を受信することを特徴とする通信システム。
【請求項７】
信号を送受信するキュー管理サーバであって、
メモリを有し、
前記信号を格納するキューを有する複数のデータストアサーバに、前記信号を振り分け、
前記信号を前記複数のデータストアサーバに振り分ける方法を示す分散方法情報を、前記メモリに保持し、
受信した複数の信号が順序を保証する必要があることを示す順序保証キーを含み、かつ、前記複数の信号の前記順序保証キーが同じである場合、前記分散方法情報に基づいて、前記複数のデータストアサーバの中の一つのデータストアサーバが有する一つのキューに前記複数の信号の振分け先を決定し、
前記複数のデータストアサーバが有する更新前キューに前記信号の振分け先を決定した後、前記複数のデータストアサーバの数の更新を通知された場合、前記複数のデータストアサーバが有する更新後キューに前記信号の振分け先を決定することを特徴とするキュー管理サーバ。
【請求項８】
請求項７に記載のキュー管理サーバであって、
前記信号の振分け先を前記更新後キューに決定した後、前記信号の取得要求を受信した場合、前記更新前キューに前記信号が格納されているかを判定し、
前記更新前キューに信号が格納されている場合、前記更新前キューから前記信号を取得することを特徴とするキュー管理サーバ。
【請求項９】
請求項８に記載のキュー管理サーバであって、
前記キュー管理サーバは、
前記更新前キュー及び前記更新後キューに格納された前記信号の数を示すキュー管理情報を、前記複数のデータストアサーバから複数回取得し、
前記取得したキュー管理情報に基づいて、前記更新前キューに格納された信号の数と、前記更新後キューに格納された信号の数とを、時系列で表示するためのデータを出力することを特徴とするキュー管理サーバ。
【請求項１０】
請求項９に記載のキュー管理サーバであって、
前記キュー管理サーバは、
前記キュー管理情報を所定の時間ごとに取得し、
前記キュー管理情報に基づいて、前記更新前キューに前記信号が格納されているかを判定することを特徴とするキュー管理サーバ。
【請求項１１】
請求項７に記載のキュー管理サーバであって、
通知された前記複数のデータストアサーバの数の更新に合意する場合、前記複数のデータストアサーバの中の代表データストアサーバが有する合意情報を更新し、
前記合意情報が、前記キュー管理サーバがシステムの更新に合意したことを示す場合、前記信号の振分け先を前記更新後キューに決定することを特徴とするキュー管理サーバ。
【請求項１２】
信号を送受信する通信システムによる通信方法であって、
前記通信システムは、前記信号を格納するキューを有する複数のデータストアサーバと、前記データストアサーバに信号を振り分けるキュー管理サーバと、を有し、
前記キュー管理サーバは、メモリを有し、
前記通信方法は、
前記キュー管理サーバが、前記信号を前記複数のデータストアサーバに振り分ける方法を示す分散方法情報を、前記メモリに格納する手順と、
前記キュー管理サーバが、受信した複数の信号が順序を保証する必要があることを示す順序保証キーを含み、かつ、前記複数の信号の前記順序保証キーが同じである場合、前記分散方法情報に基づいて、前記複数のデータストアサーバの中の一つのデータストアサーバが有する一つのキューに前記複数の信号の振分け先を決定する手順と、
前記複数のデータストアサーバが、保持している前記キューに格納される前記信号の数及び格納順を示すキュー管理情報を、前記信号が前記キューに振り分けられた場合、更新する手順と、
前記複数のデータストアサーバが、前記キューから前記信号を取得する要求を、前記キュー管理サーバから受信した場合、前記キュー管理情報を参照し、前記キューに格納された時刻が最も古い信号を、前記キュー管理サーバに出力する手順と、
を含み、
前記複数のデータストアサーバは、前記複数のデータストアサーバの数が更新される前に使用するキューである更新前キューと、前記複数のデータストアサーバの数が更新された後に使用するキューである更新後キューとを有し、
前記通信方法は、さらに、
前記キュー管理サーバが、前記信号の振分け先を前記更新前キューに決定した後、前記複数のデータストアサーバの数の更新を通知された場合、前記信号の振分け先を前記更新後キューに決定する手順を含むことを特徴とする通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特に、通信システムに関する。
【背景技術】
【０００２】
近年、通信、金融及び交通などの社会インフラを支えるミッションクリティカルシステムの分野において、複数のサーバによって構成される分散化されたシステム（以下、分散システム）の適用が広がっている。分散システムは、サービスを止めない高可用性、サーバの増設が容易な高拡張性、及び、コモディティサーバを利用することによる低価格化などのメリットを持つ。
【０００３】
特に高可用性は、ミッションクリティカルシステムにおいて最重要である。すなわち、ミッションクリティカルシステムには、サービスを止めないだけでなく規定時間以内の応答が要求されるなど、サービス品質に厳しい要件がある。
【０００４】
一方で、分散システムは、分散システム全体でやりとりされる多様なデータ（メッセージ）の処理の順序を保証すること（以下、順序保証）が困難である。一般的な分散システムは、複数のサーバがデータ処理を実行している。これらの複数のサーバによる処理は、互いに協調していないので、処理の追い越しが発生する。
【０００５】
分散システムには、例えば、通信キャリアの加入者の登録、削除及びこれらに伴う処理を管理するためのメッセージを、受信、処理及び送信するメッセージシステムがある。また、分散システムには、例えば、証券会社の株取引及び為替処理などを行うためのメッセージを、受信、処理及び送信するメッセージシステムがある。
【０００６】
このようなメッセージシステムは、受信したメッセージを到着順に処理し、かつ、メッセージシステム全体でメッセージ処理の追い越しが発生しない順序保証を行うことが求められる。また、これらのメッセージシステムは、順序保証と同時に、分散システムの特徴である高可用性を実現することも求められる。
【０００７】
従来から、メッセージシステムの順序保証を実現する方法が提案されている（例えば、特許文献１及び特許文献２参照）。特許文献１は、複数のコンピュータを含むクラスタ構成のメッセージ受信システムにおいて、メッセージ発信元からの発信順序を示す順序番号の情報を含むメッセージの到達順序を保証するためのメッセージ到達順序保証方法を開示する（特許文献１の段落［０００６］及び［００１０］参照）。
【０００８】
また、特許文献２は、メッセージ送信時間を設定し、現在時刻がメッセージ送信時間を過ぎたのちメッセージを処理する方法を開示する（特許文献２の段落［０００２］、［００１８］及び［００４２］参照）。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００４−１７７９９５号公報
【特許文献２】米国第２０１３００３６４２７号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１０】
前述の通り、通信キャリア又は証券会社のメッセージシステムを分散システム化するには、順序保証及び高可用性の実現という課題がある。しかしながら、これらのメッセージシステムに、特許文献１及び２の方法は、以下の理由で適用できなかった。
【００１１】
特許文献１の順序番号付与方法は、メッセージ発信元からの発信順序を示す順序番号の情報を含むメッセージについて、メッセージの順序番号を示す次順序番号を記憶する第１のデータベースから次順序番号を読み出す処理、到着したメッセージを所定の第２のデータベースに記憶するメッセージ記憶ステップと、メッセージ記憶ステップにより同一メッセージが第２のデータベースに二重に登録されたか否かを判別する処理が必要である。このような方法は、第２のデータベースへのアクセスが集中するため、システム拡張時に性能ボトルネックになり、かつ、障害時にも単一故障点になる可能性がある。
【００１２】
特許文献２のメッセージ送信時間指定方法は、個々のクライアントのメッセージ処理についてメッセージ送信日時の設定によりメッセージ到着順を処理するが、通信キャリア又は証券会社のメッセージシステムでは、複数のクライアント間で送信日時設定を相互に確認することが困難である。
【００１３】
そこで、本発明では分散システム化しているメッセージシステム（以下、分散メッセージシステム）において、送受信されるメッセージの順序保証、及び、高可用性を実現することを目的とする。
【課題を解決するための手段】
【００１４】
上記課題を解決するために、本発明は、信号を送受信する通信システムであって、前記信号を格納するキューを有する複数のデータストアサーバと、前記データストアサーバに信号を振り分けるキュー管理サーバと、を有し、前記キュー管理サーバは、前記信号を前記複数のデータストアサーバに振り分ける方法を示す分散方法情報を保持し、受信した複数の信号が順序を保証する必要があることを示す順序保証キーを含み、かつ、前記複数の信号の前記順序保証キーが同じである場合、前記分散方法情報に基づいて、前記複数のデータストアサーバの中の一つのデータストアサーバが有する一つのキューに前記複数の信号の振分け先を決定する。
【発明の効果】
【００１５】
本発明によれば、分散システムにおいてメッセージ処理の順序保証を可能にする。
【００１６】
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１７】
【図１】本実施例の分散メッセージシステムの構成を示すブロック図である。
【図２Ａ】本実施例のキュー管理サーバのハードウェア構成を示すブロック図である。
【図２Ｂ】本実施例のキュー管理サーバの揮発性記憶部が保持するデータを示す説明図である。
【図３Ａ】本実施例のデータストアサーバのハードウェア構成を示すブロック図である。
【図３Ｂ】本実施例の代表データストアサーバの揮発性記憶部が保持するデータを示す説明図である。
【図４】本実施例のメッセージサーバからキュー管理サーバに送信されるメッセージの構成を示す説明図である。
【図５】本実施例のキュー管理サーバの前後キュー情報及び代表データストアサーバの前後キュー情報を示す説明図である。
【図６】本実施例のキュー管理サーバの前後サーバ対応テーブル及び代表データストアサーバの前後サーバ対応テーブルを示す説明図である。
【図７】本実施例のキュー管理サーバの合意情報と代表データストアサーバの合意情報とを示す説明図である。
【図８】本実施例のシステムの拡張処理を示すシーケンス図である。
【図９】本実施例のメッセージサーバから送信されたメッセージをデータストアサーバに格納する処理を示すシーケンス図である。
【図１０】本実施例のメッセージサーバによるメッセージ取得の処理を示すシーケンス図である。
【図１１】本実施例のキュー管理サーバによる前後キュー情報の更新処理を示すシーケンス図である。
【図１２Ａ】本実施例のキュー管理サーバによるシステム拡張の準備処理を示すフローチャートである。
【図１２Ｂ】本実施例のキュー管理サーバによるシステム拡張の準備処理が終了したかを処理を示すフローチャートである。
【図１２Ｃ】本実施例のデータストアサーバによるシステムの拡張処理を示すフローチャートである。
【図１３】本実施例のメッセージサーバから送信されたメッセージをデータストアサーバに格納する処理を示すフローチャートである。
【図１４】本実施例のメッセージサーバによるメッセージ取得の処理を示すフローチャートである。
【図１５Ａ】本実施例のシステム拡張前と後とのデータストアサーバの分散キューを示す説明図である。
【図１５Ｂ】本実施例のシステムの拡張後のデータストアサーバの分散キューを示す説明図である。
【図１６】本実施例の前後キュー情報の内容を表示する画面の例を示す説明図である。
【発明を実施するための形態】
【００１８】
以下、実施例について図面を参照して説明する。
【００１９】
本実施例の順序保証は、分散メッセージシステムにおけるメッセージの順序保証を特に示す。
【００２０】
また、分散システムは、サーバの増設が容易な高拡張性がメリットである。このため、本実施例における分散メッセージシステムは、メッセージの順序保証を実現しつつ、分散システムの高拡張性を確保する。
【００２１】
分散メッセージシステムにサーバを追加するなど、分散システムを拡張する場合に、高可用性の高い分散システムを実現する方法は、提案されている（例えば、特開２０１３−０２５４９７号公報及び米国第２０１３０２９０４９９号明細書参照）。
【００２２】
特開２０１３−０２５４９７号公報は、コンシステントハッシングを用いた分散処理システムにおいて、クラスタメンバを追加した場合の既存データの移行によるシステム全体の負担増加を抑制するため、コンシステントハッシングに基づいて、データを管理する複数のサーバ、及び、クライアントマシンから受け取ったリクエストを複数のサーバのいずれかに振り分ける負荷分散装置を備える分散処理システムを開示する（特開２０１３−０２５４９７号公報の段落［０００９］及び［００１０］参照）。
【００２３】
また、米国第２０１３０２９０４９９号明細書は、サーバの負荷及び性能を監視するスケーリングコントローラによりサーバ増設を実現する方法を開示する（米国第２０１３０２９０４９９号明細書の段落［０００４］参照）。
【００２４】
これらの技術は、分散システムの高可用なシステム拡張を実現するが、順序保証を実現しない。特開２０１３−０２５４９７号公報に記載された分散システムは、メッセージ生成日時の管理が困難であり、順序保証が困難である。また、米国第２０１３０２９０４９９号明細書についても拡張時のメッセージの振分け及び移動といった根本的な拡張処理に言及していない。
【００２５】
本実施例では、拡張又は縮小することが可能であり、かつ、メッセージ処理の順序保証を実現する分散メッセージシステムの例として、以下の分散メッセージシステムを説明する。なお、以下において、分散メッセージシステムの拡張又は縮小を、システムの更新と総称する。
【００２６】
また、本実施例におけるメッセージは、記憶装置に格納される情報のまとまりである。また、本実施例のメッセージとは、例えば携帯電話のメール、加入者管理データ、又は、金融の株取引若しくは為替処理データなどを送受信する信号であり、バイト列のデータである。
【００２７】
図１は、本実施例の分散メッセージシステムの構成を示すブロック図である。
【００２８】
本実施例の分散メッセージシステムは、社会インフラ企業などの通信設備網１０３内に構成されており、メッセージサーバ１０４、キュー管理サーバ１０５、及び、データストアサーバ１０６を備える。また、本実施例の分散メッセージシステムは、通信設備網１０３及び無線網１０２を介して通信端末１０１と接続し、かつ、通信設備網１０３及びインターネット１０８を介して宛先サーバ１０９と接続する。また、本実施例の分散メッセージシステムは、通信設備網１０３を介して運用管理サーバ１０７と接続する。
【００２９】
通信端末１０１は、携帯電話端末、タブレット端末、又は、ＰＣなどのメッセージ送受信可能な端末装置である。無線網１０２は、社会インフラ企業などが管理する無線ネットワークである。
【００３０】
通信設備網１０３は、通信端末１０１と宛先サーバ１０９との間の通信を中継するネットワーク及びネットワーク設備である。通信設備網１０３は、無線網１０２からの信号をインターネット１０８を介して宛先サーバ１０９に向けて転送し、インターネット１０８からの信号を無線網１０２を介して通信端末１０１に転送する。
【００３１】
無線網１０２及び通信設備網１０３は、本実施例のメッセージサーバ１０４、キュー管理サーバ１０５、データストアサーバ１０６、及び、運用管理サーバ１０７を管理する社会インフラ企業などにより管理される。
【００３２】
本実施例の分散メッセージシステムは、複数のメッセージサーバ１０４、複数のキュー管理サーバ１０５、及び、複数のデータストアサーバ１０６から構成される。これらのサーバ間はメッシュ状に接続される。
【００３３】
ここで、メッセージサーバ１０４は、送信サーバと受信サーバとの二つのサーバによって構成されてもよい。また、キュー管理サーバ１０５は、送信サーバと受信サーバとの二つのサーバによって構成されてもよい。
【００３４】
メッセージサーバ１０４、キュー管理サーバ１０５、データストアサーバ１０６、及び、運用管理サーバ１０７は、各々が物理的な計算機によって構成されたサーバ装置であってもよいし、仮想マシンによって構成されてもよい。また、一つのサーバ装置が、少なくとも二つのサーバの機能を実現するサーバプログラムを保持し、本実施例の分散メッセージシステムの機能を実行してもよい。
【００３５】
例えば、一つのサーバ装置が、キュー管理サーバ１０５とデータストアサーバ１０６との機能を実現したり、複数のデータストアサーバ１０６の機能を実現したりしてもよい。また、一つのサーバ装置が、メッセージサーバ１０４とキュー管理サーバ１０５との機能を実現してもよい。本実施例のシステム構成は、図１に示す構成に限定されることなく、他の構成の分散メッセージシステムにも適用可能である。
【００３６】
メッセージサーバ１０４は、通信端末１０１から送信されたメッセージを受信し、キュー管理サーバ１０５に転送し、さらに、キュー管理サーバ１０５から受信したメッセージを、通信端末１０１又は宛先サーバ１０９に転送する。キュー管理サーバ１０５は、メッセージサーバ１０４から受信したメッセージを読み取り、データストアサーバ１０６にメッセージを振り分ける。
【００３７】
キュー管理サーバ１０５は、通信端末１０１が送信したメッセージをメッセージサーバ１０４を介して受信し、受信したメッセージをキューと呼ばれる格納領域に蓄積する。そして、キュー管理サーバ１０５は、蓄積の後に順次送信処理を行う、ストアアンドフォワード方法によってメッセージを中継する。これにより、キュー管理サーバ１０５は、システムへ流入する情報量の平準化、及び、ユーザを長く待たせない規定時間以内の応答などを実現する。
【００３８】
本実施例のキュー管理サーバ１０５は、メッセージサーバ１０４から受信したメッセージをデータストアサーバ１０６に振り分け、データストアサーバ１０６がキューを保持する。
【００３９】
データストアサーバ１０６は、メッセージを格納する装置であり、例えば、キーバリューストア（Ｋｅｙ−Ｖａｌｕｅ  Ｓｔｏｒｅ）、又は、データグリッドなどである。本実施例の分散メッセージシステムは、複数のデータストアサーバ１０６を含むが、複数のデータストアサーバ１０６の中に一つの代表データストアサーバを有する。
【００４０】
代表データストアサーバは、本実施例の分散メッセージシステムにおけるシステムの更新を実行するための情報を保持するデータストアサーバ１０６である。
【００４１】
データストアサーバ１０６は、一つのメッセージを複製し、複数のデータストアサーバ１０６で複製後の複数のメッセージを多重で保持することによりメッセージデータの永続性を実現する。データストアサーバ１０６は、メッセージの格納、更新、及び、削除などの処理を、そのメッセージを保持する（もしくは保持すべき）複数のデータストアサーバ１０６間で協調して行う。
【００４２】
また、以下に示すデータストアサーバ１０６は、キーと値（バリュー）のペアでメッセージを管理する、キーバリューストアである。データストアサーバ１０６は、メッセージサーバ１０４からキュー管理サーバ１０５経由で要求されたメッセージを、要求に従って出力する。
【００４３】
運用管理サーバ１０７は、キュー管理サーバ１０５及びデータストアサーバ１０６に、システムの更新などを指示する。運用管理サーバ１０７は、入出力装置１１０と接続してもよい。入出力装置１１０は、本実施例の分散メッセージシステムの運用者又は管理者が指示を入力するための入力装置と、分散メッセージシステムにおける処理結果を出力するための出力装置である。入出力装置１１０は、例えば、キーボード、マウス、ディスプレイ及びプリンタである。
【００４４】
なお、本実施例は社会インフラ企業に設置される分散メッセージシステムを想定するが、上記以外の認証処理、課金処理、メッセージの変換処理、及び、輻輳制御処理などを、メッセージサーバ１０４又はキュー管理サーバ１０５が行ってもよい。
【００４５】
以下の説明におけるメッセージは、通信端末１０１、メッセージサーバ１０４、キュー管理サーバ１０５、データストアサーバ１０６、キュー管理サーバ１０５、メッセージサーバ１０４、及び、通信端末１０１又は宛先サーバ１０９の順に送信される。
【００４６】
しかし、本実施例の処理はこれに限定されず、メッセージは、本実施例の分散メッセージシステムを経由すれば、いかなる経路を送信されてもよい。また、本実施例の分散メッセージシステムは、社会インフラ企業の通信サービスに限定されることなく、無線網１０２に接続されたセンサ、車又はメータなどのデバイスに送信するメッセージ（もしくはデータ）に適用可能である。また、本実施例は無線網１０２の代わりに有線網又はスマートグリッドなどのネットワーク形態にも適用可能である。
【００４７】
図２Ａは、本実施例のキュー管理サーバ１０５のハードウェア構成を示すブロック図である。
【００４８】
キュー管理サーバ１０５は、プロセッサ２０１と、入出力回路インタフェース２０２と、揮発性メモリ２０３と、不揮発性記憶部２０６と、これらを接続する内部通信線（例えば、バス）と、によって構成される。
【００４９】
プロセッサ２０１は、演算装置及び制御装置である。キュー管理サーバ１０５の機能は、プロセッサ２０１が揮発性メモリ２０３に格納されたプログラムを実行することによって、実現される。
【００５０】
揮発性メモリ２０３は、例えば、揮発性の記憶素子であるＲＡＭを含む。ＲＡＭは、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような高速かつ揮発性の記憶素子であり、補助記憶装置に格納されたプログラム及びプログラムの実行時に使用されるデータを一時的に格納する。
【００５１】
不揮発性記憶部２０６は、不揮発性の記憶素子であるＲＯＭであってもよいし、磁気記憶装置（ＨＤＤ）、又は、フラッシュメモリ（ＳＳＤ）等の大容量かつ不揮発性の記憶装置であってもよい。不揮発性記憶部２０６は、プロセッサ２０１が実行するプログラム及びプログラムの実行時に使用されるデータを格納してもよい。そして、プログラムは、不揮発性記憶部２０６から必要に応じて読み出され、揮発性メモリ２０３にロードされ、実行されてもよい。
【００５２】
入出力回路インタフェース２０２は、通信設備網１０３と通信するためのインタフェースである。
【００５３】
揮発性メモリ２０３は、メッセージ処理プログラム２０４と揮発性記憶部２０５とを含む。メッセージ処理プログラム２０４は、データストアサーバ１０６へのメッセージの格納などの処理を行う分散処理機能、及び、メッセージの処理を実現するプログラムである。メッセージ処理プログラム２０４は、一つのプログラムによって構成されてもよいし、複数のサブプログラムを含んでもよい。
【００５４】
メッセージ処理プログラム２０４は、予め揮発性メモリ２０３又は不揮発性記憶部２０６に格納されてもよいし、図示しない着脱可能な記憶媒体（例えば、ＣＤーＲＯＭ、又は、フラッシュメモリなど）、又は、通信媒体（すなわちネットワーク、及び、ネットワークを伝播するデジタル信号又は搬送波）を介して、揮発性メモリ２０３又は不揮発性記憶部２０６に導入されてもよい。
【００５５】
以下に示すキュー管理サーバ１０５の機能は、プロセッサ２０１がメッセージ処理プログラム２０４を実行することにより実現される。
【００５６】
揮発性記憶部２０５は、メッセージ処理プログラム２０４が処理を実行する際に使用する記憶領域である。しかし、メッセージ処理プログラム２０４は、処理を実行する際に使用する記憶領域を、自らのプログラムが格納される記憶領域に有してもよい。
【００５７】
不揮発性記憶部２０６は、メッセージ処理プログラム２０４が出力したログ、及び、メッセージ処理プログラム２０４が使用する設定ファイルなどのデータを格納する。
【００５８】
図２Ｂは、本実施例のキュー管理サーバ１０５の揮発性記憶部２０５が保持するデータを示す説明図である。
【００５９】
揮発性記憶部２０５は、データストアサーバ構成情報２１１と、データストアサーバ合議情報２１２と、合意情報２１３と、前後キュー情報２１４と、前後サーバ対応テーブル２１５と、処理性能低下判定条件２１６と、リソース規制値情報２１７と、分散方法情報２１８と、取得方法情報２１９と、データストアサーバ状態情報２２０と、を含む。
【００６０】
データストアサーバ構成情報２１１は、データストアサーバ１０６間の相関情報及び稼動情報を格納する。ここで、データストアサーバ１０６間の相関情報は、データストアサーバ１０６が保持するデータのキーのキーレンジを示す情報（データストアサーバ１０６のキーレンジ担当情報）と、そのキーレンジに対してデータストアサーバ１０６がマスタであるかスレーブであるかを示す情報を含む。
【００６１】
データストアサーバ１０６間の稼動情報は、データストアサーバ１０６を特定する情報（ＩＰアドレス等）、データストアサーバ１０６の数、データストアサーバ１０６が正常に稼動しているかを示す情報、及び、相関情報が示すキーレンジにおいて、データストアサーバ１０６が保持するメッセージの多重度等を示す。
【００６２】
本実施例のメッセージ処理プログラム２０４は、振分け先として決定したデータストアサーバ１０６に直接メッセージを格納する。そして、本実施例のデータストアサーバ１０６は、システムの更新の処理に伴って、データストアサーバ１０６間でメッセージを移動させることがない。
【００６３】
データストアサーバ合議情報２１２は、データストアサーバ１０６間で直接交換する情報であり、データストアサーバ構成情報２１１と同じく、データストアサーバ１０６の稼動情報及び相関情報を含む。
【００６４】
メッセージ処理プログラム２０４は、データストアサーバ合議情報２１２、及び、データストアサーバ構成情報２１１のどちらかを用いて、データストアサーバ１０６の処理性能低下を判定してもよいし、両方を利用してもよい。以下、本実施例のメッセージ処理プログラム２０４は、処理性能低下を判定するためにデータストアサーバ構成情報２１１を利用する。
【００６５】
合意情報２１３は、システムの更新時において全てのキュー管理サーバ１０５がシステムの更新の準備を終了したかを示す情報であり、更新に同意した全てのキュー管理サーバ１０５を特定するための情報（ＩＰアドレスなど）が格納される。
【００６６】
システムの更新の準備の終了とは、データストアサーバ構成情報２１１、及び、前後サーバ対応テーブル２１５などの更新準備が終了した状態を示す。合意情報２１３は、代表データストアサーバが有する合意情報３１３（後述）と同期される。
【００６７】
合意情報２１３は、システムの更新の準備が終了したことを示す情報として、例えば、情報の新しさを示すシーケンス番号、実行されるシステムの更新の処理の識別子、又は、更新の準備を終了したキュー管理サーバ１０５の識別子（ＩＰアドレス）等を含む。
【００６８】
前後キュー情報２１４は、システムの更新の実行前、及び、システムの更新の実行後のデータストアサーバ１０６が有するキュー（後述する図３Ｂに示す分散キューデータ３２１）に格納されるメッセージの数を、分散メッセージシステムで一元管理するための情報を示す。特に、前後キュー情報２１４は、システムの更新の実行前、及び、システムの更新の実行後のキューに関する情報を含む。前後キュー情報２１４は、代表データストアサーバが有する前後キュー情報と同期される。
【００６９】
前後サーバ対応テーブル２１５は、システムの更新前後でコンシステントハッシングなどのデータ振分け空間が変わる場合の、システムの更新前のデータストアサーバ１０６と、システムの更新後のデータストアサーバ１０６との対応関係を示す。
【００７０】
前後サーバ対応テーブル２１５は、分散メッセージシステムのメッセージ処理プログラム２０４によって同期される。
【００７１】
同期の方法は、最初に複数のキュー管理サーバ１０５の中の一つのキュー管理サーバ１０５のメッセージ処理プログラム２０４が、前後サーバ対応テーブル２１５を更新し、更新後の前後サーバ対応テーブル２１５を代表データストアサーバに前後サーバ対応テーブル３１５として格納する方法である。前後サーバ対応テーブル２１５の詳細については図６の説明にて後述する。
【００７２】
処理性能低下判定条件２１６は、メッセージ処理プログラム２０４がデータストアサーバ１０６の処理性能低下を判定するための条件（閾値）を示す。処理性能低下判定条件２１６は、例えば、受信したメッセージが示す要求種別ごとに、性能低下を判定するための処理経過時間、接続数、同時処理数、送信待ち数、又は、応答時間などの閾値を示す。
【００７３】
要求種別とは、メッセージの取得、及び、メッセージの格納等、データストアサーバ１０６に指示するメッセージ処理の内容の種別である。
【００７４】
メッセージ処理プログラム２０４は、データストアサーバ１０６との通信によって取得したデータストアサーバ構成情報２１１の値と、処理性能低下判定条件２１６とを比較することにより、データストアサーバ１０６の処理性能が低下していると判定する。
【００７５】
リソース規制値情報２１７は、通常時、及び、処理性能低下判定時などの状態別に複数の値を保持する。メッセージ処理プログラム２０４は、リソース規制値情報２１７を参照し、処理性能が低下したデータストアサーバ１０６へ処理を要求しないことによって、データストアサーバ１０６の全リソースを使い切ることを回避する。
【００７６】
分散方法情報２１８は、メッセージ処理プログラム２０４が、データストアサーバ１０６のキューへメッセージを分散する方法（振分け方法）を示す。本実施例の分散方法情報２１８は、例えば、コンシステントハッシングなどを示し、一つの順序保証キー（メッセージに含まれる）に対して、一つのデータストアサーバ１０６の一つのキューが割り当てられるような方法を示す。
【００７７】
本実施例のデータストアサーバ１０６は、システム全体でメッセージの宛先別にキューを備える。キュー管理サーバ１０５は、メッセージに付加された順序保証キーと、分散方法情報２１８が示すコンシステントハッシングなどの方法とにより特定のデータストアサーバ１０６を選択する。
【００７８】
メッセージをキューに格納する場合、メッセージ処理プログラム２０４は、分散方法情報２１８を参照し、メッセージ振分け先のデータストアサーバ１０６を取得する。このとき、メッセージ処理プログラム２０４は、順序保証キーに値が設定されている場合、分散方法情報２１８が示す振分け方法によって特定のデータストアサーバ１０６のキューを選択し、順序保証キーに値が設定されていない場合、別の振分け方法（ラウンドロビンなど）によってデータストアサーバ１０６のキューを選択してもよい。
【００７９】
メッセージ処理プログラム２０４は、分散方法情報２１８が有するコンシステントハッシングによるデータ振分け空間（具体的には、データストアサーバ１０６のキューのリスト）の設定など一部の情報を、データストアサーバ構成情報２１１が示すデータストアサーバ１０６の設定に基づいて生成する。したがって、システムの更新時においてデータストアサーバ構成情報２１１が更新された場合、分散方法情報２１８も更新される。
【００８０】
取得方法情報２１９は、キュー管理サーバ１０５からメッセージ取得が可能なデータストアサーバ１０６（データストアサーバ状態情報２２０）、及び、その取得優先度を示す。具体的には、全て又は一部のデータストアサーバ１０６からメッセージを取得するか、複数台設定した場合にどのデータストアサーバ１０６からメッセージを優先して取得するか、又は、データストアサーバ１０６の保持するメッセージ数が多いところから優先して取得するかといった情報を示す。
【００８１】
メッセージ処理プログラム２０４は、取得方法情報２１９を参照することによって、現在（更新後）、メッセージを取得できるデータストアサーバ１０６を特定できる。また、メッセージ処理プログラム２０４は、前後サーバ対応テーブル２１５を参照することによって、更新後にメッセージを取得するデータストアサーバ１０６と、当該データストアサーバ１０６に対応する更新前にメッセージを取得したデータストアサーバ１０６を特定する。
【００８２】
さらに、メッセージ処理プログラム２０４は、前後キュー情報２１４を参照することによって、更新後にメッセージを取得するデータストアサーバ１０６と更新前にメッセージを取得したデータストアサーバ１０６のどちらからメッセージを取得するか選択する。
【００８３】
データストアサーバ状態情報２２０は、担当キーレンジ情報、稼働サーバ、稼働情報、分散キューリスト、及び、データ多重度など、データストアサーバ１０６ごとの状態に関する情報を示す。
【００８４】
図３Ａは、本実施例のデータストアサーバ１０６のハードウェア構成を示すブロック図である。
【００８５】
データストアサーバ１０６は、プロセッサ３０１と、入出力回路インタフェース３０２と、揮発性メモリ３０３と、不揮発性記憶部３０６と、これらを接続する内部通信線（例えば、バス）と、によって構成される。
【００８６】
プロセッサ３０１は、演算装置及び制御装置である。データストアサーバ１０６の機能は、プロセッサ３０１が揮発性メモリ３０３に格納されたプログラムを実行することによって、実現される。
【００８７】
揮発性メモリ３０３は、例えば、揮発性の記憶素子であるＲＡＭを含む。ＲＡＭは、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような高速かつ揮発性の記憶素子であり、補助記憶装置に格納されたプログラム及びプログラムの実行時に使用されるデータを一時的に格納する。
【００８８】
不揮発性記憶部３０６は、不揮発性の記憶素子であるＲＯＭであってもよいし、磁気記憶装置（ＨＤＤ）、又は、フラッシュメモリ（ＳＳＤ）等の大容量かつ不揮発性の記憶装置であってもよい。不揮発性記憶部３０６は、プロセッサ３０１が実行するプログラム及びプログラムの実行時に使用されるデータを格納してもよい。そして、プログラムは、不揮発性記憶部３０６から必要に応じて読み出され、揮発性メモリ３０３にロードされ、実行されてもよい。
【００８９】
入出力回路インタフェース３０２は、通信設備網１０３と通信するためのインタフェースである。
【００９０】
揮発性メモリ３０３は、データストアサーバプログラム３０４と、揮発性記憶部３０５とを含む。データストアサーバプログラム３０４は、メッセージの処理を実現するプログラムである。データストアサーバプログラム３０４は、一つのプログラムによって構成されてもよいし、複数のサブプログラムを含んでもよい。
【００９１】
データストアサーバプログラム３０４は、予め揮発性メモリ３０３又は不揮発性記憶部３０６に格納されてもよいし、図示しない着脱可能な記憶媒体（例えば、ＣＤーＲＯＭ、又は、フラッシュメモリなど）、又は、通信媒体（すなわちネットワーク、及び、ネットワークを伝播するデジタル信号又は搬送波）を介して、揮発性メモリ３０３又は不揮発性記憶部３０６に導入されてもよい。
【００９２】
以下に示すデータストアサーバ１０６の機能は、プロセッサ３０１がデータストアサーバプログラム３０４を実行することにより実現される。
【００９３】
揮発性記憶部３０５は、データストアサーバプログラム３０４が処理を実行する際に使用する記憶領域である。しかし、データストアサーバプログラム３０４は、処理を実行する際に使用する記憶領域を自らのプログラムが格納される記憶領域に有してもよい。
【００９４】
不揮発性記憶部３０６は、データストアサーバプログラム３０４が出力したログ、及び、データストアサーバプログラム３０４が使用する設定ファイルなどのデータを格納する。
【００９５】
図３Ｂは、本実施例の代表データストアサーバの揮発性記憶部３０５が保持するデータを示す説明図である。
【００９６】
データストアサーバ１０６の揮発性記憶部３０５は、データストアサーバ構成情報３１１、データストアサーバ合議情報３１２、及び、データストア領域３１６を含む。また、代表データストアサーバの揮発性記憶部３０５は、さらに、合意情報３１３、前後キュー情報３１４、及び、前後サーバ対応テーブル３１５を含む。
【００９７】
なお、不揮発性記憶部３０６は、データストアサーバ構成情報３１１、データストアサーバ合議情報３１２、合意情報３１３、前後キュー情報３１４、前後サーバ対応テーブル３１５、及び、データストア領域３１６の各情報を格納してもよい。そして、データストアサーバプログラム３０４は、必要に応じて不揮発性記憶部３０６から情報を読み出してもよい。
【００９８】
データストアサーバ構成情報３１１は、図２Ｂに示すデータストアサーバ構成情報２１１と同じ内容を示すように同期される。すなわち、データストアサーバ構成情報３１１は、データストアサーバ１０６間の相関情報及びデータストアサーバ１０６の稼動情報を格納する。
【００９９】
ただし、データストアサーバ構成情報３１１は、データストアサーバ１０６のプログラムによって参照されるため、内容が同じであれば、データストアサーバ構成情報２１１とデータ形式が異なってもよい。
【０１００】
データストアサーバ合議情報３１２は、図２Ｂに示すデータストアサーバ合議情報２１２と同じ内容を示すように同期される。すなわち、データストアサーバ合議情報３１２は、データストアサーバ１０６間の相関情報及びデータストアサーバ１０６の稼働情報を含む。複数のデータストアサーバ１０６のデータストアサーバプログラム３０４は、データストアサーバ１０６間でデータストアサーバ合議情報３１２を交換し、データストアサーバ構成情報３１１を更新する。
【０１０１】
合意情報３１３は、図２Ｂに示す合意情報２１３と同じ内容を含む。代表データストアサーバの他のデータストアサーバ１０６は、合意情報３１３のスレーブ情報を保持してもよい。代表データストアサーバの合意情報３１３は、複数のキュー管理サーバ１０５によって共有される。
【０１０２】
キュー管理サーバ１０５のメッセージ処理プログラム２０４は、システムの更新要求を受け取り、システムの更新の準備が終了した場合、代表データストアサーバの合意情報３１３に、自らがシステムの更新要求を受けたこと、及び、自らがシステムの更新の準備を終了したことを示す情報を格納する。
【０１０３】
そして、全てのキュー管理サーバ１０５が代表データストアサーバの合意情報３１３を更新した場合、合意情報３１３は、システムの更新の準備が、全てのキュー管理サーバ１０５において終了し、システムの更新後の処理を開始可能であることを示す。
【０１０４】
全てのキュー管理サーバ１０５は、メッセージ処理要求を受信した場合、又は、定期更新時に、データストアサーバ１０６から合意情報３１３を取得し、取得した合意情報３１３によって合意情報２１３を更新する。そして、全てのキュー管理サーバ１０５は、合意情報２１３が、システムの更新の準備が全てのキュー管理サーバ１０５において終了したことを示す場合、システムの更新後の処理を開始する。
【０１０５】
全てのキュー管理サーバ１０５が、データストアサーバ１０６の合意情報３１３に、システムの更新の準備が終了したことを格納するまで、本実施例の分散メッセージシステムは、システムの更新処理の終了後の状態へ移行しない。システムの更新時のシーケンスについては図８に後述する。
【０１０６】
前後キュー情報３１４は、図２Ｂに示す前後キュー情報２１４と同じ内容を含むように同期される。前後キュー情報３１４は、代表データストアサーバに格納され、複数のキュー管理サーバ１０５により共有される。
【０１０７】
複数のキュー管理サーバ１０５の複数のメッセージ処理プログラム２０４のうち少なくとも一つが、前後キュー情報２１４を更新した場合、当該メッセージ処理プログラム２０４は、代表データストアサーバに、更新した前後キュー情報２１４の内容を前後キュー情報３１４として格納する。
【０１０８】
前後サーバ対応テーブル３１５は、図２Ｂに示す前後サーバ対応テーブル２１５と同じ内容を示す。代表データストアサーバに格納される前後サーバ対応テーブル３１５は、複数のキュー管理サーバ１０５により共有される。
【０１０９】
データストア領域３１６は、データストアサーバ１０６がキュー管理サーバ１０５から格納要求とメッセージとを受信した場合、受信したメッセージを格納する領域である。本実施例におけるデータストアサーバ１０６は、キーバリューストアであるため、データストア領域３１６は、メッセージ（バリュー）と当該メッセージデータに対応するキーとを格納する。
【０１１０】
データストア領域３１６は、１ｓｔキュー３１７及び２ｎｄキュー３１８を含む。１ｓｔキュー３１７、及び、２ｎｄキュー３１８は、システムの更新の前後でメッセージ格納先及びメッセージ取得先を分けて管理するためのキューである。１ｓｔキュー３１７及び２ｎｄキュー３１８を総称して、分散キューと記載する。
【０１１１】
１ｓｔキュー３１７及び２ｎｄキュー３１８は、複数の分散キューデータ３２１を有する。分散キューデータ３２１は、順序保証が必要なメッセージのグループに対応する記憶領域である。また、１ｓｔキュー３１７に格納される分散キューデータ３２１と２ｎｄキュー３１８に格納される分散キューデータ３２１とは、対応する。
【０１１２】
分散キューデータ３２１は、複数のデータストアサーバ１０６に多重に保持されている。分散キューデータ３２１は、一つの分散キュー管理情報３３１と複数のメッセージデータ３３２と複数のメッセージ関連情報３３３とを含む。
【０１１３】
１ｓｔキュー３１７と２ｎｄキュー３１８とは、同じ対象キュー名（識別子）を有する分散キューデータ３２１を各々有する。キュー管理サーバ１０５のメッセージ処理プログラム２０４は、メッセージをデータストアサーバ１０６に格納する際、メッセージを格納する１ｓｔキュー３１７又は２ｎｄキュー３１８の分散キューを指定する。また、データストアサーバプログラム３０４は、メッセージに含まれる対象キュー名（識別子）と、メッセージ処理プログラム２０４から指定された分散キューとに従って、分散キューデータ３２１にメッセージを格納する。
【０１１４】
分散キュー管理情報３３１は、分散キューデータ３２１に含まれる複数のメッセージデータ３３２とメッセージ関連情報３３３とを管理するための情報である。データストアサーバプログラム３０４は、分散キュー管理情報３３１を参照することにより、先入れ先出しのキューとしての機能を実現する。
【０１１５】
具体的には、分散キュー管理情報３３１は、分散キューデータ３２１の識別子、分散キューデータ３２１がマスタであるかスレーブであるかを示す情報、及び、メッセージデータ３３２等の格納順（到着順）などのメッセージデータ３３２の処理順を示す情報を含む。
【０１１６】
また、分散キュー管理情報３３１は、分散キューデータ３２１に格納できる最大のメッセージ件数（又は、分散キューデータ３２１が利用できるデータサイズ）、分散キューデータ３２１に格納されるメッセージ数及び利用されているメッセージサイズ、並びに、複数のメッセージ処理プログラム２０４からメッセージを一つずつ取り出すため、排他制御の対象であるメッセージデータ３３２を示す情報等を含む。
【０１１７】
分散キュー管理情報３３１がメッセージデータ３３２の格納順を示すため、メッセージ処理プログラム２０４は、メッセージの格納順に従ってメッセージを呼び出すことができる。これによって、データストアサーバプログラム３０４は、最も以前に格納されたメッセージを分散キューデータ３２１から取り出すことができ、順序保証を実現することができる。
【０１１８】
また、分散キュー管理情報３３１を参照することにより、一つのメッセージ処理プログラム２０４によって取り出されたメッセージを、他のメッセージ処理プログラム２０４は、一定時間取り出せない。これにより、一つのメッセージの多重処理を防ぐことができる。
【０１１９】
一つの分散キューデータ３２１において、一つのメッセージの処理が終わるまで、他のメッセージは処理されない。このため、データストアサーバプログラム３０４は、順序保証対象のメッセージを一つの分散キューデータ３２１に集中して格納することによって、メッセージ処理順序を実現できる。
【０１２０】
データストアサーバプログラム３０４は、キュー管理サーバ１０５からメッセージの格納又は削除などを指示されたタイミングにおいて、分散キュー管理情報３３１を更新する。キュー管理サーバ１０５のメッセージ処理プログラム２０４は、複数のデータストアサーバ１０６の各分散キュー管理情報３３１を定期的に取得及び集計することによって、前後キュー情報２１４を生成する。
【０１２１】
メッセージデータ３３２は、メッセージサーバ１０４から送信されたメッセージのデータであり、キュー管理サーバ１０５によるメッセージ振分けによって、データストアサーバ１０６に送信されたメッセージである。メッセージデータ３３２は、バリューに相当する。
【０１２２】
メッセージ関連情報３３３は、送信されたメッセージに付加された情報を含む。メッセージ関連情報３３３は、具体的には、順序保証キーを含む。データストアサーバプログラム３０４は、キュー管理サーバ１０５からの指示と、メッセージ関連情報３３３とを利用して、メッセージ処理を行う。
【０１２３】
システムの更新の準備において、キュー管理サーバ１０５のメッセージ処理プログラム２０４は、分散方法情報２１８のデータ振分け空間を更新する。このため、メッセージ処理プログラム２０４は、システムの更新前後において、順序保証キーに従ったメッセージの格納先を変更する。
【０１２４】
メッセージ処理プログラム２０４は、システムの更新前後において、メッセージ格納先を１ｓｔキュー３１７と２ｎｄキュー３１８との間でメッセージを格納する分散キューを切り替えることによって、システムの更新前後において順序保証対象メッセージを分散する。
【０１２５】
なお、本実施例は、１ｓｔキュー３１７と２ｎｄキュー３１８との二つが、システムの更新ごとに役割を切り替える。しかし、データストアサーバ１０６が３ｒｄキュー、及び、４ｔｈキュー等、三つ以上の分散キューを保持し、システムの更新中に実行される別のシステムの更新において、３ｒｄキュー、及び、４ｔｈキューを用いてもよい。
【０１２６】
メッセージサーバ１０４からキュー管理サーバ１０５を介してデータストアサーバ１０６に送信されるメッセージの構成について、図４の説明にて後述する。
【０１２７】
図４は、本実施例のメッセージサーバ１０４からキュー管理サーバ１０５に送信されるメッセージの構成を示す説明図である。
【０１２８】
メッセージサーバ１０４は、少なくとも一つのプロセッサがメモリを用いることによって、プログラムを実行することによって機能を実現してもよい。メッセージサーバ１０４は、図２Ａ及び図３Ａに示すような計算機であってもよい。以下に示すメッセージサーバ１０４の機能は、メッセージサーバ１０４が有するプログラムによって実行されるか、メッセージサーバ１０４の機能を実装する物理的な集積回路によって実行される。
【０１２９】
メッセージは、要求種別４０１と、オプション４０２と、対象キュー名４０３と、順序保証キー４０４と、メッセージデータ４０５と、を含む。要求種別４０１は、メッセージの格納、取得、削除、又は、比較など、要求されたメッセージに対する処理の内容を示す。
【０１３０】
オプション４０２は、要求種別ごとの設定値を格納可能な領域である。例えばメッセージがメッセージの取得要求を示す場合、オプション４０２は、メッセージ取得件数を格納する。また、メッセージがメッセージの格納要求である場合、メッセージを送信した日時を格納したりするための領域である。メッセージサーバ１０４が、オプション４０２に設定値を格納する。
【０１３１】
対象キュー名４０３は、メッセージの格納、取得、削除又は比較などの処理の対象となるキュー（１ｓｔキュー３１７及び２ｎｄキュー３１８の分散キューデータ３２１）の対象キュー名（識別子）を格納する。メッセージサーバ１０４が、対象キュー名４０３にキューの識別子を格納する。
【０１３２】
順序保証キー４０４は、順序保証を行いたい複数のメッセージに対して割り当てられた順序保証が必要であることを示す識別子を格納する。分散キューデータ３２１において、順序保証キー４０４は、メッセージ関連情報３３３に格納される。メッセージサーバ１０４が、順序保証キー４０４に値を格納する。
【０１３３】
キュー管理サーバ１０５のメッセージ処理プログラム２０４は、受信したメッセージのうち対象キュー名４０３と順序保証キー４０４と分散方法情報２１８とに基づいて、メッセージの振分け先であるデータストアサーバ１０６を選択する。
【０１３４】
キュー管理サーバ１０５がメッセージに含まれる順序保証キーに基づいて、データストアサーバ１０６の分散キューを一意に決定し、さらに、データストアサーバ１０６の分散キュー内で処理順序を制御するため、本実施例の分散メッセージシステムは、メッセージの順序保証を実現する。
【０１３５】
例えば、メッセージサーバ１０４は、メッセージの宛先である宛先サーバ１０９毎にメッセージを順序保証することが定められている場合、順序保証キー４０４に宛先サーバ１０９のドメイン名（もしくは宛先サーバ１０９に一意に対応する識別子など）を格納する。このため、本実施例における順序保証キー４０４は、順序を示す情報を含む必要がない。
【０１３６】
また、通信キャリア又は証券会社のメッセージシステムにおいて、例えば、証券会社であれば証券銘柄毎に順序保証が求められるなど順序保証したいメッセージが多数ある場合、メッセージサーバ１０４は、メッセージデータ４０５が示す証券銘柄ごとに順序保証キーを割り当て、割り当てた順序保証キーを順序保証キー４０４に格納する。これにより、キュー管理サーバ１０５は、データストアサーバ１０６全体に分散してメッセージを格納することが可能である。
【０１３７】
なお、メッセージに順序保証が不要である場合、メッセージサーバ１０４は、順序保証キー４０４にｎｕｌｌ値、又は、所定の値を設定する。これによって、メッセージ処理プログラム２０４は、分散方法情報２１８に従って、順序保証以外のメッセージ振分け方法（例えば、ラウンドロビン等）を適用する。
【０１３８】
メッセージデータ４０５は、通信端末１０１から受信した送信対象のメッセージのデータを示す。なお、送信対象のメッセージは、テキスト、又はファイルなど、いかなる表示方法によるデータでもよい。メッセージデータ４０５は、バイト列（バリュー）である。
【０１３９】
メッセージ処理プログラム２０４は、受信したメッセージの処理において、要求種別４０１と、オプション４０２と、対象キュー名４０３と、順序保証キー４０４とに基づいて、振分け先となるデータストアサーバ１０６の分散キューデータ３２１を決定する。このとき、メッセージ処理プログラム２０４は、１ｓｔキュー３１７及び２ｎｄキュー３１８のいずれにメッセージを振り分けるかも選択する。
【０１４０】
図５は、本実施例のキュー管理サーバ１０５の前後キュー情報２１４及び代表データストアサーバの前後キュー情報３１４を示す説明図である。
【０１４１】
前後キュー情報２１４と前後キュー情報３１４とは、同じ内容を示すため、以下において前後キュー情報３１４の構成を説明する。
【０１４２】
前後キュー情報３１４は、シーケンス番号５０１と、メッセージ格納先キュー最新情報５０２と、１ｓｔキューメッセージ数テーブル５０３と、２ｎｄキューメッセージ数テーブル５０４と、を含む。
【０１４３】
シーケンス番号５０１は、前後キュー情報２１４の更新状況（新しさ）を示す値である。本実施例のメッセージ処理プログラム２０４は、前後キュー情報３１４（２１４）を更新するごとに、シーケンス番号５０１に１を加算する。
【０１４４】
メッセージ処理プログラム２０４は、定期的に前後キュー情報２１４のシーケンス番号５０１と、データストアサーバ１０６の前後キュー情報３１４のシーケンス番号５０１とを比較し、前後キュー情報２１４のシーケンス番号５０１が前後キュー情報３１４のシーケンス番号５０１よりも小さい（すなわち、古い）場合、データストアサーバ１０６の前後キュー情報３１４を前後キュー情報２１４にコピーする。
【０１４５】
これは、前後キュー情報３１４は、複数のキュー管理サーバ１０５によって更新され、常に最新の状態であり、キュー管理サーバ１０５は、古い前後キュー情報２１４を保持する可能性があるためである。
【０１４６】
一方、前後キュー情報２１４のシーケンス番号５０１と前後キュー情報３１４のシーケンス番号５０１とが一致した場合、メッセージ処理プログラム２０４及びデータストアサーバプログラム３０４は、前後キュー情報２１４及び前後キュー情報３１４を、さらに最新の状態に更新する。前後キュー情報２１４及び３１４は、全てのデータストアサーバ１０６が有する分散キュー管理情報３３１に基づいて更新される。
【０１４７】
なお、メッセージ処理プログラム２０４がシステムの更新に関する情報を示す前後キュー情報２１４を、定期的に揮発性記憶部２０５又は不揮発性記憶部２０６にログとして保存しておくことで、メッセージ処理プログラム２０４は、図１６に示すＧＵＩによる情報を表示できる。
【０１４８】
メッセージ格納先キュー最新情報５０２は、現在のメッセージ格納先が１ｓｔキュー３１７と２ｎｄキュー３１８とのいずれであるかを示す。
【０１４９】
１ｓｔキューメッセージ数テーブル５０３は、各データストアサーバ１０６の１ｓｔキュー３１７に格納されるメッセージの数を示す。２ｎｄキューメッセージ数テーブル５０４は、各データストアサーバ１０６の２ｎｄキュー３１８に格納されるメッセージの数を示す。
【０１５０】
図５に示す１ｓｔキューメッセージ数テーブル５０３及び２ｎｄキューメッセージ数テーブル５０４は、行が分散キューデータ３２１を示し、列がデータストアサーバ１０６を示す。これによって、１ｓｔキューメッセージ数テーブル５０３及び２ｎｄキューメッセージ数テーブル５０４は、データストアサーバ１０６の分散キューデータ３２１ごとにメッセージの数を示す。
【０１５１】
なお、１ｓｔキューメッセージ数テーブル５０３及び２ｎｄキューメッセージ数テーブル５０４は、テーブル形式以外にもいかなる方法によってメッセージの数を保持してもよく、例えば、テキスト形式によってメッセージの数を保持してもよい。
【０１５２】
メッセージ処理プログラム２０４は、分散キューデータ３２１の追加又は削除要求をメッセージサーバ１０４から受け付けた場合、要求に従って分散キューデータ３２１の追加又は削除と、１ｓｔキューメッセージ数テーブル５０３と２ｎｄキューメッセージ数テーブル５０４との行の追加又は削減とを、データストアサーバ１０６に指示する。
【０１５３】
また、メッセージ処理プログラム２０４は、システムの更新要求を運用管理サーバ１０７から受け付けた場合、拡張又は縮小されるデータストアサーバ１０６に対応する１ｓｔキューメッセージ数テーブル５０３と２ｎｄキューメッセージ数テーブル５０４との列を、追加又は削除する。
【０１５４】
図６は、本実施例のキュー管理サーバ１０５の前後サーバ対応テーブル２１５及び代表データストアサーバの前後サーバ対応テーブル３１５を示す説明図である。
【０１５５】
前後サーバ対応テーブル２１５と前後サーバ対応テーブル３１５とは、同じ内容であるため、以下において前後サーバ対応テーブル３１５の構成を説明する。
【０１５６】
前後サーバ対応テーブル３１５は、拡張又は縮小後６０１、及び、拡張又は縮小前６０２を含む。拡張又は縮小前６０２は、システムの更新前に設置されていたデータストアサーバ１０６の識別子を示す。
【０１５７】
拡張又は縮小後６０１は、拡張又は縮小前６０２が示すデータストアサーバ１０６に振り分けられていたメッセージを、システムの更新後に振り分ける先のデータストアサーバ１０６を示す。
【０１５８】
キュー管理サーバ１０５は、本実施例のシステムの更新中において前後サーバ対応テーブル２１５を保持し、本実施例のシステムの更新が終了し、キュー管理サーバ１０５が更新後の分散キューからメッセージを取得する間、前後サーバ対応テーブルを保持しない。
【０１５９】
なお、図６に示す前後サーバ対応テーブル３１５は、拡張又は縮小後６０１と拡張又は縮小前６０２との２列のみを含む。しかし、データストアサーバ１０６の拡張又は縮小が実行されている間に、他のデータストアサーバ１０６の拡張又は縮小が実行される場合、前後サーバ対応テーブル３１５は、三つ以上の列を含んでもよい。
【０１６０】
図７は、本実施例のキュー管理サーバ１０５の合意情報２１３と代表データストアサーバの合意情報３１３とを示す説明図である。
【０１６１】
合意情報２１３と合意情報３１３とは同じ内容であるため、以下において合意情報３１３の構成を説明する。合意情報３１３は、例えば、システムの更新の準備が終了したキュー管理サーバ１０５のＩＰアドレスを含む。
【０１６２】
ただし、本実施例の合意情報３１３は、全てのキュー管理サーバ１０５がシステムの更新の準備が終了したかを示せば、いかなる情報を含んでもよい。例えば、キュー管理サーバ１０５がキュー管理サーバ１０５の総数を保持している場合、合意情報３１３は、システムの更新の準備が終了したキュー管理サーバ１０５の数を示してもよい。
【０１６３】
図８は、本実施例のシステムの拡張処理を示すシーケンス図である。
【０１６４】
運用管理サーバ１０７は、システムの運用者又は管理者からシステムの更新の指示があった場合、又は、運用管理サーバ１０７が有する負荷監視機能に従ってシステムの更新の必要があると判定し、データストアサーバ１０６の物理的な増設又は撤去が終了した場合、システムの更新の要求をデータストアサーバ１０６に送る。図８に示す処理は、特にシステムの拡張処理を示すが、縮小処理も同様なシーケンスによって実行される。
【０１６５】
運用管理サーバ１０７は、物理的に増設されたデータストアサーバ１０６（以下、新規データストアサーバ１０６Ｎ）の構成情報を含む拡張要求を、既存のデータストアサーバ１０６（代表データストアサーバを含む）及び新規データストアサーバ１０６Ｎに送信する（７０１）。
【０１６６】
既存のデータストアサーバ１０６及び新規データストアサーバ１０６Ｎのデータストアサーバプログラム３０４は、受信した拡張要求に含まれる構成情報に従って、拡張処理を実行する（７０２）。具体的には、データストアサーバプログラム３０４は、受信した拡張要求に含まれる構成情報に従って、新規データストアサーバ１０６ＮのＩＰアドレスなどをデータストアサーバ構成情報３１１に格納するなど、データストアサーバ構成情報３１１を更新する。
【０１６７】
また、既存のデータストアサーバ１０６及び新規データストアサーバ１０６Ｎのデータストアサーバプログラム３０４は、シーケンス７０２において、全てのデータストアサーバ１０６間で通信することによりデータストアサーバ合議情報３１２を更新する。
【０１６８】
シーケンス７０２の後、既存のデータストアサーバ１０６及び新規データストアサーバ１０６Ｎのデータストアサーバプログラム３０４は、シーケンス７０１の拡張要求に対する応答を運用管理サーバ１０７に返す（７０３）。
【０１６９】
なお、シーケンス７０２において、データストアサーバ１０６は、シーケンス７０２以前から既存のデータストアサーバ１０６に格納されたメッセージを、新規のデータストアサーバ１０６又は他のデータストアサーバ１０６に移動しない。このため、メッセージの取得が一時停止するなどの事象が発生せず、サービスを中断することがない。
【０１７０】
シーケンス７０３の後、運用管理サーバ１０７は、全てのキュー管理サーバ１０５にシステムの拡張要求を送信する（７０４）。
【０１７１】
シーケンス７０４における拡張要求には、新規データストアサーバ１０６ＮのＩＰアドレス等が含まれる。また、シーケンス７０４における拡張要求には、前後サーバ対応テーブル３１５を生成するため、システムの拡張前にメッセージを格納する先のデータストアサーバ１０６と、システムの拡張後にメッセージを格納する先のデータストアサーバ１０６との対応関係を示す情報（前後サーバ対応テーブル２１５に相当）が含まれる。なお、予め分散方法情報２１８にシステムの拡張時のメッセージ振分け方法を登録しておくことで、前後サーバ対応テーブル３１５を自動生成することができるため、その場合は前記対応関係情報を含めなくてもよい。
【０１７２】
全てのキュー管理サーバ１０５のメッセージ処理プログラム２０４は、システムの拡張要求を受信した場合、データストアサーバ構成情報２１１及びデータストアサーバ合議情報２１２などの構成情報の更新を準備する（７０５）。
【０１７３】
具体的には、メッセージ処理プログラム２０４は、拡張後の新たなデータストアサーバ構成情報２１１及びデータストアサーバ合議情報２１２を拡張要求に従って生成することによって、構成情報の更新を準備する。ここで、メッセージ処理プログラム２０４は、新たなデータストアサーバ１０６に割り当てられたキーレンジを、新たなデータストアサーバ構成情報２１１に格納する。
【０１７４】
この時、メッセージ処理プログラム２０４は、格納済みのキーレンジと重複しないように、新規データストアサーバ１０６Ｎのキーレンジを割り当てる。これによって、メッセージ処理プログラム２０４は、データストアサーバ１０６によるメッセージの移動の発生、及び、メッセージが取得不可能な状況の発生を回避できる。
【０１７５】
また、全てのキュー管理サーバ１０５のメッセージ処理プログラム２０４は、前後サーバ対応テーブル２１５を、拡張要求に従い準備する（７０６）。具体的には、メッセージ処理プログラム２０４は、新たな前後サーバ対応テーブル２１５を拡張要求に従って生成することによって、システムの更新を準備する。
【０１７６】
シーケンス７０６の後、全てのキュー管理サーバ１０５のメッセージ処理プログラム２０４は、システムの拡張の準備が開始されたため、新たな前後サーバ対応テーブル２１５を代表データストアサーバに送信し、新たな前後サーバ対応テーブル２１５を前後サーバ対応テーブル３１５として格納する要求を代表データストアサーバに送信する（７０７）。
【０１７７】
全てのキュー管理サーバ１０５のメッセージ処理プログラム２０４は、データストアサーバ１０６からシーケンス７０８への応答を受信する（７０８）。
【０１７８】
そして、全てのメッセージ処理プログラム２０４は、シーケンス７０８における応答が格納が成功したことを示すかを判定する。シーケンス７０８における応答が、格納が成功したことを示す場合、メッセージ処理プログラム２０４は、シーケンス７１２に進む。
【０１７９】
一方で、シーケンス７０８における応答が、代表データストアサーバが前後サーバ対応テーブル３１５を既に保持しており、前後サーバ対応テーブル３１５の格納に失敗したことを示す場合、代表データストアサーバの前後サーバ対応テーブル３１５は、他のキュー管理サーバ１０５のメッセージ処理プログラム２０４によって生成されている。
【０１８０】
このため、メッセージ処理プログラム２０４は、シーケンス７０８における応答が前後サーバ対応テーブル３１５の格納に失敗したことを示す場合、代表データストアサーバの前後サーバ対応テーブル３１５を要求し（７０９）、代表データストアサーバから前後サーバ対応テーブル３１５を取得する（７１０）。
【０１８１】
そして、シーケンス７１０の後、メッセージ処理プログラム２０４は、キュー管理サーバ１０５に格納済みの前後サーバ対応テーブル２１５と、取得した前後サーバ対応テーブル３１５とが一致するか判定する（７１１）。
【０１８２】
前後サーバ対応テーブル２１５と取得した前後サーバ対応テーブル３１５とが一致した場合、メッセージ処理プログラム２０４は、シーケンス７１２に進む。前後サーバ対応テーブル２１５と取得した前後サーバ対応テーブル３１５とが一致しない場合、メッセージ処理プログラム２０４は、図８に示す処理を終了する。なお、ここでメッセージ処理プログラム２０４は、運用管理サーバ１０７にエラーを示す情報を送信してもよい。
【０１８３】
シーケンス７０８における応答が格納に成功したことを示す場合、又は、前後サーバ対応テーブル２１５と取得した前後サーバ対応テーブル３１５とが一致した場合、メッセージ処理プログラム２０４は、新規データストアサーバ１０６Ｎに、１ｓｔキュー３１７、２ｎｄキュー３１８及び分散キューデータ３２１（分散キュー管理情報３３１を含む）の生成を要求する（７１２）。
【０１８４】
新規データストアサーバ１０６Ｎのデータストアサーバプログラム３０４は、要求に従って、自らの揮発性記憶部３０５に１ｓｔキュー３１７及び２ｎｄキュー３１８（分散キュー管理情報３３１を含む）を生成する。
【０１８５】
新規データストアサーバ１０６Ｎが１ｓｔキュー３１７等の分散キューを生成した後、メッセージ処理プログラム２０４は、分散キューの生成要求に対する応答を受信する（７１３）。シーケンス７１３における応答が分散キューの生成の成功を示す場合、又は、既に分散キューが生成済みであることを示す場合、メッセージ処理プログラム２０４は、シーケンス７１４を実行する。
【０１８６】
シーケンス７１３における応答が、分散キューの生成の失敗を示し、かつ、分散キューが生成されていないことを示す場合、メッセージ処理プログラム２０４は、図８に示す処理を終了する。なお、ここでメッセージ処理プログラム２０４は、運用管理サーバ１０７にエラーを示す情報を送信してもよい。
【０１８７】
シーケンス７１４において、全てのキュー管理サーバ１０５のメッセージ処理プログラム２０４は、代表データストアサーバに合意情報３１３の取得要求を送信する（７１４）。全てのキュー管理サーバ１０５のメッセージ処理プログラム２０４は、合意情報３１３を含む応答を、代表データストアサーバから受信する（７１５）。
【０１８８】
そして、全てのキュー管理サーバ１０５のメッセージ処理プログラム２０４は、代表データストアサーバから受信した合意情報３１３によって、合意情報２１３を更新する（７１６）。
【０１８９】
シーケンス７１６の後、全てのキュー管理サーバ１０５のメッセージ処理プログラム２０４は、自らの合意情報２１３を用いて、代表データストアサーバの合意情報３１３を更新する（７１７）。ここで、メッセージ処理プログラム２０４は、自らのキュー管理サーバ１０５のＩＰアドレス等の情報を合意情報３１３及び２１３に格納することによって、合意情報３１３及び２１３を更新する。これによって、システムの拡張の準備が終了したキュー管理サーバ１０５を特定するための情報が、合意情報３１３に格納される。
【０１９０】
シーケンス７１７の後、全てのキュー管理サーバ１０５のメッセージ処理プログラム２０４は、合意情報を更新したことを示す応答を、代表データストアサーバから受信する（７１８）。
【０１９１】
キュー管理サーバ１０５のメッセージ処理プログラム２０４は、シーケンス７１８までの処理を終えた場合、拡張準備が終了したことを示す応答を運用管理サーバ１０７に送信する（７１９）。運用管理サーバ１０７は、全てのキュー管理サーバ１０５からシーケンス７１９の応答を受信する。
【０１９２】
一方で、全てのキュー管理サーバ１０５のメッセージ処理プログラム２０４は、シーケンス７１９後に受信したメッセージをデータストアサーバ１０６に振り分ける際、及び、データストアサーバ１０６を定期的に監視するタイミングで、代表データストアサーバから合意情報３１３を取得する。そして、メッセージ処理プログラム２０４は、取得した合意情報３１３に基づいて、全てのキュー管理サーバ１０５が拡張の準備を終了した合意状態であるかを判定する（７２０）。
【０１９３】
具体的には、メッセージ処理プログラム２０４は、全てのキュー管理サーバ１０５を特定する情報が合意情報３１３に格納されている場合、合意状態であると判定する。なお、メッセージ処理プログラム２０４は、合意情報３１３に全てのキュー管理サーバ１０５が拡張の準備を終了したことを判定するため、全てのキュー管理サーバ１０５のＩＰアドレス、又は、キュー管理サーバ１０５の総数等を保持してもよい。
【０１９４】
合意状態であると判定されるまで、メッセージ処理プログラム２０４は、シーケンス７０５において生成された新たなデータストアサーバ構成情報２１１及びデータストアサーバ合議情報２１２、並びに、シーケンス７０６において生成された新たな前後サーバ対応テーブル２１５を用いない。これによって、メッセージ処理プログラム２０４は、システムの拡張前と同じく、メッセージの取得先及び格納先を決定する。
【０１９５】
合意状態であると判定された場合、メッセージ処理プログラム２０４は、新たなデータストアサーバ構成情報２１１、及びデータストアサーバ合議情報２１２、既存のデータストアサーバ構成情報２１１、及び、データストアサーバ合議情報２１２を更新する。これによって、メッセージ処理プログラム２０４は、メッセージの取得先及び格納先を、後述する図９及び図１０に示すシステムの更新中の決定方法によって決定する状態に移行する（７２１）。
【０１９６】
また、シーケンス７２１において、メッセージ処理プログラム２０４は、データストアサーバ構成情報２１１の更新に伴い、必要に応じて分散方法情報２１８が示すコンシステントハッシングの方法を更新する。
【０１９７】
また、シーケンス７２１において、メッセージ処理プログラム２０４は、前後キュー情報２１４のメッセージ格納先キュー最新情報５０２を、異なる分散キューを示すように更新する。また、メッセージ処理プログラム２０４は、シーケンス番号５０１に１を加算する。これによって、システムの更新準備が終了した後メッセージが格納される分散キューは、システムの更新準備が開始される前にメッセージが格納された分散キューと異なる分散キューになる。
【０１９８】
シーケンス７２１の後、キュー管理サーバ１０５のメッセージ処理プログラム２０４は、システムの拡張中の処理を開始することを示す応答を運用管理サーバ１０７に送信する（７２２）。合意状態であると判定された後に、システムの更新中の状態に遷移することによって、複数のキュー管理サーバ１０５の処理の同期を図ることができる。
【０１９９】
なお、図８に示す処理によってシステムを縮小する場合、図８に示すシーケンス７０１〜７０３は実行されない。そして、シーケンス７０４〜７２２が、システムの拡張をシステムの縮小に置換したうえで実行される。またその後、キュー管理サーバ１０５のメッセージ処理プログラム２０４が、減らされる対象のデータストアサーバ１０６の縮小前キューのメッセージ処理を全て終了させた後、運用管理サーバ１０７は、全てのデータストアサーバ１０６へ縮小要求を出す。
【０２００】
図９は、本実施例のメッセージサーバ１０４から送信されたメッセージをデータストアサーバ１０６に格納する処理を示すシーケンス図である。
【０２０１】
キュー管理サーバ１０５のメッセージ処理プログラム２０４は、メッセージサーバ１０４からメッセージと、メッセージを格納する要求とを受信する（８０１）。
【０２０２】
シーケンス８０１の後、メッセージ処理プログラム２０４は、分散方法情報２１８と順序保証キー４０４と対象キュー名４０３とに基づいて、メッセージを格納する先のデータストアサーバ１０６（以下、格納先データストアサーバ）の分散キューデータ３２１の識別子を一つ選択する。
【０２０３】
また、メッセージ処理プログラム２０４は、前後キュー情報２１４のメッセージ格納先キュー最新情報５０２が示す分散キューを、メッセージを格納する先の分散キューとして選択する（８０２）。これによって、メッセージ処理プログラム２０４は、メッセージを格納する、分散キュー（１ｓｔキュー３１７又は２ｎｄキュー３１８）と当該分散キューにおける分散キューデータ３２１とを決定することができる。
【０２０４】
なお、順序保証対象のメッセージ群が複数のデータストアサーバ１０６に分散して格納された場合、メッセージ処理プログラム２０４は、順序番号又はメッセージ処理時間の比較が必要となる。このような事態を回避するため、シーケンス８０２においてメッセージ処理プログラム２０４は、同一の順序保証キー４０４を持つ複数のメッセージに、同一のデータストアサーバ１０６の同一のキューを格納先データストアサーバの格納先キューとして選択する。
【０２０５】
また、シーケンス８０２がシステムの更新中又は更新後であり、かつ、システムの更新開始前の格納先キューが１ｓｔキュー３１７である場合、メッセージ処理プログラム２０４は、システムの更新中の格納先キューとして２ｎｄキュー３１８を選択する。また、シーケンス８０２がシステムの更新中又は更新後であり、かつ、システムの更新開始前の格納先キューが２ｎｄキュー３１８である場合、メッセージ処理プログラム２０４は、システムの更新中の格納先キューとして１ｓｔキュー３１７を選択する。
【０２０６】
このため、メッセージ処理プログラム２０４は、システムの更新開始前に格納されたメッセージと、システムの更新中に格納されたメッセージとが、同じ分散キューの分散キューデータ３２１に混在することを防ぐことができる。つまり、シーケンス８０２は、システムの更新中にメッセージ格納要求を受信した場合においても、データストアサーバ１０６がシステムの更新開始前のメッセージを先行して処理するための前提条件となるシーケンスである。
【０２０７】
シーケンス８０２の後、メッセージ処理プログラム２０４は、格納先データストアサーバに、メッセージと、格納先キューにメッセージを格納する要求とを送信する（８０３）。ここで送信される要求には、格納先キューを特定するための情報が含まれる。
【０２０８】
データストアサーバプログラム３０４は、メッセージを格納する要求を受信した場合、受信した要求と対象キュー名４０３とに従って、受信したメッセージを揮発性記憶部３０５の分散キューの分散キューデータ３２１に格納し、さらに、分散キュー管理情報３３１を更新する（８０４）。
【０２０９】
シーケンス８０４において、データストアサーバプログラム３０４は、分散キュー管理情報３３１が保持する、分散キューに格納されるメッセージの数を増やし、メッセージの処理順（又は、格納順）等の情報を更新する。
【０２１０】
シーケンス８０４の後、格納先データストアサーバのデータストアサーバプログラム３０４は、シーケンス８０３のメッセージを格納する要求に対する応答を、キュー管理サーバ１０５に送信する（８０５）。シーケンス８０５の後、キュー管理サーバ１０５のメッセージ処理プログラム２０４は、メッセージを格納する要求に対する応答を、メッセージサーバ１０４に返す（８０６）。
【０２１１】
図１０は、本実施例のメッセージサーバ１０４によるメッセージ取得の処理を示すシーケンス図である。
【０２１２】
キュー管理サーバ１０５のメッセージ処理プログラム２０４は、メッセージをデータストアサーバ１０６から取得する要求（メッセージ取得要求）を、メッセージサーバ１０４から受信する（９０１）。本実施例のメッセージ取得要求には、取得するメッセージの数が含まれる。
【０２１３】
メッセージ処理プログラム２０４は、メッセージ取得要求を受信した場合、取得方法情報２１９を参照し、メッセージを取得する先のデータストアサーバ１０６（以下、更新後メッセージ取得先）の候補を選択する。ここで、選択される候補は、システムの更新後に、キュー管理サーバ１０５がメッセージを取得するデータストアサーバ１０６である。
【０２１４】
また、メッセージサーバ１０４からのメッセージ取得要求が、複数のメッセージを取得することを示す場合、メッセージ処理プログラム２０４は、取得するメッセージの数に従った複数の更新後メッセージ取得先を選択してもよい。
【０２１５】
そして、メッセージ処理プログラム２０４は、前後サーバ対応テーブル２１５を参照し、選択された候補が拡張又は縮小後６０１に格納されるエントリの拡張又は縮小前６０２が示すデータストアサーバ１０６を特定する（９０２）。ここで特定したデータストアサーバ１０６を更新前メッセージ取得先と記載する。
【０２１６】
シーケンス９０２の後、メッセージ処理プログラム２０４は、前後キュー情報２１４を参照し、メッセージ格納先キュー最新情報５０２が示す分散キュー（１ｓｔキュー３１７又は２ｎｄキュー３１８）とは異なる分散キューを更新前取得先キューとして特定する。
【０２１７】
そして、メッセージ処理プログラム２０４は、特定した更新前取得先キューと、シーケンス９０２において特定した更新前メッセージ取得先と、前後キュー情報２１４とに基づいて、更新前メッセージ取得先における更新前取得先キューに格納されたメッセージの数が、０であるか否かを判定する（９０３）。
【０２１８】
具体的には、メッセージ処理プログラム２０４は、シーケンス９０３において、更新前メッセージ取得先における更新前取得先キューに格納されるメッセージの数を示すテーブルに、１以上の数を示す要素が少なくとも一つ含まれる場合、更新前メッセージ取得先における更新前取得先キューに格納されるメッセージの数は０ではないと判定する。
【０２１９】
更新前メッセージ取得先における更新前取得先キューに格納されたメッセージの数が０である場合、システムの更新前に用いていた分散キューには既にメッセージがない。このため、メッセージ処理プログラム２０４は、更新後メッセージ取得先の候補を、メッセージを取得する先のデータストアサーバ１０６に決定し、メッセージ格納先キュー最新情報５０２が示す分散キューを、メッセージを取得する先の分散キューに決定する。
【０２２０】
更新前メッセージ取得先における更新前取得先キューに格納されたメッセージの数が０ではなく、１以上である場合、システムの更新前に用いていた分散キューにまだメッセージがあり、メッセージ処理プログラム２０４は、その分散キューから優先してメッセージを取得する必要がある。このため、メッセージ処理プログラム２０４は、更新前メッセージ取得先及び更新前取得先キューを、メッセージを取得する先のデータストアサーバ１０６及び分散キューに決定する（９０４）。
【０２２１】
なお、更新後メッセージ取得先及び更新前メッセージ取得先が複数特定され、かつ、特定された複数の更新前メッセージ取得先の分散キューのメッセージ数がいずれも０ではない場合、メッセージ処理プログラム２０４は、取得方法情報２１９にあらかじめ設定された方法に従って、メッセージ取得先を決定してもよい。取得方法情報２１９は、例えば、ラウンドロビンによって、更新前メッセージ取得先の中の一つのデータストアサーバ１０６を選択する方法を示してもよい。
【０２２２】
シーケンス９０２〜９０４によって、メッセージ処理プログラム２０４は、更新前メッセージ格納先の更新前取得先キューに順序保証対象のメッセージが未処理で残っている場合、優先して更新前メッセージ格納先の更新前取得先キューからメッセージを取得することができる。このため、キュー管理サーバ１０５は、分散メッセージシステムが提供するサービスを止めることなく、かつ、システムの更新前から格納されていたメッセージの順序を保証しながら、メッセージを出力することができる。
【０２２３】
シーケンス９０４の後、メッセージ処理プログラム２０４は、シーケンス９０４において決定されたデータストアサーバ１０６に、メッセージを送信するよう要求する取得要求を送信する（９０５）。メッセージ処理プログラム２０４は、シーケンス９０５における取得要求に、メッセージを取得する先の分散キューを特定するための情報を含める。
【０２２４】
データストアサーバプログラム３０４は、取得要求が示す分散キューの分散キュー管理情報３３１を更新する（９０６）。具体的には、データストアサーバプログラム３０４は、分散キュー管理情報３３１が示す分散キューのメッセージ数を、キュー管理サーバ１０５に出力するメッセージの数分減らし、また、分散キュー管理情報３３１が示すメッセージ処理順序（格納順）の情報を更新する。
【０２２５】
シーケンス９０６の後、データストアサーバプログラム３０４は、取得要求が示す分散キューから取得したメッセージを含む応答を、キュー管理サーバ１０５に送信する（９０７）。
【０２２６】
なお、メッセージサーバ１０４からのメッセージ取得要求が示す数が多いために、決定されたメッセージの取得先から要求どおりの数のメッセージを取得できず、かつ、取得方法情報２１９がラウンドロビンなどの方法を示す場合、メッセージ処理プログラム２０４は、シーケンス９０２からシーケンス９０７の処理を、更新後データ取得先をラウンドロビンによって変更しつつ、繰り返して実行してもよい（９０８）。
【０２２７】
最後に、キュー管理サーバ１０５のメッセージ処理プログラム２０４は、メッセージサーバ１０４に、データストアサーバ１０６から取得したメッセージを含む応答を送信する（９０９）。
【０２２８】
図１１は、本実施例のキュー管理サーバ１０５による前後キュー情報（２１４、３１４）の更新処理を示すシーケンス図である。
【０２２９】
図１１に示す処理は、１秒間隔など、所定の時間間隔において実行される。なお、前後キュー情報（２１４、３１４）の更新頻度が高いほど、システムの更新前に格納されたメッセージの数の変化の検知、及び、メッセージ数が０になったことを検知するまでの時間が短くなるため、システムの更新前の分散キューから、システムの更新後の分散キューに、メッセージ取得先を切り替えるまでの時間が短くなる。一方で、前後キュー情報（２１４、３１４）の更新処理が占めるＣＰＵ負荷が高くなるため、スループットが低下する可能性が増す。
【０２３０】
本実施例の分散メッセージシステムは、このような条件を考慮し、前後キュー情報２１４、３１４の更新頻度を設定する。
【０２３１】
キュー管理サーバ１０５のメッセージ処理プログラム２０４は、前後サーバ対応テーブル２１５の有無を判定することによって、本実施例の分散メッセージシステムがシステムの更新中であるかを判定する（１００１）。揮発性記憶部２０５が前後サーバ対応テーブル２１５を含まない場合、メッセージ処理プログラム２０４は、システムの更新中でないと判定し、図１１の処理を終了する。
【０２３２】
このため、図１１に示すシーケンス１００２移行の処理は、図８に示すシーケンス７２２の後に特に実行される。
【０２３３】
揮発性記憶部２０５が前後サーバ対応テーブル２１５を含む場合、メッセージ処理プログラム２０４は、システムの更新中であると判定し、次のシーケンス１００２を実行する。なお、システムの更新の終了後に前後サーバ対応テーブル２１５を削除しない場合、メッセージ処理プログラム２０４は、システムの更新中であるかを示すフラグを保持し、このフラグに基づいて、システムの更新中であるかを判定してもよい。
【０２３４】
シーケンス１００２において、メッセージ処理プログラム２０４は、代表データストアサーバに前後キュー情報３１４の送信を要求する。シーケンス１００２の後、メッセージ処理プログラム２０４は、前後キュー情報３１４を含む応答を代表データストアサーバから受信する（１００３）。
【０２３５】
メッセージ処理プログラム２０４は、キュー管理サーバ１０５が有する前後キュー情報２１４を参照し、メッセージ格納先キュー最新情報５０２が示す分散キューとは異なる分散キューを、システムの更新前にメッセージを格納していた分散キューとして特定する。
【０２３６】
そして、メッセージ処理プログラム２０４は、代表データストアサーバから受信した前後キュー情報３１４の１ｓｔキューメッセージ数テーブル５０３及び２ｎｄキューメッセージ数テーブル５０４のうち、特定した分散キューを示すテーブルを選択し、選択したテーブルの全ての要素が０であるかを判定する（１００４）。
【０２３７】
選択したテーブルの全ての要素が０である場合、メッセージ処理プログラム２０４は、システムの更新処理が終了し、更新後の分散キューからメッセージを通常どおり取得する必要があると決定する。
【０２３８】
そして、メッセージ処理プログラム２０４は、更新後の分散キューからメッセージを通常どおり取得する必要があると決定した場合、前後サーバ対応テーブル２１５を削除する。また、メッセージ処理プログラム２０４は、前後キュー情報３１４のメッセージ格納先キュー最新情報５０２が、前後キュー情報２１４のメッセージ格納先キュー最新情報５０２と異なる場合、前後キュー情報２１４のメッセージ格納先キュー最新情報５０２によって前後キュー情報３１４のメッセージ格納先キュー最新情報５０２を更新し、かつ、シーケンス番号５０１に１を加算する指示を、代表データストアサーバに指示し、図１１の処理を終了する。
【０２３９】
テーブルの要素に少なくとも一つの正数が含まれる場合、メッセージ処理プログラム２０４は、システムの更新処理を実行中であると判定し、次のシーケンス１００５に進む。
【０２４０】
シーケンス１００５において、メッセージ処理プログラム２０４は、前後キュー情報２１４のシーケンス番号５０１と、代表データストアサーバから取得した前後キュー情報３１４のシーケンス番号５０１とを比較する。そして、前後キュー情報２１４のシーケンス番号５０１が前後キュー情報３１４のシーケンス番号５０１より小さい（又は、古いことを示す）場合、メッセージ処理プログラム２０４は、前後キュー情報２１４を前後キュー情報３１４によって更新し、図１１に示す処理を終了する。
【０２４１】
シーケンス１００５により、全てのキュー管理サーバ１０５で前後キュー情報３１４を更新することなく、いずれか１台のキュー管理サーバ１０５によって前後キュー情報３１４を更新する。
【０２４２】
メッセージ処理プログラム２０４は、シーケンス１００５において前後キュー情報２１４のシーケンス番号５０１が前後キュー情報３１４のシーケンス番号５０１より小さくないと判定した場合、全てのデータストアサーバ１０６に分散キュー管理情報３３１の送信を要求する（１００６）。データストアサーバ１０６のデータストアサーバプログラム３０４は、自らが有する分散キュー管理情報３３１を含む応答を、要求元であるキュー管理サーバ１０５に送信する（１００７）。
【０２４３】
シーケンス１００７の後、メッセージ処理プログラム２０４は、全てのデータストアサーバ１０６から送信された分散キュー管理情報３３１に基づいて、前後キュー情報２１４の１ｓｔキューメッセージ数テーブル５０３及び２ｎｄキューメッセージ数テーブル５０４を更新する。そして、メッセージ処理プログラム２０４は、前後キュー情報２１４のシーケンス番号５０１に１を加算する（１００８）。
【０２４４】
これによって、メッセージ処理プログラム２０４は、データストアサーバ１０６の最新の状態によって生成された前後キュー情報２１４に基づいて、図９及び図１０の処理を実行することにより、メッセージの取得先及び格納先を特定することができる。
【０２４５】
シーケンス１００８の後、メッセージ処理プログラム２０４は、更新後の前後キュー情報２１４を含む更新要求を、代表データストアサーバに送信する（１００９）。
【０２４６】
代表データストアサーバのデータストアサーバプログラム３０４は、受信した更新要求に含まれる前後キュー情報２１４によって、前後キュー情報３１４を更新する。そして、代表データストアサーバのデータストアサーバプログラム３０４は、前後キュー情報３１４の更新が終了したことを示す応答を、更新要求の送信元のキュー管理サーバ１０５に送信する（１０１０）。
【０２４７】
図１２Ａは、本実施例のキュー管理サーバ１０５によるシステム拡張の準備処理を示すフローチャートである。
【０２４８】
図１２Ａに示す処理は、図８に示す処理のうち、一つのキュー管理サーバ１０５によって実行されるシーケンス７１９までの処理を示す。ステップ７５１は、シーケンス７０４に相当する。ステップ７５２及びステップ７５３は、シーケンス７０５に相当する。ステップ７５４は、シーケンス７０６に相当する。ステップ７５５は、シーケンス７０７に相当する。
【０２４９】
ステップ７５５の後、メッセージ処理プログラム２０４は、シーケンス７０８における応答が格納が成功したことを示すかを判定する（７５６）。シーケンス７０８における応答が、格納が成功したことを示す場合、メッセージ処理プログラム２０４は、ステップ７５７を実行する。シーケンス７０８における応答が、格納が成功したことを示さない場合、メッセージ処理プログラム２０４は、ステップ７６３を実行する。
【０２５０】
ステップ７５７は、シーケンス７１２に相当する。ステップ７５７の後、メッセージ処理プログラム２０４は、シーケンス７１３における応答が、分散キューの生成の成功を示すか、又は、既に分散キューが生成済みであることを示すかを判定する（７５８）。
【０２５１】
シーケンス７１３における応答が、分散キューの生成の成功を示す場合、又は、既に分散キューが生成済みであることを示す場合、メッセージ処理プログラム２０４は、ステップ７５９を実行する。シーケンス７１３における応答が、分散キューの生成の失敗を示し、かつ、分散キューが生成されていないことを示す場合、メッセージ処理プログラム２０４は、ステップ７６５を実行する。
【０２５２】
ステップ７５９は、シーケンス７１４及び７１５に相当する。ステップ７６０は、シーケンス７１６に相当する。ステップ７６１は、シーケンス７１７及び７１８に相当する。ステップ７６２は、シーケンス７１９に相当する。
【０２５３】
ステップ７６３は、シーケンス７０９及び７１０に相当する。ステップ７６４は、シーケンス７１１に相当する。ステップ７６４において前後サーバ対応テーブル２１５と取得した前後サーバ対応テーブル３１５とが一致しないと判定された場合、又は、ステップ７５８において、シーケンス７１３における応答が分散キューの生成の失敗を示し、かつ、分散キューが生成されていないことを示すと判定された場合、メッセージ処理プログラム２０４は、システムの拡張を中止する（７６５）。
【０２５４】
ステップ７６５の後、メッセージ処理プログラム２０４は、運用管理サーバ１０７にエラーを示す応答を送信する（７６６）。ステップ７６６の後、図１２Ａに示す処理は終了する。
【０２５５】
図１２Ｂは、本実施例のキュー管理サーバ１０５によるシステム拡張の準備処理が終了したかを判定する処理を示すフローチャートである。
【０２５６】
図１２Ｂに示す処理は、図８に示す処理のうち、シーケンス７２０〜７２２に相当する処理である。メッセージ処理プログラム２０４は、ステップ７６２の後、メッセージをデータストアサーバ１０６に振り分ける際、及び、データストアサーバ１０６を定期的に監視するタイミングで、代表データストアサーバから合意情報３１３を取得する（７８１）。
【０２５７】
ステップ７８１の後、ステップ７８２を実行する。ステップ７８２は、シーケンス７２０に相当する。ステップ７８２において合意状態であると判定された場合、メッセージ処理プログラム２０４は、ステップ７８３を実行する。ステップ７８３は、シーケンス７２１に相当し、ステップ７８４は、シーケンス７２２に相当する。
【０２５８】
ステップ７８２において合意状態でないと判定された場合、メッセージ処理プログラム２０４は、ステップ７８１に戻り、合意情報３１３を取得する。
【０２５９】
図１２Ｃは、本実施例のデータストアサーバ１０６によるシステムの拡張処理を示すフローチャートである。
【０２６０】
図１２Ｃに示す処理は、図８に示す処理のうち、全てのデータストアサーバ１０６が実行する処理を示す。ステップ７９１は、シーケンス７０１に相当する。ステップ７９２及び７９３は、シーケンス７０２に相当する。ステップ７９４は、シーケンス７０３に相当する。
【０２６１】
図１３は、本実施例のメッセージサーバ１０４から送信されたメッセージをデータストアサーバ１０６に格納する処理を示すフローチャートである。
【０２６２】
図１３に示す処理は、図９に示す処理のうち、キュー管理サーバ１０５が実行する処理である。ステップ８５１は、シーケンス８０１に相当する。ステップ８５２及び８５３は、シーケンス８０２に相当する。
【０２６３】
ステップ８５４は、シーケンス８０３に担当する。ステップ８５５は、シーケンス８０５に相当する。ステップ８５６は、シーケンス８０６に相当する。
【０２６４】
図１４は、本実施例のメッセージサーバ１０４によるメッセージ取得の処理を示すフローチャートである。
【０２６５】
図１４に示す処理は、図１０に示す処理のうちキュー管理サーバ１０５が実行する処理を示す。ステップ９５１は、図１０に示すシーケンス９０１に相当する。ステップ９５２〜９５４は、図１０に示すシーケンス９０２に相当する。
【０２６６】
具体的には、ステップ９５２において、メッセージ処理プログラム２０４は、取得方法情報２１９を参照し、メッセージを取得する先の更新後メッセージ取得先の候補を選択する。ここで、メッセージ処理プログラム２０４は、複数の更新後メッセージ取得先の候補を選択してもよい。
【０２６７】
そして、ステップ９５３において、メッセージ処理プログラム２０４は、前後サーバ対応テーブル２１５を参照し、更新後メッセージ取得先の候補に対応する更新前メッセージ取得先を特定する。
【０２６８】
ステップ９５５及び９５６は、図１０に示すシーケンス９０３に相当する。
【０２６９】
ステップ９５６において、更新前メッセージ取得先における更新前取得先キューに格納されたメッセージの数が、０であると判定した場合、メッセージ処理プログラム２０４は、更新後メッセージ取得先の候補を、メッセージを取得する先のデータストアサーバ１０６に決定する。そして、決定したデータストアサーバ１０６に、メッセージを送信するよう要求する取得要求を送信する（９５８）。
【０２７０】
ステップ９５６において、更新前メッセージ取得先における更新前取得先キューに格納されたメッセージの数が、１以上であると判定した場合、メッセージ処理プログラム２０４は、更新前メッセージ取得先を、メッセージを取得する先のデータストアサーバ１０６に決定する。そして、決定したデータストアサーバ１０６に、メッセージを送信するよう要求する取得要求を送信する（９５７）。
【０２７１】
ステップ９５８及び９５７は、各々シーケンス９０４及び９０５に相当する。
【０２７２】
ステップ９５８又は９５７の後、メッセージ処理プログラム２０４は、ステップ９５２において複数の更新後メッセージ取得先の候補を選択し、かつ、ステップ９５１において受信した取得要求が示す数のメッセージを取得していない場合、選択した更新後メッセージ取得先の候補の中でまだステップ９５４〜９５６の処理を実行していない候補があるかを判定する（９５９）。
【０２７３】
選択した複数の更新後メッセージ取得先の候補の中でまだステップ９５４〜９５６の処理を実行していない候補がある場合、メッセージ処理プログラム２０４は、ステップ９５３に戻る。ステップ９５４〜９５６の処理を実行していない候補が他にない場合、メッセージ処理プログラム２０４は、ステップ９５８又は９５７の処理の結果であるデータストアサーバ１０６からの応答に従って、メッセージを取得する要求に対する応答をメッセージサーバ１０４に送信する（９６０）。
【０２７４】
図１５Ａは、本実施例のシステム拡張前と後とのデータストアサーバ１０６の分散キューを示す説明図である。
【０２７５】
図１５Ａに示す分散キューは、メッセージが格納された状態、又は、メッセージが取得された状態を時系列で示す。状態１１０１〜状態１１０３は、分散キューの状態を順に示す。状態１１０１は、システムが拡張される前の分散キューの状態であり、状態１１０２以降は、データストアサーバ１０６＃３が追加され、システムが拡張された後の分散キューの状態である。
【０２７６】
図１５Ａに示す分散キューは、データストアサーバ１０６＃１、１０６＃２及び１０６＃３の各々が有する１ｓｔキュー３１７及び２ｎｄキュー３１８における分散キューデータ３２１Ａである。
【０２７７】
また、図１５Ａが示すシステムが拡張される前における分散方法情報２１８は、データストアサーバ１０６＃１の１ｓｔキュー３１７＃１の分散キューデータ３２１Ａが、順序保証キー４０４に「Ｐ」及び「Ｑ」を含むメッセージを格納し、データストアサーバ１０６＃２の１ｓｔキュー３１７＃２の分散キューデータ３２１Ａが、順序保証キー４０４に「Ｒ」を含むメッセージを格納することを示す。
【０２７８】
また、図１５Ａが示すシステムが拡張された後における分散方法情報２１８は、データストアサーバ１０６＃１の２ｎｄキュー３１８＃１の分散キューデータ３２１Ａが、順序保証キー４０４に「Ｐ」を含むメッセージを格納し、データストアサーバ１０６＃２の２ｎｄキュー３１８＃２の分散キューデータ３２１Ａが、順序保証キー４０４に「Ｑ」を含むメッセージを格納し、データストアサーバ１０６＃３の２ｎｄキュー３１８＃３の分散キューデータ３２１Ａが、順序保証キー４０４に「Ｒ」を含むメッセージを格納することを示す。
【０２７９】
また、図１５Ａにおける前後サーバ対応テーブル２１５は、図６に示す前後サーバ対応テーブル２１５と同じである。
【０２８０】
順序保証キー４０４に「Ｐ」、「Ｑ」及び「Ｒ」が格納されるメッセージは、順序保証が必要なメッセージである。また、図１５Ａに示す「Ｎ」のメッセージは、順序保証が必要のないメッセージである。
【０２８１】
なお、図１５Ａに示す「Ｐｎ」、「Ｑｎ」及び「Ｒｎ」の「ｎ」は、メッセージの格納順を示し、分散キュー管理情報３３１が保持する情報である。
【０２８２】
状態１１０２は、状態１１０１においてキュー管理サーバ１０５がデータストアサーバ１０６＃３の増設に関するシステム拡張要求を受信した後、全てのキュー管理サーバ１０５がシステムの拡張に合意し、システムの拡張中の状態を示す。
【０２８３】
状態１１０１から状態１１０２に遷移する際、データストアサーバ１０６＃３が追加され、一方で、データストアサーバ１０６へのメッセージの格納要求及び取得要求はない。このため、状態１１０１及び状態１１０２において、データストアサーバ１０６＃１の１ｓｔキュー３１７＃１及び２ｎｄキュー３１８＃１、並びに、データストアサーバ１０６＃２の１ｓｔキュー３１７＃２及び２ｎｄキュー３１８＃２が有するメッセージは変化しない。
【０２８４】
状態１１０２から状態１１０３に遷移する際、キュー管理サーバ１０５のメッセージ処理プログラム２０４は、一つのメッセージを取得する取得要求と、順序保証キー４０４に「Ｑ」を含む一つのメッセージを格納する格納要求を、メッセージサーバ１０４から受信する。
【０２８５】
ここで、メッセージ処理プログラム２０４は、シーケンス９０２を実行し、取得方法情報２１９を参照することによって、データストアサーバ１０６＃１を更新後メッセージ取得先の候補として選択する。
【０２８６】
図１５Ａにおける取得方法情報２１９は、例えば、メッセージ１件ごとにラウンドロビンでメッセージの取得先を選択する方法を示す。このため、メッセージ処理プログラム２０４は、データストアサーバ１０６＃１、データストアサーバ１０６＃２、データストアサーバ１０６＃３、及び、データストアサーバ１０６＃１の順で候補を選択する。
【０２８７】
そして、メッセージ処理プログラム２０４は、図１０のシーケンス９０３において前後サーバ対応テーブル２１５を参照することにより、更新後メッセージ取得先の候補における拡張前取得先キューである１ｓｔキュー３１７＃１を特定する。
【０２８８】
また、拡張前取得先キューである１ｓｔキュー３１７＃１にメッセージが残っているため、メッセージ処理プログラム２０４は、シーケンス９０４において、１ｓｔキュー３１７＃１から一つのメッセージ（Ｐ１）を取得することを決定する。
【０２８９】
また、メッセージ処理プログラム２０４は、図９のシーケンス８０２において分散方法情報２１８を参照することによって、シーケンス８０３において、順序保証キー４０４に「Ｑ」を含むメッセージを、データストアサーバ１０６＃２の２ｎｄキュー３１８＃２の分散キューデータ３２１Ａに格納する。これによって、状態１１０３に示すようにメッセージが格納される。
【０２９０】
図１５Ｂは、本実施例のシステムの拡張後のデータストアサーバ１０６の分散キューを示す説明図である。
【０２９１】
図１５Ｂの状態１１０４〜１１０６は、図１５Ａの状態１１０３の続きである。
【０２９２】
状態１１０３から状態１１０４に遷移する際、キュー管理サーバ１０５のメッセージ処理プログラム２０４は、三つのメッセージを取得する取得要求と、順序保証キー４０４に「Ｒ」を含む二つのメッセージ及び順序保証が必要のない一つのメッセージを格納する格納要求とをメッセージサーバ１０４から受信する。
【０２９３】
ここで、メッセージ処理プログラム２０４は、図１０のシーケンス９０２において、取得方法情報２１９が示す方法に従い、データストアサーバ１０６＃１、１０６＃２及び１０６＃３を更新後メッセージ取得先の候補として選択する。
【０２９４】
さらに、メッセージ処理プログラム２０４は、シーケンス９０３において前後サーバ対応テーブル２１５を参照することによって、更新後メッセージ取得先の候補における拡張前取得先キューである１ｓｔキュー３１７＃１及び３１７＃２を特定する。そして、１ｓｔキュー３１７＃１及び３１７＃２には、メッセージが残っているため、メッセージ処理プログラム２０４は、シーケンス９０４において、１ｓｔキュー３１７＃１から一つのメッセージ（Ｑ１）を取得し、１ｓｔキュー３１７＃２から二つのメッセージ（Ｒ１、Ｎ）を取得することを決定する。
【０２９５】
ここで、１ｓｔキュー３１７＃１及び１ｓｔキュー３１７＃２からメッセージを取得する方法は、取得方法情報２１９が示す方法に従う。
【０２９６】
また、メッセージ処理プログラム２０４は、図９のシーケンス８０２において分散方法情報２１８を参照することによって、シーケンス８０３において、順序保証キー４０４に「Ｒ」を含む二つのメッセージ（Ｒ３、Ｒ４）を、データストアサーバ１０６＃３の２ｎｄキュー３１８＃３の分散キューデータ３２１Ａに格納する。
【０２９７】
また、メッセージ処理プログラム２０４は、分散方法情報２１８が示すラウンドロビンに従い、一つのメッセージ（Ｎ）を、データストアサーバ１０６＃１の２ｎｄキュー３１８＃１の分散キューデータ３２１Ａに格納する。これによって、状態１１０４に示すようにメッセージが格納される。
【０２９８】
状態１１０４から状態１１０５に遷移する際、キュー管理サーバ１０５のメッセージ処理プログラム２０４は、四つのメッセージを取得する取得要求と、順序保証キー４０４に「Ｑ」を含む二つのメッセージを格納する格納要求とをメッセージサーバ１０４から受信する。
【０２９９】
ここで、メッセージ処理プログラム２０４は、図１０のシーケンス９０２において、取得方法情報２１９が示す方法に従い、データストアサーバ１０６＃１、１０６＃２及び１０６＃３を更新後メッセージ取得先の候補として選択する。
【０３００】
さらに、メッセージ処理プログラム２０４は、シーケンス９０３において、更新後メッセージ取得先の候補における拡張前取得先キューである１ｓｔキュー３１７＃１及び３１７＃２を特定する。１ｓｔキュー３１７＃１及び３１７＃２にはメッセージが残っているため、メッセージ処理プログラム２０４は、シーケンス９０４において、１ｓｔキュー３１７＃１から二つのメッセージ（Ｎ、Ｐ２）を取得し、１ｓｔキュー３１７＃２から二つのメッセージ（Ｒ２、Ｒ３）を取得することを決定する。
【０３０１】
また、メッセージ処理プログラム２０４は、図９のシーケンス８０２において分散方法情報２１８を参照することによって、シーケンス８０３において、順序保証キー４０４に「Ｑ」を含む二つのメッセージ（Ｑ３、Ｑ４）を、データストアサーバ１０６＃２の２ｎｄキュー３１８＃２の分散キューデータ３２１Ａに格納する。これによって、状態１１０５に示すようにメッセージが格納される。
【０３０２】
状態１１０５から状態１１０６に遷移する際、キュー管理サーバ１０５のメッセージ処理プログラム２０４は、分散キューデータ３２１Ａから二つのメッセージを取得する取得要求と、順序保証キー４０４に「Ｐ」を含む一つのメッセージを格納し、順序保証が必要ではない三つのメッセージを格納する格納要求とを、メッセージサーバ１０４から受信する。
【０３０３】
ここで、メッセージ処理プログラム２０４は、図１０のシーケンス９０２において取得方法情報２１９が示す方法に従い、データストアサーバ１０６＃１、及び１０６＃３を更新後メッセージ取得先の候補として選択する。
【０３０４】
さらに、メッセージ処理プログラム２０４は、シーケンス９０３において、更新後メッセージ取得先の候補における更新前取得先キューである１ｓｔキュー３１７＃１及び３１７＃２を特定する。１ｓｔキュー３１７＃１及び３１７＃２にはメッセージが残っておらず、かつ、データストアサーバ１０６＃３の１ｓｔキュー３１７＃３にはメッセージが残っていないため、メッセージ処理プログラム２０４は、シーケンス９０４において、２ｎｄキュー３１８＃１から一つのメッセージ（Ｎ）を取得し、２ｎｄキュー３１８＃３から一つのメッセージ（Ｒ４）を取得することを決定する。
【０３０５】
また、メッセージ処理プログラム２０４は、図９のシーケンス８０２において分散方法情報２１８を参照することによって、シーケンス８０３において順序保証キー４０４に「Ｐ」を含む一つのメッセージ（Ｐ３）を、データストアサーバ１０６＃１の２ｎｄキュー３１８＃１の分散キューデータ３２１Ａに格納する。
【０３０６】
また、メッセージ処理プログラム２０４は、分散方法情報２１８が示すラウンドロビンに従い、２ｎｄキュー３１８＃１、３１８＃２、３１８＃３の各々の分散キューデータ３２１Ａに、メッセージ（Ｎ）を一つずつ格納する。これによって、状態１１０６に示すようにメッセージが格納される。
【０３０７】
状態１１０５のように、全てのデータストアサーバ１０６の１ｓｔキュー３１７にメッセージが存在しない状態になった場合、分散キューデータ３２１Ａの順序保証対象メッセージについて複数のデータストアサーバ１０６に分散していた状態が解消されたことを示す。全ての分散キューデータ３２１Ａについて１ｓｔキュー３１７にメッセージが存在しない状態になった場合、システムの更新中の状態が終わる。
【０３０８】
このとき、メッセージ処理プログラム２０４は、図１１に示す処理を実行し、前後キュー情報（２１４、３１４）の１ｓｔキューメッセージ数テーブル５０３の要素が全て０であることを判定した後、前後サーバ対応テーブル（２１５、３１５）を削除する。
【０３０９】
図１６は、本実施例の前後キュー情報２１４の内容を表示する画面１２０１の例を示す説明図である。
【０３１０】
メッセージ処理プログラム２０４は、シーケンス１００８によって前後キュー情報２１４の値が更新されるごとに、値の更新前及び更新後の前後キュー情報２１４を蓄積してもよい。そして、蓄積された過去の前後キュー情報２１４を用いて、図１６に示す画面１２０１を表示してもよい。
【０３１１】
画面１２０１は、キュー管理サーバ１０５にと入出力回路インタフェース２０２を介して接続されるディスプレイに表示されてもよく、また、運用管理サーバ１０７が備えるディスプレイに表示されてもよい。画面１２０１は、領域１２０２〜領域１２０５を表示する。
【０３１２】
キュー管理サーバ１０５のメッセージ処理プログラム２０４は、データストアサーバ構成情報２１１と、前後キュー情報２１４と、過去の前後キュー情報２１４と、の情報を用いて画面１２０１を表示するＡＰＩを有する。運用管理サーバ１０７は、キュー管理サーバ１０５のメッセージ処理プログラム２０４の画面１２０１を生成するＡＰＩを実行することによって、画面１２０１を自らのディスプレイに表示する。
【０３１３】
図１６に示す画面１２０１は、分散メッセージシステムのデータストアサーバ１０６が、データストアサーバ１０６＃１及び１０６＃２の２台構成から３台構成に拡張した場合の画面例である。
【０３１４】
領域１２０２は、データストアサーバ１０６ごとに、分散キュー全体のメッセージ数の現在値、及び、メッセージ数の上限値をテキスト又は棒グラフによって表示する。領域１２０３は、システムの更新前後における分散キュー全体に滞留中のメッセージ数の時間変化をプロットした散布図を表示する。
【０３１５】
領域１２０４は、データストアサーバ１０６ごとに、システムの更新前に全ての分散キューに格納されていたメッセージのうち、未処理であるメッセージ数の現在値を示す。また、領域１２０４は、システムの更新時点で、全ての分散キューに格納されていた未処理メッセージ数を表示する。また、領域１２０４は、システムの更新後に全ての分散キューに格納される未処理のメッセージ数の現在値を表示する。領域１２０４は、表示する値を、テキスト又は棒グラフによって表現する。
【０３１６】
図１６に図示されていないが、メッセージ処理プログラム２０４は、前述の情報に関して、メッセージ数の時間変化をプロットした散布図を領域１２０４に表示してもよい。
【０３１７】
領域１２０５は、分散キューデータ３２１ごとに、格納するメッセージ数の上限値、及び、メッセージ数の上限値を、テキスト又は棒グラフによって表示する。
【０３１８】
他にも、図示されていないが、メッセージ処理プログラム２０４は、システムの更新前後の分散キューの処理順序の関係を表示したり、それぞれのシステムの更新前に使用されていた分散キューへの最新のアクセス時間などを、画面１２０１内に表示してもよい。また、メッセージ処理プログラム２０４は、画面１２０１の内容からグラフを除いたテキストだけを、ＣＳＶなどのファイル形式で表示してもよい。
【０３１９】
画面１２０１を表示することにより、メッセージ処理プログラム２０４は、システムの更新後のメッセージ処理状況を可視化することができる。分散メッセージシステムの管理者は、画面１２０１を閲覧することにより、システムの更新中のメッセージ処理状況を確認し、例えば、システムの更新前にメッセージを格納していた分散キューにおいて未処理のメッセージが多く残っている場合、強制排出コマンドを実行するなど、対応を開始してもよい。
【０３２０】
本実施例によれば、キュー管理サーバ１０５は、同じ順序保証キー４０４を含むメッセージを、同じデータストアサーバ１０６の同じ分散キューデータ３２１に格納する。そして、分散キューデータ３２１からは、格納順（到着順）にメッセージが取得される。このため、本実施例のキュー管理サーバ１０５は、次の取得するべきメッセージの順序番号等を記憶することなく、順序保証が必要なメッセージの順序保証を確実に実行できる。
【０３２１】
また、本実施例のキュー管理サーバ１０５は、システムの更新前後のデータストアサーバ１０６の対応関係を示す前後サーバ対応テーブル２１５を有し、システムの更新する過渡期間（本実施例においてシステムの更新中）において、データストアサーバ１０６の更新前の分散キューと更新後の分散キューとを、格納処理及び取得処理において使いわける。これによって、本実施例のキュー管理サーバ１０５は、データストアサーバ１０６のサービスを止めずに、物理的又は仮想的にデータストアサーバ１０６を増設又は減設（システムの更新）する。
【０３２２】
また、キュー管理サーバ１０５は、システムの更新前後のデータストアサーバ１０６の対応関係を元に、システムの更新前の分散キューからメッセージを先に取得し、その後システムの更新後の分散キューからメッセージを取得することにより、システムの更新中においても順序保証を維持することができる。
【０３２３】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除又は置換をすることが可能である。
【０３２４】
また、上記の各構成、機能及び処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル又はファイル等の情報は、メモリ、ハードディスク、若しくはＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、又は、ＩＣカード、若しくはＳＤカード等の記録媒体に置くことができる。
【０３２５】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０３２６】
１０１  通信端末、１０２  無線網、１０３  通信設備網、１０８  インターネット、１０９  宛先サーバ、１０４  メッセージサーバ、１０５  キュー管理サーバ、１０６  データストアサーバ、１０７  運用管理サーバ
【図１】
0006405255.tif 000002
【図２Ａ】
0006405255.tif 000003
【図２Ｂ】
0006405255.tif 000004
【図３Ａ】
0006405255.tif 000005
【図３Ｂ】
0006405255.tif 000006
【図４】
0006405255.tif 000007
【図５】
0006405255.tif 000008
【図６】
0006405255.tif 000009
【図７】
0006405255.tif 000010
【図８】
0006405255.tif 000011
【図９】
0006405255.tif 000012
【図１０】
0006405255.tif 000013
【図１１】
0006405255.tif 000014
【図１２Ａ】
0006405255.tif 000015
【図１２Ｂ】
0006405255.tif 000016
【図１２Ｃ】
0006405255.tif 000017
【図１３】
0006405255.tif 000018
【図１４】
0006405255.tif 000019
【図１５Ａ】
0006405255.tif 000020
【図１５Ｂ】
0006405255.tif 000021
【図１６】
0006405255.tif 000022