以下、実施例について図面を参照して説明する。
本実施例の順序保証は、分散メッセージシステムにおけるメッセージの順序保証を特に示す。
また、分散システムは、サーバの増設が容易な高拡張性がメリットである。このため、本実施例における分散メッセージシステムは、メッセージの順序保証を実現しつつ、分散システムの高拡張性を確保する。
分散メッセージシステムにサーバを追加するなど、分散システムを拡張する場合に、高可用性の高い分散システムを実現する方法は、提案されている(例えば、特開2013−025497号公報及び米国第20130290499号明細書参照)。
特開2013−025497号公報は、コンシステントハッシングを用いた分散処理システムにおいて、クラスタメンバを追加した場合の既存データの移行によるシステム全体の負担増加を抑制するため、コンシステントハッシングに基づいて、データを管理する複数のサーバ、及び、クライアントマシンから受け取ったリクエストを複数のサーバのいずれかに振り分ける負荷分散装置を備える分散処理システムを開示する(特開2013−025497号公報の段落[0009]及び[0010]参照)。
また、米国第20130290499号明細書は、サーバの負荷及び性能を監視するスケーリングコントローラによりサーバ増設を実現する方法を開示する(米国第20130290499号明細書の段落[0004]参照)。
これらの技術は、分散システムの高可用なシステム拡張を実現するが、順序保証を実現しない。特開2013−025497号公報に記載された分散システムは、メッセージ生成日時の管理が困難であり、順序保証が困難である。また、米国第20130290499号明細書についても拡張時のメッセージの振分け及び移動といった根本的な拡張処理に言及していない。
本実施例では、拡張又は縮小することが可能であり、かつ、メッセージ処理の順序保証を実現する分散メッセージシステムの例として、以下の分散メッセージシステムを説明する。なお、以下において、分散メッセージシステムの拡張又は縮小を、システムの更新と総称する。
また、本実施例におけるメッセージは、記憶装置に格納される情報のまとまりである。また、本実施例のメッセージとは、例えば携帯電話のメール、加入者管理データ、又は、金融の株取引若しくは為替処理データなどを送受信する信号であり、バイト列のデータである。
図1は、本実施例の分散メッセージシステムの構成を示すブロック図である。
本実施例の分散メッセージシステムは、社会インフラ企業などの通信設備網103内に構成されており、メッセージサーバ104、キュー管理サーバ105、及び、データストアサーバ106を備える。また、本実施例の分散メッセージシステムは、通信設備網103及び無線網102を介して通信端末101と接続し、かつ、通信設備網103及びインターネット108を介して宛先サーバ109と接続する。また、本実施例の分散メッセージシステムは、通信設備網103を介して運用管理サーバ107と接続する。
通信端末101は、携帯電話端末、タブレット端末、又は、PCなどのメッセージ送受信可能な端末装置である。無線網102は、社会インフラ企業などが管理する無線ネットワークである。
通信設備網103は、通信端末101と宛先サーバ109との間の通信を中継するネットワーク及びネットワーク設備である。通信設備網103は、無線網102からの信号をインターネット108を介して宛先サーバ109に向けて転送し、インターネット108からの信号を無線網102を介して通信端末101に転送する。
無線網102及び通信設備網103は、本実施例のメッセージサーバ104、キュー管理サーバ105、データストアサーバ106、及び、運用管理サーバ107を管理する社会インフラ企業などにより管理される。
本実施例の分散メッセージシステムは、複数のメッセージサーバ104、複数のキュー管理サーバ105、及び、複数のデータストアサーバ106から構成される。これらのサーバ間はメッシュ状に接続される。
ここで、メッセージサーバ104は、送信サーバと受信サーバとの二つのサーバによって構成されてもよい。また、キュー管理サーバ105は、送信サーバと受信サーバとの二つのサーバによって構成されてもよい。
メッセージサーバ104、キュー管理サーバ105、データストアサーバ106、及び、運用管理サーバ107は、各々が物理的な計算機によって構成されたサーバ装置であってもよいし、仮想マシンによって構成されてもよい。また、一つのサーバ装置が、少なくとも二つのサーバの機能を実現するサーバプログラムを保持し、本実施例の分散メッセージシステムの機能を実行してもよい。
例えば、一つのサーバ装置が、キュー管理サーバ105とデータストアサーバ106との機能を実現したり、複数のデータストアサーバ106の機能を実現したりしてもよい。また、一つのサーバ装置が、メッセージサーバ104とキュー管理サーバ105との機能を実現してもよい。本実施例のシステム構成は、図1に示す構成に限定されることなく、他の構成の分散メッセージシステムにも適用可能である。
メッセージサーバ104は、通信端末101から送信されたメッセージを受信し、キュー管理サーバ105に転送し、さらに、キュー管理サーバ105から受信したメッセージを、通信端末101又は宛先サーバ109に転送する。キュー管理サーバ105は、メッセージサーバ104から受信したメッセージを読み取り、データストアサーバ106にメッセージを振り分ける。
キュー管理サーバ105は、通信端末101が送信したメッセージをメッセージサーバ104を介して受信し、受信したメッセージをキューと呼ばれる格納領域に蓄積する。そして、キュー管理サーバ105は、蓄積の後に順次送信処理を行う、ストアアンドフォワード方法によってメッセージを中継する。これにより、キュー管理サーバ105は、システムへ流入する情報量の平準化、及び、ユーザを長く待たせない規定時間以内の応答などを実現する。
本実施例のキュー管理サーバ105は、メッセージサーバ104から受信したメッセージをデータストアサーバ106に振り分け、データストアサーバ106がキューを保持する。
データストアサーバ106は、メッセージを格納する装置であり、例えば、キーバリューストア(Key−Value Store)、又は、データグリッドなどである。本実施例の分散メッセージシステムは、複数のデータストアサーバ106を含むが、複数のデータストアサーバ106の中に一つの代表データストアサーバを有する。
代表データストアサーバは、本実施例の分散メッセージシステムにおけるシステムの更新を実行するための情報を保持するデータストアサーバ106である。
データストアサーバ106は、一つのメッセージを複製し、複数のデータストアサーバ106で複製後の複数のメッセージを多重で保持することによりメッセージデータの永続性を実現する。データストアサーバ106は、メッセージの格納、更新、及び、削除などの処理を、そのメッセージを保持する(もしくは保持すべき)複数のデータストアサーバ106間で協調して行う。
また、以下に示すデータストアサーバ106は、キーと値(バリュー)のペアでメッセージを管理する、キーバリューストアである。データストアサーバ106は、メッセージサーバ104からキュー管理サーバ105経由で要求されたメッセージを、要求に従って出力する。
運用管理サーバ107は、キュー管理サーバ105及びデータストアサーバ106に、システムの更新などを指示する。運用管理サーバ107は、入出力装置110と接続してもよい。入出力装置110は、本実施例の分散メッセージシステムの運用者又は管理者が指示を入力するための入力装置と、分散メッセージシステムにおける処理結果を出力するための出力装置である。入出力装置110は、例えば、キーボード、マウス、ディスプレイ及びプリンタである。
なお、本実施例は社会インフラ企業に設置される分散メッセージシステムを想定するが、上記以外の認証処理、課金処理、メッセージの変換処理、及び、輻輳制御処理などを、メッセージサーバ104又はキュー管理サーバ105が行ってもよい。
以下の説明におけるメッセージは、通信端末101、メッセージサーバ104、キュー管理サーバ105、データストアサーバ106、キュー管理サーバ105、メッセージサーバ104、及び、通信端末101又は宛先サーバ109の順に送信される。
しかし、本実施例の処理はこれに限定されず、メッセージは、本実施例の分散メッセージシステムを経由すれば、いかなる経路を送信されてもよい。また、本実施例の分散メッセージシステムは、社会インフラ企業の通信サービスに限定されることなく、無線網102に接続されたセンサ、車又はメータなどのデバイスに送信するメッセージ(もしくはデータ)に適用可能である。また、本実施例は無線網102の代わりに有線網又はスマートグリッドなどのネットワーク形態にも適用可能である。
図2Aは、本実施例のキュー管理サーバ105のハードウェア構成を示すブロック図である。
キュー管理サーバ105は、プロセッサ201と、入出力回路インタフェース202と、揮発性メモリ203と、不揮発性記憶部206と、これらを接続する内部通信線(例えば、バス)と、によって構成される。
プロセッサ201は、演算装置及び制御装置である。キュー管理サーバ105の機能は、プロセッサ201が揮発性メモリ203に格納されたプログラムを実行することによって、実現される。
揮発性メモリ203は、例えば、揮発性の記憶素子であるRAMを含む。RAMは、DRAM(Dynamic Random Access Memory)のような高速かつ揮発性の記憶素子であり、補助記憶装置に格納されたプログラム及びプログラムの実行時に使用されるデータを一時的に格納する。
不揮発性記憶部206は、不揮発性の記憶素子であるROMであってもよいし、磁気記憶装置(HDD)、又は、フラッシュメモリ(SSD)等の大容量かつ不揮発性の記憶装置であってもよい。不揮発性記憶部206は、プロセッサ201が実行するプログラム及びプログラムの実行時に使用されるデータを格納してもよい。そして、プログラムは、不揮発性記憶部206から必要に応じて読み出され、揮発性メモリ203にロードされ、実行されてもよい。
入出力回路インタフェース202は、通信設備網103と通信するためのインタフェースである。
揮発性メモリ203は、メッセージ処理プログラム204と揮発性記憶部205とを含む。メッセージ処理プログラム204は、データストアサーバ106へのメッセージの格納などの処理を行う分散処理機能、及び、メッセージの処理を実現するプログラムである。メッセージ処理プログラム204は、一つのプログラムによって構成されてもよいし、複数のサブプログラムを含んでもよい。
メッセージ処理プログラム204は、予め揮発性メモリ203又は不揮発性記憶部206に格納されてもよいし、図示しない着脱可能な記憶媒体(例えば、CDーROM、又は、フラッシュメモリなど)、又は、通信媒体(すなわちネットワーク、及び、ネットワークを伝播するデジタル信号又は搬送波)を介して、揮発性メモリ203又は不揮発性記憶部206に導入されてもよい。
以下に示すキュー管理サーバ105の機能は、プロセッサ201がメッセージ処理プログラム204を実行することにより実現される。
揮発性記憶部205は、メッセージ処理プログラム204が処理を実行する際に使用する記憶領域である。しかし、メッセージ処理プログラム204は、処理を実行する際に使用する記憶領域を、自らのプログラムが格納される記憶領域に有してもよい。
不揮発性記憶部206は、メッセージ処理プログラム204が出力したログ、及び、メッセージ処理プログラム204が使用する設定ファイルなどのデータを格納する。
図2Bは、本実施例のキュー管理サーバ105の揮発性記憶部205が保持するデータを示す説明図である。
揮発性記憶部205は、データストアサーバ構成情報211と、データストアサーバ合議情報212と、合意情報213と、前後キュー情報214と、前後サーバ対応テーブル215と、処理性能低下判定条件216と、リソース規制値情報217と、分散方法情報218と、取得方法情報219と、データストアサーバ状態情報220と、を含む。
データストアサーバ構成情報211は、データストアサーバ106間の相関情報及び稼動情報を格納する。ここで、データストアサーバ106間の相関情報は、データストアサーバ106が保持するデータのキーのキーレンジを示す情報(データストアサーバ106のキーレンジ担当情報)と、そのキーレンジに対してデータストアサーバ106がマスタであるかスレーブであるかを示す情報を含む。
データストアサーバ106間の稼動情報は、データストアサーバ106を特定する情報(IPアドレス等)、データストアサーバ106の数、データストアサーバ106が正常に稼動しているかを示す情報、及び、相関情報が示すキーレンジにおいて、データストアサーバ106が保持するメッセージの多重度等を示す。
本実施例のメッセージ処理プログラム204は、振分け先として決定したデータストアサーバ106に直接メッセージを格納する。そして、本実施例のデータストアサーバ106は、システムの更新の処理に伴って、データストアサーバ106間でメッセージを移動させることがない。
データストアサーバ合議情報212は、データストアサーバ106間で直接交換する情報であり、データストアサーバ構成情報211と同じく、データストアサーバ106の稼動情報及び相関情報を含む。
メッセージ処理プログラム204は、データストアサーバ合議情報212、及び、データストアサーバ構成情報211のどちらかを用いて、データストアサーバ106の処理性能低下を判定してもよいし、両方を利用してもよい。以下、本実施例のメッセージ処理プログラム204は、処理性能低下を判定するためにデータストアサーバ構成情報211を利用する。
合意情報213は、システムの更新時において全てのキュー管理サーバ105がシステムの更新の準備を終了したかを示す情報であり、更新に同意した全てのキュー管理サーバ105を特定するための情報(IPアドレスなど)が格納される。
システムの更新の準備の終了とは、データストアサーバ構成情報211、及び、前後サーバ対応テーブル215などの更新準備が終了した状態を示す。合意情報213は、代表データストアサーバが有する合意情報313(後述)と同期される。
合意情報213は、システムの更新の準備が終了したことを示す情報として、例えば、情報の新しさを示すシーケンス番号、実行されるシステムの更新の処理の識別子、又は、更新の準備を終了したキュー管理サーバ105の識別子(IPアドレス)等を含む。
前後キュー情報214は、システムの更新の実行前、及び、システムの更新の実行後のデータストアサーバ106が有するキュー(後述する図3Bに示す分散キューデータ321)に格納されるメッセージの数を、分散メッセージシステムで一元管理するための情報を示す。特に、前後キュー情報214は、システムの更新の実行前、及び、システムの更新の実行後のキューに関する情報を含む。前後キュー情報214は、代表データストアサーバが有する前後キュー情報と同期される。
前後サーバ対応テーブル215は、システムの更新前後でコンシステントハッシングなどのデータ振分け空間が変わる場合の、システムの更新前のデータストアサーバ106と、システムの更新後のデータストアサーバ106との対応関係を示す。
前後サーバ対応テーブル215は、分散メッセージシステムのメッセージ処理プログラム204によって同期される。
同期の方法は、最初に複数のキュー管理サーバ105の中の一つのキュー管理サーバ105のメッセージ処理プログラム204が、前後サーバ対応テーブル215を更新し、更新後の前後サーバ対応テーブル215を代表データストアサーバに前後サーバ対応テーブル315として格納する方法である。前後サーバ対応テーブル215の詳細については図6の説明にて後述する。
処理性能低下判定条件216は、メッセージ処理プログラム204がデータストアサーバ106の処理性能低下を判定するための条件(閾値)を示す。処理性能低下判定条件216は、例えば、受信したメッセージが示す要求種別ごとに、性能低下を判定するための処理経過時間、接続数、同時処理数、送信待ち数、又は、応答時間などの閾値を示す。
要求種別とは、メッセージの取得、及び、メッセージの格納等、データストアサーバ106に指示するメッセージ処理の内容の種別である。
メッセージ処理プログラム204は、データストアサーバ106との通信によって取得したデータストアサーバ構成情報211の値と、処理性能低下判定条件216とを比較することにより、データストアサーバ106の処理性能が低下していると判定する。
リソース規制値情報217は、通常時、及び、処理性能低下判定時などの状態別に複数の値を保持する。メッセージ処理プログラム204は、リソース規制値情報217を参照し、処理性能が低下したデータストアサーバ106へ処理を要求しないことによって、データストアサーバ106の全リソースを使い切ることを回避する。
分散方法情報218は、メッセージ処理プログラム204が、データストアサーバ106のキューへメッセージを分散する方法(振分け方法)を示す。本実施例の分散方法情報218は、例えば、コンシステントハッシングなどを示し、一つの順序保証キー(メッセージに含まれる)に対して、一つのデータストアサーバ106の一つのキューが割り当てられるような方法を示す。
本実施例のデータストアサーバ106は、システム全体でメッセージの宛先別にキューを備える。キュー管理サーバ105は、メッセージに付加された順序保証キーと、分散方法情報218が示すコンシステントハッシングなどの方法とにより特定のデータストアサーバ106を選択する。
メッセージをキューに格納する場合、メッセージ処理プログラム204は、分散方法情報218を参照し、メッセージ振分け先のデータストアサーバ106を取得する。このとき、メッセージ処理プログラム204は、順序保証キーに値が設定されている場合、分散方法情報218が示す振分け方法によって特定のデータストアサーバ106のキューを選択し、順序保証キーに値が設定されていない場合、別の振分け方法(ラウンドロビンなど)によってデータストアサーバ106のキューを選択してもよい。
メッセージ処理プログラム204は、分散方法情報218が有するコンシステントハッシングによるデータ振分け空間(具体的には、データストアサーバ106のキューのリスト)の設定など一部の情報を、データストアサーバ構成情報211が示すデータストアサーバ106の設定に基づいて生成する。したがって、システムの更新時においてデータストアサーバ構成情報211が更新された場合、分散方法情報218も更新される。
取得方法情報219は、キュー管理サーバ105からメッセージ取得が可能なデータストアサーバ106(データストアサーバ状態情報220)、及び、その取得優先度を示す。具体的には、全て又は一部のデータストアサーバ106からメッセージを取得するか、複数台設定した場合にどのデータストアサーバ106からメッセージを優先して取得するか、又は、データストアサーバ106の保持するメッセージ数が多いところから優先して取得するかといった情報を示す。
メッセージ処理プログラム204は、取得方法情報219を参照することによって、現在(更新後)、メッセージを取得できるデータストアサーバ106を特定できる。また、メッセージ処理プログラム204は、前後サーバ対応テーブル215を参照することによって、更新後にメッセージを取得するデータストアサーバ106と、当該データストアサーバ106に対応する更新前にメッセージを取得したデータストアサーバ106を特定する。
さらに、メッセージ処理プログラム204は、前後キュー情報214を参照することによって、更新後にメッセージを取得するデータストアサーバ106と更新前にメッセージを取得したデータストアサーバ106のどちらからメッセージを取得するか選択する。
データストアサーバ状態情報220は、担当キーレンジ情報、稼働サーバ、稼働情報、分散キューリスト、及び、データ多重度など、データストアサーバ106ごとの状態に関する情報を示す。
図3Aは、本実施例のデータストアサーバ106のハードウェア構成を示すブロック図である。
データストアサーバ106は、プロセッサ301と、入出力回路インタフェース302と、揮発性メモリ303と、不揮発性記憶部306と、これらを接続する内部通信線(例えば、バス)と、によって構成される。
プロセッサ301は、演算装置及び制御装置である。データストアサーバ106の機能は、プロセッサ301が揮発性メモリ303に格納されたプログラムを実行することによって、実現される。
揮発性メモリ303は、例えば、揮発性の記憶素子であるRAMを含む。RAMは、DRAM(Dynamic Random Access Memory)のような高速かつ揮発性の記憶素子であり、補助記憶装置に格納されたプログラム及びプログラムの実行時に使用されるデータを一時的に格納する。
不揮発性記憶部306は、不揮発性の記憶素子であるROMであってもよいし、磁気記憶装置(HDD)、又は、フラッシュメモリ(SSD)等の大容量かつ不揮発性の記憶装置であってもよい。不揮発性記憶部306は、プロセッサ301が実行するプログラム及びプログラムの実行時に使用されるデータを格納してもよい。そして、プログラムは、不揮発性記憶部306から必要に応じて読み出され、揮発性メモリ303にロードされ、実行されてもよい。
入出力回路インタフェース302は、通信設備網103と通信するためのインタフェースである。
揮発性メモリ303は、データストアサーバプログラム304と、揮発性記憶部305とを含む。データストアサーバプログラム304は、メッセージの処理を実現するプログラムである。データストアサーバプログラム304は、一つのプログラムによって構成されてもよいし、複数のサブプログラムを含んでもよい。
データストアサーバプログラム304は、予め揮発性メモリ303又は不揮発性記憶部306に格納されてもよいし、図示しない着脱可能な記憶媒体(例えば、CDーROM、又は、フラッシュメモリなど)、又は、通信媒体(すなわちネットワーク、及び、ネットワークを伝播するデジタル信号又は搬送波)を介して、揮発性メモリ303又は不揮発性記憶部306に導入されてもよい。
以下に示すデータストアサーバ106の機能は、プロセッサ301がデータストアサーバプログラム304を実行することにより実現される。
揮発性記憶部305は、データストアサーバプログラム304が処理を実行する際に使用する記憶領域である。しかし、データストアサーバプログラム304は、処理を実行する際に使用する記憶領域を自らのプログラムが格納される記憶領域に有してもよい。
不揮発性記憶部306は、データストアサーバプログラム304が出力したログ、及び、データストアサーバプログラム304が使用する設定ファイルなどのデータを格納する。
図3Bは、本実施例の代表データストアサーバの揮発性記憶部305が保持するデータを示す説明図である。
データストアサーバ106の揮発性記憶部305は、データストアサーバ構成情報311、データストアサーバ合議情報312、及び、データストア領域316を含む。また、代表データストアサーバの揮発性記憶部305は、さらに、合意情報313、前後キュー情報314、及び、前後サーバ対応テーブル315を含む。
なお、不揮発性記憶部306は、データストアサーバ構成情報311、データストアサーバ合議情報312、合意情報313、前後キュー情報314、前後サーバ対応テーブル315、及び、データストア領域316の各情報を格納してもよい。そして、データストアサーバプログラム304は、必要に応じて不揮発性記憶部306から情報を読み出してもよい。
データストアサーバ構成情報311は、図2Bに示すデータストアサーバ構成情報211と同じ内容を示すように同期される。すなわち、データストアサーバ構成情報311は、データストアサーバ106間の相関情報及びデータストアサーバ106の稼動情報を格納する。
ただし、データストアサーバ構成情報311は、データストアサーバ106のプログラムによって参照されるため、内容が同じであれば、データストアサーバ構成情報211とデータ形式が異なってもよい。
データストアサーバ合議情報312は、図2Bに示すデータストアサーバ合議情報212と同じ内容を示すように同期される。すなわち、データストアサーバ合議情報312は、データストアサーバ106間の相関情報及びデータストアサーバ106の稼働情報を含む。複数のデータストアサーバ106のデータストアサーバプログラム304は、データストアサーバ106間でデータストアサーバ合議情報312を交換し、データストアサーバ構成情報311を更新する。
合意情報313は、図2Bに示す合意情報213と同じ内容を含む。代表データストアサーバの他のデータストアサーバ106は、合意情報313のスレーブ情報を保持してもよい。代表データストアサーバの合意情報313は、複数のキュー管理サーバ105によって共有される。
キュー管理サーバ105のメッセージ処理プログラム204は、システムの更新要求を受け取り、システムの更新の準備が終了した場合、代表データストアサーバの合意情報313に、自らがシステムの更新要求を受けたこと、及び、自らがシステムの更新の準備を終了したことを示す情報を格納する。
そして、全てのキュー管理サーバ105が代表データストアサーバの合意情報313を更新した場合、合意情報313は、システムの更新の準備が、全てのキュー管理サーバ105において終了し、システムの更新後の処理を開始可能であることを示す。
全てのキュー管理サーバ105は、メッセージ処理要求を受信した場合、又は、定期更新時に、データストアサーバ106から合意情報313を取得し、取得した合意情報313によって合意情報213を更新する。そして、全てのキュー管理サーバ105は、合意情報213が、システムの更新の準備が全てのキュー管理サーバ105において終了したことを示す場合、システムの更新後の処理を開始する。
全てのキュー管理サーバ105が、データストアサーバ106の合意情報313に、システムの更新の準備が終了したことを格納するまで、本実施例の分散メッセージシステムは、システムの更新処理の終了後の状態へ移行しない。システムの更新時のシーケンスについては図8に後述する。
前後キュー情報314は、図2Bに示す前後キュー情報214と同じ内容を含むように同期される。前後キュー情報314は、代表データストアサーバに格納され、複数のキュー管理サーバ105により共有される。
複数のキュー管理サーバ105の複数のメッセージ処理プログラム204のうち少なくとも一つが、前後キュー情報214を更新した場合、当該メッセージ処理プログラム204は、代表データストアサーバに、更新した前後キュー情報214の内容を前後キュー情報314として格納する。
前後サーバ対応テーブル315は、図2Bに示す前後サーバ対応テーブル215と同じ内容を示す。代表データストアサーバに格納される前後サーバ対応テーブル315は、複数のキュー管理サーバ105により共有される。
データストア領域316は、データストアサーバ106がキュー管理サーバ105から格納要求とメッセージとを受信した場合、受信したメッセージを格納する領域である。本実施例におけるデータストアサーバ106は、キーバリューストアであるため、データストア領域316は、メッセージ(バリュー)と当該メッセージデータに対応するキーとを格納する。
データストア領域316は、1stキュー317及び2ndキュー318を含む。1stキュー317、及び、2ndキュー318は、システムの更新の前後でメッセージ格納先及びメッセージ取得先を分けて管理するためのキューである。1stキュー317及び2ndキュー318を総称して、分散キューと記載する。
1stキュー317及び2ndキュー318は、複数の分散キューデータ321を有する。分散キューデータ321は、順序保証が必要なメッセージのグループに対応する記憶領域である。また、1stキュー317に格納される分散キューデータ321と2ndキュー318に格納される分散キューデータ321とは、対応する。
分散キューデータ321は、複数のデータストアサーバ106に多重に保持されている。分散キューデータ321は、一つの分散キュー管理情報331と複数のメッセージデータ332と複数のメッセージ関連情報333とを含む。
1stキュー317と2ndキュー318とは、同じ対象キュー名(識別子)を有する分散キューデータ321を各々有する。キュー管理サーバ105のメッセージ処理プログラム204は、メッセージをデータストアサーバ106に格納する際、メッセージを格納する1stキュー317又は2ndキュー318の分散キューを指定する。また、データストアサーバプログラム304は、メッセージに含まれる対象キュー名(識別子)と、メッセージ処理プログラム204から指定された分散キューとに従って、分散キューデータ321にメッセージを格納する。
分散キュー管理情報331は、分散キューデータ321に含まれる複数のメッセージデータ332とメッセージ関連情報333とを管理するための情報である。データストアサーバプログラム304は、分散キュー管理情報331を参照することにより、先入れ先出しのキューとしての機能を実現する。
具体的には、分散キュー管理情報331は、分散キューデータ321の識別子、分散キューデータ321がマスタであるかスレーブであるかを示す情報、及び、メッセージデータ332等の格納順(到着順)などのメッセージデータ332の処理順を示す情報を含む。
また、分散キュー管理情報331は、分散キューデータ321に格納できる最大のメッセージ件数(又は、分散キューデータ321が利用できるデータサイズ)、分散キューデータ321に格納されるメッセージ数及び利用されているメッセージサイズ、並びに、複数のメッセージ処理プログラム204からメッセージを一つずつ取り出すため、排他制御の対象であるメッセージデータ332を示す情報等を含む。
分散キュー管理情報331がメッセージデータ332の格納順を示すため、メッセージ処理プログラム204は、メッセージの格納順に従ってメッセージを呼び出すことができる。これによって、データストアサーバプログラム304は、最も以前に格納されたメッセージを分散キューデータ321から取り出すことができ、順序保証を実現することができる。
また、分散キュー管理情報331を参照することにより、一つのメッセージ処理プログラム204によって取り出されたメッセージを、他のメッセージ処理プログラム204は、一定時間取り出せない。これにより、一つのメッセージの多重処理を防ぐことができる。
一つの分散キューデータ321において、一つのメッセージの処理が終わるまで、他のメッセージは処理されない。このため、データストアサーバプログラム304は、順序保証対象のメッセージを一つの分散キューデータ321に集中して格納することによって、メッセージ処理順序を実現できる。
データストアサーバプログラム304は、キュー管理サーバ105からメッセージの格納又は削除などを指示されたタイミングにおいて、分散キュー管理情報331を更新する。キュー管理サーバ105のメッセージ処理プログラム204は、複数のデータストアサーバ106の各分散キュー管理情報331を定期的に取得及び集計することによって、前後キュー情報214を生成する。
メッセージデータ332は、メッセージサーバ104から送信されたメッセージのデータであり、キュー管理サーバ105によるメッセージ振分けによって、データストアサーバ106に送信されたメッセージである。メッセージデータ332は、バリューに相当する。
メッセージ関連情報333は、送信されたメッセージに付加された情報を含む。メッセージ関連情報333は、具体的には、順序保証キーを含む。データストアサーバプログラム304は、キュー管理サーバ105からの指示と、メッセージ関連情報333とを利用して、メッセージ処理を行う。
システムの更新の準備において、キュー管理サーバ105のメッセージ処理プログラム204は、分散方法情報218のデータ振分け空間を更新する。このため、メッセージ処理プログラム204は、システムの更新前後において、順序保証キーに従ったメッセージの格納先を変更する。
メッセージ処理プログラム204は、システムの更新前後において、メッセージ格納先を1stキュー317と2ndキュー318との間でメッセージを格納する分散キューを切り替えることによって、システムの更新前後において順序保証対象メッセージを分散する。
なお、本実施例は、1stキュー317と2ndキュー318との二つが、システムの更新ごとに役割を切り替える。しかし、データストアサーバ106が3rdキュー、及び、4thキュー等、三つ以上の分散キューを保持し、システムの更新中に実行される別のシステムの更新において、3rdキュー、及び、4thキューを用いてもよい。
メッセージサーバ104からキュー管理サーバ105を介してデータストアサーバ106に送信されるメッセージの構成について、図4の説明にて後述する。
図4は、本実施例のメッセージサーバ104からキュー管理サーバ105に送信されるメッセージの構成を示す説明図である。
メッセージサーバ104は、少なくとも一つのプロセッサがメモリを用いることによって、プログラムを実行することによって機能を実現してもよい。メッセージサーバ104は、図2A及び図3Aに示すような計算機であってもよい。以下に示すメッセージサーバ104の機能は、メッセージサーバ104が有するプログラムによって実行されるか、メッセージサーバ104の機能を実装する物理的な集積回路によって実行される。
メッセージは、要求種別401と、オプション402と、対象キュー名403と、順序保証キー404と、メッセージデータ405と、を含む。要求種別401は、メッセージの格納、取得、削除、又は、比較など、要求されたメッセージに対する処理の内容を示す。
オプション402は、要求種別ごとの設定値を格納可能な領域である。例えばメッセージがメッセージの取得要求を示す場合、オプション402は、メッセージ取得件数を格納する。また、メッセージがメッセージの格納要求である場合、メッセージを送信した日時を格納したりするための領域である。メッセージサーバ104が、オプション402に設定値を格納する。
対象キュー名403は、メッセージの格納、取得、削除又は比較などの処理の対象となるキュー(1stキュー317及び2ndキュー318の分散キューデータ321)の対象キュー名(識別子)を格納する。メッセージサーバ104が、対象キュー名403にキューの識別子を格納する。
順序保証キー404は、順序保証を行いたい複数のメッセージに対して割り当てられた順序保証が必要であることを示す識別子を格納する。分散キューデータ321において、順序保証キー404は、メッセージ関連情報333に格納される。メッセージサーバ104が、順序保証キー404に値を格納する。
キュー管理サーバ105のメッセージ処理プログラム204は、受信したメッセージのうち対象キュー名403と順序保証キー404と分散方法情報218とに基づいて、メッセージの振分け先であるデータストアサーバ106を選択する。
キュー管理サーバ105がメッセージに含まれる順序保証キーに基づいて、データストアサーバ106の分散キューを一意に決定し、さらに、データストアサーバ106の分散キュー内で処理順序を制御するため、本実施例の分散メッセージシステムは、メッセージの順序保証を実現する。
例えば、メッセージサーバ104は、メッセージの宛先である宛先サーバ109毎にメッセージを順序保証することが定められている場合、順序保証キー404に宛先サーバ109のドメイン名(もしくは宛先サーバ109に一意に対応する識別子など)を格納する。このため、本実施例における順序保証キー404は、順序を示す情報を含む必要がない。
また、通信キャリア又は証券会社のメッセージシステムにおいて、例えば、証券会社であれば証券銘柄毎に順序保証が求められるなど順序保証したいメッセージが多数ある場合、メッセージサーバ104は、メッセージデータ405が示す証券銘柄ごとに順序保証キーを割り当て、割り当てた順序保証キーを順序保証キー404に格納する。これにより、キュー管理サーバ105は、データストアサーバ106全体に分散してメッセージを格納することが可能である。
なお、メッセージに順序保証が不要である場合、メッセージサーバ104は、順序保証キー404にnull値、又は、所定の値を設定する。これによって、メッセージ処理プログラム204は、分散方法情報218に従って、順序保証以外のメッセージ振分け方法(例えば、ラウンドロビン等)を適用する。
メッセージデータ405は、通信端末101から受信した送信対象のメッセージのデータを示す。なお、送信対象のメッセージは、テキスト、又はファイルなど、いかなる表示方法によるデータでもよい。メッセージデータ405は、バイト列(バリュー)である。
メッセージ処理プログラム204は、受信したメッセージの処理において、要求種別401と、オプション402と、対象キュー名403と、順序保証キー404とに基づいて、振分け先となるデータストアサーバ106の分散キューデータ321を決定する。このとき、メッセージ処理プログラム204は、1stキュー317及び2ndキュー318のいずれにメッセージを振り分けるかも選択する。
図5は、本実施例のキュー管理サーバ105の前後キュー情報214及び代表データストアサーバの前後キュー情報314を示す説明図である。
前後キュー情報214と前後キュー情報314とは、同じ内容を示すため、以下において前後キュー情報314の構成を説明する。
前後キュー情報314は、シーケンス番号501と、メッセージ格納先キュー最新情報502と、1stキューメッセージ数テーブル503と、2ndキューメッセージ数テーブル504と、を含む。
シーケンス番号501は、前後キュー情報214の更新状況(新しさ)を示す値である。本実施例のメッセージ処理プログラム204は、前後キュー情報314(214)を更新するごとに、シーケンス番号501に1を加算する。
メッセージ処理プログラム204は、定期的に前後キュー情報214のシーケンス番号501と、データストアサーバ106の前後キュー情報314のシーケンス番号501とを比較し、前後キュー情報214のシーケンス番号501が前後キュー情報314のシーケンス番号501よりも小さい(すなわち、古い)場合、データストアサーバ106の前後キュー情報314を前後キュー情報214にコピーする。
これは、前後キュー情報314は、複数のキュー管理サーバ105によって更新され、常に最新の状態であり、キュー管理サーバ105は、古い前後キュー情報214を保持する可能性があるためである。
一方、前後キュー情報214のシーケンス番号501と前後キュー情報314のシーケンス番号501とが一致した場合、メッセージ処理プログラム204及びデータストアサーバプログラム304は、前後キュー情報214及び前後キュー情報314を、さらに最新の状態に更新する。前後キュー情報214及び314は、全てのデータストアサーバ106が有する分散キュー管理情報331に基づいて更新される。
なお、メッセージ処理プログラム204がシステムの更新に関する情報を示す前後キュー情報214を、定期的に揮発性記憶部205又は不揮発性記憶部206にログとして保存しておくことで、メッセージ処理プログラム204は、図16に示すGUIによる情報を表示できる。
メッセージ格納先キュー最新情報502は、現在のメッセージ格納先が1stキュー317と2ndキュー318とのいずれであるかを示す。
1stキューメッセージ数テーブル503は、各データストアサーバ106の1stキュー317に格納されるメッセージの数を示す。2ndキューメッセージ数テーブル504は、各データストアサーバ106の2ndキュー318に格納されるメッセージの数を示す。
図5に示す1stキューメッセージ数テーブル503及び2ndキューメッセージ数テーブル504は、行が分散キューデータ321を示し、列がデータストアサーバ106を示す。これによって、1stキューメッセージ数テーブル503及び2ndキューメッセージ数テーブル504は、データストアサーバ106の分散キューデータ321ごとにメッセージの数を示す。
なお、1stキューメッセージ数テーブル503及び2ndキューメッセージ数テーブル504は、テーブル形式以外にもいかなる方法によってメッセージの数を保持してもよく、例えば、テキスト形式によってメッセージの数を保持してもよい。
メッセージ処理プログラム204は、分散キューデータ321の追加又は削除要求をメッセージサーバ104から受け付けた場合、要求に従って分散キューデータ321の追加又は削除と、1stキューメッセージ数テーブル503と2ndキューメッセージ数テーブル504との行の追加又は削減とを、データストアサーバ106に指示する。
また、メッセージ処理プログラム204は、システムの更新要求を運用管理サーバ107から受け付けた場合、拡張又は縮小されるデータストアサーバ106に対応する1stキューメッセージ数テーブル503と2ndキューメッセージ数テーブル504との列を、追加又は削除する。
図6は、本実施例のキュー管理サーバ105の前後サーバ対応テーブル215及び代表データストアサーバの前後サーバ対応テーブル315を示す説明図である。
前後サーバ対応テーブル215と前後サーバ対応テーブル315とは、同じ内容であるため、以下において前後サーバ対応テーブル315の構成を説明する。
前後サーバ対応テーブル315は、拡張又は縮小後601、及び、拡張又は縮小前602を含む。拡張又は縮小前602は、システムの更新前に設置されていたデータストアサーバ106の識別子を示す。
拡張又は縮小後601は、拡張又は縮小前602が示すデータストアサーバ106に振り分けられていたメッセージを、システムの更新後に振り分ける先のデータストアサーバ106を示す。
キュー管理サーバ105は、本実施例のシステムの更新中において前後サーバ対応テーブル215を保持し、本実施例のシステムの更新が終了し、キュー管理サーバ105が更新後の分散キューからメッセージを取得する間、前後サーバ対応テーブルを保持しない。
なお、図6に示す前後サーバ対応テーブル315は、拡張又は縮小後601と拡張又は縮小前602との2列のみを含む。しかし、データストアサーバ106の拡張又は縮小が実行されている間に、他のデータストアサーバ106の拡張又は縮小が実行される場合、前後サーバ対応テーブル315は、三つ以上の列を含んでもよい。
図7は、本実施例のキュー管理サーバ105の合意情報213と代表データストアサーバの合意情報313とを示す説明図である。
合意情報213と合意情報313とは同じ内容であるため、以下において合意情報313の構成を説明する。合意情報313は、例えば、システムの更新の準備が終了したキュー管理サーバ105のIPアドレスを含む。
ただし、本実施例の合意情報313は、全てのキュー管理サーバ105がシステムの更新の準備が終了したかを示せば、いかなる情報を含んでもよい。例えば、キュー管理サーバ105がキュー管理サーバ105の総数を保持している場合、合意情報313は、システムの更新の準備が終了したキュー管理サーバ105の数を示してもよい。
図8は、本実施例のシステムの拡張処理を示すシーケンス図である。
運用管理サーバ107は、システムの運用者又は管理者からシステムの更新の指示があった場合、又は、運用管理サーバ107が有する負荷監視機能に従ってシステムの更新の必要があると判定し、データストアサーバ106の物理的な増設又は撤去が終了した場合、システムの更新の要求をデータストアサーバ106に送る。図8に示す処理は、特にシステムの拡張処理を示すが、縮小処理も同様なシーケンスによって実行される。
運用管理サーバ107は、物理的に増設されたデータストアサーバ106(以下、新規データストアサーバ106N)の構成情報を含む拡張要求を、既存のデータストアサーバ106(代表データストアサーバを含む)及び新規データストアサーバ106Nに送信する(701)。
既存のデータストアサーバ106及び新規データストアサーバ106Nのデータストアサーバプログラム304は、受信した拡張要求に含まれる構成情報に従って、拡張処理を実行する(702)。具体的には、データストアサーバプログラム304は、受信した拡張要求に含まれる構成情報に従って、新規データストアサーバ106NのIPアドレスなどをデータストアサーバ構成情報311に格納するなど、データストアサーバ構成情報311を更新する。
また、既存のデータストアサーバ106及び新規データストアサーバ106Nのデータストアサーバプログラム304は、シーケンス702において、全てのデータストアサーバ106間で通信することによりデータストアサーバ合議情報312を更新する。
シーケンス702の後、既存のデータストアサーバ106及び新規データストアサーバ106Nのデータストアサーバプログラム304は、シーケンス701の拡張要求に対する応答を運用管理サーバ107に返す(703)。
なお、シーケンス702において、データストアサーバ106は、シーケンス702以前から既存のデータストアサーバ106に格納されたメッセージを、新規のデータストアサーバ106又は他のデータストアサーバ106に移動しない。このため、メッセージの取得が一時停止するなどの事象が発生せず、サービスを中断することがない。
シーケンス703の後、運用管理サーバ107は、全てのキュー管理サーバ105にシステムの拡張要求を送信する(704)。
シーケンス704における拡張要求には、新規データストアサーバ106NのIPアドレス等が含まれる。また、シーケンス704における拡張要求には、前後サーバ対応テーブル315を生成するため、システムの拡張前にメッセージを格納する先のデータストアサーバ106と、システムの拡張後にメッセージを格納する先のデータストアサーバ106との対応関係を示す情報(前後サーバ対応テーブル215に相当)が含まれる。なお、予め分散方法情報218にシステムの拡張時のメッセージ振分け方法を登録しておくことで、前後サーバ対応テーブル315を自動生成することができるため、その場合は前記対応関係情報を含めなくてもよい。
全てのキュー管理サーバ105のメッセージ処理プログラム204は、システムの拡張要求を受信した場合、データストアサーバ構成情報211及びデータストアサーバ合議情報212などの構成情報の更新を準備する(705)。
具体的には、メッセージ処理プログラム204は、拡張後の新たなデータストアサーバ構成情報211及びデータストアサーバ合議情報212を拡張要求に従って生成することによって、構成情報の更新を準備する。ここで、メッセージ処理プログラム204は、新たなデータストアサーバ106に割り当てられたキーレンジを、新たなデータストアサーバ構成情報211に格納する。
この時、メッセージ処理プログラム204は、格納済みのキーレンジと重複しないように、新規データストアサーバ106Nのキーレンジを割り当てる。これによって、メッセージ処理プログラム204は、データストアサーバ106によるメッセージの移動の発生、及び、メッセージが取得不可能な状況の発生を回避できる。
また、全てのキュー管理サーバ105のメッセージ処理プログラム204は、前後サーバ対応テーブル215を、拡張要求に従い準備する(706)。具体的には、メッセージ処理プログラム204は、新たな前後サーバ対応テーブル215を拡張要求に従って生成することによって、システムの更新を準備する。
シーケンス706の後、全てのキュー管理サーバ105のメッセージ処理プログラム204は、システムの拡張の準備が開始されたため、新たな前後サーバ対応テーブル215を代表データストアサーバに送信し、新たな前後サーバ対応テーブル215を前後サーバ対応テーブル315として格納する要求を代表データストアサーバに送信する(707)。
全てのキュー管理サーバ105のメッセージ処理プログラム204は、データストアサーバ106からシーケンス708への応答を受信する(708)。
そして、全てのメッセージ処理プログラム204は、シーケンス708における応答が格納が成功したことを示すかを判定する。シーケンス708における応答が、格納が成功したことを示す場合、メッセージ処理プログラム204は、シーケンス712に進む。
一方で、シーケンス708における応答が、代表データストアサーバが前後サーバ対応テーブル315を既に保持しており、前後サーバ対応テーブル315の格納に失敗したことを示す場合、代表データストアサーバの前後サーバ対応テーブル315は、他のキュー管理サーバ105のメッセージ処理プログラム204によって生成されている。
このため、メッセージ処理プログラム204は、シーケンス708における応答が前後サーバ対応テーブル315の格納に失敗したことを示す場合、代表データストアサーバの前後サーバ対応テーブル315を要求し(709)、代表データストアサーバから前後サーバ対応テーブル315を取得する(710)。
そして、シーケンス710の後、メッセージ処理プログラム204は、キュー管理サーバ105に格納済みの前後サーバ対応テーブル215と、取得した前後サーバ対応テーブル315とが一致するか判定する(711)。
前後サーバ対応テーブル215と取得した前後サーバ対応テーブル315とが一致した場合、メッセージ処理プログラム204は、シーケンス712に進む。前後サーバ対応テーブル215と取得した前後サーバ対応テーブル315とが一致しない場合、メッセージ処理プログラム204は、図8に示す処理を終了する。なお、ここでメッセージ処理プログラム204は、運用管理サーバ107にエラーを示す情報を送信してもよい。
シーケンス708における応答が格納に成功したことを示す場合、又は、前後サーバ対応テーブル215と取得した前後サーバ対応テーブル315とが一致した場合、メッセージ処理プログラム204は、新規データストアサーバ106Nに、1stキュー317、2ndキュー318及び分散キューデータ321(分散キュー管理情報331を含む)の生成を要求する(712)。
新規データストアサーバ106Nのデータストアサーバプログラム304は、要求に従って、自らの揮発性記憶部305に1stキュー317及び2ndキュー318(分散キュー管理情報331を含む)を生成する。
新規データストアサーバ106Nが1stキュー317等の分散キューを生成した後、メッセージ処理プログラム204は、分散キューの生成要求に対する応答を受信する(713)。シーケンス713における応答が分散キューの生成の成功を示す場合、又は、既に分散キューが生成済みであることを示す場合、メッセージ処理プログラム204は、シーケンス714を実行する。
シーケンス713における応答が、分散キューの生成の失敗を示し、かつ、分散キューが生成されていないことを示す場合、メッセージ処理プログラム204は、図8に示す処理を終了する。なお、ここでメッセージ処理プログラム204は、運用管理サーバ107にエラーを示す情報を送信してもよい。
シーケンス714において、全てのキュー管理サーバ105のメッセージ処理プログラム204は、代表データストアサーバに合意情報313の取得要求を送信する(714)。全てのキュー管理サーバ105のメッセージ処理プログラム204は、合意情報313を含む応答を、代表データストアサーバから受信する(715)。
そして、全てのキュー管理サーバ105のメッセージ処理プログラム204は、代表データストアサーバから受信した合意情報313によって、合意情報213を更新する(716)。
シーケンス716の後、全てのキュー管理サーバ105のメッセージ処理プログラム204は、自らの合意情報213を用いて、代表データストアサーバの合意情報313を更新する(717)。ここで、メッセージ処理プログラム204は、自らのキュー管理サーバ105のIPアドレス等の情報を合意情報313及び213に格納することによって、合意情報313及び213を更新する。これによって、システムの拡張の準備が終了したキュー管理サーバ105を特定するための情報が、合意情報313に格納される。
シーケンス717の後、全てのキュー管理サーバ105のメッセージ処理プログラム204は、合意情報を更新したことを示す応答を、代表データストアサーバから受信する(718)。
キュー管理サーバ105のメッセージ処理プログラム204は、シーケンス718までの処理を終えた場合、拡張準備が終了したことを示す応答を運用管理サーバ107に送信する(719)。運用管理サーバ107は、全てのキュー管理サーバ105からシーケンス719の応答を受信する。
一方で、全てのキュー管理サーバ105のメッセージ処理プログラム204は、シーケンス719後に受信したメッセージをデータストアサーバ106に振り分ける際、及び、データストアサーバ106を定期的に監視するタイミングで、代表データストアサーバから合意情報313を取得する。そして、メッセージ処理プログラム204は、取得した合意情報313に基づいて、全てのキュー管理サーバ105が拡張の準備を終了した合意状態であるかを判定する(720)。
具体的には、メッセージ処理プログラム204は、全てのキュー管理サーバ105を特定する情報が合意情報313に格納されている場合、合意状態であると判定する。なお、メッセージ処理プログラム204は、合意情報313に全てのキュー管理サーバ105が拡張の準備を終了したことを判定するため、全てのキュー管理サーバ105のIPアドレス、又は、キュー管理サーバ105の総数等を保持してもよい。
合意状態であると判定されるまで、メッセージ処理プログラム204は、シーケンス705において生成された新たなデータストアサーバ構成情報211及びデータストアサーバ合議情報212、並びに、シーケンス706において生成された新たな前後サーバ対応テーブル215を用いない。これによって、メッセージ処理プログラム204は、システムの拡張前と同じく、メッセージの取得先及び格納先を決定する。
合意状態であると判定された場合、メッセージ処理プログラム204は、新たなデータストアサーバ構成情報211、及びデータストアサーバ合議情報212、既存のデータストアサーバ構成情報211、及び、データストアサーバ合議情報212を更新する。これによって、メッセージ処理プログラム204は、メッセージの取得先及び格納先を、後述する図9及び図10に示すシステムの更新中の決定方法によって決定する状態に移行する(721)。
また、シーケンス721において、メッセージ処理プログラム204は、データストアサーバ構成情報211の更新に伴い、必要に応じて分散方法情報218が示すコンシステントハッシングの方法を更新する。
また、シーケンス721において、メッセージ処理プログラム204は、前後キュー情報214のメッセージ格納先キュー最新情報502を、異なる分散キューを示すように更新する。また、メッセージ処理プログラム204は、シーケンス番号501に1を加算する。これによって、システムの更新準備が終了した後メッセージが格納される分散キューは、システムの更新準備が開始される前にメッセージが格納された分散キューと異なる分散キューになる。
シーケンス721の後、キュー管理サーバ105のメッセージ処理プログラム204は、システムの拡張中の処理を開始することを示す応答を運用管理サーバ107に送信する(722)。合意状態であると判定された後に、システムの更新中の状態に遷移することによって、複数のキュー管理サーバ105の処理の同期を図ることができる。
なお、図8に示す処理によってシステムを縮小する場合、図8に示すシーケンス701〜703は実行されない。そして、シーケンス704〜722が、システムの拡張をシステムの縮小に置換したうえで実行される。またその後、キュー管理サーバ105のメッセージ処理プログラム204が、減らされる対象のデータストアサーバ106の縮小前キューのメッセージ処理を全て終了させた後、運用管理サーバ107は、全てのデータストアサーバ106へ縮小要求を出す。
図9は、本実施例のメッセージサーバ104から送信されたメッセージをデータストアサーバ106に格納する処理を示すシーケンス図である。
キュー管理サーバ105のメッセージ処理プログラム204は、メッセージサーバ104からメッセージと、メッセージを格納する要求とを受信する(801)。
シーケンス801の後、メッセージ処理プログラム204は、分散方法情報218と順序保証キー404と対象キュー名403とに基づいて、メッセージを格納する先のデータストアサーバ106(以下、格納先データストアサーバ)の分散キューデータ321の識別子を一つ選択する。
また、メッセージ処理プログラム204は、前後キュー情報214のメッセージ格納先キュー最新情報502が示す分散キューを、メッセージを格納する先の分散キューとして選択する(802)。これによって、メッセージ処理プログラム204は、メッセージを格納する、分散キュー(1stキュー317又は2ndキュー318)と当該分散キューにおける分散キューデータ321とを決定することができる。
なお、順序保証対象のメッセージ群が複数のデータストアサーバ106に分散して格納された場合、メッセージ処理プログラム204は、順序番号又はメッセージ処理時間の比較が必要となる。このような事態を回避するため、シーケンス802においてメッセージ処理プログラム204は、同一の順序保証キー404を持つ複数のメッセージに、同一のデータストアサーバ106の同一のキューを格納先データストアサーバの格納先キューとして選択する。
また、シーケンス802がシステムの更新中又は更新後であり、かつ、システムの更新開始前の格納先キューが1stキュー317である場合、メッセージ処理プログラム204は、システムの更新中の格納先キューとして2ndキュー318を選択する。また、シーケンス802がシステムの更新中又は更新後であり、かつ、システムの更新開始前の格納先キューが2ndキュー318である場合、メッセージ処理プログラム204は、システムの更新中の格納先キューとして1stキュー317を選択する。
このため、メッセージ処理プログラム204は、システムの更新開始前に格納されたメッセージと、システムの更新中に格納されたメッセージとが、同じ分散キューの分散キューデータ321に混在することを防ぐことができる。つまり、シーケンス802は、システムの更新中にメッセージ格納要求を受信した場合においても、データストアサーバ106がシステムの更新開始前のメッセージを先行して処理するための前提条件となるシーケンスである。
シーケンス802の後、メッセージ処理プログラム204は、格納先データストアサーバに、メッセージと、格納先キューにメッセージを格納する要求とを送信する(803)。ここで送信される要求には、格納先キューを特定するための情報が含まれる。
データストアサーバプログラム304は、メッセージを格納する要求を受信した場合、受信した要求と対象キュー名403とに従って、受信したメッセージを揮発性記憶部305の分散キューの分散キューデータ321に格納し、さらに、分散キュー管理情報331を更新する(804)。
シーケンス804において、データストアサーバプログラム304は、分散キュー管理情報331が保持する、分散キューに格納されるメッセージの数を増やし、メッセージの処理順(又は、格納順)等の情報を更新する。
シーケンス804の後、格納先データストアサーバのデータストアサーバプログラム304は、シーケンス803のメッセージを格納する要求に対する応答を、キュー管理サーバ105に送信する(805)。シーケンス805の後、キュー管理サーバ105のメッセージ処理プログラム204は、メッセージを格納する要求に対する応答を、メッセージサーバ104に返す(806)。
図10は、本実施例のメッセージサーバ104によるメッセージ取得の処理を示すシーケンス図である。
キュー管理サーバ105のメッセージ処理プログラム204は、メッセージをデータストアサーバ106から取得する要求(メッセージ取得要求)を、メッセージサーバ104から受信する(901)。本実施例のメッセージ取得要求には、取得するメッセージの数が含まれる。
メッセージ処理プログラム204は、メッセージ取得要求を受信した場合、取得方法情報219を参照し、メッセージを取得する先のデータストアサーバ106(以下、更新後メッセージ取得先)の候補を選択する。ここで、選択される候補は、システムの更新後に、キュー管理サーバ105がメッセージを取得するデータストアサーバ106である。
また、メッセージサーバ104からのメッセージ取得要求が、複数のメッセージを取得することを示す場合、メッセージ処理プログラム204は、取得するメッセージの数に従った複数の更新後メッセージ取得先を選択してもよい。
そして、メッセージ処理プログラム204は、前後サーバ対応テーブル215を参照し、選択された候補が拡張又は縮小後601に格納されるエントリの拡張又は縮小前602が示すデータストアサーバ106を特定する(902)。ここで特定したデータストアサーバ106を更新前メッセージ取得先と記載する。
シーケンス902の後、メッセージ処理プログラム204は、前後キュー情報214を参照し、メッセージ格納先キュー最新情報502が示す分散キュー(1stキュー317又は2ndキュー318)とは異なる分散キューを更新前取得先キューとして特定する。
そして、メッセージ処理プログラム204は、特定した更新前取得先キューと、シーケンス902において特定した更新前メッセージ取得先と、前後キュー情報214とに基づいて、更新前メッセージ取得先における更新前取得先キューに格納されたメッセージの数が、0であるか否かを判定する(903)。
具体的には、メッセージ処理プログラム204は、シーケンス903において、更新前メッセージ取得先における更新前取得先キューに格納されるメッセージの数を示すテーブルに、1以上の数を示す要素が少なくとも一つ含まれる場合、更新前メッセージ取得先における更新前取得先キューに格納されるメッセージの数は0ではないと判定する。
更新前メッセージ取得先における更新前取得先キューに格納されたメッセージの数が0である場合、システムの更新前に用いていた分散キューには既にメッセージがない。このため、メッセージ処理プログラム204は、更新後メッセージ取得先の候補を、メッセージを取得する先のデータストアサーバ106に決定し、メッセージ格納先キュー最新情報502が示す分散キューを、メッセージを取得する先の分散キューに決定する。
更新前メッセージ取得先における更新前取得先キューに格納されたメッセージの数が0ではなく、1以上である場合、システムの更新前に用いていた分散キューにまだメッセージがあり、メッセージ処理プログラム204は、その分散キューから優先してメッセージを取得する必要がある。このため、メッセージ処理プログラム204は、更新前メッセージ取得先及び更新前取得先キューを、メッセージを取得する先のデータストアサーバ106及び分散キューに決定する(904)。
なお、更新後メッセージ取得先及び更新前メッセージ取得先が複数特定され、かつ、特定された複数の更新前メッセージ取得先の分散キューのメッセージ数がいずれも0ではない場合、メッセージ処理プログラム204は、取得方法情報219にあらかじめ設定された方法に従って、メッセージ取得先を決定してもよい。取得方法情報219は、例えば、ラウンドロビンによって、更新前メッセージ取得先の中の一つのデータストアサーバ106を選択する方法を示してもよい。
シーケンス902〜904によって、メッセージ処理プログラム204は、更新前メッセージ格納先の更新前取得先キューに順序保証対象のメッセージが未処理で残っている場合、優先して更新前メッセージ格納先の更新前取得先キューからメッセージを取得することができる。このため、キュー管理サーバ105は、分散メッセージシステムが提供するサービスを止めることなく、かつ、システムの更新前から格納されていたメッセージの順序を保証しながら、メッセージを出力することができる。
シーケンス904の後、メッセージ処理プログラム204は、シーケンス904において決定されたデータストアサーバ106に、メッセージを送信するよう要求する取得要求を送信する(905)。メッセージ処理プログラム204は、シーケンス905における取得要求に、メッセージを取得する先の分散キューを特定するための情報を含める。
データストアサーバプログラム304は、取得要求が示す分散キューの分散キュー管理情報331を更新する(906)。具体的には、データストアサーバプログラム304は、分散キュー管理情報331が示す分散キューのメッセージ数を、キュー管理サーバ105に出力するメッセージの数分減らし、また、分散キュー管理情報331が示すメッセージ処理順序(格納順)の情報を更新する。
シーケンス906の後、データストアサーバプログラム304は、取得要求が示す分散キューから取得したメッセージを含む応答を、キュー管理サーバ105に送信する(907)。
なお、メッセージサーバ104からのメッセージ取得要求が示す数が多いために、決定されたメッセージの取得先から要求どおりの数のメッセージを取得できず、かつ、取得方法情報219がラウンドロビンなどの方法を示す場合、メッセージ処理プログラム204は、シーケンス902からシーケンス907の処理を、更新後データ取得先をラウンドロビンによって変更しつつ、繰り返して実行してもよい(908)。
最後に、キュー管理サーバ105のメッセージ処理プログラム204は、メッセージサーバ104に、データストアサーバ106から取得したメッセージを含む応答を送信する(909)。
図11は、本実施例のキュー管理サーバ105による前後キュー情報(214、314)の更新処理を示すシーケンス図である。
図11に示す処理は、1秒間隔など、所定の時間間隔において実行される。なお、前後キュー情報(214、314)の更新頻度が高いほど、システムの更新前に格納されたメッセージの数の変化の検知、及び、メッセージ数が0になったことを検知するまでの時間が短くなるため、システムの更新前の分散キューから、システムの更新後の分散キューに、メッセージ取得先を切り替えるまでの時間が短くなる。一方で、前後キュー情報(214、314)の更新処理が占めるCPU負荷が高くなるため、スループットが低下する可能性が増す。
本実施例の分散メッセージシステムは、このような条件を考慮し、前後キュー情報214、314の更新頻度を設定する。
キュー管理サーバ105のメッセージ処理プログラム204は、前後サーバ対応テーブル215の有無を判定することによって、本実施例の分散メッセージシステムがシステムの更新中であるかを判定する(1001)。揮発性記憶部205が前後サーバ対応テーブル215を含まない場合、メッセージ処理プログラム204は、システムの更新中でないと判定し、図11の処理を終了する。
このため、図11に示すシーケンス1002移行の処理は、図8に示すシーケンス722の後に特に実行される。
揮発性記憶部205が前後サーバ対応テーブル215を含む場合、メッセージ処理プログラム204は、システムの更新中であると判定し、次のシーケンス1002を実行する。なお、システムの更新の終了後に前後サーバ対応テーブル215を削除しない場合、メッセージ処理プログラム204は、システムの更新中であるかを示すフラグを保持し、このフラグに基づいて、システムの更新中であるかを判定してもよい。
シーケンス1002において、メッセージ処理プログラム204は、代表データストアサーバに前後キュー情報314の送信を要求する。シーケンス1002の後、メッセージ処理プログラム204は、前後キュー情報314を含む応答を代表データストアサーバから受信する(1003)。
メッセージ処理プログラム204は、キュー管理サーバ105が有する前後キュー情報214を参照し、メッセージ格納先キュー最新情報502が示す分散キューとは異なる分散キューを、システムの更新前にメッセージを格納していた分散キューとして特定する。
そして、メッセージ処理プログラム204は、代表データストアサーバから受信した前後キュー情報314の1stキューメッセージ数テーブル503及び2ndキューメッセージ数テーブル504のうち、特定した分散キューを示すテーブルを選択し、選択したテーブルの全ての要素が0であるかを判定する(1004)。
選択したテーブルの全ての要素が0である場合、メッセージ処理プログラム204は、システムの更新処理が終了し、更新後の分散キューからメッセージを通常どおり取得する必要があると決定する。
そして、メッセージ処理プログラム204は、更新後の分散キューからメッセージを通常どおり取得する必要があると決定した場合、前後サーバ対応テーブル215を削除する。また、メッセージ処理プログラム204は、前後キュー情報314のメッセージ格納先キュー最新情報502が、前後キュー情報214のメッセージ格納先キュー最新情報502と異なる場合、前後キュー情報214のメッセージ格納先キュー最新情報502によって前後キュー情報314のメッセージ格納先キュー最新情報502を更新し、かつ、シーケンス番号501に1を加算する指示を、代表データストアサーバに指示し、図11の処理を終了する。
テーブルの要素に少なくとも一つの正数が含まれる場合、メッセージ処理プログラム204は、システムの更新処理を実行中であると判定し、次のシーケンス1005に進む。
シーケンス1005において、メッセージ処理プログラム204は、前後キュー情報214のシーケンス番号501と、代表データストアサーバから取得した前後キュー情報314のシーケンス番号501とを比較する。そして、前後キュー情報214のシーケンス番号501が前後キュー情報314のシーケンス番号501より小さい(又は、古いことを示す)場合、メッセージ処理プログラム204は、前後キュー情報214を前後キュー情報314によって更新し、図11に示す処理を終了する。
シーケンス1005により、全てのキュー管理サーバ105で前後キュー情報314を更新することなく、いずれか1台のキュー管理サーバ105によって前後キュー情報314を更新する。
メッセージ処理プログラム204は、シーケンス1005において前後キュー情報214のシーケンス番号501が前後キュー情報314のシーケンス番号501より小さくないと判定した場合、全てのデータストアサーバ106に分散キュー管理情報331の送信を要求する(1006)。データストアサーバ106のデータストアサーバプログラム304は、自らが有する分散キュー管理情報331を含む応答を、要求元であるキュー管理サーバ105に送信する(1007)。
シーケンス1007の後、メッセージ処理プログラム204は、全てのデータストアサーバ106から送信された分散キュー管理情報331に基づいて、前後キュー情報214の1stキューメッセージ数テーブル503及び2ndキューメッセージ数テーブル504を更新する。そして、メッセージ処理プログラム204は、前後キュー情報214のシーケンス番号501に1を加算する(1008)。
これによって、メッセージ処理プログラム204は、データストアサーバ106の最新の状態によって生成された前後キュー情報214に基づいて、図9及び図10の処理を実行することにより、メッセージの取得先及び格納先を特定することができる。
シーケンス1008の後、メッセージ処理プログラム204は、更新後の前後キュー情報214を含む更新要求を、代表データストアサーバに送信する(1009)。
代表データストアサーバのデータストアサーバプログラム304は、受信した更新要求に含まれる前後キュー情報214によって、前後キュー情報314を更新する。そして、代表データストアサーバのデータストアサーバプログラム304は、前後キュー情報314の更新が終了したことを示す応答を、更新要求の送信元のキュー管理サーバ105に送信する(1010)。
図12Aは、本実施例のキュー管理サーバ105によるシステム拡張の準備処理を示すフローチャートである。
図12Aに示す処理は、図8に示す処理のうち、一つのキュー管理サーバ105によって実行されるシーケンス719までの処理を示す。ステップ751は、シーケンス704に相当する。ステップ752及びステップ753は、シーケンス705に相当する。ステップ754は、シーケンス706に相当する。ステップ755は、シーケンス707に相当する。
ステップ755の後、メッセージ処理プログラム204は、シーケンス708における応答が格納が成功したことを示すかを判定する(756)。シーケンス708における応答が、格納が成功したことを示す場合、メッセージ処理プログラム204は、ステップ757を実行する。シーケンス708における応答が、格納が成功したことを示さない場合、メッセージ処理プログラム204は、ステップ763を実行する。
ステップ757は、シーケンス712に相当する。ステップ757の後、メッセージ処理プログラム204は、シーケンス713における応答が、分散キューの生成の成功を示すか、又は、既に分散キューが生成済みであることを示すかを判定する(758)。
シーケンス713における応答が、分散キューの生成の成功を示す場合、又は、既に分散キューが生成済みであることを示す場合、メッセージ処理プログラム204は、ステップ759を実行する。シーケンス713における応答が、分散キューの生成の失敗を示し、かつ、分散キューが生成されていないことを示す場合、メッセージ処理プログラム204は、ステップ765を実行する。
ステップ759は、シーケンス714及び715に相当する。ステップ760は、シーケンス716に相当する。ステップ761は、シーケンス717及び718に相当する。ステップ762は、シーケンス719に相当する。
ステップ763は、シーケンス709及び710に相当する。ステップ764は、シーケンス711に相当する。ステップ764において前後サーバ対応テーブル215と取得した前後サーバ対応テーブル315とが一致しないと判定された場合、又は、ステップ758において、シーケンス713における応答が分散キューの生成の失敗を示し、かつ、分散キューが生成されていないことを示すと判定された場合、メッセージ処理プログラム204は、システムの拡張を中止する(765)。
ステップ765の後、メッセージ処理プログラム204は、運用管理サーバ107にエラーを示す応答を送信する(766)。ステップ766の後、図12Aに示す処理は終了する。
図12Bは、本実施例のキュー管理サーバ105によるシステム拡張の準備処理が終了したかを判定する処理を示すフローチャートである。
図12Bに示す処理は、図8に示す処理のうち、シーケンス720〜722に相当する処理である。メッセージ処理プログラム204は、ステップ762の後、メッセージをデータストアサーバ106に振り分ける際、及び、データストアサーバ106を定期的に監視するタイミングで、代表データストアサーバから合意情報313を取得する(781)。
ステップ781の後、ステップ782を実行する。ステップ782は、シーケンス720に相当する。ステップ782において合意状態であると判定された場合、メッセージ処理プログラム204は、ステップ783を実行する。ステップ783は、シーケンス721に相当し、ステップ784は、シーケンス722に相当する。
ステップ782において合意状態でないと判定された場合、メッセージ処理プログラム204は、ステップ781に戻り、合意情報313を取得する。
図12Cは、本実施例のデータストアサーバ106によるシステムの拡張処理を示すフローチャートである。
図12Cに示す処理は、図8に示す処理のうち、全てのデータストアサーバ106が実行する処理を示す。ステップ791は、シーケンス701に相当する。ステップ792及び793は、シーケンス702に相当する。ステップ794は、シーケンス703に相当する。
図13は、本実施例のメッセージサーバ104から送信されたメッセージをデータストアサーバ106に格納する処理を示すフローチャートである。
図13に示す処理は、図9に示す処理のうち、キュー管理サーバ105が実行する処理である。ステップ851は、シーケンス801に相当する。ステップ852及び853は、シーケンス802に相当する。
ステップ854は、シーケンス803に担当する。ステップ855は、シーケンス805に相当する。ステップ856は、シーケンス806に相当する。
図14は、本実施例のメッセージサーバ104によるメッセージ取得の処理を示すフローチャートである。
図14に示す処理は、図10に示す処理のうちキュー管理サーバ105が実行する処理を示す。ステップ951は、図10に示すシーケンス901に相当する。ステップ952〜954は、図10に示すシーケンス902に相当する。
具体的には、ステップ952において、メッセージ処理プログラム204は、取得方法情報219を参照し、メッセージを取得する先の更新後メッセージ取得先の候補を選択する。ここで、メッセージ処理プログラム204は、複数の更新後メッセージ取得先の候補を選択してもよい。
そして、ステップ953において、メッセージ処理プログラム204は、前後サーバ対応テーブル215を参照し、更新後メッセージ取得先の候補に対応する更新前メッセージ取得先を特定する。
ステップ955及び956は、図10に示すシーケンス903に相当する。
ステップ956において、更新前メッセージ取得先における更新前取得先キューに格納されたメッセージの数が、0であると判定した場合、メッセージ処理プログラム204は、更新後メッセージ取得先の候補を、メッセージを取得する先のデータストアサーバ106に決定する。そして、決定したデータストアサーバ106に、メッセージを送信するよう要求する取得要求を送信する(958)。
ステップ956において、更新前メッセージ取得先における更新前取得先キューに格納されたメッセージの数が、1以上であると判定した場合、メッセージ処理プログラム204は、更新前メッセージ取得先を、メッセージを取得する先のデータストアサーバ106に決定する。そして、決定したデータストアサーバ106に、メッセージを送信するよう要求する取得要求を送信する(957)。
ステップ958及び957は、各々シーケンス904及び905に相当する。
ステップ958又は957の後、メッセージ処理プログラム204は、ステップ952において複数の更新後メッセージ取得先の候補を選択し、かつ、ステップ951において受信した取得要求が示す数のメッセージを取得していない場合、選択した更新後メッセージ取得先の候補の中でまだステップ954〜956の処理を実行していない候補があるかを判定する(959)。
選択した複数の更新後メッセージ取得先の候補の中でまだステップ954〜956の処理を実行していない候補がある場合、メッセージ処理プログラム204は、ステップ953に戻る。ステップ954〜956の処理を実行していない候補が他にない場合、メッセージ処理プログラム204は、ステップ958又は957の処理の結果であるデータストアサーバ106からの応答に従って、メッセージを取得する要求に対する応答をメッセージサーバ104に送信する(960)。
図15Aは、本実施例のシステム拡張前と後とのデータストアサーバ106の分散キューを示す説明図である。
図15Aに示す分散キューは、メッセージが格納された状態、又は、メッセージが取得された状態を時系列で示す。状態1101〜状態1103は、分散キューの状態を順に示す。状態1101は、システムが拡張される前の分散キューの状態であり、状態1102以降は、データストアサーバ106#3が追加され、システムが拡張された後の分散キューの状態である。
図15Aに示す分散キューは、データストアサーバ106#1、106#2及び106#3の各々が有する1stキュー317及び2ndキュー318における分散キューデータ321Aである。
また、図15Aが示すシステムが拡張される前における分散方法情報218は、データストアサーバ106#1の1stキュー317#1の分散キューデータ321Aが、順序保証キー404に「P」及び「Q」を含むメッセージを格納し、データストアサーバ106#2の1stキュー317#2の分散キューデータ321Aが、順序保証キー404に「R」を含むメッセージを格納することを示す。
また、図15Aが示すシステムが拡張された後における分散方法情報218は、データストアサーバ106#1の2ndキュー318#1の分散キューデータ321Aが、順序保証キー404に「P」を含むメッセージを格納し、データストアサーバ106#2の2ndキュー318#2の分散キューデータ321Aが、順序保証キー404に「Q」を含むメッセージを格納し、データストアサーバ106#3の2ndキュー318#3の分散キューデータ321Aが、順序保証キー404に「R」を含むメッセージを格納することを示す。
また、図15Aにおける前後サーバ対応テーブル215は、図6に示す前後サーバ対応テーブル215と同じである。
順序保証キー404に「P」、「Q」及び「R」が格納されるメッセージは、順序保証が必要なメッセージである。また、図15Aに示す「N」のメッセージは、順序保証が必要のないメッセージである。
なお、図15Aに示す「Pn」、「Qn」及び「Rn」の「n」は、メッセージの格納順を示し、分散キュー管理情報331が保持する情報である。
状態1102は、状態1101においてキュー管理サーバ105がデータストアサーバ106#3の増設に関するシステム拡張要求を受信した後、全てのキュー管理サーバ105がシステムの拡張に合意し、システムの拡張中の状態を示す。
状態1101から状態1102に遷移する際、データストアサーバ106#3が追加され、一方で、データストアサーバ106へのメッセージの格納要求及び取得要求はない。このため、状態1101及び状態1102において、データストアサーバ106#1の1stキュー317#1及び2ndキュー318#1、並びに、データストアサーバ106#2の1stキュー317#2及び2ndキュー318#2が有するメッセージは変化しない。
状態1102から状態1103に遷移する際、キュー管理サーバ105のメッセージ処理プログラム204は、一つのメッセージを取得する取得要求と、順序保証キー404に「Q」を含む一つのメッセージを格納する格納要求を、メッセージサーバ104から受信する。
ここで、メッセージ処理プログラム204は、シーケンス902を実行し、取得方法情報219を参照することによって、データストアサーバ106#1を更新後メッセージ取得先の候補として選択する。
図15Aにおける取得方法情報219は、例えば、メッセージ1件ごとにラウンドロビンでメッセージの取得先を選択する方法を示す。このため、メッセージ処理プログラム204は、データストアサーバ106#1、データストアサーバ106#2、データストアサーバ106#3、及び、データストアサーバ106#1の順で候補を選択する。
そして、メッセージ処理プログラム204は、図10のシーケンス903において前後サーバ対応テーブル215を参照することにより、更新後メッセージ取得先の候補における拡張前取得先キューである1stキュー317#1を特定する。
また、拡張前取得先キューである1stキュー317#1にメッセージが残っているため、メッセージ処理プログラム204は、シーケンス904において、1stキュー317#1から一つのメッセージ(P1)を取得することを決定する。
また、メッセージ処理プログラム204は、図9のシーケンス802において分散方法情報218を参照することによって、シーケンス803において、順序保証キー404に「Q」を含むメッセージを、データストアサーバ106#2の2ndキュー318#2の分散キューデータ321Aに格納する。これによって、状態1103に示すようにメッセージが格納される。
図15Bは、本実施例のシステムの拡張後のデータストアサーバ106の分散キューを示す説明図である。
図15Bの状態1104〜1106は、図15Aの状態1103の続きである。
状態1103から状態1104に遷移する際、キュー管理サーバ105のメッセージ処理プログラム204は、三つのメッセージを取得する取得要求と、順序保証キー404に「R」を含む二つのメッセージ及び順序保証が必要のない一つのメッセージを格納する格納要求とをメッセージサーバ104から受信する。
ここで、メッセージ処理プログラム204は、図10のシーケンス902において、取得方法情報219が示す方法に従い、データストアサーバ106#1、106#2及び106#3を更新後メッセージ取得先の候補として選択する。
さらに、メッセージ処理プログラム204は、シーケンス903において前後サーバ対応テーブル215を参照することによって、更新後メッセージ取得先の候補における拡張前取得先キューである1stキュー317#1及び317#2を特定する。そして、1stキュー317#1及び317#2には、メッセージが残っているため、メッセージ処理プログラム204は、シーケンス904において、1stキュー317#1から一つのメッセージ(Q1)を取得し、1stキュー317#2から二つのメッセージ(R1、N)を取得することを決定する。
ここで、1stキュー317#1及び1stキュー317#2からメッセージを取得する方法は、取得方法情報219が示す方法に従う。
また、メッセージ処理プログラム204は、図9のシーケンス802において分散方法情報218を参照することによって、シーケンス803において、順序保証キー404に「R」を含む二つのメッセージ(R3、R4)を、データストアサーバ106#3の2ndキュー318#3の分散キューデータ321Aに格納する。
また、メッセージ処理プログラム204は、分散方法情報218が示すラウンドロビンに従い、一つのメッセージ(N)を、データストアサーバ106#1の2ndキュー318#1の分散キューデータ321Aに格納する。これによって、状態1104に示すようにメッセージが格納される。
状態1104から状態1105に遷移する際、キュー管理サーバ105のメッセージ処理プログラム204は、四つのメッセージを取得する取得要求と、順序保証キー404に「Q」を含む二つのメッセージを格納する格納要求とをメッセージサーバ104から受信する。
ここで、メッセージ処理プログラム204は、図10のシーケンス902において、取得方法情報219が示す方法に従い、データストアサーバ106#1、106#2及び106#3を更新後メッセージ取得先の候補として選択する。
さらに、メッセージ処理プログラム204は、シーケンス903において、更新後メッセージ取得先の候補における拡張前取得先キューである1stキュー317#1及び317#2を特定する。1stキュー317#1及び317#2にはメッセージが残っているため、メッセージ処理プログラム204は、シーケンス904において、1stキュー317#1から二つのメッセージ(N、P2)を取得し、1stキュー317#2から二つのメッセージ(R2、R3)を取得することを決定する。
また、メッセージ処理プログラム204は、図9のシーケンス802において分散方法情報218を参照することによって、シーケンス803において、順序保証キー404に「Q」を含む二つのメッセージ(Q3、Q4)を、データストアサーバ106#2の2ndキュー318#2の分散キューデータ321Aに格納する。これによって、状態1105に示すようにメッセージが格納される。
状態1105から状態1106に遷移する際、キュー管理サーバ105のメッセージ処理プログラム204は、分散キューデータ321Aから二つのメッセージを取得する取得要求と、順序保証キー404に「P」を含む一つのメッセージを格納し、順序保証が必要ではない三つのメッセージを格納する格納要求とを、メッセージサーバ104から受信する。
ここで、メッセージ処理プログラム204は、図10のシーケンス902において取得方法情報219が示す方法に従い、データストアサーバ106#1、及び106#3を更新後メッセージ取得先の候補として選択する。
さらに、メッセージ処理プログラム204は、シーケンス903において、更新後メッセージ取得先の候補における更新前取得先キューである1stキュー317#1及び317#2を特定する。1stキュー317#1及び317#2にはメッセージが残っておらず、かつ、データストアサーバ106#3の1stキュー317#3にはメッセージが残っていないため、メッセージ処理プログラム204は、シーケンス904において、2ndキュー318#1から一つのメッセージ(N)を取得し、2ndキュー318#3から一つのメッセージ(R4)を取得することを決定する。
また、メッセージ処理プログラム204は、図9のシーケンス802において分散方法情報218を参照することによって、シーケンス803において順序保証キー404に「P」を含む一つのメッセージ(P3)を、データストアサーバ106#1の2ndキュー318#1の分散キューデータ321Aに格納する。
また、メッセージ処理プログラム204は、分散方法情報218が示すラウンドロビンに従い、2ndキュー318#1、318#2、318#3の各々の分散キューデータ321Aに、メッセージ(N)を一つずつ格納する。これによって、状態1106に示すようにメッセージが格納される。
状態1105のように、全てのデータストアサーバ106の1stキュー317にメッセージが存在しない状態になった場合、分散キューデータ321Aの順序保証対象メッセージについて複数のデータストアサーバ106に分散していた状態が解消されたことを示す。全ての分散キューデータ321Aについて1stキュー317にメッセージが存在しない状態になった場合、システムの更新中の状態が終わる。
このとき、メッセージ処理プログラム204は、図11に示す処理を実行し、前後キュー情報(214、314)の1stキューメッセージ数テーブル503の要素が全て0であることを判定した後、前後サーバ対応テーブル(215、315)を削除する。
図16は、本実施例の前後キュー情報214の内容を表示する画面1201の例を示す説明図である。
メッセージ処理プログラム204は、シーケンス1008によって前後キュー情報214の値が更新されるごとに、値の更新前及び更新後の前後キュー情報214を蓄積してもよい。そして、蓄積された過去の前後キュー情報214を用いて、図16に示す画面1201を表示してもよい。
画面1201は、キュー管理サーバ105にと入出力回路インタフェース202を介して接続されるディスプレイに表示されてもよく、また、運用管理サーバ107が備えるディスプレイに表示されてもよい。画面1201は、領域1202〜領域1205を表示する。
キュー管理サーバ105のメッセージ処理プログラム204は、データストアサーバ構成情報211と、前後キュー情報214と、過去の前後キュー情報214と、の情報を用いて画面1201を表示するAPIを有する。運用管理サーバ107は、キュー管理サーバ105のメッセージ処理プログラム204の画面1201を生成するAPIを実行することによって、画面1201を自らのディスプレイに表示する。
図16に示す画面1201は、分散メッセージシステムのデータストアサーバ106が、データストアサーバ106#1及び106#2の2台構成から3台構成に拡張した場合の画面例である。
領域1202は、データストアサーバ106ごとに、分散キュー全体のメッセージ数の現在値、及び、メッセージ数の上限値をテキスト又は棒グラフによって表示する。領域1203は、システムの更新前後における分散キュー全体に滞留中のメッセージ数の時間変化をプロットした散布図を表示する。
領域1204は、データストアサーバ106ごとに、システムの更新前に全ての分散キューに格納されていたメッセージのうち、未処理であるメッセージ数の現在値を示す。また、領域1204は、システムの更新時点で、全ての分散キューに格納されていた未処理メッセージ数を表示する。また、領域1204は、システムの更新後に全ての分散キューに格納される未処理のメッセージ数の現在値を表示する。領域1204は、表示する値を、テキスト又は棒グラフによって表現する。
図16に図示されていないが、メッセージ処理プログラム204は、前述の情報に関して、メッセージ数の時間変化をプロットした散布図を領域1204に表示してもよい。
領域1205は、分散キューデータ321ごとに、格納するメッセージ数の上限値、及び、メッセージ数の上限値を、テキスト又は棒グラフによって表示する。
他にも、図示されていないが、メッセージ処理プログラム204は、システムの更新前後の分散キューの処理順序の関係を表示したり、それぞれのシステムの更新前に使用されていた分散キューへの最新のアクセス時間などを、画面1201内に表示してもよい。また、メッセージ処理プログラム204は、画面1201の内容からグラフを除いたテキストだけを、CSVなどのファイル形式で表示してもよい。
画面1201を表示することにより、メッセージ処理プログラム204は、システムの更新後のメッセージ処理状況を可視化することができる。分散メッセージシステムの管理者は、画面1201を閲覧することにより、システムの更新中のメッセージ処理状況を確認し、例えば、システムの更新前にメッセージを格納していた分散キューにおいて未処理のメッセージが多く残っている場合、強制排出コマンドを実行するなど、対応を開始してもよい。
本実施例によれば、キュー管理サーバ105は、同じ順序保証キー404を含むメッセージを、同じデータストアサーバ106の同じ分散キューデータ321に格納する。そして、分散キューデータ321からは、格納順(到着順)にメッセージが取得される。このため、本実施例のキュー管理サーバ105は、次の取得するべきメッセージの順序番号等を記憶することなく、順序保証が必要なメッセージの順序保証を確実に実行できる。
また、本実施例のキュー管理サーバ105は、システムの更新前後のデータストアサーバ106の対応関係を示す前後サーバ対応テーブル215を有し、システムの更新する過渡期間(本実施例においてシステムの更新中)において、データストアサーバ106の更新前の分散キューと更新後の分散キューとを、格納処理及び取得処理において使いわける。これによって、本実施例のキュー管理サーバ105は、データストアサーバ106のサービスを止めずに、物理的又は仮想的にデータストアサーバ106を増設又は減設(システムの更新)する。
また、キュー管理サーバ105は、システムの更新前後のデータストアサーバ106の対応関係を元に、システムの更新前の分散キューからメッセージを先に取得し、その後システムの更新後の分散キューからメッセージを取得することにより、システムの更新中においても順序保証を維持することができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除又は置換をすることが可能である。
また、上記の各構成、機能及び処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル又はファイル等の情報は、メモリ、ハードディスク、若しくはSSD(Solid State Drive)等の記録装置、又は、ICカード、若しくはSDカード等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。