(57)【要約】【課題】メッセージングシステムにおいて、蓄積手段の切り替え時におけるオーバーヘッドを小さくするとともにメッセージの取りこぼしを防ぐこと。【解決手段】送信手段から送出されたメッセージの蓄積先を示す情報を第１の蓄積先情報として保持する第１の蓄積先保持手段とメッセージを一時的に蓄積する第１の蓄積手段とを有するとともに第１の蓄積手段に蓄積されたメッセージを受信手段に送出する第１のノードと、送信手段から送出されたメッセージの蓄積先を示す情報を第２の蓄積先情報として保持する第２の蓄積先保持手段を有する第２のノードと、送信手段から送出されたメッセージを一時的に蓄積する第２の蓄積手段を第２のノードに生成するとともに第１の蓄積先情報および第２の蓄積先情報を更新することにより、メッセージの蓄積先を第１の蓄積手段から第２の蓄積手段へと切り替える蓄積先切替手段と、を備える。【選択図】図１
2013192025.tif 000002
【特許請求の範囲】
【請求項１】
送信手段から送出されたメッセージの蓄積先を示す情報を第１の蓄積先情報として保持する第１の蓄積先保持手段と、前記メッセージを一時的に蓄積する第１の蓄積手段とを有し、前記第１の蓄積手段に蓄積されたメッセージを受信手段に送出する第１のノードと、
前記送信手段から送出されたメッセージの蓄積先を示す情報を第２の蓄積先情報として保持する第２の蓄積先保持手段を有する第２のノードと、
前記送信手段から送出されたメッセージを一時的に蓄積する第２の蓄積手段を前記第２のノードに生成するとともに、前記第１の蓄積先情報および前記第２の蓄積先情報を更新することにより、前記メッセージの蓄積先を前記第１の蓄積手段から前記第２の蓄積手段へと切り替える蓄積先切替手段と、を備えるメッセージングシステム。
【請求項２】
前記第１の蓄積手段は、キュー構造を有し、
前記蓄積先切替手段は、前記切り替えの際に、前記第２の蓄積手段の識別子を含むマーカーを、前記第１の蓄積手段にエンキューする、請求項１に記載のメッセージングシステム。
【請求項３】
前記受信手段は、前記第１の蓄積手段から前記マーカーを受信した場合、前記メッセージの受信元を前記第１の蓄積手段から前記第２の蓄積手段に切り替える、請求項２に記載のメッセージングシステム。
【請求項４】
前記第１のノードは、前記第１の蓄積先情報を更新した後に前記第１の蓄積手段に混入したメッセージを、前記第２の蓄積手段に転送するスイープ手段を備える、請求項３に記載のメッセージングシステム。
【請求項５】
前記蓄積先切替手段は、前記第１の蓄積先情報および前記第２の蓄積先情報を同時に更新する、請求項２ないし４のいずれか１項に記載のメッセージングシステム。
【請求項６】
前記送信手段、前記受信手段、前記第１および第２のノード、前記第１および第２の蓄積先保持手段、ならびに、前記第１および第２の蓄積手段は、それぞれ、出版−購読型モデル（Publisher-Subscriber Model）における発行者（Publisher）、購読者（Subscriber）、ブローカー（Broker）、Exchange、および、キュー（Queue）である、請求項１ないし５のいずれか１項に記載のメッセージングシステム。
【請求項７】
第１のノードが、送信手段から送出されたメッセージの蓄積先を示す情報を第１の蓄積先情報として保持する工程と、
前記第１のノードが前記メッセージを一時的に蓄積する第１の蓄積手段に蓄積するとともに、前記第１の蓄積手段に蓄積されたメッセージを受信手段に送出する工程と、
第２のノードが前記送信手段から送出されたメッセージの蓄積先を示す情報を第２の蓄積先情報として保持する工程と、
蓄積先切替手段が、前記送信手段から送出されたメッセージを一時的に蓄積する第２の蓄積手段を前記第２のノードに生成するとともに、前記第１の蓄積先情報および前記第２の蓄積先情報を更新することにより、前記メッセージの蓄積先を前記第１の蓄積手段から前記第２の蓄積手段へと切り替える工程と、を含むメッセージング方法。
【請求項８】
前記第１の蓄積手段は、キュー構造を有し、
前記蓄積先切替手段が、前記切り替えの際に、前記第２の蓄積手段の識別子を含むマーカーを、前記第１の蓄積手段にエンキューする工程を含む、請求項７に記載のメッセージング方法。
【請求項９】
前記受信手段が、前記第１の蓄積手段から前記マーカーを受信した場合、前記メッセージの受信元を前記第１の蓄積手段から前記第２の蓄積手段に切り替える工程を含む、請求項８に記載のメッセージング方法。
【請求項１０】
送信手段から送出されたメッセージの蓄積先を示す情報を第１の蓄積先情報として保持するとともに、前記メッセージを一時的に蓄積する第１の蓄積手段に蓄積し、前記第１の蓄積手段に蓄積されたメッセージを受信手段に送出する第１のノードと、前記送信手段から送出されたメッセージの蓄積先を示す情報を第２の蓄積先情報として保持する第２のノードとを備えたメッセージングシステムにおいて、前記メッセージの蓄積先を前記第１の蓄積手段から前記第２の蓄積手段へと切り替える際に、前記送信手段から送出されたメッセージを一時的に蓄積する第２の蓄積手段を前記第２のノードに生成する処理と、
前記第１の蓄積先情報および前記第２の蓄積先情報を更新する処理と、をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メッセージングシステム、メッセージング方法およびプログラムに関し、特に、結合度が低く（疎結合）、スケーラブルなメッセージングシステム、メッセージング方法およびプログラムに関する。
【背景技術】
【０００２】
メッセージキューの切り替えを行う伝送システムが、一例として特許文献１に記載されている。図８は、特許文献１に記載された伝送システムの構成を示すブロック図である。図８に示した伝送システムは、伝送システムに入力されるメッセージ（図８では「データ」と表記）をキュー７１，７２に切り替えるスイッチ７３と、スイッチ７３を制御する制御手段７４とを備える。図８に記載した伝送システムでは、キューを切り替える際、制御手段７４が図示しない別の箇所で生成される伝送路切替情報により切り替えの要求を検出して、スイッチ７３を動作させる。この切り替えの際、各伝送路に対応するキューのデータをすべて送信し、キューが空になったことを制御手段７４が検出してから伝送路を切り替える。
【０００３】
しかし、図８に示した伝送システムによると、キューのデータをすべて送信してからでないと、キューを切り替えることができないため、キューの切り替えの際に時間を要するという問題がある。また、キューに接続される伝送路の状態が悪化したことが原因でキューを切り替える場合には、キューが空になるまでの間、悪化した伝送路にメッセージが流れることになるため、それらのメッセージの信頼性が低下するという問題がある。
【０００４】
特許文献１には、この問題を解決する伝送システムとして、図９に示す伝送システムが記載されている。図９に記載した伝送システムでは、キューを切り替える際にキューの内容を対応するバッファ８１，８２に吐き出し、切り替え先のキューに移動する。制御手段８３は、伝送路切替情報を受け取った後、まず、切り替え前のキューの内容を対応するバッファに移すように指示する。バッファリングが終わると、切り替え先のバッファへ切り替え元のバッファの内容をコピーするように指示する。コピーが終わると、切り替え先のバッファから切り替え先のキューにバッファの内容を入れるように指示し、その後スイッチ７３を切り替え先の方に切り替える。
【０００５】
また、非特許文献１には、メッセージングシステムにおいてメッセージキューの分散化を行う方法が記載されている（図１０、図１１）。非特許文献１に記載されたメッセージングシステムは、メッセージを送信する出版者（Publisher）Ｐｕｂと、メッセージを受信する購読者（Subscriber）Ｓｕｂと、購読者Ｓｕｂがメッセージ受信時に利用する１つ以上のキュー（Queue）と、出版者Ｐｕｂによってメッセージに付加されたルーティングキー（タグ、トピックとも呼ぶ。）に基づいてそのルーティングキーを購読している購読者Ｓｕｂのキューにメッセージを配送するExchangeとを備える。ブローカー（Ｂｒｏｋｅｒ）は、Ｅｘｃｈａｎｇｅとキューを含む。図１０および図１１に示したモデルは、「出版−購読型モデル」と呼ばれる（以下、「Ｐｕｂ−Ｓｕｂモデル」という。）。図１０に示すように、各ブローカーのExchangeの内容は同一である。したがって、ある出版者Ｐｕｂからのメッセージは、いずれのブローカーを経由しても正しい購読者Ｓｕｂに配送される（図１１の点線矢印参照）。
【０００６】
次に、図１０および図１１に示したメッセージングシステムにおいて、特定の購読者Ｓｕｂまたはキューに負荷が集中することでそのキューを保持するブローカーの負荷が高くなった場合に行われる、負荷分散について考える。図１２において、斜線でハッチングして示したＰｕｂ／Ｓｕｂ／Ｑｕｅｕｅは高負荷状態にあること、ドットパターンマークで示したＰｕｂ／Ｓｕｂ／Ｑｕｅｕｅは中程度の負荷であること、白地で示したＰｕｂ／Ｓｕｂ／Ｑｕｅｕｅは低負荷状態にあることを示す。ここでは、一方のブローカーに含まれるキューを他方のブローカーにマイグレーション（移行）することで負荷分散を図り、図１２（ａ）の状態から図１２（ｂ）の状態に移行するものとする。なお、負荷の偏りの検出とマイグレーション対象のキューとそのマイグレーション先の決定に関しては、適当な方法で行うものとする。キューのマイグレーション時には、メッセージの取りこぼしの発生を防ぐために、キューデータのマイグレーション、購読者の付け替え、Exchangeの書き換えの一連の操作（図１２（ｂ）太実線矢印参照）をアトミックに行う必要がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１０−１０７８６８号公報（図７、図８）
【非特許文献】
【０００８】
【非特許文献１】Alvaro Videla and Jason J.W. Williams, "RabbitMQ in Action (Version 7)," Fig. 5.2.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
以下の分析は、本発明者によってなされたものである。
【００１０】
特許文献１に記載された方式によると、キューの切り替え時にメッセージを取りこぼすおそれがある。特許文献１に記載された伝送システム（図８および図９）によると、図８および図９のいずれの構成の場合にも、キューの切り替えに際して、キューへのメッセージの配送を切り替えるスイッチ７３をまずニュートラル（中立）にし、キューが空になるまで、または、バッファを経由してキューの内容を他のキューに移動し終わるまで、スイッチ７３はニュートラルのまま切り替えられない。したがって、メッセージが多量に発生するシステムにおいては、メッセージの取りこぼしが生じるおそれがある。また、メッセージの取りこぼしを防ぐには、メッセージ送信元等でメッセージの流量を調整しなければならない。
【００１１】
一方、非特許文献１に記載されたシステム（図１０、図１１）によると、キューのマイグレーション（図１２）の際のオーバーヘッドが大きいという問題がある。その理由は、キューのマイグレーション時にメッセージの一貫性を保つために、キューデータのマイグレーション、購読者の付け替え、Exchangeの書き換えの各操作をアトミックに行わねばならないからである。このオーバーヘッドは、ブローカーの台数が増えるに従って顕著になる。
【００１２】
特に、メッセージが多量で負荷変動の大きいメッセージングシステムにおいて、負荷分散を実現するためには、次々にやってくるメッセージをブロックすることなく、同期的な操作を削減しオーバーヘッドを最小限とする、効率的なキューの切り替え方式を実現することが望まれる。
【００１３】
そこで、メッセージングシステムにおいて蓄積手段の切り替え時におけるオーバーヘッドを小さくし、メッセージの取りこぼしを防ぐことが課題となる。本発明の目的は、かかる課題を解決するメッセージングシステム、メッセージング方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００１４】
本発明の第１の視点に係るメッセージングシステムは、
送信手段から送出されたメッセージの蓄積先を示す情報を第１の蓄積先情報として保持する第１の蓄積先保持手段と、前記メッセージを一時的に蓄積する第１の蓄積手段とを有し、前記第１の蓄積手段に蓄積されたメッセージを受信手段に送出する第１のノードと、
前記送信手段から送出されたメッセージの蓄積先を示す情報を第２の蓄積先情報として保持する第２の蓄積先保持手段を有する第２のノードと、
前記送信手段から送出されたメッセージを一時的に蓄積する第２の蓄積手段を前記第２のノードに生成するとともに、前記第１の蓄積先情報および前記第２の蓄積先情報を更新することにより、前記メッセージの蓄積先を前記第１の蓄積手段から前記第２の蓄積手段へと切り替える蓄積先切替手段と、を備える。
【００１５】
本発明の第２の視点に係るメッセージング方法は、
第１のノードが、送信手段から送出されたメッセージの蓄積先を示す情報を第１の蓄積先情報として保持する工程と、
前記第１のノードが前記メッセージを一時的に蓄積する第１の蓄積手段に蓄積するとともに、前記第１の蓄積手段に蓄積されたメッセージを受信手段に送出する工程と、
第２のノードが前記送信手段から送出されたメッセージの蓄積先を示す情報を第２の蓄積先情報として保持する工程と、
蓄積先切替手段が、前記送信手段から送出されたメッセージを一時的に蓄積する第２の蓄積手段を前記第２のノードに生成するとともに、前記第１の蓄積先情報および前記第２の蓄積先情報を更新することにより、前記メッセージの蓄積先を前記第１の蓄積手段から前記第２の蓄積手段へと切り替える工程と、を含む。
【００１６】
本発明の第３の視点に係るプログラムは、
送信手段から送出されたメッセージの蓄積先を示す情報を第１の蓄積先情報として保持するとともに、前記メッセージを一時的に蓄積する第１の蓄積手段に蓄積し、前記第１の蓄積手段に蓄積されたメッセージを受信手段に送出する第１のノードと、前記送信手段から送出されたメッセージの蓄積先を示す情報を第２の蓄積先情報として保持する第２のノードとを備えたメッセージングシステムにおいて、前記メッセージの蓄積先を前記第１の蓄積手段から前記第２の蓄積手段へと切り替える際に、前記送信手段から送出されたメッセージを一時的に蓄積する第２の蓄積手段を前記第２のノードに生成する処理と、
前記第１の蓄積先情報および前記第２の蓄積先情報を更新する処理と、をコンピュータに実行させる。
【００１７】
なお、プログラムは、非トランジエントなコンピュータ読み取り可能な記録媒体（non-transient computer-readable storage medium）に記録されたプログラム製品として提供することができる。
【発明の効果】
【００１８】
本発明に係るメッセージングシステム、メッセージング方法およびプログラムによると、キュー切り替え時におけるオーバーヘッドを小さくし、メッセージの取りこぼしを防ぐことができる。
【図面の簡単な説明】
【００１９】
【図１】第１の実施形態に係るメッセージングシステムの構成を一例として示すブロック図である。
【図２】第１の実施形態に係るメッセージングシステムと出版−購読モデルに基づくメッセージングシステムとの対応関係を示す図である。
【図３】第１の実施形態に係るメッセージングシステムにおけるメッセージの構成を一例として示す図である。
【図４】第１の実施形態に係るメッセージングシステムにおける送信手段の動作を一例として示すフロー図である。
【図５】第１の実施形態に係るメッセージングシステムにおける蓄積先切替手段の動作を一例として示すフロー図である。
【図６】第１の実施形態に係るメッセージングシステムにおける受信手段およびスイープ手段の動作を一例として示すフロー図である。
【図７】第２の実施形態に係るメッセージングシステムにおける蓄積先切替手段の動作を一例として示すフロー図である。
【図８】特許文献１に記載された伝送システムの構成を示すブロック図である。
【図９】特許文献１に記載された伝送システムの構成を示すブロック図である。
【図１０】非特許文献１に記載されたメッセージキューの分散化の例を示す図である。
【図１１】関連技術におけるメッセージキューの分散化の例を示す図である。
【図１２】関連技術におけるメッセージキューの負荷分散の例を示す図である。
【発明を実施するための形態】
【００２０】
はじめに、一実施形態の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００２１】
図１は、一実施形態に係るメッセージングシステムの構成を示すブロック図である。図１を参照すると、メッセージングシステムは、メッセージを送信する送信手段（３０）とメッセージを受信手段（４０）の間で、メッセージを中継する複数のノード（１０，２０）と、メッセージの蓄積手段の切り替えを制御する蓄積先切替手段（５０）と、を備える。ノード（１０，２０）は、メッセージの蓄積先の蓄積手段を示す情報を管理および提供する蓄積先保持手段（１１，２１）、および、メッセージを一時的に蓄積する蓄積手段（１２，２２）を備える。ノード（１０）は、蓄積手段切り替え後に切り替え前の蓄積手段に迷い込んだメッセージを切り替え後の蓄積手段に転送するスイープ手段（１３）を備える。受信手段（４０）は、メッセージを受信する蓄積手段を切り替える受信元切替手段（４１）を備える。
【００２２】
蓄積先切替手段（５０）は、所定の方法に基づいて、負荷の偏りを検出するとともに切り替え対象の蓄積手段とその切替先を決定し、蓄積手段の切り替えを行う。蓄積先切替手段（５０）は、蓄積手段の切り替えに際して、切り替え先のノード（２０）に新規に蓄積手段（２２）を生成し、蓄積先保持手段（１１，２１）のメッセージ配送テーブルを更新し、現在の蓄積手段（１２）に切り替えを示すマーカーを挿入する。
【００２３】
マーカーは、切り替え先のノードを識別する識別子を含む。受信手段（４０）は、マーカーを処理するタイミングで接続先の蓄積手段を新しく作成した蓄積手段（２２）に切り替える。また、ノード（１０）で動作するスイープ手段（１３）は、マーカー以後に届いたメッセージを新しく作成した蓄積手段（２２）に転送する。
【００２４】
かかるメッセージングシステムによると、蓄積手段の切り替え時にメッセージを取りこぼす可能性を削減することができる。
【００２５】
その理由は、切り替えに時間を要する蓄積手段（１２，２２）のマイグレーションを行う代わりに、マーカーを介して送信手段（３０）と受信手段（４０）でタイミングを調整して使用する蓄積手段を切り替えるため、待ち時間が必要ないからである。また、マーカー以降に古い蓄積手段（１２）に届いたメッセージはスイープ手段（１３）によって新たな蓄積手段（２２）に転送されるため、蓄積先保持手段（１１，２１）の配送テーブルを全ノード（１０，２０）で同期して変更する必要がないからである。
【００２６】
また、前記一実施形態に係るメッセージングシステムによると、蓄積手段の切り替え時に各操作をアトミックに行う必要がなく、蓄積手段切り替えの効率がよく、蓄積手段切り替えのオーバーヘッドも小さい。
【００２７】
その理由は、スイープ手段（１３）を導入したことにより、受信手段（４０）は、まず、古い蓄積手段（１２）のメッセージを処理してから新しい蓄積手段（２２）に切り替えること、１つの送信手段（３０）からの複数のメッセージは単一の蓄積先保持手段を経ることで、メッセージの一貫性を実現しているからである。ここで、メッセージの一貫性とは、１つの送信手段（３０）から送信された特定のルーティングキーを持った複数のメッセージの順序が保存され、漏れや重複がなく受信手段（４０）に届くことをいう。
【００２８】
本発明において、さらに、下記の形態が可能である。
［形態１］
上記第１の視点に係るメッセージングシステムのとおりである。
［形態２］
前記第１の蓄積手段は、キュー構造を有し、
前記蓄積先切替手段は、前記切り替えの際に、前記第２の蓄積手段の識別子を含むマーカーを、前記第１の蓄積手段にエンキューしてもよい。
［形態３］
前記受信手段は、前記第１の蓄積手段から前記マーカーを受信した場合、前記メッセージの受信元を前記第１の蓄積手段から前記第２の蓄積手段に切り替えてもよい。
［形態４］
前記第１のノードは、前記第１の蓄積先情報を更新した後に前記第１の蓄積手段に混入したメッセージを、前記第２の蓄積手段に転送するスイープ手段を備えていてもよい。
［形態５］
前記蓄積先切替手段は、前記第１の蓄積先情報および前記第２の蓄積先情報を同時に更新してもよい。
［形態６］
前記送信手段、前記受信手段、前記第１および第２のノード、前記第１および第２の蓄積先保持手段、ならびに、前記第１および第２の蓄積手段は、それぞれ、出版−購読型モデル（Publisher-Subscriber Model）における発行者（Publisher）、購読者（Subscriber）、ブローカー（Broker）、Exchange、および、キュー（Queue）であってもよい。
［形態７］
上記第２の視点に係るメッセージング方法のとおりである。
［形態８］
前記メッセージング方法において、
前記第１の蓄積手段は、キュー構造を有し、
前記蓄積先切替手段が、前記切り替えの際に、前記第２の蓄積手段の識別子を含むマーカーを、前記第１の蓄積手段にエンキューする工程を含んでいてもよい。
［形態９］
前記メッセージング方法は、前記受信手段が、前記第１の蓄積手段から前記マーカーを受信した場合、前記メッセージの受信元を前記第１の蓄積手段から前記第２の蓄積手段に切り替える工程を含んでいてもよい。
［形態１０］
前記メッセージング方法は、前記第１のノードが、前記第１の蓄積先情報を更新した後に前記第１の蓄積手段に混入したメッセージを、前記第２の蓄積手段に転送する工程を含んでいてもよい。
［形態１１］
前記メッセージング方法において、前記蓄積先切替手段が、前記第１の蓄積先情報および前記第２の蓄積先情報を同時に更新してもよい。
［形態１２］
上記第３の視点に係るプログラムのとおりである。
［形態１３］
前記プログラムにおいて、
前記第１の蓄積手段は、キュー構造を有し、
前記切り替えの際に、前記第２の蓄積手段の識別子を含むマーカーを、前記第１の蓄積手段にエンキューする処理を、前記コンピュータに実行させるようにしてもよい。
［形態１４］
前記プログラムは、前記第１の蓄積先情報および前記第２の蓄積先情報を同時に更新する処理を、前記コンピュータに実行させるようにしてもよい。
【００２９】
（実施形態１）
第１の実施形態に係るメッセージングシステムについて、図面を参照して詳細に説明する。図１は、本実施形態のメッセージングシステムの構成を一例として示すブロック図である。
【００３０】
図１を参照すると、本実施形態に係るメッセージングシステムは、送信手段３０、ノード１０，２０、蓄積先切替手段５０、および、受信手段４０を備える。ノード１０は、蓄積先保持手段１１、蓄積手段１２およびスイープ手段１３を含む。一方、ノード２０は、蓄積先保持手段２１、蓄積手段２２およびスイープ手段（非図示）を含む。受信手段４０は、受信元切替手段４１を含む。
【００３１】
図１に示したメッセージングシステムの構成を、Ｐｕｂ−Ｓｕｂモデルの構成（図１１）に対応付けると、送信手段３０および受信手段４０は、それぞれ、発行者（Publisher）および購読者（Subscriber）に相当し、ノード１０，２０、蓄積先保持手段１１，２１、および、蓄積手段１２，２２は、それぞれ、ブローカー（Broker）、Exchange、および、キュー（Queue）に相当する（図２参照）。ただし、本実施形態のメッセージングシステムは、Ｐｕｂ−Ｓｕｂモデルに限定されるものではない。
【００３２】
蓄積手段１２，２２は、キュー構造を有し、先入れ先出し（ＦＩＦＯ：First In First Out）動作を行うものとする。ただし、蓄積手段１２，２２のデータ構造はキュー構造に限定されない。
【００３３】
図１においては、一例として、送信手段３０および受信手段４０をそれぞれ１台とし、ノード１０，２０を２台とした。しかし、メッセージングシステムは、送信手段または受信手段を複数含んでいてもよいし、ノードの台数を３台以上としてもよい。例えば、メッセージングシステムは、数１００台のオーダーの送信手段および受信手段を含み、１０数台のオーダーのノードを含んでいてもよい。
【００３４】
図３は、メッセージのフォーマットを一例として示す図である。図３を参照すると、メッセージは、メッセージ本体とタグ（ルーティングキーやトピック等とも呼ぶ）を含む。受信手段４０は、ノードに接続する際に蓄積手段を指定して接続する。また、蓄積手段を蓄積先保持手段１１，２１に登録する際には、ルーティングキーを指定する。したがって、蓄積先保持手段１１，２１は、例えば、テーブル（＝ルーティングテーブル）として表現されており（ルーティングキー、ノード識別子、蓄積手段識別子）のような３つ組みの集合で管理され、送信手段３０から送信されたメッセージは、蓄積先保持手段１１，２１を参照して適切な蓄積手段に配送され、最終的に受信手段４０に届く。
【００３５】
次に、図１のブロック図および図４ないし図６のフロー図を参照して、本実施形態のメッセージングシステムの動作について詳細に説明する。
【００３６】
図４は、送信手段３０の動作を一例として示すフロー図である。図４を参照すると、送信手段３０は、メッセージを送信する際、送信手段３０が接続しているノード１０の蓄積先保持手段１１に蓄積先の蓄積手段を問い合わせ（ステップＳ１）、メッセージを該当の蓄積先の蓄積手段１２（または２２）に送信する（ステップＳ２）。
【００３７】
図５は、蓄積先切替手段５０の動作を一例として示すフロー図である。図５を参照すると、蓄積先切替手段５０は、所定の方法に基づいて、ノード１０，２０間の負荷の偏りを検出するとともに（ステップＳ１１）、切り替え対象の蓄積手段とその切り替え先のノードを決定する（ステップＳ１２）。ここでは、蓄積手段１２を切り替え対象の蓄積手段とし、切り替え先のノードをノード２０とする。次に、蓄積先切替手段５０は、ノード２０に切り替え先の蓄積手段２２を作成し（ステップＳ１３）、蓄積先保持手段１１，２１のルーティングテーブルを更新し（ステップＳ１４）、切り替え対象の蓄積手段１２に届いていたメッセージを切り替え先の蓄積手段２２に配送されるように設定する。ここでは、蓄積先保持手段１１，２１の更新を、同時に行う必要はない。次に、蓄積先切替手段５０は、切り替え対象の蓄積手段１２に蓄積手段の切り替えが行われたことを示すマーカーをエンキュー（enqueue）する（ステップＳ１５）。ここで、マーカーは、少なくとも切り替え先の蓄積手段の識別子と、その蓄積手段が存在するノードの識別子を含む。
【００３８】
図６は、受信手段４０およびスイープ手段１３の動作を一例として示すフロー図である。図６を参照すると、受信手段４０は、通常、蓄積手段に届いたメッセージを処理している（ステップＳ２１）。受信手段４０は、ステップＳ１５でエンキューされたマーカーを検出すると（ステップＳ２２）、切り替え対象の蓄積手段１２にメッセージが残っているかどうかを確認する（ステップＳ２３）。蓄積手段１２にメッセージが残っている場合（ステップＳ２３のＹｅｓ）、受信手段４０は、蓄積手段１２に残っているメッセージを処理する（ステップＳ２４）。一方、蓄積手段１２にメッセージがなくなった時点で（ステップＳ２３のＮｏ）、受信手段４０の受信元切替手段４１は、接続先の蓄積手段を切り替え対象の蓄積手段１２から切り替え先の蓄積手段２２に変更し（ステップＳ２５）、スイープ手段１３を起動する（ステップＳ２６）。
【００３９】
ここで、マーカーよりも後にメッセージが届くケースとして、送信手段３０が配送先の蓄積手段を問い合わせて（ステップＳ１）、メッセージを送信する（ステップＳ２）間に、蓄積先切替手段５０が蓄積先保持手段を更新（ステップＳ１４）した場合が考えられる。
【００４０】
スイープ手段１３は、一定時間が経過するまで（ステップＳ２９のＮｏ）、待機（ステップＳ３０）と、切り替え対象の蓄積手段１２のメッセージを切り替え先の蓄積手段２２に配送する処理（ステップＳ２７，Ｓ２８）とを行い、一定時間経過後（ステップＳ２９のＹｅｓ）、切り替え対象蓄積手段１２を削除して（ステップＳ３１）、処理を終了する。
【００４１】
ここで、ステップＳ２７，Ｓ２８によって処理されるメッセージは、送信手段３０が配送先の蓄積手段を問い合わせて（ステップＳ１）、メッセージを送信する（ステップＳ２）間に、蓄積先切替手段５０が蓄積先保持手段を更新（ステップＳ１４）した場合のメッセージのうちの、ステップＳ２３のメッセージ到着確認に間に合わなかったメッセージである。このようなメッセージが生じる原因として、ネットワークの輻輳、送信手段３０の過負荷等が考えられる。
【００４２】
なお、一定時間経過し（ステップＳ２９のＹｅｓ）、切り替え対象の蓄積手段１２が削除された（ステップＳ３１）後に届いたメッセージは、蓄積手段が存在しないため受信エラーとなる。したがって、送信手段３０は、このようなメッセージを再送する等の適切な対処が必要とされる。このようなメッセージが生じる場合として、送信手段３０に回復不能な問題または極端な高負荷状態が発生している場合、または、高速化等のために蓄積先保持手段１１に配送先蓄積手段の問い合わせをした結果が送信手段３０にキャッシュされているときにキャッシュの有効期限が長すぎる場合等が考えられる。いずれにしても、ステップＳ２９における「一定時間」は、システムの他のパラメータに応じて調整する必要がある。
【００４３】
次に、本実施形態のメッセージングシステムによる効果について説明する。本実施形態では、ノード間の負荷のアンバランス（不均衡）を蓄積手段のマイグレーションではなく、切り替えによって行うとともに、蓄積手段の切り替え時にロックや分散コミット等を使用せず、マーカーとスイープ手段によって一貫性を保つ。これにより、蓄積手段切り替え時のメッセージの取りこぼしとオーバーヘッドを最小限にしつつ、ノード間の負荷分散を実現することができる。また、本実施形態のメッセージングシステムによると、スケーラブルな分散メッセージングシステムにおいて、アプリケーション特性あるいは複数サービスのコンソリデーション等の要因によりメッセージが多量で負荷変動が多い状況で、複数のメッセージ送信者からのメッセージを取りこぼすことなく、効率的に負荷分散を行うことができる。
【００４４】
（実施形態２）
第２の実施形態に係るメッセージングシステムについて、図面を参照して説明する。
【００４５】
本実施形態に係るメッセージングシステムは、第１の実施形態に係るメッセージングシステムの構成（図１）と同一の構成を有する。ただし、本実施形態のメッセージングシステムでは、蓄積先切替手段５０の動作が、第１の実施形態のメッセージングシステムにおけるものと相違する。
【００４６】
図７は、本実施形態に係るメッセージングシステムの蓄積先切替手段５０の動作を一例として示すフロー図である。図７を参照すると、蓄積先切替手段５０は、蓄積先保持手段（Ｐｕｂ−ＳｕｂモデルにおけるＥｘｃｈａｎｇｅ）の更新の際、全ノードの蓄積先保持手段の更新を一度に行う（ステップＳ３４）。全ノードの蓄積先保持手段の更新を一度に行う方法として、例えば、分散コミット技術等の公知技術を利用することができる。
【００４７】
第１の実施形態では、各ノードの蓄積先保持手段が同時に更新されるわけではないため、異なる送信手段から特定の受信手段（に対応する蓄積手段）へのメッセージの到着の順序が入れ替わる可能性がある。例えば、第１の送信手段Ｐｕｂ１が接続されているノードの蓄積先保持手段が更新済みで、第２の送信手段Ｐｕｂ２が接続しているノードの蓄積先保持手段が更新前の状態で、第２の送信手段Ｐｕｂ２が第１の送信手段Ｐｕｂ１よりも先に出した第１のメッセージが切り替え対象の蓄積手段にエンキューされ、第１の送信手段Ｐｕｂ１から後に出された第２のメッセージが切り替え先の蓄積手段にエンキューされ、その後に切り替え対象の蓄積手段にエンキューされた第１のメッセージがスイープ手段によって切り替え先の蓄積手段に転送された場合、第１のメッセージと第２のメッセージとの間で到着順序が入れ替わるおそれがある。
【００４８】
一方、本実施形態のメッセージングシステムによると、全ノードの蓄積先保持手段が同時に更新されるため、異なる送信手段から送信されたメッセージの到着順が入れ替わるおそれがない。
【００４９】
上記第１および第２の実施形態に係るメッセージングシステムは、一例として、複数のソフトウェアコンポーネントをネットワーク結合して、アプリケーションまたはサービスを実現する際のメッセージングシステムとして適用することができ、アプリケーション特性、複数サービスのコンソリデーション（consolidation、整理統合）等の要因によりメッセージが多量で負荷変動の大きいメッセージングにおいて負荷分散のためのメッセージキューの切り替えを行うメッセージングシステムとして適用することができる。
【００５０】
なお、上記の特許文献等の先行技術文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【００５１】
１０，２０            ノード
１１，２１            蓄積先保持手段
１２，２２            蓄積手段
１３                  スイープ手段
３０                  送信手段
４０                  受信手段
４１                  受信元切替手段
５０                  蓄積先切替手段
７１，７２            キュー
７３                  スイッチ
７４                  制御手段
８１，８２            バッファ
８３                  制御手段
Ｐｕｂ                出版者（Publisher）
Ｓｕｂ                購読者（Subscriber）
【図１】
2013192025.tif 000003
【図２】
2013192025.tif 000004
【図３】
2013192025.tif 000005
【図４】
2013192025.tif 000006
【図５】
2013192025.tif 000007
【図６】
2013192025.tif 000008
【図７】
2013192025.tif 000009
【図８】
2013192025.tif 000010
【図９】
2013192025.tif 000011
【図１１】
2013192025.tif 000012
【図１２】
2013192025.tif 000013
【図１０】
2013192025.tif 000014