(57)【特許請求の範囲】
【請求項１】
第１及び第２の計算機と、少なくとも前記第２の計算機からアクセス可能な記憶装置と
を備え、配信元から送られるメッセージを受信し、ネットワークを介して前記メッセージ
を複数の配信先計算機に配信するメッセージ配信システムにおけるメッセージの配信方法
であって、
前記第１の計算機により配信元から送られてくるメッセージを受信するステップと、
前記メッセージを前記第二の計算機に転送するステップと、
前記複数の配信先計算機の少なくとも一部の配信先計算機に前記メッセージを配信する
とともに、前記少なくとも一部の配信先計算機へのメッセージの配信状況を取得するステップと、
前記配信状況に基づいて、前記少なくとも一部の配信先計算機の中に配信が遅延してい
る低速配信先計算機が存在するか否かを判別するステップと、
前記低速配信先計算機が存在する場合、前記第１の計算機から前記第２の計算機に前記
低速配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求するステップと、
前記第２の計算機により前記低速配信先計算機へのメッセージの配信を引き継ぎ、前記転送するステップによって前記第１の計算機から転送された前記メッセージを前記低速配信先計算機に配信するステップと、を有するメッセージ配信方法。
【請求項２】
請求項１記載のメッセージ配信方法は、さらに、
前記第２の計算機において、前記第１の計算機から転送された前記メッセージを前記第
２の計算機が有するバッファメモリに保持するステップと、
前記バッファメモリの使用状況を監視し、前記バッファメモリの使用率が所定の使用率
を超えた場合に少なくとも一部のメッセージを前記記憶装置に格納するステップとを含む
ことを特徴とするメッセージ配信方法。
【請求項３】
請求項１記載のメッセージ配信方法は、さらに、
前記第２の計算機において、前記第２の計算機がメッセージの配信を行っている配信先
計算機の各々について、メッセージの配信状況を取得し、
前記第２の計算機がメッセージの配信を行っている配信先計算機の各々について取得し
た前記配信状況に基づいて、メッセージの配信が正常に行われている正常配信先計算機の
有無を判別し、
正常配信先計算機が存在する場合、前記第２の計算機から前記第１の計算機に前記正常
配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求し、
前記第１の計算機により前記正常配信先計算機へのメッセージの配信を引き継ぎ、前記
正常配信先計算機にメッセージを配信することを特徴とするメッセージ配信方法。
【請求項４】
請求項３記載のメッセージ配信方法は、さらに、
前記メッセージを前記第１の計算機が有するバッファメモリに保持するステップと、
前記バッファメモリの使用状況を監視するステップとを含み、
前記バッファメモリの使用率が所定の使用率を超えたときに前記低速配信先計算機が存
在するか否かを判別するステップ以降の処理が実施されることを特徴とするメッセージの
配信方法。
【請求項５】
請求項４記載のメッセージ配信方法において、前記低速配信先計算機が存在するか否か
を判別するステップは、前記配信状況として、各配信先計算機へ配信すべきメッセージの
滞留数、滞留量、各配信先計算機との間のネットワークの状態、及び、各配信先計算機か
らの応答時間のいずれかを用いることを特徴とするメッセージ配信方法。
【請求項６】
請求項３記載のメッセージ配信方法において、前記正常配信先計算機の有無を判別する
ステップは、前記第２の計算機がメッセージを配信している配信先計算機の各々について
取得した前記配信状況に基づいて、配信すべきメッセージの滞留量が所定数以下となって
いる配信先計算機を前記正常配信先計算機とすることを特徴とするメッセージ配信方法。
【請求項７】
請求項６記載のメッセージ配信方法において、さらに、
前記第２の計算機において、前記第２の計算機のリソースの利用率を取得するステップ
と、
前記リソースの利用率が所定の利用率を超えたときに前記正常配信先計算機の有無を判
別するステップ以降の処理が実施されることを特徴とするメッセージ配信方法。
【請求項８】
請求項６記載のメッセージ配信方法において、前記正常配信先計算機の有無を判別する
ステップ以降の処理は、予め設定された時間間隔で実施されることを特徴とするメッセー
ジ配信方法。
【請求項９】
請求項３記載のメッセージ配信方法において、前記メッセージ配信システムはさらに第
３の計算機を有し、前記メッセージ配信方法は、さらに、
前記第２の計算機がメッセージを配信している配信先計算機の各々について取得した前
記配信状況に基づいて、前記第２の計算機がメッセージを配信している配信先計算機の中
に配信が遅延している第２の低速配信先計算機が存在するか否かを判別し、
前記第２の低速配信先計算機が存在する場合、前記第２の計算機から前記第３の計算機
に前記第２の低速配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求
し、
前記第３の計算機により前記第２の低速配信先計算機へのメッセージの配信を引き継ぎ
、前記第２の低速配信先計算機にメッセージを配信するメッセージの配信方法。
【請求項１０】
複数の配信先計算機にネットワークを介してメッセージを配信し、第１の計算機と第２の計算機とを有するメッセージ配信システムであって、
前記第１の計算機は、
受信したメッセージを保持する第１のバッファと、前記複数の配信先計算機の各々への
メッセージの配信を担当する計算機を指定する第１の担当情報と、前記第１の担当情報で
自計算機が担当として割り当てられている第１の担当配信先計算機へのメッセージの配信
状況を示す第１の配信状況情報とを保持するメモリ、
配信元から送られてくるメッセージを受信して前記第１のバッファに保持し、前記メッセージのコピーを前記第２の計算機に送信する第１のメッセージ管理手段、
前記第１の担当配信先計算機に前記メッセージを配信して前記第１の配信状況情報を更
新する第１の配信手段、及び、
前記第１の配信状況情報に基づいて、前記第１の担当配信先計算機の中に配信が遅延し
ている低速配信先計算機が存在するか否かを判別し、前記低速配信先計算機が存在する場
合、前記低速配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求する
第１の切替手段を有し、
前記第二の計算機は、
受信したメッセージを保持する第２のバッファ、前記複数の配信先計算機の各々へのメ
ッセージの配信を担当する計算機を指定する第２の担当情報、及び、前記第２の担当情報
で自計算機が担当として割り当てられている第２の担当配信先計算機へのメッセージの配
信状況を示す第２の配信状況情報を保持するメモリ、
配信元から送られてくるメッセージ及び前記第１のメッセージ管理手段から送られてくるメッセージのコピーを受信して前記第２のバッファに保持する第２のメッセージ管理手段、及び
前記第１の計算機からの前記要求に応じて前記低速配信先計算機を前記第２の担当配信
先計算機に含まれるよう前記第２の担当情報を更新し、前記第２の担当配信先計算機にメ
ッセージを配信して前記第２の配信状況情報を更新する第２の配信手段を有する、
ことを特徴とするメッセージ配信システム。
【請求項１１】
前記第２のメッセージ管理部は、前記第２のバッファの使用状況を監視し、前記バッフ
ァの使用率が所定の使用率を超えた場合、少なくとも一部のメッセージを前記ストレージ
装置に格納することを特徴とする請求項１０記載のメッセージ配信システム。
【請求項１２】
前記第２の計算機は、さらに、前記第２の配信状況情報に基づいて、メッセージの配信
が正常に行われている正常配信先計算機の有無を判別し、前記正常配信先計算機が存在す
る場合、前記正常配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求
する第２の切替手段を有し、
前記第１の配信手段は、前記第２の計算機からの前記要求に応じて前記正常配信先計算
機を前記第１の担当配信先計算機に含まれるよう前記第１の担当情報を更新することを特
徴とする請求項１０記載のメッセージ配信システム。
【請求項１３】
前記第１の切替手段は、前記第１のバッファの使用状況を監視し、前記第１のバッファ
の使用率が所定の使用率を超えたときに前記低速配信先計算機が存在するか否かを判別し
て前記切り替えを要求することを特徴とする請求項１２記載のメッセージ配信システム。
【請求項１４】
前記第１の切替手段は、前記低速配信先計算機が存在するか否かの判別を、各配信先計
算機へ配信すべきメッセージの滞留数、滞留量、各配信先計算機との間のネットワークの
状態、及び、各配信先計算機からの応答時間のいずれかを用いて行うことを特徴とする請
求項１３記載のメッセージ配信システム。
【請求項１５】
前記第２の切替手段は、前記第２の計算機のリソースの利用率を取得し、前記リソース
の利用率が所定の利用率を超えたときに前記正常配信先計算機の有無を判別し、前記計算
機の切り替えを要求することを特徴とする請求項１２記載のメッセージ配信システム。
【請求項１６】
前記第２の切替手段は、前記第２の配信状況情報に基づいて、配信すべきメッセージの
滞留量が所定数以下となっている前記第２の担当配信先計算機を前記正常配信先計算機と
して判別することを特徴とする請求項１５記載のメッセージ配信システム。
【請求項１７】
請求項１２記載のメッセージ配信システムは、さらに、
受信したメッセージを保持する第３のバッファ、前記複数の配信先計算機の各々へのメ
ッセージの配信を担当する計算機を指定する第３の担当情報、及び、前記第３の担当情報
で自計算機が担当として割り当てられている第３の担当配信先計算機へのメッセージの配
信状況を示す第２の配信状況情報を保持するメモリ、
配信元から送られてくるメッセージを受信して前記第３のバッファに保持する第３のメ
ッセージ管理手段、及び
前記第３の担当配信先計算機にメッセージを配信して前記第３の配信状況情報を更新す
る第３の配信手段を有する第３の計算機を備え、
前記第２の切替手段は、前記第２の配信状況情報に基づいて、前記第２の担当配信先計
算機の中に配信が遅延している第２の低速配信先計算機が存在するか否かを判別し、前記
第２の低速配信先計算機が存在する場合、前記第２の低速配信先計算機へのメッセージの
配信を担当する計算機の切り替えを要求し、
前記第３の配信手段は、前記第２の計算機からの前記要求に応じて前記第２の低速配信
先計算機を前記第３の担当配信先計算機に含まれるよう前記第３の担当情報を更新するこ
とを特徴とするメッセージ配信システム。
【請求項１８】
複数の配信先計算機にネットワークを介してメッセージを配信するメッセージ配信計算
機であって、
メッセージを保持するバッファ、前記複数の配信先計算機の中でメッセージの配信が遅
延している低速配信先計算機へのメッセージの配信を担当する計算機であるか否かを示す
計算機情報、前記複数の配信先計算機の各々へメッセージの配信を担当する計算機を指定
する担当情報、及び、前記担当情報で自計算機が担当として割り当てられている前記配信
先計算機へのメッセージの配信状況情報を保持するメモリと、
送られてくるメッセージを受信して前記バッファに格納するメッセージ管理手段と、
前記担当情報に基づいて前記メッセージ管理手段が受信したメッセージを自計算機が担
当する配信先計算機に配信して前記配信状況情報を更新する配信処理手段と、
自計算機が前記低速配信先計算機へのメッセージ配信を担当しない場合、前記配信状況
情報に基づいて、前記担当する配信先計算機の中に存在する前記低速配信先計算機を検知
して、検知された低速配信先計算機へのメッセージの配信を担当する計算機の切り替えを
要求し、自計算機が前記低速配信先計算機へのメッセージ配信を担当する場合、前記配信
状況情報に基づいて、前記担当する配信先計算機の中に存在する配信が遅延していない正
常配信先計算機を検知して、当該正常配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求する切替手段とを有し、
前記切替手段は、前記バッファの使用状況を監視し、前記バッファの使用率が所定の使用率を超えたときに前記低速配信先計算機が存在するか否かを判別して前記切り替えを要求する、ことを特徴とするメッセージ配信計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介したメッセージの配信方法、およびそのためのシステムに係り、特に、配信元の計算機からネットワークを介して複数の配信先計算機にメッセージを配信するための方法及び計算機システムに関する。
【背景技術】
【０００２】
近年、ユーザにより求められる情報量やユーザ数が増大するにつれ、大量のデータを複数の宛先に配信する情報システムへの需要が高まっている。特に、金融分野など、社会インフラを担う情報システムにおいては、高速かつ高信頼（データ損失無し）なデータ配信を実現することが求められる。
【０００３】
このような要求を満たす情報システムを実現するためには、配信先サーバ（コンシューマサーバ）へのデータ（メッセージ）の配信に、複数台の配信サーバ（ブローカサーバ）を用いたシステム構成が一般的に用いられる。こうした情報システムでは、複数台のコンシューマサーバへのメッセージの配信を複数台のブローカサーバで行うことで、メッセージの配信に伴う負荷を分散して高速性を実現している。また、ブローカサーバにおいて配信するメッセージの複製を作成して多重化したり、ストレージ装置等の不揮発性の記憶装置に保存して永続化したりすることによって高信頼性が実現されている。
【０００４】
高速性については安定的な性能が求められるため、ブローカサーバは、処理負荷やコンシューマサーバ数に応じて台数を柔軟に増減させることが求められる。加えて、台数の変更を柔軟に行うためにも、ブローカサーバ１台あたりの構築コストを抑えることも求められる。このように、安定的な性能とコスト省力化を実現するためには、ブローカサーバの効率的なリソース活用が必要である。
【０００５】
高速化及び高信頼化を効率的なリソース活用によって実現する従来技術として、特許文献１と特許文献２に開示された技術がある。特許文献１には、メッセージの永続化を専用に行うストレージ装置を用いることで、ブローカサーバでのメッセージ配信処理とメッセージの永続化処理を別サーバで実施し、ストレージ装置を用いた永続化処理によるメッセージ配信への性能影響を抑制する技術が開示される。また、複数台のブローカサーバにおけるストレージ装置を集約することでコスト抑制を実現する特長も併せ持つ。特許文献２では、ブローカサーバを多階層に接続し、メッセージの永続化を上位階層のブローカサーバに集約することで、下位階層のブローカサーバでのメッセージ永続化処理を削減し、処理コストの低減とストレージ容量削減を図ることが開示される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２００８−５２７５３８号公報
【特許文献２】米国公開 ２００６／０２４８２１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
複数台のコンシューマサーバへの配信を行うシステムにおいては、コンシューマサーバ側での処理の状況によりメッセージを受け取れず、ブローカサーバからのメッセージの配信が遅延するコンシューマサーバが発生する（このように配信遅延が生じているコンシューマサーバを以下では便宜上低速コンシューマサーバと呼ぶ）。低速コンシューマサーバが発生すると、ブローカサーバのリソース利用量が増えるため、他の正常なコンシューマサーバへの配信に対する遅延が発生する。また、正常なコンシューマサーバへの配信処理について安定的な高速性能を実現するためには、低速コンシューマサーバの発生によるリソース利用量の増大を想定した十分なリソースを備えておく必要があり、ブローカサーバの構成コストが増えてしまう。
【０００８】
例えば、低速コンシューマサーバが発生すると、そのコンシューマサーバにメッセージを配信するブローカサーバ上でメッセージを保持するためにリソースを余剰に消費することになる。通常、ブローカサーバは、メッセージをメモリ上のバッファに格納する。高信頼性のために、メッセージは、未配信のコンシューマサーバが１台でもある限りバッファに保持される。このため、１台のコンシューマサーバで配信遅延が生じると、バッファはそのコンシューマサーバへの未配信メッセージの保持のために消費される。バッファ容量には限界があるため、未配信メッセージ数が増えるとバッファ溢れが発生してしまう。
【０００９】
一般に、バッファを溢れたメッセージについては、それをストレージ装置（あるいはそれに準ずる記憶装置）に一時的に保持することで対処する方法が用いられる。このようにバッファを溢れたメッセージをストレージ装置に保持するにあたっては、メッセージ格納のための書き込み処理と、メッセージ利用のための読み出し処理を行う必要が生じる。このためバッファ溢れ時には、これらの処理のためにリソースが消費され、正常配信時に比べ、メッセージの配信処理に利用可能なリソース量が減少し、配信性能に影響が生じる恐れがある。
【００１０】
複数台のブローカサーバそれぞれにおいて低速コンシューマサーバが発生した場合には、各ブローカサーバにおいて低速コンシューマサーバに対処するための処理負荷がかかることになる。さらに、各ブローカサーバがバッファ上に未配信メッセージを保持することになるため、複数のブローカサーバでメッセージを重複して保持する可能性が生じる。メッセージを重複して保持することによるリソースの浪費は、情報システム全体としての処理性能の低下要因となり、複数台のブローカサーバによる負荷の分散が有効に機能しなくなる。
【００１１】
さらに、複数台のブローカサーバでバッファ溢れに対処できるようにするため、各ブローカサーバにメッセージ永続化のためのストレージ装置を設け、それぞれのブローカサーバがメッセージを保持すると、メッセージの再送処理を効率的に行うことができる。しかし、大量で多様なメッセージを処理するためには、大容量を備えたストレージ装置が必要となる。これらのストレージ装置はバッファが溢れない限り利用されないため、すべてのブローカサーバにこのような大容量のストレージ装置を設けることはコスト抑制の観点から望ましくない。複数台のブローカサーバで１台のストレージ装置を共有し、メッセージの重複保存を避けることでコストを抑制することが可能である。しかし、ストレージ装置を共有する場合には、ストレージ装置への書き込みの排他処理等が発生してメッセージ永続化処理負荷がさらに増大してしまう。
【００１２】
上述した従来技術を用いることで、低速コンシューマサーバの発生時におけるメッセージの永続化箇所を集約することができるため、ストレージ装置のコスト抑制が実現される。しかしながら、これら従来技術では、低速コンシューマサーバの発生による配信処理の負荷増大の影響が、低速コンシューマサーバにメッセージを配信するすべてのブローカサーバに及ぶため、低速コンシューマサーバの発生に伴い他の正常コンシューマサーバへの配信処理が遅延するという問題には対処することができない。
【００１３】
上述したような従来技術における問題点に鑑み、本発明の目的は、低速コンシューマサーバが発生した場合であっても、正常なコンシューマサーバへの安定的な配信性能を実現することにある。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本発明の一つの観点から、第１及び第２の計算機と、第１及び第２の計算機からアクセス可能な記憶装置とを備え、配信元から送られるメッセージを受信して、複数の配信先計算機にメッセージを配信するメッセージ配信システムにおけるメッセージの配信方法が提供される。当該メッセージの配信方法は、好ましくは、第１の計算機により配信元から送られてくるメッセージを受信して、複数の配信先計算機の少なくとも一部の配信先計算機にメッセージを配信するとともに、メッセージの配信状況を取得し、配信状況に基づいて、配信先計算機の中に配信が遅延している低速配信先計算機が存在するか否かを判別する。低速配信先計算機が存在する場合、第１の計算機から第２の計算機に低速配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求し、第２の計算機により低速配信先計算機へのメッセージの配信を引き継ぎ、低速配信先計算機にメッセージを配信する。
【００１５】
より好ましくは、第２の計算機においてメッセージを保持するバッファの使用率が所定の値を超えた場合、メッセージの少なくとも一部が第２の計算機から記憶装置に格納される。
【００１６】
さらに好ましくは、第２の計算機により、第２の計算機がメッセージを配信している配信先計算機の中でメッセージの配信に遅延の生じていない正常配信先計算機を判別する。正常配信先計算機が存在する場合、第２の計算機から第１の計算機に正常配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求し、第１の計算機により正常配信先計算機へのメッセージの配信を引き継ぎ、正常配信先計算機にメッセージを配信する。
【００１７】
本発明の別の観点によれば、複数の配信先計算機にネットワークを介してメッセージを配信するメッセージ配信システムが提供される。好ましい一つの態様において、メッセージ配信システムは、第１の計算機と第２の計算機とを含む。第１の計算機は、受信したメッセージを保持する第１のバッファと、複数の配信先計算機の各々へのメッセージの配信を担当する計算機を指定する第１の担当情報と、第１の担当情報で自計算機が担当として割り当てられている第１の担当配信先計算機へのメッセージの配信状況を示す第１の配信状況情報とを保持するメモリ、配信元から送られてくるメッセージを受信して第１のバッファに保持する第１のメッセージ管理手段、第１の担当配信先計算機にメッセージを配信して第１の配信状況情報を更新する第１の配信手段、及び、第１の配信状況情報に基づいて、第１の担当配信先計算機の中に配信が遅延している低速配信先計算機が存在するか否かを判別し、低速配信先計算機が存在する場合、低速配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求する第１の切替手段を有する。また、第２の計算機は、受信したメッセージを保持する第２のバッファ、複数の配信先計算機の各々へのメッセージの配信を担当する計算機を指定する第２の担当情報、及び、第２の担当情報で自計算機が担当として割り当てられている第２の担当配信先計算機へのメッセージの配信状況を示す第２の配信状況情報を保持するメモリ、配信元から送られてくるメッセージを受信して第２のバッファに保持する第２のメッセージ管理手段、及び第１の計算機からの要求に応じて低速配信先計算機を第２の担当配信先計算機に含まれるよう第２の担当情報を更新し、第２の担当配信先計算機にメッセージを配信して第２の配信状況情報を更新する第２の配信手段を有する。
【００１８】
好ましくは、第２のメッセージ管理部は、第２のバッファの使用状況を監視し、バッファの使用率が所定の使用率を超えた場合、少なくとも一部のメッセージをストレージ装置に移動する。
【００１９】
より好ましくは、第２の計算機はさらに、第２の配信状況情報に基づいて、メッセージの配信が正常に行われている正常配信先計算機の有無を判別し、正常配信先計算機が存在する場合、正常配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求する第２の切替手段を有し、第１の配信手段は、第２の計算機からの要求に応じて正常配信先計算機を第１の担当配信先計算機に含まれるよう第１の担当情報を更新する。
【００２０】
本発明のさらに別の観点によれば、上述したようなメッセージの配信システムにおいて用いられるメッセージ配信計算機が提供される。当該計算機は、好ましくは、メッセージを保持するバッファ、複数の配信先計算機の中でメッセージの配信が遅延している低速配信先計算機へのメッセージの配信を担当する計算機であるか否かを示す計算機情報、複数の配信先計算機の各々へメッセージの配信を担当する計算機を指定する担当情報、及び、担当情報で自計算機が担当として割り当てられている配信先計算機へのメッセージの配信状況情報を保持するメモリと、送られてくるメッセージを受信してバッファに格納するメッセージ管理手段と、担当情報に基づいてメッセージ管理手段が受信したメッセージを自計算機が担当する配信先計算機に配信して配信状況情報を更新する配信処理手段と、自計算機が低速配信先計算機へのメッセージ配信を担当しない場合、配信状況情報に基づいて、担当する配信先計算機の中に存在する低速配信先計算機を検知して、検知された低速配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求し、自計算機が低速配信先計算機へのメッセージ配信を担当する場合、配信状況情報に基づいて、担当する配信先計算機の中に存在する配信が遅延していない正常配信先サーバを検知して、当該正常配信先計算機へのメッセージの配信を担当する計算機の切り替えを要求する切替手段とを有する。
【発明の効果】
【００２１】
低速コンシューマサーバの発生時においても、ブローカサーバのリソースを効率的に利用することができ、コンシューマサーバへの安定したメッセージの配信を実現することができる。
【図面の簡単な説明】
【００２２】
【図１】本発明の第１の実施形態における計算機システムのハードウェア構成を示す簡略ブロック図である。
【図２】ソフトウェアモジュールを主としたブローカサーバの構成を示す簡略ブロック図である。
【図３】ブローカサーバ表のテーブル構成を示す概念図である。
【図４】配信担当表のテーブル構成を示す概念図である。
【図５】配信状況表のテーブル構成を示す概念図である。
【図６】判定しきい値表のテーブル構成を示す概念図である。
【図７】正常時におけるメッセージ配信処理を示すシーケンス図である。
【図８】メッセージ管理部によるメッセージ登録処理の手順を示すフローチャートである。
【図９】配信処理部によるメッセージ配信処理の流れを示すフローチャートである。
【図１０】メッセージ受取確認応答時に、配信処理部により行われる処理の手順を示すフローチャートである。
【図１１】正常配信用ブローカサーバにおけるメッセージ削除処理の手順を示すフローチャートである。
【図１２】メッセージ管理部によるメッセージ取得処理の手順を示すフローチャートである。
【図１３】メッセージ配信担当ブローカサーバの切替処理を示すシーケンス図である。
【図１４】正常配信用ブローカサーバにおける低速コンシューマサーバ検知処理、及び切替処理の手順を示すフローチャートである。
【図１５】正常配信用ブローカサーバの配信処理部により実施される配信担当解除処理の手順を示すフローチャートである。
【図１６】低速コンシューマサーバ専用ブローカサーバの配信処理部により実施される配信担当登録処理の手順を示すフローチャートである。
【図１７】正常コンシューマサーバの配信担当ブローカサーバの切替処理を示すシーケンス図である。
【図１８】低速コンシューマ専用ブローカサーバの切替処理部による正常コンシューマサーバ検知処理と配信担当の切替処理の手順を示すフローチャートである。
【図１９】フェールオーバ処理の手順を示したフローチャートである。
【図２０】第２の実施形態における判定しきい値表を示す概念図である。
【図２１】正常配信用ブローカサーバの切替処理部において、低速コンシューマサーバへのメッセージ配信を担当するブローカサーバの切替処理を示すシーケンス図である。
【図２２】正常配信用ブローカサーバの切替処理部により実施される低速コンシューマサーバの検知処理と配信担当の切替処理の手順を示すフローチャートである。
【図２３】正常コンシューマサーバの配信担当ブローカサーバの切替処理を示すシーケンス図である。
【図２４】切替処理部による正常コンシューマサーバ検知処理と配信担当の切替処理の手順を示すフローチャートである。
【図２５】配信処理部によるメッセージ配信処理を示すフローチャートである。
【図２６】第３の実施形態における計算機システムのハードウェア構成を示す簡略化されたブロック図である。
【図２７】判定しきい値表の概念図である。
【図２８】低速コンシューマサーバの配信担当切替処理、低速コンシューマサーバへのメッセージ配信処理、及びメッセージ削除処理を示すシーケンス図である。
【図２９】切替対象コンシューマサーバの検知処理と配信担当の切替処理の手順を示すフローチャートである。
【図３０】ブローカサーバ間での配信担当の切戻処理を示すシーケンス図である。
【図３１】切替処理部による切戻コンシューマサーバの検知処理と配信担当の切替処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００２３】
＜第１の実施形態＞
図１は、本発明が適用された計算機システムの一実施形態における簡略なハードウェア構成を示すブロック図である。
【００２４】
図１において、メッセージ配信システム１０は、２台のブローカサーバ１００とブローカサーバ２００、ブローカサーバ１００、２００によって利用されるストレージ装置１０５を含んで構成される。メッセージ配信システム１０（ブローカサーバ１００、２００）は、ネットワーク１０６を介してメッセージの配信元であるプロデューササーバ４００、およびメッセージの配信先となる複数のコンシューマサーバ５００と接続されている。プロデューササーバ４００、コンシューマサーバ５００は、任意のブローカサーバ１００、２００と通信することができる。またブローカサーバ１００とブローカサーバ２００との間においてもネットワーク１０６を介して通信することが可能である。ここでは、プロデューササーバ４００として２台のプロデューササーバが示されているが、プロデューササーバ４００の数はこれに限るものではなく、１台、あるいは３台以上であってよい。
【００２５】
ブローカサーバ１００は、演算処理を行うＣＰＵ１０１、ＣＰＵ１０１により実行されるプログラムや各種処理に使われるデータを格納するためのメモリ１０２、ネットワーク１０６を介して他のサーバと通信を行うための通信インタフェース１０３、及びストレージ装置１０５との間でデータの入出力を行うＩ／Ｏインタフェース１０４を備える。ブローカサーバ２００もブローカサーバ１００と同様に、ＣＰＵ２０１、メモリ２０２、通信インタフェース２０３、及びＩ／Ｏインタフェース２０４を有して構成される。プロデューササーバ４００から受信し、コンシューマサーバ５００に配信されるメッセージは、メモリ１０２、２０２に確保されたバッファに格納される。
【００２６】
本実施形態において、ブローカサーバ１００、２００は、それぞれに割り当てられたコンシューマサーバ５００に対して、プロデューササーバ４００から送られてくるメッセージを配信する。ブローカサーバ１００に割り当てられたコンシューマサーバ５００の中で、メッセージの配信が遅延する低速コンシューマサーバが発生した場合、そのようなサーバへのメッセージの配信は、ブローカサーバ２００に切り替えられる。つまり、ブローカサーバ１００は、正常なコンシューマサーバへの配信を担当するブローカサーバ（正常配信用ブローカサーバ）として、また、ブローカサーバ２００は、低速コンシューマサーバへの配信を担当する専用ブローカサーバ（低速コンシューマサーバ専用ブローカサーバ）として機能する。
【００２７】
通常、プロデューササーバ４００により配信されるメッセージは、ブローカサーバ１００により受信される。ブローカサーバ１００は、プロデューササーバ４００よりメッセージを受信すると、ブローカサーバ２００に対して受信したメッセージの複製を送りメッセージの二重化を図る。ブローカサーバ１００とブローカサーバ２００は、上述したように、それぞれに割り当てられたメッセージ配信先となる複数台のコンシューマサーバ５００に対してプロデューササーバ４００により配信されたメッセージを送付する。このように、各ブローカサーバ１００、２００は、通常、あらかじめそれぞれに割り当てられたコンシューマサーバ５００に対してメッセージを配信する両現用系として動作する。
【００２８】
ブローカサーバ１００とブローカサーバ２００は、互いにネットワークを介して定期的にそれぞれの稼動状態を通知しあってお互いを監視（ハートビート監視）し、他のブローカサーバの障害を検知する機能を持つ。一方のブローカサーバに障害が生じた時には、他方のブローカサーバで障害が発生したブローカサーバの配信処理を引き継ぐことで、障害時においても継続的なメッセージ配信を行う（このような構成をハイアベイラビリティ（ＨＡ）構成と呼ぶ）。また、上述のとおり両ブローカサーバ間でメッセージを二重化し、配信が完了するまで保持することで高信頼性が実現される。加えて、メッセージを二重化できる容量には限界があるため、ブローカサーバ１００とブローカサーバ２００は、メッセージをストレージ装置１０５上に永続化する機能を備える。
【００２９】
正常配信用ブローカサーバ１００は、自身が配信を担当しているコンシューマサーバ５００へのメッセージの配信遅延を検知する機能（低速コンシューマサーバ検知機能）を持つ。ブローカサーバ１００において低速コンシューマサーバが発生した場合、正常配信用ブローカサーバ１００は、低速コンシューマサーバへのメッセージの配信元を低速コンシューマサーバ専用ブローカサーバ２００に切り替える。低速コンシューマサーバへの配信担当を随時低速コンシューマサーバ専用ブローカサーバ２００に切り替えることにより、低速コンシューマサーバへのメッセージの配信処理を低速コンシューマサーバ専用ブローカサーバ２００に集約する。
【００３０】
一方、低速コンシューマサーバ専用ブローカサーバ２００は、自身が配信を担当しているコンシューマサーバ５００へのメッセージの配信が正常であることを検知する機能（正常コンシューマサーバ検知機能）を持つ。低速コンシューマサーバ専用ブローカサーバ２００に低速コンシューマサーバへのメッセージ配信処理が移るにつれて、低速コンシューマサーバ専用ブローカサーバ２００のリソース利用量が増大する（切り替えによる配信負荷の偏り）。これをこのまま放置すると、低速コンシューマサーバ専用ブローカサーバ２００が配信を担当する正常コンシューマサーバへのメッセージの配信性能に影響を与えてしまうことになる。そこで、低速コンシューマサーバ専用ブローカサーバ２００のリソース利用量が増大した時には、低速コンシューマサーバ専用ブローカサーバ２００が正常コンシューマサーバとして検知したコンシューマサーバ５００へのメッセージの配信処理を、正常配信用ブローカサーバ１００に切り替えることで、上記の配信負荷の偏りの問題を解決する。
【００３１】
本実施形態において、ストレージ装置１０５は、通常、ブローカサーバ２００のＩ／Ｏインタフェース２０４に接続され、低速コンシューマサーバ専用ブローカサーバ（ブローカサーバ２００）によりメッセージを永続化するために利用される。ブローカサーバ２００に障害が発生した場合には、ブローカサーバ１００によりメッセージ配信処理が引き継がれるため、ストレージ装置１０５は、ブローカサーバ１００のＩ／Ｏインタフェース１０４に接続され、ブローカサーバ１００によりメッセージを永続化するために利用される。
【００３２】
図２は、ソフトウェアモジュールを主としたブローカサーバの構成を示す簡略ブロック図である。ここではブローカサーバ１００を例に説明するが、ブローカサーバ２００も同様に構成される。したがって、特に記載のない場合ブローカサーバ２００についてもその説明を流用することができる。
【００３３】
本実施形態において、ブローカサーバ１００は、データ送受信部１１１、メッセージ管理部１１２、配信処理部１１３、切替処理部１１４、管理インタフェース１１５を有する。これらの各処理機能部は、ソフトウェアモジュールの形で提供され、メモリ１０２上に配置される。これらのプログラムモジュールをＣＰＵ１０１で実行することにより、後述する各種の機能が実現される。
【００３４】
メモリ１０２には、プロデューササーバ４００から配信され、コンシューマサーバ５００に配信するメッセージを一時的に保持しておくメッセージバッファ１１６、ブローカサーバ情報を管理するブローカサーバ表６１０、コンシューマサーバ５００の情報とメッセージの配信を担当するブローカサーバの対応関係を管理する配信担当表６２０、配信メッセージを一意に識別するメッセージＩＤを取得するために使われるメッセージＩＤカウンタ６３０、各ブローカサーバが配信を担当しているコンシューマサーバ５００に対するメッセージ配信状況を表す配信状況表６４０、及び低速あるいは正常コンシューマサーバ検知判定と検知処理開始判定に用いられるしきい値のセットが設定される判定しきい値表７１０が保持される。ブローカサーバ表６１０、配信担当表６２０、メッセージＩＤカウンタ６３０、配信状況表６４０、及び判定しきい値表７１０は、メッセージの配信処理および配信を担当するブローカサーバの切替処理に用いられる。
【００３５】
本実施形態では、配信メッセージに付加するメッセージＩＤとして、プロデューササーバ４００からの配信順に１ずつ大きくなる通番を用いる。このため、メッセージＩＤカウンタ６３０には、プロデューササーバから受け取ったメッセージにメッセージＩＤを付加する都度値がインクリメント（１加算）されるカウント値が保持される。メッセージＩＤは、メッセージを一意に特定できる識別子であれば良く、本実施形態におけるようなカウンタ値以外の方法により決定してもよい。その他の各表に保持される情報については後述する。
【００３６】
ブローカサーバ１００は、データ送受信部１１１を介して、他方のブローカサーバ２００、プロデューササーバ４００、コンシューマサーバ５００とデータ通信を行う。以降記載する処理手順等の説明においては簡単のためにデータ送受信部１１１の処理を割愛するが、外部との通信は、データ送受信部１１１を経由して行われるものとする。
【００３７】
ブローカサーバ１００は、メッセージ配信を実施するためメッセージ管理部１１２と配信処理部１１３を有する。ブローカサーバ１００では、プロデューササーバ４００からのメッセージをメッセージ管理部１１２において受信する。メッセージ管理部１１２は、受信したメッセージをメッセージバッファ１１６に格納する。メッセージバッファ１１６に格納されたメッセージは、配信処理部１１３によりコンシューマサーバ５００に送信される。また、メッセージ管理部１１２は、自ブローカサーバが低速コンシューマ専用ブローカサーバとして機能しているときにメッセージバッファ１１６がバッファ溢れを起こしそうになった場合、メッセージバッファ１１６に保持されている一部のメッセージをストレージ装置１０５に移動する永続化処理を実施する。
【００３８】
切替処理部１１４は、ブローカサーバ１００の状態を監視して低速コンシューマサーバの発生を検知し、低速コンシューマサーバへのメッセージの配信を担当するブローカサーバを切り替える。ブローカサーバ１００とブローカサーバ２００の間で配信担当を切り替える場合、ブローカサーバ１００の切替処理部１１４は、ブローカサーバ２００の切替処理部との間で通信して切替処理を行う。本実施形態においては、正常配信用ブローカサーバ１００の切替処理部１１４は、メッセージバッファ１１６が溢れる前に低速コンシューマサーバの発生を検知し、その配信担当をブローカサーバ２００に切り替える。このためメッセージバッファ溢れはブローカサーバ２００においてのみ発生する。故に、ストレージ装置１０５へのメッセージ永続化処理はブローカサーバ２００のみが実施する。
【００３９】
管理インタフェース１１５は、切替処理部１１４における切替検知開始と切替対象コンシューマサーバの検知の基準となるパラメータの設定機能を提供する。管理インタフェース１１５は、ＧＵＩ（Graphical User Interface）であることが望ましいが、ＣＵＩ（Character User Interface）であってもよい。また、管理インタフェース１１５は、一方のブローカサーバのみに提供され、ブローカサーバ間での通信により、他方のブローカサーバに設定を反映するように構成されてもよい。
【００４０】
以降、各ブローカサーバの機能部１１１〜１１６について、ブローカサーバ１００の機能部とブローカサーバ２００の機能部とを区別する場合、ブローカサーバ１００の機能部については、メッセージ管理部１１２−１、配信処理部１１３−１のように添え字“−１”を参照番号に付し、ブローカサーバの機能部については、メッセージ管理部１１２−２、配信処理部１１３−２のように添え字“−２”を参照番号に付して区別する。
【００４１】
なお、ブローカサーバ表６１０、配信担当表６２０、メッセージＩＤカウンタ６３０、配信状況表６４０、及び判定しきい値表７１０の各テーブルは、それぞれのブローカサーバのメモリ１０２および２０２に保持されているが、ブローカサーバ１００及び２００の双方から共有可能なメモリ領域、あるいは記憶装置を設け、両者でこれらの情報を共用するようにしてもよい。
【００４２】
図３は、ブローカサーバ表のテーブル構成を示す概念図である。ブローカサーバ表６１０は、任意のブローカサーバが他のブローカサーバの情報を確認するために用いられる。このため、ブローカサーバ１００は、ブローカサーバ２００との間でブローカサーバ表６１０に設定される情報の同期をとって両者が保持するブローカサーバ表の一貫性を維持している。このような情報の同期については公知の技術を利用することができるため、ここではその説明を省略する。なお、ブローカサーバ間で同期を取ることに代えて、ブローカサーバ１００及びブローカサーバ２００の双方から参照可能な記憶領域を設け、両者でブローカサーバ管理表６１０を共有するように構成してもよい。
【００４３】
ブローカサーバ表６１０は、ブローカサーバ名６１１、ＩＰアドレス６１２、種別６１３を含む。ブローカサーバ名６１１は、メッセージ配信システム１０に含まれるブローカサーバ１００、２００に与えられたサーバ名である。ＩＰアドレス６１２は、ブローカサーバ名６１１で特定されるブローカサーバに割り当てられているＩＰアドレスである。種別６１３は、ブローカサーバ１００、２００の配信担当種別を表し、本実施形態においては、「正常配信用」あるいは「低速コンシューマサーバ専用」の２種類がある。ブローカサーバ１００、２００は、自身の種別を確認することで、配信担当種別に応じた処理を選択することが可能である。また、他のブローカサーバの種別を確認することで、コンシューマサーバ担当の切替先となるブローカサーバを識別することができる。なお、本実施形態では、ブローカサーバ１００、２００のアドレスとしてＩＰアドレスを用いているが、メッセージの配信先となるアドレスを特定できる識別子であれば、これ以外の異なる情報を用いてもよい。
【００４４】
図４は、配信担当表のテーブル構成を示す概念図である。配信担当表６２０は、各ブローカサーバ１００、２００によって管理され、各ブローカサーバ１００、２００が、自身の配信担当コンシューマサーバ５００を確認するために用いられる。また、配信担当外のコンシューマサーバ５００からメッセージの配信要求等があった場合に、担当のブローカサーバを特定し、その要求をリダイレクトする際に利用してもよい。そのため配信担当表６２０は、配信担当外のコンシューマサーバ５００に関する情報を含んでもよい。
【００４５】
配信担当表６２０は、コンシューマサーバ名６２１、ＩＰアドレス６２２、担当ブローカサーバ名６２３を含む。コンシューマサーバ名６２１は、メッセージ配信システム１０が配信を受け持っているコンシューマサーバ５００のサーバ名である。ＩＰアドレス６２２は、コンシューマサーバ名６２１で特定されるコンシューマサーバ５００のＩＰアドレスである。担当ブローカサーバ名６２３は、各コンシューマサーバ５００への配信を担当するブローカサーバ１００、２００のサーバ名である。担当ブローカサーバ名６２３は、ブローカサーバ表６１０におけるブローカサーバ名６１１に対応したものである。
【００４６】
図５は、配信状況表のテーブル構成を示す概念図である。配信状況表６４０は、コンシューマサーバ名６４１、配信済メッセージＩＤ６４２、最終配信時刻６４３、状態６４４を含み、各ブローカサーバ１００、２００によって管理される。
【００４７】
コンシューマサーバ名６４１は、各ブローカサーバ１００、２００が配信を担当するコンシューマサーバ５００のサーバ名であり、配信担当表６２０におけるコンシューマサーバ名６２１に対応したものである。配信済メッセージＩＤ６４２は、コンシューマサーバ５００への配信が完了した末尾メッセージのメッセージＩＤである。ブローカサーバ１００、２００は、コンシューマサーバ５００からメッセージの受取確認応答を得る度に配信完了済メッセージＩＤ６４２をインクリメントする。
【００４８】
ここで、本実施形態におけるメッセージ配信形態について説明する。本実施形態において、各コンシューマサーバ５００は、ブローカサーバ１００に届いたメッセージをすべて受け取り、各コンシューマサーバ５００が受け取るメッセージの配信順序が保たれる。このため、各コンシューマサーバ５００へのメッセージ配信処理において、ブローカサーバ１００、２００は、コンシューマサーバ５００からのメッセージの受取確認応答を受け取った後、次のメッセージを配信する。なお、これはメッセージの配信形態の一例であり、本実施形態に示す配信形態以外の方法によりメッセージを配信するようにしてもよい。
【００４９】
最終配信時刻６４３は、ブローカサーバ１００、２００がコンシューマサーバに対してメッセージ送信を行った時刻を示す。ブローカサーバ１００、２００は、メッセージ送信の都度、最終配信時刻６４３を更新する。最終配信時刻６４３は、コンシューマサーバ５００への再送処理を行う基準として用いられる。したがって、後述する再送処理を実施する上での基準となりうる情報であれば、これを最終配信時刻の代わりに用いてもよい。
【００５０】
状態６４４は、コンシューマサーバ５００の状態を示す情報である。コンシューマサーバ５００の状態には、「正常待機」、「Ａｃｋ待ち」の２種類がある。ブローカサーバ１００、２００は、状態６４４が「正常待機」であるとき、コンシューマサーバ５００に次のメッセージを送り、状態６４４を「Ａｃｋ待ち」に更新する。また、ブローカサーバ１００、２００は、コンシューマサーバ５００からメッセージの受取確認応答を得たとき、状態６４４を「正常待機」に更新する。状態６４４が「Ａｃｋ待ち」であるとき、ブローカサーバ１００、２００は、メッセージの再送処理を行う。
【００５１】
図６は、判定しきい値表のテーブル構成を示す概念図である。判定しきい値表７１０は、バッファ利用率しきい値７１１、メッセージ切替オフセット７１２、及びリソース利用率しきい値７１３を含む。リソース利用率しきい値７１３は副項目として、ＣＰＵ利用率７１４、ネットワーク利用率７１５、メモリ利用率７１６、及び判定方式７１７を含む。
【００５２】
判定しきい値表７１０は、ブローカサーバ１００における低速コンシューマサーバ検知処理時、あるいはブローカサーバ２００における正常コンシューマサーバ検知処理に用いられる。本実施例において、判定しきい値表７１０の各値は、管理インタフェース１１５を介してオペレータにより入力された値が設定されるものとするが、配信遅延の状態に応じてこれらしきい値を計算して設定し、あるいは、予め定められた値が設定されていてもよい。
【００５３】
バッファ利用率しきい値７１１は、ブローカサーバ１００における低速コンシューマサーバ検知処理の開始判定基準となるメッセージバッファの利用率である。メッセージ切替オフセット７１２は、各コンシューマサーバ５００への配信進度（遅延または正常）を判定する際に基準となるＩＤ値に幅を持たせるための値であり、ブローカサーバ１００における低速コンシューマサーバ判定と、ブローカサーバ２００における正常コンシューマサーバ判定の両方に用いられる。
【００５４】
リソース利用率しきい値７１３は、ブローカサーバ２００における負荷増大により、正常コンシューマサーバへのメッセージの配信をブローカサーバ１００に切り替える必要があるかどうかを判断するための基準である。ブローカサーバ２００のリソース利用率がリソース利用率しきい値７１３を超えた場合に、正常コンシューマサーバの検知処理を開始する。判定方式７１７は状態「ＡＮＤ」と「ＯＲ」の２種類があり、ＣＰＵ利用率７１４、ネットワーク利用率７１５、メモリ利用率７１６を用いた判定の論理演算に利用される。
【００５５】
図７は、正常時におけるメッセージ配信処理を示すシーケンス図である。
【００５６】
処理Ｓ８０１〜Ｓ８１３は、ブローカサーバ１００がプロデューササーバ４００からメッセージを受信した際のメッセージ登録処理シーケンスである。
【００５７】
ブローカサーバ１００のメッセージ管理部１１２−１は、プロデューササーバ４００から新規メッセージを受け取ると（Ｓ８０１）、切替処理部１１４−１に対してメッセージ受取を通知する（Ｓ８０２）。切替処理部１１４−１は、メッセージ受取通知を得ると、メッセージ管理部１１２−１に対して通知受取完了を返す（Ｓ８０３）。その後ブローカサーバ１００は、低速コンシューマサーバ発生検知処理を開始する（Ｓ８０４）。
【００５８】
メッセージ管理部１１２−１は、切替処理部１１４−１から通知受取完了通知を受け取った後、受信したメッセージにメッセージＩＤを付加し（Ｓ８０５）、このメッセージをメッセージバッファ１１６−１に格納する（Ｓ８０６）。さらに、メッセージ管理部１１２−１は、ブローカサーバ２００のメッセージ管理部１１２−１に対して受信したメッセージの複製を送付し、これを登録するように要求する。本実施形態ではこれ以降の処理によりメッセージの二重化を実現している（Ｓ８０７）。
【００５９】
ブローカサーバ２００のメッセージ管理部１１２−２は、ブローカサーバ１００からメッセージ複製登録要求を受けると、切替処理部１１４−２にメッセージ受取を通知する（Ｓ８０８）。切替処理部１１４−２は、メッセージ受取通知を得ると、メッセージ管理部１１２−１に対して通知受取完了を返し（Ｓ８０９）、ブローカサーバ１００への切戻対象となる正常コンシューマサーバの検知処理を開始する（Ｓ８１０）。ここで、Ｓ８０７におけるメッセージ複製登録要求処理と、Ｓ８０１における新規メッセージの受取処理は、説明を理解し易くするために、別の処理名としているが、後述するように実質的に同様の処理によって実現される。
【００６０】
メッセージ管理部１１２−２は、切替処理部１１４−２からの受取完了通知後に、受信したメッセージの複製をメッセージバッファ１１６−２に格納する（Ｓ８１１）。ここで、ブローカサーバ２００は、その役割上、配信が遅延したメッセージを保持しておく必要があり、保持するメッセージ量の増大に伴って、メッセージバッファ１１６−２の容量が不足する場合がある。このような場合、メッセージ管理部１１２−２は、メッセージバッファ１１６−２から溢れたメッセージをストレージ装置１０５に書き込むメッセージ永続化処理を行う（Ｓ８１２）。
【００６１】
以上のメッセージ保持処理が終了した後、ブローカサーバ２００のメッセージ管理部１１２−２は、ブローカサーバ１００のメッセージ管理部１１２−１にメッセージ登録完了を通知してメッセージ登録処理を完了する（Ｓ８１３）。
【００６２】
処理Ｓ８１４〜Ｓ８２７は、ブローカサーバ１００におけるコンシューマサーバ５００へのメッセージ配信処理シーケンスである。
【００６３】
ブローカサーバ１００の配信処理部１１３−１は、配信担当表６２０を参照し、自身が配信を担当するコンシューマサーバ５００の情報を取得する（Ｓ８１４）。配信処理部１１３−１は、情報を取得したコンシューマサーバ５００について、配信状況表６４０からメッセージの配信状況を取得する（Ｓ８１５）。取得した配信状況を基に配信処理部１１３−１は、メッセージ管理部１１２−１に対して、メッセージＩＤを指定してメッセージの取得を要求する（Ｓ８１６）。メッセージ管理部１１２−１は、メッセージの取得要求を受けると、指定されたメッセージＩＤを持つメッセージをメッセージバッファ１１６−１から読み出し（Ｓ８１７）、配信処理部１１３−２にそのメッセージを送る（Ｓ８１８）。
【００６４】
配信処理部１１３−１は、取得したメッセージをコンシューマサーバ５００に対して送信する（Ｓ８１９）。コンシューマサーバ５００からメッセージの受取確認応答（Ａｃｋ）が返ってくると（Ｓ８２０）、配信処理部１１３−１は、配信状況表６４０を更新する（Ｓ８２１）。配信処理部１１３−１は、さらに配信状況表６４０を参照し、その時点で削除可能なメッセージのメッセージＩＤを取得し（Ｓ８２２）、メッセージ管理部１１２−１に取得した削除可能なメッセージのメッセージＩＤを通知する（Ｓ８２３）。
【００６５】
メッセージ管理部１１２−１は、通知されたメッセージＩＤのメッセージがメッセージバッファ１１６−１に残っている場合、バッファ溢れが生じないようそのメッセージを削除するために、ブローカサーバ２００のメッセージ管理部１１２−２に対して、そのメッセージの削除可否を確認する。本実施形態においては、ブローカサーバ２００との間でメッセージを二重化し、また、ブローカサーバ２００においてメッセージを永続化することで信頼性を保証している。このため、ブローカサーバ１００がメッセージを削除する際には、ブローカサーバ２００側でもメッセージの配信が終わっているか、あるいはメッセージの永続化が済んでいるか確認する必要がある。
【００６６】
ブローカサーバ２００のメッセージ管理部１１２−２は、ブローカサーバ１００のメッセージ管理部１１２−１から確認要求を受けると、自身においてすべてのコンシューマサーバ５００へのメッセージの配信が完了しているか、あるいはメッセージがストレージ装置１０５に永続化されているか調べ、削除の可否を確認する（Ｓ８２５）。メッセージの削除が可能であることが確認できた場合、メッセージ管理部１１２−２は、ブローカサーバ１００のメッセージ管理部１１２−１にメッセージの削除許可を通知する（Ｓ８２６）。メッセージ管理部１１２−１は、削除許可通知を受け取った後、メッセージバッファ１１６−１から該当するメッセージを削除する（Ｓ８２７）。
【００６７】
図示していないが、上述した処理のうちＳ８１４〜Ｓ８２７の処理は、ブローカサーバ２００側でも同様におこなわれ、ブローカサーバ２００が担当するコンシューマサーバ５００にメッセージが配信される。なお、ブローカサーバ２００側でのメッセージの削除処理においては、他のブローカサーバへの削除の確認、即ち、Ｓ８２４〜Ｓ８２６の処理は不要となる。また、永続化が済んでいないメッセージの削除処理は、自身によるメッセージ配信がすべて完了した時点、及びブローカサーバ１００からの削除確認要求の受信時点の遅い方を契機に行なわれる。
【００６８】
ここでは、ブローカサーバが配信を担当するある１台のコンシューマサーバに対する配信処理を例に説明したが、ブローカサーバは、Ｓ８１４〜Ｓ８２７の配信処理をブローカサーバが担当するすべてのコンシューマサーバに対して繰り返し実施する。また、ここでは、メッセージの登録処理と配信処理を一連の処理として説明しているが、メッセージの配信処理を登録処理とは非同期に行うようにしてもよい。同様に、メッセージ削除処理（Ｓ８２２〜Ｓ８２７）をメッセージ配信処理の中で行っているが、Ｓ８１４〜Ｓ８２１の処理とＳ８２２〜Ｓ８２７の処理を分離し、それぞれを互いに独立して実行するようにしてもかまわない。
【００６９】
図８は、メッセージ管理部によるメッセージ登録処理の手順を示すフローチャートである。図８に示す処理は、図７のシーケンス図におけるＳ８０１〜Ｓ８１３の処理に対応している。
【００７０】
メッセージ管理部１１２は、プロデューササーバ４００から配信されたメッセージ、あるいは、他のブローカサーバからメッセージの複製を含む登録要求を受け取ると（Ｓ９０１）、切替処理部１１４にメッセージを受け取ったことを通知し、通知完了応答があるまで待つ（Ｓ９０２）。
【００７１】
メッセージ管理部１１２は、切替処理部１１４から通知完了を受け取ると（Ｓ９０３）、受信したメッセージにメッセージＩＤが付加されているか否かを判定する。受け取ったメッセージがプロデューササーバ４００から送られてきた新規メッセージである場合、受け取ったメッセージにメッセージＩＤは付加されていないため、メッセージ管理部１１２におけるＳ９０４の判定結果は「メッセージＩＤなし」となる。一方、通常運用時に低速コンシューマサーバ専用ブローカサーバとして動作するブローカサーバ２００のように、他のブローカサーバからメッセージの複製を受け取る場合は、受け取ったメッセージには既にメッセージＩＤが付加されているため、判定結果は「メッセージＩＤあり」となる（Ｓ９０４）。
【００７２】
Ｓ９０４において、「メッセージＩＤなし」と判定された場合、メッセージ管理部１１２は、メッセージＩＤカウンタ６３０から現在のメッセージＩＤを取得し（Ｓ９０５）、取得したメッセージＩＤをメッセージに付加する（Ｓ９０６）。その後、メッセージＩＤカウンタ６３０の値を次に受け取る新規メッセージに付加するメッセージＩＤとするために、１加算する（Ｓ９０７）。
【００７３】
Ｓ９０４〜９０７によりメッセージに付加した後、あるいは、Ｓ９０４において、「メッセージＩＤなし」と判定された場合、メッセージ管理部１１２は、受け取ったメッセージをメッセージバッファ１１６に格納する（Ｓ９０８）。次に、メッセージ管理部１１２は、自ブローカサーバがストレージ装置１０５に接続されているか否か判定する。ストレージ装置１０５は、通常運用時、低速コンシューマサーバ専用ブローカサーバとして動作するブローカサーバ２００に接続されており、正常配信用ブローカサーバとして動作するブローカサーバ１００は、ストレージ装置１０５に接続されていない。このため、通常運用時、ブローカサーバ１００のメッセージ管理部１１２−１における判定結果は「ＮＯ」となり、Ｓ９１３の処理に移る。一方、通常運用時のブローカサーバ２００のメッセージ管理部１１２−２における判定結果は「ＹＥＳ」となる（Ｓ９０９）。
【００７４】
自ブローカサーバにストレージ装置１０５が接続されている場合、メッセージ管理部１１２は、メッセージバッファ１１６の利用率をバッファ内のメッセージ量とバッファの最大サイズの比によって求め、その利用率がしきい値を超えているか否か判定する（Ｓ９１０）。
【００７５】
メッセージバッファ１１６の利用率がしきい値を超えている場合、メッセージ管理部１１２は、バッファ溢れを防ぐためにメッセージバッファ１１６に保持されているメッセージを、付加されているメッセージＩＤの古いものから順に読み出し、ストレージ装置１０５に格納する（Ｓ９１１）。ストレージ装置に格納されたメッセージは、メッセージバッファ１１６から削除される（Ｓ９１２）。本実施形態では、Ｓ９１１、Ｓ９１２によるストレージ装置１０５へのメッセージの移動は、あらかじめ定められた一定量ずつ行われるが、メッセージバッファ１１６に保持されているすべてのメッセージを移動の対象としてもかまわないし、移動するメッセージ量が可変であってもかまわない。
【００７６】
Ｓ９１３で、メッセージ管理部１１２は、受け取ったメッセージの複製を送付すべきブローカサーバがあるか否かを判定する。メッセージ管理部１１２は、ブローカサーバ表６１０を参照し、自ブローカサーバのブローカサーバ名６１１に対応する種別６１３が「正常配信用」である場合、他の「低速コンシューマサーバ専用」のブローカサーバにメッセージの複製を送付する必要がある。通常運用時において、ブローカサーバ１００は、ブローカサーバ２００にメッセージ複製を送る必要があり、ブローカサーバ２００は、他のブローカサーバにメッセージの複製を送付する必要がない。したがって、メッセージ管理部１１２−１における判定結果は「ＹＥＳ」となり、メッセージ管理部１１２−２における判定結果は「ＮＯ」となる。なお、他にブローカサーバが複数台設けられ、第３の実施形態として後述するように通常時にメッセージの配信を行わないブローカサーバが存在する場合、あるいは、メッセージごとに配信先のコンシューマサーバが異なりメッセージ配信先となるコンシューマサーバを担当していないブローカサーバが存在する場合、そのようなブローカサーバへはメッセージの複製を送付する必要はない。このような場合、メッセージ管理部１１２は、配信担当表６２０を参照することにより、メッセージの複製の配信が必要なブローカサーバを判別することができる。
【００７７】
Ｓ９１３における判定結果が「ＹＥＳ」であった場合、メッセージ管理部１１２は、メッセージの複製を送付する必要があるブローカサーバのメッセージ管理部１１２にメッセージの複製を送付する（Ｓ９１４）。その後、メッセージの複製を送付したブローカサーバからのメッセージ登録完了応答を待ち、メッセージ登録完了応答が返ってくるとそれを受け取る（Ｓ９１５）。
【００７８】
Ｓ９１３で複製の送付が不要と判定された場合、あるいは、Ｓ９１５でメッセージの複製を送付したブローカサーバからのメッセージ登録完了応答を受信した後、メッセージ管理部１１２は、Ｓ９０１で受け取ったメッセージの送信元であるプロデューササーバ、あるいは、ブローカサーバにメッセージ登録完了応答を送り、メッセージ登録処理を終える（Ｓ９１６）。
【００７９】
ここではプロデューササーバに対する登録完了応答処理と登録処理とを一連の処理として説明したが、これらは必ずしも一連の処理として実施される必要はなく、たとえば、登録応答処理を登録処理とは独立した処理として非同期で行い、複数の登録完了応答をまとめて送るようにしてもよい。
【００８０】
図９は、配信処理部によるメッセージ配信処理の流れを示すフローチャートである。図９に示す処理は、図７のシーケンス図におけるＳ８１４〜Ｓ８１９の処理 に対応している。
【００８１】
配信処理部１１３は、配信担当表６２０から配信を担当する１台のコンシューマサーバ５００のコンシューマサーバ名を取得する（Ｓ１００１）。次に、取得したコンシューマサーバ名に該当するコンシューマサーバ５００の配信状況を配信担当表６４０から取得する（Ｓ１００２）。コンシューマサーバ５００の配信状況を取得すると、配信処理部１１３は、その状態６４４に設定されている情報が「正常待機」であるか「Ａｃｋ待ち」であるか判定する（Ｓ１００３）。
【００８２】
Ｓ１００３において、コンシューマサーバ５００が「正常待機」状態であると判定された場合、配信処理部１１３は、配信済メッセージＩＤ６４２で特定されるメッセージの次のメッセージのメッセージＩＤ（配信済メッセージＩＤ＋１）を指定して、メッセージ管理部にメッセージ取得を要求する（Ｓ１００４）。メッセージ管理部から要求したメッセージを受け取ると、配信処理部１１３は、そのメッセージをコンシューマサーバ５００に送信する（Ｓ１００５）。その後、配信処理部１１３は、メッセージを配信したコンシューマサーバ５００に関連する配信状況表６４０の状態６４４を「Ａｃｋ待ち」に、最終配信時刻６４３をその時点における現在時刻に、それぞれ変更する（Ｓ１００６）。
【００８３】
一方、Ｓ１００３において、コンシューマサーバ５００の状態が「Ａｃｋ待ち」と判定された場合、配信処理部１１３は、その時点における現在時刻と最終配信時刻６４３に設定されている時刻の差を計算して、所定時間以上「Ａｃｋ待ち」の状態が続いているか否かを判定する（Ｓ１００７）。「Ａｃｋ待ち」の状態となってから所定時間が経過していない場合、配信処理部１１３は、特に処理を行わずそのコンシューマサーバへのメッセージ配信処理を終える。
【００８４】
Ｓ１００７において、「Ａｃｋ待ち」の状態が所定時間以上続いていると判断された場合、配信処理部１１３は、再び配信済メッセージＩＤ６４２で特定されるメッセージの次のメッセージを取得し（Ｓ１００８）、そのメッセージを配信する（Ｓ１００９）。
【００８５】
配信処理部１１３は、以上の配信処理手順を自ブローカサーバが配信を担当するすべてのコンシューマサーバに対して順次行う。なお、各コンシューマサーバへの配信処理はマルチスレッドなどによって並列に実行してもよい。また、上述したメッセージ配信処理は、すべてのブローカサーバにおいて同様に実施される。
【００８６】
図１０は、コンシューマサーバからのメッセージ受取確認応答時に、配信処理部により行われる処理の手順を示すフローチャートである。図１０に示す処理は、図７のシーケンス図におけるＳ８２０〜Ｓ８２３に対応している。
【００８７】
配信処理部１１３は、コンシューマサーバ５００から受取確認応答を受信すると（Ｓ１１０１）、受取確認応答を受信したコンシューマサーバ５００について、配信状況表６４０の配信済メッセージＩＤ６４２に設定されているメッセージＩＤの値をインクリメントし、状態６４４を「正常待機」に変更する（Ｓ１１０２）。次に、配信処理部１１３は、配信状況表６４０からすべてのコンシューマサーバ５００への配信が完了したメッセージのメッセージＩＤ、すなわち全コンシューマサーバの配信済メッセージＩＤ６４２の最小値を取得し（Ｓ１１０３）、メッセージ管理部１１２に取得したメッセージＩＤを削除可能なメッセージＩＤとして通知する（Ｓ１１０４）。
【００８８】
図１１は、正常配信用ブローカサーバのメッセージ管理部によるメッセージ削除処理の手順を示すフローチャートである。図１１に示す処理は、図７のシーケンス図におけるＳ８２３〜Ｓ８２７に対応している。
【００８９】
メッセージ管理部１１２−１は、配信処理部１１３−１より全コンシューマサーバへの配信が完了した削除可能なメッセージのメッセージＩＤを受領すると（Ｓ１２０１）、メッセージバッファ１１６−１に保持されている最古のメッセージに付加されたメッセージＩＤを取得し、配信処理部１１３−１から受け取ったメッセージＩＤと比較し、削除可能なメッセージがバッファに存在するかどうか確認する。メッセージバッファ１１６−１にある最古メッセージのメッセージＩＤが配信処理部１１３−１から受け取ったメッセージＩＤ以下の値であれば、削除可能なメッセージがメッセージバッファ１１６−１に存在する（Ｓ１２０２）。
【００９０】
Ｓ１２０２において、削除可能なメッセージがメッセージバッファ１１６−１に存在すると判断された場合、メッセージ管理部１１２−１は、低速コンシューマサーバ専用のブローカ２００のメッセージ管理部１１２−２に削除可能メッセージＩＤを通知して削除可能であることの確認を要求する（Ｓ１２０３）。その後、メッセージ管理部１１２−１は、ブローカサーバ２００のメッセージ管理部１１２−２から確認結果を受信すると（Ｓ１２０４）、その結果に基づいてメッセージを削除可能であるか否か判定する（Ｓ１２０５）。
【００９１】
Ｓ１２０５における判定の結果が「ＹＥＳ」の場合、メッセージ管理部１１２−１は、メッセージバッファ１１６−１から、Ｓ１２０１において受領したメッセージＩＤのメッセージ及び、それよりも古いメッセージ（受領したメッセージＩＤの値以下のＩＤを持つメッセージ）を削除する（Ｓ１２０６）。Ｓ１２０２、またはＳ１２０５における判定結果が「ＮＯ」である場合、メッセージ管理部１１２−１は、メッセージを削除せずにメッセージ削除処理を終える。
【００９２】
Ｓ１２０３で削除可否の確認を要求されたブローカサーバ２００のメッセージ管理部１１２−２では、受信したメッセージＩＤのメッセージ及びそれよりも古いメッセージについて、該当するメッセージがメッセージバッファ１１６−２に存在しない（ストレージ装置１０５への永続化が完了している）、あるいは、ブローカサーバ２００が配信を担当するすべてのコンシューマサーバ５００への配信が完了しているか確認し、削除可否を応答する。また、メッセージ管理部１１２−２における他の確認応答の方法として、該当するメッセージがメッセージバッファ１１６−２に存在する場合に、それらのメッセージをストレージ装置１０５に移動して永続化した後、削除可能の応答をするようにしてもよい。後者の方法によれば、正常配信用ブローカサーバ１００のメッセージバッファ１１６−１をより有効に利用することができるようになる。
【００９３】
図１２は、メッセージ管理部によるメッセージ取得処理の手順を示すフローチャートである。
【００９４】
メッセージ管理部１１２は、配信処理部１１３からメッセージＩＤの指定を含むメッセージ取得要求を受け取ると（Ｓ１３０１）、メッセージバッファ１１６から指定されたメッセージＩＤを持つメッセージを読み出す（Ｓ１３０２）。正常配信用ブローカサーバの場合未配信のコンシューマサーバ５００があれば、そのメッセージは必ずメッセージバッファ１１６に保持されているが、低速コンシューマサーバ専用ブローカサーバでは、永続化によりメッセージがメッセージバッファ１１６からストレージ装置１０５に移動されている場合がある。このため、メッセージ管理部１１２は、Ｓ１３０２において、メッセージの読み出しに成功したか否か判定する（Ｓ１３０３）。
【００９５】
Ｓ１３０３において、メッセージバッファ１１６からメッセージの読み出しに失敗したと判定された場合、メッセージ管理部１１２は、ストレージ装置１０５から指定されたメッセージＩＤを持つメッセージを取得する（Ｓ１３０４）。
【００９６】
メッセージ管理部１１２は、Ｓ１３０４でストレージ装置から読み出したメッセージ、あるいは、Ｓ１３０３の判定の結果が肯定的であった場合には、メッセージバッファ１１６から読み出したメッセージを配信処理部１１３に返す（Ｓ１３０５）。
【００９７】
図１３は、正常配信用ブローカサーバ（ブローカサーバ１００）が担当するコンシューマサーバの中に低速コンシューマサーバが発生した場合に行われる、低速コンシューマサーバへのメッセージ配信担当ブローカサーバの切替処理を示すシーケンス図である。
【００９８】
ブローカサーバ１００の切替処理部１１４−１が、ブローカサーバ１００が配信担当となっているコンシューマサーバ５００の中に、少なくとも１台の低速コンシューマサーバが発生したことを検知すると切替処理が開始される（Ｓ１４０１）。低速コンシューマサーバの具体的な検知処理については後述する。切替処理部１１４−１は、低速コンシューマサーバの発生を検知すると、配信処理部１１３−１に対して、検知した低速コンシューマサーバを指定して配信担当の切り替えを要求する(Ｓ１４０２)。
【００９９】
配信処理部１１３−１は、切替要求を受けると、配信担当表６２０を更新し、指定されたコンシューマサーバ名６２１に対応する担当ブローカサーバ名６２３をブローカサーバ１００のサーバ名からブローカサーバ２００のサーバ名に変更する（Ｓ１４０３）。その後、配信処理部１１３−１は、配信状況表６４０から当該コンシューマサーバの配信状況を取得して（Ｓ１４０４）、それを切替処理部１１４−１に返す（Ｓ１４０５）。
【０１００】
ここで配信担当表６２０を更新することにより、低速コンシューマサーバは、ブローカサーバ１００の担当外となるので、配信処理部１１３−１は、当該コンシューマサーバへのメッセージ配信処理は停止する。切替処理の実施中に、当該コンシューマサーバからブローカサーバ１００に対して、Ａｃｋや再送要求が送られてきた場合、それらＡｃｋや再送要求を切替先のブローカサーバ２００に対してリダイレクトするか、あるいは、切替先のブローカサーバ２００が配信担当となるまでそれらを無視する。
【０１０１】
次に、切替処理部１１４−１は、ブローカサーバ２００の切替処理部１１４−２に対して、低速コンシューマサーバへの配信担当ブローカサーバの切り替えを要求する。この際、切替処理部１１４−１は、配信処理部１１３−１から受け取った当該コンシューマサーバの配信状況を切替処理部１１４−２に切替要求と共に送る（Ｓ１４０６）。
【０１０２】
ブローカサーバ２００の切替処理部１１４−２は、切替要求を受けると、配信処理部１１３−２に対して低速コンシューマサーバの配信担当を切り替えるよう要求する(Ｓ１４０７)。
【０１０３】
配信処理部１１３−２は、切替処理部１１４−２から切替要求を受けると、配信状況表６４０にブローカサーバ１００から送られてきた配信状況を登録し（Ｓ１４０８）、配信担当表６２０を更新する（Ｓ１４０９）。以上の処理を行った時点で、低速コンシューマサーバへのメッセージの配信を担当するブローカサーバがブローカサーバ２００となり、ブローカサーバ２００による当該コンシューマサーバへのメッセージ配信処理が開始される。
【０１０４】
切替処理部１１４−２は、以上の処理の後、ブローカサーバ１００の切替処理部１１４−１に対して、切替準備が完了したことを通知する（Ｓ１４１０）。
【０１０５】
ブローカサーバ１００の切替処理部１１４−１は、切替準備完了の通知を受け取ると、配信処理部１１３−１に対して当該コンシューマサーバの配信情報を削除するように要求する（Ｓ１４１１）。配信処理部１１３−１は、配信状況表６４０から当該コンシューマサーバの配信状況を削除する（Ｓ１４１２）。
【０１０６】
以上で切替処理は終了する。なお、本実施形態では、切り替えの対象となったコンシューマサーバに対して、配信を担当するブローカサーバが切り替わったことを特に通知をすることなくメッセージ配信処理を再開しているが、切替時点でコンシューマサーバに対しメッセージの配信を担当するブローカサーバが切り替わったことを明示的に通知するようにしてもよい。
【０１０７】
図１４は、正常配信用ブローカサーバの切替処理部による低速コンシューマサーバ検知処理、及び切替処理の手順を示すフローチャートである。図中、Ｓ１５０１〜Ｓ１５０８が低速コンシューマサーバの検知処理、Ｓ１５０９〜１５１２が切替処理となる。なお、低速コンシューマサーバの検知処理は、図１３のＳ１４０１に、切替処理は、図１３のＳ１４０２〜１４１２の処理にそれぞれ対応する。
【０１０８】
低速コンシューマサーバの検知・切替処理において、切替処理部１１４−１は、まず、メッセージバッファ１１６−１に保持されているメッセージの量を取得する（Ｓ１５０１）。そして、取得したメッセージ量とメッセージバッファ１１６−１のサイズの比を計算してメッセージバッファ１１６−１の利用率を得て、判定しきい値表７１０に設定されているバッファ利用率しきい値７１１を超えているか否か判定する。メッセージバッファ１１６−１の利用率が一定量を超え、バッファ溢れの恐れがあるときに、これ以降の処理において低速コンシューマサーバの検知処理が実施される（Ｓ１５０２）。
【０１０９】
Ｓ１５０２において、メッセージバッファ１１６−１の利用率がバッファ利用率しきい値７１１以下であれば、バッファ溢れの恐れがないため、切替処理部１１４−１は、何もせずに検知・切替処理を終了する。メッセージバッファ１１６−１の利用率がバッファ利用率しきい値７１１を超えている場合、切替処理部１１４−１は、低速コンシューマサーバを検知するため、配信担当表６２０からブローカサーバ１００がメッセージの配信を担当しているすべてのコンシューマサーバ５００を含むリストを取得する（Ｓ１５０３）。そして、切替処理部１１４−１は、取得した担当コンシューマサーバのリストに未処理のコンシューマサーバが残されているか判定する（Ｓ１５０４）。
【０１１０】
本実施形態では、配信の遅延が発生しているか否かは、コンシューマサーバ５００へのメッセージの配信状況に基づいて判定される。具体的には、配信の完了していないメッセージが相対的に多くなっているコンシューマサーバ５００が低速コンシューマサーバとして検知される。この判定を行うために、切替処理部１１４−１は、リストに未処理のコンシューマサーバ５００が残っている場合、次のコンシューマサーバ名を取得し（Ｓ１５０５）、配信状況表６４０からそのコンシューマサーバ５００への配信状況を得る（Ｓ１５０６）。
【０１１１】
切替処理部１１４−１は、Ｓ１５０６で取得した配信状況から配信済メッセージＩＤ６４２を取り出し、遅延判定基準ＩＤと比較し、メッセージ配信の遅延が発生しているか否か判定する。ここで用いられる遅延判定基準ＩＤとしては、メッセージバッファ１１６−１に保持されているメッセージの中で最古のメッセージのメッセージＩＤの値に、しきい値表７１０のメッセージ切替オフセット７１２に設定されている値を加えたものが用いられる。配信済メッセージＩＤ６４２の値が遅延判定基準ＩＤ以下の場合、配信が完了していない滞留メッセージの量が相対的に多くなっており、配信が遅延しているものとして判定される。配信に遅延が発生していなければ、処理はＳ１５０４に戻る（Ｓ１５０７）。
【０１１２】
Ｓ１５０７において、メッセージの配信に遅延が発生していると判定された場合、切替処理部１１４−１は、そのコンシューマサーバ５００を低速コンシューマサーバのリストに加え、Ｓ１５０４の処理に戻る（Ｓ１５０８）。
【０１１３】
Ｓ１５０４において、担当コンシューマサーバのリストにあるすべてのコンシューマサーバ５００の処理を終えている場合、切替処理部１１４−１は、配信処理部１１３−１に検知処理において検知した低速コンシューマサーバのリストと共に低速コンシューマサーバへのメッセージの配信切替を要求する。配信処理部１１３−１は、配信切替要求に応答して、リスト中の低速コンシューマサーバに対応する配信状況を取得し、切替処理部１１４−１に返す。これにより、切替処理部１１４−１は、低速コンシューマサーバの配信状況を取得する（Ｓ１５０９）。
【０１１４】
次に、切替処理部１１４−１は、ブローカサーバ２００の切替処理部１１４−２に対して、低速コンシューマサーバの配信状況を含む配信切替要求を送信し、切替準備完了を待つ（Ｓ１５１０）。切替処理部１１４−１は、切替処理部１１４−２から切替準備完了通知を受け取ると（Ｓ１５１１）、配信処理部１１３−１に対して、配信状況表６４０から低速コンシューマサーバに関する配信状況を削除するように要求し、配信処理部１１３−１により該当する情報が配信状況表６４０から削除される（Ｓ１５１２）。
【０１１５】
本実施形態においては、メッセージバッファ１１６への滞留メッセージ数とその配信状態に応じて、低速コンシューマサーバを検知しているが、他の基準で低速コンシューマサーバを検知してもよい。例えば、滞留しているメッセージの総サイズ、ネットワーク状態、応答時間、他のリソースの利用率、あるいはこれらの組み合わせによって低速コンシューマサーバを検出するようにしてもよい。
【０１１６】
図１５は、切替処理時に、正常配信用ブローカサーバの配信処理部により実施される配信担当解除処理の手順を示すフローチャートである。図１５に示す処理は、図１３のシーケンス図におけるＳ１４０３〜Ｓ１４０４およびＳ１４１２ に対応している。
【０１１７】
配信処理部１１３−１は、切替処理部１１４−１から低速コンシューマサーバの配信切替要求を受け取ると（Ｓ１６０１）、配信担当表６２０上で、配信切替要求と共に受け取った切り替えの対象となる低速コンシューマサーバのサーバ名６２１に対応する担当ブローカサーバ名６２３を切替先のブローカサーバ名（ここではブローカサーバ２００のサーバ名）に変更し、自ブローカサーバの担当配信先から除外する（Ｓ１６０２）。配信処理部１１３−１は、その後、配信状況表６４０から当該低速コンシューマサーバの配信状況を取得して切替処理部１１４−１に渡す（Ｓ１６０３）。
【０１１８】
ブローカサーバ２００側の切替準備が完了し、切替処理部１１４−１から配信状況の削除要求を受けると（Ｓ１６０４）、配信処理部１１３−１は、配信状況表６４０から当該する低速コンシューマサーバの配信状況を削除する（Ｓ１６０５）。
【０１１９】
図１６は、切替処理時に、低速コンシューマサーバ専用ブローカサーバの配信処理部により実施される配信担当登録処理の手順を示すフローチャートである。図１６に示す処理は図１３のシーケンス図におけるＳ１４０８〜Ｓ１４０９の処理に対応している。
【０１２０】
配信処理部１１３−２は、切替処理部１１４−２から切替対象となる低速コンシューマサーバの配信状況を含む低速コンシューマサーバの配信切替要求を受け取ると（Ｓ１７０１）、配信状況表６４０に受け取った低速コンシューマサーバの配信状況を登録する（Ｓ１７０２）。その後、配信担当表６２０上の当該低速コンシューマサーバのサーバ名６２１に対応する担当ブローカサーバ名６２３を自ブローカサーバ名（ここではブローカサーバ２００のサーバ名）に変更し、当該低速コンシューマサーバを自身の担当配信先に加える（Ｓ１７０３）。その後、配信処理部１１３−２は、切替処理部１１４−２に対して切替準備が完了した旨を通知する（Ｓ１７０４）。
【０１２１】
図１７は、低速コンシューマサーバ専用ブローカサーバの負荷増大時に行われる正常コンシューマサーバの配信担当ブローカサーバの切替処理を示すシーケンス図である。
【０１２２】
図１７に示す処理は、ブローカサーバ２００の負荷が大きくなり、切替処理部１１４−２により、ブローカサーバ２００が配信担当となっているコンシューマサーバ５００の中で正常配信用ブローカサーバへの切り替えが可能な正常コンシューマサーバが検知されることにより開始される。正常コンシューマサーバの具体的な検知処理については後述する（Ｓ１８０１）。切替処理部１１４−２は、正常コンシューマサーバを検知すると、配信処理部１１３−２に対して、検知した正常コンシューマサーバを指定して配信担当の切り替えを要求する(Ｓ１８０２)。以降、低速コンシューマサーバを担当するブローカサーバの切替処理におけるＳ１４０３〜Ｓ１４０６と同様、切替処理部１１４−２により、配信担当表６２０を更新し（Ｓ１８０３）、配信担当を切り替えるコンシューマサーバへの配信状況を取得して（Ｓ１８０４）、それを切替処理部１１４−２に渡す（Ｓ１８０５）。切替処理部１１４−２は、受け取った配信状況を含む切替要求をブローカサーバ１００の切替処理部１１４−１に送る（Ｓ１８０６）。
【０１２３】
ブローカサーバ１００の切替処理部１１４−１は、切替要求を受けると、配信処理部１１２−１に配信担当の切り替えを要求する（Ｓ１８０７）。その後、Ｓ１４０８〜Ｓ１４１０と同様に、配信処理部１１３−１により配信状況表６４０に配信状況を登録（Ｓ１８０８）、配信担当表６２０を更新して（Ｓ１８０９）、切替処理部１１２−１により切替準備完了をブローカサーバ２００に返す（Ｓ１８１０）。
【０１２４】
その後、ブローカサーバ２００では、Ｓ１４１１〜Ｓ１４１２と同様に、切替処理部１１４−２から配信処理部１１３−２に配信状況の削除要求がなされ（Ｓ１８１１）、配信処理部１１３−２により該当するコンシューマサーバについて、配信状況表６４０から配信状況を削除する（Ｓ１８１２）。
【０１２５】
図１８は、低速コンシューマ専用ブローカサーバの切替処理部による正常コンシューマサーバ検知処理と配信担当の切替処理の手順を示すフローチャートである。
【０１２６】
低速コンシューマサーバへのメッセージの配信を担当するブローカサーバを正常配信用ブローカサーバ１００から低速コンシューマサーバ専用ブローカサーバ２００に切り替えていくに伴い、ブローカサーバ２００が配信を担当するコンシューマサーバの数が増加し、リソース利用量が増大しいく。リソース利用量の増大は、ブローカサーバ２００の配信処理の性能劣化を引き起こす要因となる。そこで、本実施形態では、ブローカサーバ２００のリソース利用量が一定量を超えた場合に、ブローカサーバ２００が担当している正常コンシューマサーバへのメッセージ配信を正常配信用ブローカサーバ１００から行うように切り替えることで、配信負荷の偏りを防ぐ。
【０１２７】
正常コンシューマサーバの検知・切替処理において、切替処理部１１４−２は、ブローカサーバ２００のリソース利用率を算出する（Ｓ１９０１）。切替処理部１１４−２は、算出したリソース利用率と判定しきい値表７１０のリソース利用率しきい値７１３に設定されたしきい値とを比較し、リソース利用率がリソース利用率しきい値７１３を超えているか否か判定する。判定結果が「ＮＯ」であれば、切替処理部１１４−２は、切替処理を開始せずに処理を終了する（Ｓ１９０２）。
【０１２８】
Ｓ１９０２において、リソース利用率がリソース利用率しきい値７１３を超えていた場合、正常コンシューマサーバの検知処理（Ｓ１９０３〜Ｓ１９０８）が実施される。以降、正常コンシューマサーバの検知処理、及び切替処理では、図１４に示した低速コンシューマサーバの検知処理（Ｓ１５０３〜Ｓ１９１２）とほぼ同様の処理が実施される。図１８では、図１４における処理と同じ処理については、同じ参照番号が用いられている。以下、図１４と相違する部分を主に説明する。
【０１２９】
正常コンシューマサーバの検知処理では、Ｓ１５０３で取得された担当コンシューマサーバのリストのコンシューマサーバについて、Ｓ１５０５、Ｓ１５０６で得られた配信状況に基づいて滞留メッセージ数が所定数以下となっている場合に正常コンシューマサーバと判定する。具体的には、配信状況として得られた配信済メッセージＩＤ６４２と正常判定基準ＩＤとを比較し、配信済メッセージＩＤ６４２が正常判定基準ＩＤ以降のものである場合に、正常コンシューマサーバとして判定する。本実施形態では、正常判定基準ＩＤとして、メッセージバッファ１１６−２に保持されたメッセージの中で最新のメッセージのメッセージＩＤの値から、しきい値表７１０のメッセージ切替オフセット７１２に設定されている値を引いたものが用いられる。比較の結果正常コンシューマサーバでないと判定された場合、処理はＳ１５０４に戻る（Ｓ１９０７）。
【０１３０】
Ｓ１９０７において、検知対象のコンシューマサーバが正常コンシューマサーバであると判定された場合、切替処理部１１４−２は、そのコンシューマサーバ５００を定常コンシューマサーバのリストに加え、Ｓ１５０４の処理に戻る（Ｓ１９０８）。
【０１３１】
Ｓ１５０４で担当コンシューマサーバのリストにあるすべてのコンシューマサーバ５００の処理を終えていると判断された後、Ｓ１５０９と同様にして正常コンシューマサーバの配信状況を取得し（Ｓ１９０９）、Ｓ１５１０、１５１１において、ブローカサーバ１００との間で配信切替の要求、切替完了通知の受信が行われる。その後、切替処理部１１４−２は、配信処理部１１３−２に対して、配信状況表６４０から正常コンシューマサーバに関する配信状況を削除するように要求し、配信処理部１１３−１により該当する情報が配信状況表６４０から削除される（Ｓ１５１２）。
【０１３２】
本実施形態では、Ｓ１５０７において用いられる遅延判定基準ＩＤの算出と、Ｓ１９０７において用いられる正常判定基準ＩＤの算出に同じメッセージ切替オフセットを用いているが、両者を異なるオフセット値を用いて算出するようにしてもかまわない。
【０１３３】
図１７に示す切替処理においてブローカサーバ２００の配信処理部１１３−２により実施される配信担当解除処理、及びブローカサーバ１００の配信処理部１１３−１により実施される配信担当登録処理は、それぞれ、図１５、図１６に示すフローチャートに従って実施される。ただし、この場合、ブローカサーバ１００とブローカサーバ２００の関係が、図１４に示す切替処理と入れ替わっていることに留意されたい。
【０１３４】
本実施形態では、低速コンシューマサーバ、及び正常コンシューマサーバの検知において、検知処理を実施するブローカサーバとそれによってメッセージが配信されるコンシューマサーバの状態を基準として判定が行われる。メッセージ配信システム全体の処理を最適化するという観点から、自ブローカサーバの状態に加えて、切替先のブローカサーバの状態も判定基準として用いるようにしてもよい。さらに、コンシューマサーバの状態の判定にはブローカサーバ側が管理する配信状況を基にしているが、より高精度に把握するためにコンシューマサーバ内部のリソース利用率等コンシューマサーバ側が有する状態を用いても良い。
【０１３５】
また、上述した実施形態では、自ブローカサーバにおいて配信を担当するコンシューマサーバの切り替えを行うか否か判断しているがこれは任意のサーバが実施可能である。例えば、切替先のブローカサーバが自身のリソース利用率に余裕があるときに、低速コンシューマサーバの検知および切替元のブローカサーバに対する切替要求をしても良い。さらにブローカサーバ間で連携して担当するブローカサーバの切り替えを行っているが、これも任意のサーバ上で行うことができ、例えば、各ブローカサーバの状況を監視する管理サーバを設け、管理サーバ上の配信状況監視プログラム等のメッセージ配信システム監視部がブローカサーバ間で担当するコンシューマサーバを切り替えるようにしてもよい。この場合、例えば、管理サーバによって各ブローカサーバにおけるメッセージの配信状況、バッファ内のメッセージ滞留数や滞留量、あるいは、各ブローカサーバの処理負荷の状況等を収集する。そして、収集した情報に基づいて、管理サーバにより上述した実施形態と同様の手法で低速コンシューマサーバや正常コンシューマサーバを検知する。低速コンシューマサーバ、あるいは、正常コンシューマサーバが検知された場合、管理サーバにより、そのコンシューマサーバへのメッセージ配信を担当させる他のブローカサーバを決定してそれらブローカサーバ間で、そのコンシューマサーバへメッセージ配信を行うブローカサーバを切り替える。
【０１３６】
さらに、正常コンシューマサーバと低速コンシューマサーバの切替処理は別々に行われているが、低速コンシューマサーバを検知しその配信担当を移す際に、切替先のブローカサーバからその代わりとなる正常コンシューマサーバを受け取るといったように、ブローカサーバ間で担当するコンシューマサーバを交換するようにしてもかまわない。
【０１３７】
図１９は、いずれかのブローカサーバに障害が生じた際に実施されるフェールオーバ処理の手順を示したフローチャートである。本実施形態において、一方のブローカサーバに障害が生じた際には、他方のブローカサーバがその配信業務を引き継ぎ、フェールオーバする。正常配信用ブローカサーバであるブローカサーバ１００に障害が発生した場合と、低速コンシューマサーバ専用ブローカサーバであるブローカサーバ２００に障害が発生した場合とでは、ストレージ装置１０５が接続されているか否かによる処理の相違がある。
【０１３８】
通常運用時、ブローカサーバ１００及びブローカサーバ２００の切替処理部１１４は、ハートビートにより、相手方のブローカサーバが正常に稼働しているか否か相互に診断を行っている。切替処理部１１４が、ブローカサーバ２００からのハートビートが途切れたことを検出し、他方のブローカサーバに障害が発生したことを検知すると、フェールオーバ処理が開始される（Ｓ２００１）。
【０１３９】
切替処理部１１４は、まず配信処理部１１３にフェールオーバ要求を出す（Ｓ２００２）。配信処理部１１３は、フェールオーバ要求を受けると（Ｓ２００３）、メッセージ管理部１１２−１に対し、さらに、フェールオーバ要求を伝える（Ｓ２００４）。
【０１４０】
メッセージ管理部１１２は、フェールオーバ要求を受けると（Ｓ２００５）、自ブローカサーバにストレージ装置１０５が接続されているか否か判別する。本実施形態では、正常配信用ブローカサーバ１００にはストレージ装置１０５が接続されておらず、低速コンシューマサーバ専用ブローカサーバとして機能しているブローカサーバ２００にストレージ装置が接続されている。このため、ブローカサーバ２００に障害が生じた際のメッセージ管理部１１２−１による判別結果は否定的なもの（「ＮＯ」）となり、ブローカサーバ１００に障害が生じた際のメッセージ管理部１１２−２による判別結果は肯定的なもの（「ＹＥＳ」）となる（Ｓ２００６）。
【０１４１】
Ｓ２００６における判別結果が「ＮＯ」であれば、メッセージ管理部１１２は、自ブローカサーバとストレージ装置１０５との間の接続を確立し、自ブローカサーバにおいてストレージ装置１０５保持されている未配信先コンシューマサーバが存在するメッセージの利用を可能にするとともに、自ブローカサーバのメッセージバッファ１１６に保持されているメッセージの永続化を可能にする（Ｓ２００７）。この後、メッセージ管理部１１２は、配信処理部１１３にフェールオーバ完了通知を返す。また、Ｓ２００６における判別結果が「ＹＥＳ」である場合、メッセージ管理部１１２は、Ｓ２００７の処理を実施せずに、フェールオーバ完了通知を配信処理部１１３に返す（Ｓ２００８）。
【０１４２】
配信処理部１１３は、フェールオーバ完了通知が戻ってくると（Ｓ２００９）、配信状況表６４０に障害が発生したブローカサーバが配信を担当していたコンシューマサーバ５００へのメッセージの配信状況を新規に追加する（Ｓ２０１０）。配信処理部１１３は、さらに、配信担当表６２０の当該コンシューマサーバの配信担当ブローカサーバ名６２３を自ブローカサーバのサーバ名に変更した後（Ｓ２０１１）、切替処理部１１４にフェールオーバの完了を通知する（Ｓ２０１２）切替処理部１１４が配信処理部１１３からフェールオーバ完了通知を受領すると、フェールオーバ処理は終了する（Ｓ２０１３）。
【０１４３】
本実施形態では２台のブローカサーバを用いて両現用系のシステムを構成しているが、実行系と待機系ブローカサーバによるＨＡ構成を採ることも可能である。たとえば、ＨＡ構成のシステムにおいて、通常状態では実行系のブローカサーバのみでメッセージを配信し、低速コンシューマサーバが発生したときには、待機系ブローカサーバを低速コンシューマサーバ専用ブローカサーバとして動作させ、低速コンシューマサーバへのメッセージ配信のみを待機系ブローカサーバで行うようにすることもできる。この場合、低速コンシューマサーバ専用ブローカサーバは、正常コンシューマサーバへのメッセージ配信を行わないため、正常コンシューマサーバに対してより安定した配信性能を提供可能となる。
【０１４４】
また、ブローカサーバの台数は、２台である必要はなく、３台以上のブローカサーバを用いてもよい。この場合には、正常配信用ブローカサーバ、低速コンシューマサーバ専用ブローカサーバそれぞれに少なくとも１台のブローカサーバを割り当てればよく、他の負荷分散技術との組み合わせによって、さらに配信性能を向上させることも可能である。
【０１４５】
さらに、本実施形態では、初期状態において、低速コンシューマサーバ専用ブローカサーバと正常配信用ブローカサーバのそれぞれが担当するコンシューマサーバを任意のサーバとしている。予めコンシューマサーバの仕様等が判っており、低速コンシューマサーバとなる可能性のあるコンシューマサーバを判別できる場合は、予め、そのような低速コンシューマサーバとなる可能性のあるコンシューマサーバへのメッセージ配信を低速コンシューマサーバ専用ブローカサーバに、他のコンシューマサーバへのメッセージ配信を正常配信用ブローカサーバにそれぞれ割り当てておき、システムの運用中は、上述した実施形態と同様、メッセージの配信状況に応じて各ブローカサーバが担当するコンシューマサーバを切り替えるようにしてもよい。具体的には、例えば、コンシューマサーバの仕様から、基準となる所定の性能以下の性能を持つコンシューマサーバを低速コンシューマサーバ専用ブローカサーバに、所定の性能以上の性能を持つコンシューマサーバを正常用ブローカサーバに割り当てる。例えば、コンシューマサーバが備えるプロセッサの処理性能（プロセッサの種類）、クロック周波数、メモリ容量など、一般の計算機における処理性能に影響する要素を考慮してコンシューマサーバの性能を判断することができる。この場合、切替処理の発生回数の減少が見込めるため、ブローカサーバの配信性能はより安定する。
【０１４６】
さらに、本実施形態では、各コンシューマサーバがブローカサーバにより配信されるすべてのメッセージを受け取ることを想定しているが、各コンシューマサーバに配信するメッセージの種類（トピック）をあらかじめブローカサーバに登録（Subscribe）しておき、各コンシューマサーバに、登録されたトピックに応じたメッセージのみを配信（Publish）するようなPublish/Subscribe型の配信形態をとってもかまわない。この場合、配信担当の切替をトピック毎に実施するようにしてもよい。
【０１４７】
以上説明した実施形態によれば、低速コンシューマサーバへのメッセージ配信、コンシューマサーバへの配信が完了していないメッセージの永続化処理が、低速コンシューマサーバ専用ブローカサーバに集約される。これにより、正常コンシューマサーバへのメッセージ配信処理に対する永続化処理やメッセージの再送処理による処理負荷の増大の影響を低減することができる。また、低速なコンシューマサーバにメッセージの配信を行わないブローカサーバにおけるメッセージ配信の処理負荷の見積もりが容易となり、安価な計算機でも性能要件を満たすことが可能になる等、コスト面での効果もある。
【０１４８】
また、すべてのブローカサーバがストレージ装置を持つ必要はなく、メッセージの永続化が複数のブローカサーバで重複して行われることもなくなるため、ストレージ装置の容量を有効に活用することができる。これにより、ストレージ装置の構成コストを抑制することが可能となる。また、メッセージをストレージ装置に書き込むブローカサーバの台数が減少するため、複数台のブローカサーバでストレージ装置を共有した場合に生じていた書き込み排他制御を抑止することができる。さらに、ストレージ装置に書き込みをするブローカサーバが１台であれば、書き込み処理をシーケンシャルに行うことが可能である。以上のように、低速コンシューマサーバが発生した際の性能劣化を抑えることができるという効果もある。
＜第２の実施形態＞
第１の実施形態におけるメッセージ配信システム１０は、両現用系のシステム構成であるため、低速コンシューマサーバ専用ブローカサーバ２００がメッセージの配信を担当するコンシューマサーバ５００には、低速コンシューマサーバと正常コンシューマサーバが混在している。本実施形態では、低速コンシューマサーバ専用ブローカは、正常時には処理を行わず、低速コンシューマサーバが発生している間だけ低速コンシューマサーバへのメッセージの配信を行い、正常コンシューマサーバへのメッセージ配信を行うブローカサーバと低速コンシューマサーバへのメッセージ配信を行うブローカサーバとを分離する。
【０１４９】
また、第１の実施形態では、２台のブローカサーバによりメッセージを二重化して保持することで高信頼化を図っているが、本実施形態では、メッセージ二重化およびメッセージ複製の常時送付を行わず、ブローカサーバ間で担当するコンシューマサーバの切り替えが発生した時に、メッセージの複製を一括してブローカサーバに送付することで、各ブローカサーバは配信を担当するコンシューマサーバに必要なメッセージを確保する。
【０１５０】
本実施形態における計算機システムも第１の実施形態と同様、図１に示す構成を有する。以下では、第１の実施形態と相違する部分について主に説明を行い、第１の実施形態と共通する部分については説明を省略する。また、以降の説明において参照される図において、第１の実施形態と共通する部分については、第１の実施形態の説明において参照した図において用いられている参照番号と同一の参照番号が用いられる。
【０１５１】
図２０は、本実施形態において、第１の実施形態における判定しきい値表７１０に換えて用いられる判定しきい値表の概念図である。
【０１５２】
判定しきい値表７２０は、バッファ利用率しきい値７２１、メッセージ切替オフセット７２２、検知開始タイマーしきい値７２３を含む。
バッファ利用率しきい値７２１、メッセージ切替オフセット７２２は、バッファ利用率しきい値７１１、メッセージ切替オフセット７１２と同様に、低速コンシューマサーバ、あるいは正常コンシューマサーバの検知、及び検知処理の開始タイミングを判定するために用いられる。
【０１５３】
検知開始タイマーしきい値７２３は、正常コンシューマサーバの検知処理の開始トリガとなる時間を示すしきい値が設定される。本実施形態では、検知開始タイマーしきい値７２３に設定された時間間隔で、正常コンシューマサーバの検知処理が実施される。
【０１５４】
図２１は、本実施形態の正常配信用ブローカサーバの切替処理部において、低速コンシューマサーバへのメッセージ配信を担当するブローカサーバの切替処理を示すシーケンス図である。
【０１５５】
ブローカサーバ１００において低速コンシューマサーバが検知されてから切替準備完了が通知されるまでの処理（Ｓ１４０１〜Ｓ１４１０）は、第１の実施形態と同様である。本実施形態では、通常のメッセージ配信処理において、ブローカサーバ１００からブローカサーバ２００へのメッセージ複製の送付が行われないため、低速コンシューマサーバ専用ブローカサーバ２００の切替準備が完了した後で、低速コンシューマサーバへの配信が必要なメッセージの複製がブローカサーバ１００からブローカサーバ２００に送られる。
【０１５６】
ブローカサーバ１００の切替処理部１１４−１は、ブローカサーバ２００から切替準備完了通知を受け取ると、メッセージ管理部１１２−１に対して低速コンシューマサーバへの配信が必要なメッセージの複製の取得要求をする（Ｓ２２１１）。メッセージ管理部１１２−１は、切替対象となる低速コンシューマサーバに未配信であるメッセージをメッセージバッファ１１６−１から読み出し（Ｓ２２１２）、それらのメッセージを切替処理部１１４−１に渡す（Ｓ２２１３）。切替処理部１１４−１は、メッセージ管理部１１２−１から受け取ったメッセージの複製を、ブローカサーバ２００のメッセージ管理部１１２−１に送付してメッセージの複製の登録を要求する（Ｓ２２１４）。
【０１５７】
メッセージ管理部１１２−２は、受信したメッセージの複製をメッセージバッファ１１６−２に格納する（Ｓ２２１５）。メッセージバッファ１１６−２がバッファ溢れを起こす恐れがある場合、メッセージ管理部１１２−２は、メッセージの一部をストレージ装置１０５に書き込み、メッセージの永続化を行う（Ｓ２２１６）。その後、メッセージ管理部１１２−２は、ブローカサーバ１００の切替処理部１１４−１に対してメッセージ複製の登録完了を通知する（Ｓ２２１７）。また、メッセージ管理部１１２−２は、配信処理部１１３−２に対して低速コンシューマサーバへの配信開始を要求する（Ｓ２２１８）。
【０１５８】
以降、配信処理部１１３−２により低速コンシューマサーバへのメッセージ配信が実施される。なお、ブローカサーバ２００が低速コンシューマサーバへのメッセージ配信の開始以降、ブローカサーバ２００が低速コンシューマサーバにメッセージの配信を行っている間、新たにプロデューササーバ４００から配信されるメッセージについては、ブローカサーバ２００が受信しているメッセージの複製を配信し終える等、所定のタイミングでブローカサーバ１００からブローカサーバ２００に一括してメッセージの複製を送信するか、あるいは、第１の実施形態と同様に、逐次、ブローカサーバ１００からブローカサーバ２００にメッセージの複製を送信するようにすればよい。
【０１５９】
本実施形態では、処理Ｓ２２１６においてバッファ溢れの恐れがある場合に、一部のメッセージをストレージ装置１０５に書き込んでいるが、メッセージバッファ１１６−２に書き込めなかったメッセージのみ、あるいは、メッセージバッファ１１６−２から溢れたメッセージを含め、メッセージバッファ１１６−２に保持されている一部あるいはすべてのメッセージをストレージ装置１０５に書き込むようにしてもよい。
【０１６０】
図２２は、本実施形態において正常配信用ブローカサーバの切替処理部により実施される低速コンシューマサーバの検知処理と配信担当の切替処理の手順を示すフローチャートである。本実施形態における低速コンシューマサーバの検知処理と切替処理は、図１４に示した第１の実施形態における低速コンシューマサーバの検知処理、切替処理と同様におこなわれるが、第１の実施形態における切替処理のＳ１５１１とＳ１５１２との間でメッセージの複製が一括してブローカサーバ２００に送信される点で相違している。
【０１６１】
Ｓ１５１１においてブローカサーバ２００の切替処理部１１４−２から切替準備完了通知を受け取った切替処理部１１４−１は、配信状況表６４０から切替対象となるすべての低速コンシューマサーバの配信状況から配信済メッセージＩＤ６４２の最小値を取得する。配信済メッセージＩＤ６４２の最小値は、配信処理部６４０から取得してもよいし、準備完了通知を受け取る際にブローカサーバ２００から取得してもよい（Ｓ２３１２）。次に、切替処理部１１４−１は、配信済メッセージＩＤの最小値からメッセージＩＤカウンタ６１３に保持されているＩＤ値までのメッセージの複製を一括してメッセージ管理部１１２−１から取得する（Ｓ２３１３）。切替処理部１１４−１は、取得したメッセージの複製をブローカサーバ２００のメッセージ管理部１１２−２にむけて一括して送信し（Ｓ２３１４）、メッセージ管理部１１２−２から登録処理の完了が通知されるまで待つ（Ｓ２３１５）。メッセージ管理部１１２−２から登録処理の完了を受信した後、切替処理部１１４−１は、第１の実施形態と同様に削除処理を行う（Ｓ１５１２）。
【０１６２】
図２３は、正常コンシューマサーバの配信担当ブローカサーバの切替処理を示すシーケンス図である。
【０１６３】
本実施形態では、ブローカサーバ１００とブローカサーバ２００との間でメッセージの二重化が行われておらず、メッセージバッファ１１６に保持されるメッセージが同期していない。このため、ブローカサーバ２００が切替要求を発行しようとする時点でブローカサーバ１００のメッセージバッファ１１６−１に切替対象となるコンシューマサーバへの未配信メッセージが残されていない可能性がある。そこで、本実施形態では、切替処理部１１４−２が切替要求を発行する前に、ブローカサーバ間で配信担当を引き継ぐ条件を決定し、その条件が満たされた後、配信担当の切り替えが行われる。
【０１６４】
具体的に、ブローカサーバ２００の切替処理部１１４−２は、正常コンシューマサーバの発生を検知すると（Ｓ１８０１）、ブローカサーバ１００の切替処理部１１４−１に対して、検出した正常コンシューマサーバへのメッセージの配信担当の切替準備を要求する（Ｓ２４０２）。
【０１６５】
切替処理部１１４−１は、メッセージ管理部１１２−１に対して、配信の引き継ぎを行う契機となるメッセージ（配信切替メッセージ）を決定するように要求する。本実施形態では、配信切替メッセージとして切替準備の要求時点における最新メッセージ（メッセージＩＤが「メッセージＩＤカウンタ６３０に設定されている値−１」であるメッセージ）を用いるものとする（Ｓ２４０３）。メッセージ管理部１１２−１は、要求を受けるとメッセージＩＤカウンタ６３０からＩＤ値を取り出し、配信切替メッセージとするメッセージのメッセージＩＤ（配信切替メッセージＩＤ）を取得し（Ｓ２４０４）、それを切替処理部１１４−１に返す。以降、メッセージ管理部１１２−１は、配信切替メッセージＩＤ以降のメッセージを、切替対象となる正常コンシューマサーバへの配信が完了するまでメッセージバッファ１１６−１から削除せずに保持する（Ｓ２４０５）。切替処理部１１４−１は、メッセージ管理部１１２-１から受け取った配信切替メッセージＩＤをブローカサーバ２００の切替処理部１１４−２に通知する（Ｓ２４０６）。
【０１６６】
切替処理部１１４−２は、配信切替メッセージＩＤを受けた後、切替対象となるコンシューマサーバに対して、配信切替メッセージＩＤを持つメッセージの配信が完了するまで配信処理を継続する。この間のメッセージの配信処理については、図２５を参照しつつ後述する。
【０１６７】
ブローカサーバ１００から受け取った配信切替メッセージＩＤのメッセージまでメッセージの配信が完了すると、切替処理部１１４−２は、配信処理部１１３−２から配信完了通知を受け取り、配信担当の切替を開始する（Ｓ２４０７）。以降、Ｓ２０４８〜Ｓ２４１８は第１の実施形態と同様にして切替処理が行われる（Ｓ１８０２〜Ｓ１８１２）。
【０１６８】
本実施形態では、２段階で切替処理が実施されるため、切替準備要求時から実際に切り替えが行われるまでに配信状況が変化する場合が想定される。例えば、ブローカサーバ１００のメッセージバッファ１１６−１が溢れて配信切替メッセージが保持できなくなったり、切替対象となる正常コンシューマサーバに再び遅延が生じたりすることが考えられ、このような場合、切替処理を継続することが困難となる。このため、本実施形態では、これらの状況が生じたときには、切替処理をキャンセルする。
【０１６９】
図２４は、切替処理部による正常コンシューマサーバ検知処理と配信担当の切替処理の手順を示すフローチャートである。
【０１７０】
ブローカサーバ２００の切替処理部１１４−２は、検知開始タイマーのカウント値が検知開始タイマーしきい値７２３に設定された値を超えているか否か判定する（Ｓ２５０１）。検知開始タイマーのカウント値が検知開始タイマーしきい値に設定された値を超えている場合、第１の実施形態と同様の処理により正常コンシューマサーバの検知処理を実施する（Ｓ１９０３〜Ｓ１９０８）。
【０１７１】
Ｓ１９０４ですべての担当コンシューマサーバについて正常コンシューマサーバとなっているか否かの判定が行われたと判定された後、切替処理部１１４−２は、ブローカサーバ１００の切替処理部１１４−１に対して、正常コンシューマサーバのリストを含む配信切替準備要求を送信する（Ｓ２５０８）。切替処理部１１４−２は、ブローカサーバ１００の切替処理部１１４−１から配信切替メッセージＩＤを受け取ると（Ｓ２５０９）、切替中であることを示すフラグ（切替中フラグ）を「ＯＮ」にし、切替対象となっている正常コンシューマサーバに対する配信切替メッセージＩＤまでのメッセージ配信処理を配信処理部１１３−２に依頼する。なお、切替中フラグの初期状態は「ＯＦＦ」である。また、切替中フラグが「ＯＮ」である間、切替処理部１１４−２は、新たな正常コンシューマサーバの検知処理を実施しない（Ｓ２５１０）。
【０１７２】
配信切替メッセージまでメッセージの配信が完了すると、切替処理部１１４−２は、配信処理部１１３−２から配信完了通知を受ける（Ｓ２５１１）。配信完了通知を受け取った以降、切替処理部１１４−２は、第１の実施形態と同様の処理により、正常ブローカサーバへのメッセージ配信担当ブローカサーバの切り替えを実施する（Ｓ１９０９〜Ｓ１９１２）。
【０１７３】
配信担当ブローカサーバの切替処理が完了した後、切替処理部１１４−２は、再び正常コンシューマサーバ検知処理を行うため、検知開始タイマーをリセットし（Ｓ２５１６）、切替中フラグを「ＯＦＦ」にして切替処理を終了する（Ｓ２５１７）。
【０１７４】
図２５は、配信処理部によるメッセージ配信処理を示すフローチャートである。
【０１７５】
配信処理部１１３−２は、切替中フラグを参照して、切替処理中であるか否か確認する。切替中フラグが「ＯＦＦ」のときには、図９に示す第１の実施形態における配信処理と同様にして通常の配信処理を行う（Ｓ２６０１）。
【０１７６】
切替中フラグが「ＯＮ」の場合、配信処理部１１３−２は、配信切替メッセージまでメッセージの配信が完了したか否かを判定する。具体的には、配信状況表６４０から切替要求中のすべての正常コンシューマサーバについて配信状況を取得し（Ｓ２６０３）、それらすべてのコンシューマサーバについて、配信済メッセージＩＤ６４４が配信切替メッセージＩＤ−１と等しいか否かを判定する（Ｓ２６０４）。
【０１７７】
Ｓ２６０４での判定結果が「ＹＥＳ」の場合、配信処理部１１３−２は、切替処理部１１４−２に対して配信切替メッセージまでメッセージの配信が完了したことを通知する（Ｓ２６０５）。
【０１７８】
Ｓ２６０４での判定結果が「ＮＯ」の場合は、配信切替メッセージまでメッセージの配信が完了していない正常コンシューマサーバが存在するため、メッセージ配信処理が行われる。メッセージ配信処理は、図１０に示す第１の実施形態とほぼ同様に行われるが、切替中フラグが「ＯＮ」の場合、切替要求中の正常コンシューマサーバに対しては配信切替メッセージ以降のメッセージの配信は不要となる。このため、Ｓ１００３においてメッセージの配信先のコンシューマサーバが「正常待機」状態と判定されたとき、配信処理部１１３−２は、そのコンシューマサーバに対して配信切替メッセージまでメッセージの配信が完了しているか否か、すなわち、配信済メッセージＩＤ６４４が配信切替メッセージＩＤ−１に等しいか否か判定する。配信切替メッセージまでメッセージの配信が完了している場合、配信処理部１１３−２は、そのコンシューマサーバに対してメッセージ配信を行わず、そうでなければ、Ｓ１００４〜Ｓ１００６の処理を実施し、メッセージを配信する（Ｓ２６０９）。
【０１７９】
本実施形態では、以上説明した処理以外の処理については、第１の実施形態と同様の処理が行われる。なお、上述した正常コンシューマサーバの配信担当の切替処理では、配信切替メッセージを決め、そのメッセージまでのメッセージ配信をブローカサーバ２００で行った後切り替えが行われるが、低速コンシューマサーバの配信担当切替処理のように、正常コンシューマサーバの検知後に、必要なメッセージをブローカサーバ２００からブローカサーバ１００に転送して切替処理を実施するようにすることもできる。
【０１８０】
以上説明した第２の実施形態によっても第１の実施形態と同様の効果を得ることができる。さらに、第２の実施形態では、第１の実施形態のようにブローカサーバ間でメッセージ多重化していないため、メッセージバッファの内容は両ブローカサーバ間で同一とする必要はない。このため、正常配信用ブローカサーバは、自身が担当するコンシューマサーバへの配信完了したメッセージを配信完了後すぐに削除することでメッセージバッファを有効に利用することが可能となる。これにより、システム全体としてメッセージ配信に必要なメモリ容量を抑制することができ、システムをより安価に構築することができる。また正常配信用ブローカサーバを２台以上設けた場合、それぞれが持つメッセージバッファ領域を有効に利用できるため、処理の負荷分散がより有効に働くことが期待できる。
【０１８１】
また、本実施形態では、ブローカサーバ間で、必要な時に必要なメッセージの複製だけを一括して送ればよいため、メッセージの複製の転送に要するデータ通信量と処理時間を削減することができる。
【０１８２】
＜第３の実施形態＞
第１の実施形態において、低速コンシューマサーバの数が増大すると、低速コンシューマサーバ専用ブローカサーバ２００にかかる負荷が増大し、低速コンシューマサーバへの配信処理がさらに遅れてしまうことが考えられる。低速コンシューマサーバに対しては元々配信が遅延しているため、このような問題が生じる可能性は少ないが、低速コンシューマサーバ専用ブローカサーバ２００にかかる負荷の増大が、正常コンシューマサーバに復帰する直前の低速コンシューマサーバに対し配信遅延を発生させてしまう可能性がある。
【０１８３】
本実施形態では、第１の実施形態において、さらに低速コンシューマサーバ専用ブローカサーバを追加することで、上記問題に対応できるようにしている。以下では、第２の実施形態と同様、第１の実施形態と相違する部分について主に説明を行ない、第１の実施形態と共通する部分については説明を省略する。また、以降の説明において参照される図において、第１の実施形態と共通する部分については、第１の実施形態の説明において参照した図において用いられている参照番号と同一の参照番号が用いられる。
【０１８４】
図２６は第３の実施形態にける計算機システムのハードウェア構成を示す簡略化されたブロック図である。
【０１８５】
本実施形態の計算機システムは、メッセージ配信システム２０を構成するブローカサーバに新たに低速コンシューマ専用ブローカサーバとして機能するブローカサーバ３００を有することと、ストレージ装置１０５に換えて、ブローカサーバ２００、３００によって共有される共有ストレージ装置８００を有する点を除くと、第１の実施形態の計算機システムと同様に構成される。
【０１８６】
ブローカサーバ３００は、ブローカサーバ１００、ブローカサーバ２００と同様にＣＰＵ３０１、メモリ３０２、通信インタフェース３０３、及びＩ／Ｏインタフェース３０４を有して構成される。ブローカサーバ３００は、図２に示すブローカサーバ１００と同様のプログラムモジュール、テーブル類を有する。以下、特にブローカサーバ１００、ブローカサーバ２００が有するプログラムモジュール、テーブル類と区別する必要がある場合には、メッセージ管理部１１２−３、配信処理部１１３−３のように、参照番号に添え字“−３”を付加して引用する。
【０１８７】
本実施形態において、ブローカサーバ３００は、通常時においてはメッセージの配信処理を行わない。ブローカサーバ２００が担当する低速コンシューマサーバの数が増加し、ブローカサーバ２００の負荷が増大した場合、ブローカサーバ３００は、一部の低速コンシューマサーバの配信担当をブローカサーバ２００から引き継ぎ、メッセージ配信処理を行い、ブローカサーバ２００との間で、低速コンシューマサーバへのメッセージ配信処理の負荷を分散させる。
【０１８８】
共有ストレージ装置８００は、通常時、ブローカサーバ２００、及びブローカサーバ３００の双方に接続され、両者から共有して利用される。また、ブローカサーバ２００、またはブローカサーバ３００に障害が生じた際、ブローカサーバ１００から共有ストレージ８００に格納されているデータにアクセスできるよう、ブローカサーバ１００とも接続可能となるように構成される。なお、本実施形態では、ストレージ装置８００における排他制御によるアクセス性能の低下を抑止するため、ブローカサーバ２００だけがストレージ装置へのメッセージ書き込みを行い、ブローカサーバ３００はストレージ装置からのメッセージ読み出しのみを行うように処理が行われる。
【０１８９】
本実施形態では、通常時のメッセージ配信、ブローカサーバ１００とブローカサーバ２００との間の配信担当の切替処理など、特に断りのない限りにおいて第１の実施形態と同様に行われる。したがって、ここでは、ブローカサーバ２００とブローカサーバ３００との間で行われる配信担当の切替処理についてのみ説明を行う。以降では第３の実施形態におけるコンシューマサーバ配信担当切替処理について説明する。ブローカサーバ１００とブローカサーバ２００の間でのコンシューマサーバ配信担当切替処理については、第１の実施形態に記載したとおりである。その他の処理についても、特に断りがない限りは第１の実施形態と同一である。
【０１９０】
図２７は、本実施形態において切替あるいは切戻コンシューマサーバ検知処理開始判定に用いられるしきい値のセットを示す判定しきい値表の概念図である。判定しきい値表７３０は、ブローカサーバ２００とブローカサーバ３００により、両ブローカサーバ間の配信担当切替処理に用いられる。なお、ブローカサーバ１００とブローカサーバ２００との間の配信担当切替処理では、本実施形態においても、第１の実施形態において説明した判定しきい値表７１０が用いられる。
【０１９１】
判定しきい値表７３０は、切替用リソース利用率しきい値７３１、切戻用リソース利用率しきい値７３６を含む。両リソース利用率しきい値は第１の実施形態における判定しきい値表７１０のリソース利用率しきい値７１３と同様、ＣＰＵ利用率７３２、７３７、ネットワーク利用率７３３、７３８、メモリ利用率７３４、７３９、及び判定方式７３５、７４０をその副項目として有する。判定しきい値表７３０の各値は、他のテーブルと同様に、ブローカサーバの管理インタフェースを介して、その設定値を変更することが可能である。
【０１９２】
切替用リソース利用率しきい値７３１は、ブローカサーバ２００における切替コンシューマサーバ検知処理開始の基準として用いられる。ブローカサーバ２００のリソース利用率がしきい値７３１を上回るとき、負荷が増大しているとみなされ、切替対象となるコンシューマサーバを決定し、そのコンシューマサーバへのメッセージ配信処理がブローカサーバ３００に引き継がれる。
【０１９３】
切戻用リソース利用率しきい値７３６は、ブローカサーバ３００における切戻コンシューマサーバ検知処理開始の基準として用いられる。ブローカサーバ２００のリソース利用率がしきい値７３６を下回るとき、負荷の増大が解消されたとみなされ、ブローカサーバ３００が担当しているコンシューマサーバへのメッセージの配信処理がブローカサーバ２００に戻される。
【０１９４】
図２８は、本実施形態における、低速コンシューマサーバの配信担当切替処理、低速コンシューマサーバへのメッセージ配信処理、及びメッセージ削除処理を示すシーケンス図である。
【０１９５】
ブローカサーバ２００からブローカサーバ３００への低速コンシューマサーバの配信担当切替処理は、ブローカサーバ２００の負荷増大を契機に行われる。この切替処理では、ブローカサーバ２００上で、最も配信が遅延しているコンシューマサーバから順に１台ずつ配信担当がブローカサーバ３００に引き継がれる。
【０１９６】
処理Ｓ１４０１〜Ｓ１４１２は、ブローカサーバ２００における低速コンシューマサーバ検知の後、低速コンシューマサーバに対するメッセージ配信処理をブローカサーバ２００からブローカサーバ３００に切り替える切替処理である。この切替処理は、図１３に示す第１の実施形態においてブローカサーバ１００により実施される処理がブローカサーバ２００で、同じく、第１の実施形態においてブローカサーバ２００により実施される処理がブローカサーバ３００でそれぞれ行われる点を除けば、第１の実施形態の切替処理と同様のものである。
【０１９７】
処理Ｓ８１４〜Ｓ８１５、Ｓ３１１６〜Ｓ３１１７、及びＳ８１８〜Ｓ８２７からなる一連の処理は、ブローカサーバ３００における低速コンシューマサーバへのメッセージ配信処理である。Ｓ８１４〜Ｓ８１５、及びＳ８１８〜Ｓ８２７で実施される処理は、図７に示した第１の実施形態におけるブローカサーバ１００によるメッセージ配信処理（Ｓ８１４〜Ｓ８２７）において対応する参照番号の処理と同一の処理である。ブローカサーバ３００により実施されるメッセージ配信処理は、その主体がブローカサーバ３００であること、メッセージの読み出し処理（図７におけるＳ８１７）が後述するＳ３１１６、Ｓ３１１７の処理に置き換えられていること、及び、削除確認のための処理（図７におけるＳ８２４〜Ｓ８２６）の処理が実施されないことを除き、図７に示すメッセージ配信処理と同様に行われる。
【０１９８】
本実施形態においては、配信が最も遅れているコンシューマサーバから順にブローカサーバ３００に割り当てられる。このため、ブローカサーバ３００のメッセージ管理部１１２−３は、Ｓ３１１６において、共有ストレージ装置８００に格納されている古いメッセージから順にメッセージを取得する。メッセージ取得の際、メッセージ管理部１１２−３は、共有ストレージ装置８００から要求されたメッセージＩＤ以降のメッセージを一定量一括して取得し、メッセージバッファ１１６−３に一定期間保持する。そして、Ｓ３１１７において、メッセージバッファ１１６−３に保持したメッセージを適宜コンシューマサーバに配信する。メッセージをメッセージバッファ１１６−３に一時的に保持することで、再送処理や他のコンシューマサーバに同じメッセージを配信する際に、ストレージ装置からのメッセージの読み込みを避けることができる。また、要求されたメッセージＩＤ以降のメッセージを一括して取得しておくことで、後で配信するメッセージの先読みと、ストレージ装置からのシーケンシャルな読み出し処理による処理効率の向上を期待できる。
【０１９９】
処理Ｓ３０２４〜Ｓ３０３５は、ブローカサーバ２００におけるメッセージ削除処理である。本実施形態では、複数台のブローカサーバで共有ストレージ装置８００に格納されているメッセージを利用するため、メッセージ削除時には、少なくとも共有ストレージ装置８００を利用するすべてのブローカサーバにとって、削除対象としているメッセージが不要であることを確認しなければならない。
【０２００】
ブローカサーバ２００のメッセージ管理部１１２−２は、あらかじめ定められたタイミングでメッセージ削除処理を開始する。メッセージ削除処理は、所定時間間隔で定期的に行われるか、あるいは、ストレージ装置８００の利用状況やブローカサーバ２００の負荷状況等、あらかじめ所定の基準を設けておき、その基準に従ったタイミングで開始されてよい（Ｓ３０２４）。
【０２０１】
メッセージ管理部１１２−２は、メッセージ削除処理を開始すると、配信処理部１１２−２に対して削除可能なメッセージのメッセージＩＤを要求する（Ｓ３０２５）。配信処理部１１３−２は、この要求を受けると、配信状況表６４０から配信済メッセージＩＤ６４２の最小値を削除可能メッセージＩＤとして取得し（Ｓ３０２６）、この削除可能メッセージＩＤをメッセージ管理部１１２−２に渡す（Ｓ３０２７）。メッセージ管理部１１２−２は、削除可能メッセージＩＤを受け取った後、他のブローカサーバのメッセージ管理部１１２から同様に削除可能メッセージＩＤの取得を要求する（Ｓ３０２８）。
【０２０２】
削除可能メッセージＩＤの要求を受けた他のブローカサーバのメッセージ処理部１１２は、ブローカサーバ２００のメッセージ管理部１１２−２と同様、配信処理部１１３に削除可能メッセージＩＤを要求し（Ｓ３０２９）、配信処理部１１３からそれを受け取ると（Ｓ３０３０、Ｓ３０３１）、その削除可能メッセージＩＤをブローカサーバ２００のメッセージ管理部１１２−２に返す（Ｓ２０３２）。なお、図２８ではブローカサーバ３００のみについてこの処理を図示しているが、他のブローカサーバが存在する場合は、同様の処理が他のブローカサーバを対象として行われる。
【０２０３】
ブローカサーバ２００の配信処理部１１３−２は、メッセージ配信システム２０内の全ブローカサーバからの削除可能メッセージＩＤを取得した後、それらのＩＤ値の中で最小のＩＤ値をシステム全体としての削除可能メッセージＩＤとして得る（Ｓ３０３４）。メッセージ管理部１１２−２は、Ｓ３０３４で得た削除可能メッセージＩＤ以前のメッセージＩＤを持つメッセージを共有ストレージ装置８００から削除する（Ｓ３０３５）。
【０２０４】
図２９は、切替対象コンシューマサーバの検知処理と配信担当の切替処理の手順を示すフローチャートである。
【０２０５】
切替処理部１１４−２は、ブローカサーバ２００のリソース利用率を求め（Ｓ３１０１）、リソース利用率が切替用リソース利用率しきい値７３１を上回るか否か判定する（Ｓ３１０２）。
【０２０６】
リソース利用率が切替用リソース利用率しきい値７３１以下である場合は、低速コンシューマサーバの切替処理は行われない。一方、リソース利用率が切替用リソース利用率しきい値７３１を上回る場合、切替処理部１１４−２は、配信担当表６２０から担当コンシューマサーバのリストを取得し（Ｓ３１０３）、配信状況表６４０から担当する全てのコンシューマサーバについて配信状況を取得する（Ｓ３１０４）。その後、切替処理部１１４−２は、担当する全てのコンシューマサーバの配信済メッセージＩＤ６４２を確かめ、配信済メッセージＩＤ６４２の中で値が最も小さい配信済メッセージＩＤを持つコンシューマサーバを切替対象の低速コンシューマサーバとして選定する（Ｓ３１０５）。
【０２０７】
以降、切替処理部１１３−２は、選定したコンシューマサーバの配信担当切替処理を実施する。この処理は、図１４に示す第１の実施形態におけるブローカサーバ１００による配信担当切替処理Ｓ１５０９〜Ｓ１５１２と同様にして行われる。この場合、第１の実施形態におけるブローカサーバ１００の処理をブローカサーバ２００が、同じく、ブローカサーバ２００の処理をブローカサーバ３００が実施することに留意されたい。
【０２０８】
図３０は、ブローカサーバ３００からブローカサーバ２００への配信担当の切戻処理を示すシーケンス図である。本実施形態では、ブローカサーバ２００の負荷増大が解消したことを契機に、ブローカサーバ３００のコンシューマサーバの切戻処理を行う。切り戻しは、ブローカサーバ３００において、最も配信処理が進んでいるコンシューマサーバから順に１台ずつ行われる。
【０２０９】
ブローカサーバ３００の切替処理部１１４−３は、ブローカサーバ２００の切替処理部１１４−２に対して、リソース利用率を要求する（Ｓ３２０１）。ブローカサーバ２００の切替処理部１１４−２は、切替処理部１１４−３からの要求に応じて、ブローカサーバ２００のリソース利用率を求め（Ｓ３２０２）、ブローカサーバ３００の切替処理部１１４−３に求めたリソース利用率を返す（Ｓ３２０３）。
【０２１０】
ブローカサーバ３００の切替処理部１１４−３は、受け取ったリソース利用率に基づいて、ブローカサーバ２００に対してコンシューマサーバを切り戻すことが可能かどうかを判定し、切り戻すことが可能な場合には切り戻しの対象とすることのできるコンシューマサーバを検知する（Ｓ３２０４）。
【０２１１】
Ｓ３２０４以降は、図１７に示す第１の実施形態における、ブローカサーバ２００からブローカサーバ１００への正常コンシューマサーバの配信担当切替処理Ｓ１８０２〜Ｓ１８１２と同様に行われる。この場合、第１の実施形態におけるブローカサーバ１００の処理をブローカサーバ２００が、同じく、ブローカサーバ２００の処理をブローカサーバ３００が実施し、切り戻しの対象としているコンシューマサーバが実施例１の正常ブローカサーバに対応していることに留意されたい。
【０２１２】
図３１は、切替処理部による切戻コンシューマサーバの検知処理と配信担当の切替処理の手順を示すフローチャートである。
【０２１３】
切替処理部１１４−３は、ブローカサーバ２００からリソース利用率を取得し（Ｓ３１０１）、ブローカサーバ２００から取得したリソース利用率と切戻用リソース利用率しきい値７３６に設定されているしきい値とを比較し、取得したリソース利用率が切戻用リソース利用率しきい値７３６に設定されているしきい値を下回るか否か判定する（Ｓ３３０２）。
【０２１４】
取得したリソース利用率が切戻用リソース利用率しきい値７３６に設定されているしきい値を上回る場合には、コンシューマサーバの切戻処理は行われない。一方、取得したリソース利用率が切戻用リソース利用率しきい値７３６に設定されているしきい値を下回る場合、切替処理部１１４−３は、配信担当表６２０から担当コンシューマサーバのリストを取得し（Ｓ３３０３）、配信状況表６４０から担当する全てのコンシューマサーバの配信状況を取得する（Ｓ３３０４）。その後、切替処理部１１４−３は、担当する全てのコンシューマサーバの配信済メッセージＩＤ６４２を確かめ、配信済メッセージＩＤ６４２の中で値が最も大きい配信済メッセージＩＤを持つコンシューマサーバを切戻対象のコンシューマサーバとして選定する（Ｓ３３０５）。
【０２１５】
以降、切替処理部１１３−３は、選定したコンシューマサーバの配信担当の切戻処理を実施する。この処理は、図１８に示す第１の実施形態におけるブローカサーバ１００による配信担当切替処理Ｓ１９０９〜Ｓ１９１２と同様にして行われる。この場合、第１の実施形態におけるブローカサーバ１００の処理をブローカサーバ２００が、同じく、ブローカサーバ２００の処理をブローカサーバ３００が実施し、切り戻しの対象としているコンシューマサーバが実施例１の正常ブローカサーバに対応していることに留意されたい。
【０２１６】
以上説明した第３の実施形態によっても第１の実施形態と同様の効果を得ることができる。さらに本実施形態では、低速コンシューマサーバへのメッセージ配信が複数の低速コンシューマサーバ専用ブローカサーバで行われるので、これら複数のブローカサーバ間で低速コンシューマサーバへの配信処理の負荷を分散させることができる。
【０２１７】
第３の実施形態では、第１の実施形態の計算機システムに低速コンシューマサーバ専用ブローカサーバを追加したものであるが、第２の実施形態の計算機システムにおいて、同様にして低速コンシューマサーバ専用ブローカを追加することもできる。また、第３の実施形態においては、２台の低速コンシューマサーバ専用ブローカサーバを用いているが、低速コンシューマサーバ専用ブローカサーバを３台以上にしてもかまわない。さらに、第３の実施形態では、追加されたブローカサーバを低速コンシューマサーバ専用ブローカサーバの負荷が増大するまでは配信処理を実施させずに起動状態で待機させているが、通常時に配信処理を実施するようにしてもかまわない。例えば、ブローカサーバ２００の負荷が小さいうちは、ブローカサーバ３００を正常配信用ブローカサーバとして正常コンシューマサーバの配信処理の負荷分散のために稼働させ、ブローカサーバ２００の負荷が増加してきたら、ブローカサーバ３００を低速コンシューマサーバ専用ブローカとして用いるといったように、ブローカサーバの種別を動的に変更してもよい。
【０２１８】
以上説明した実施形態によれば、低速コンシューマサーバへのメッセージの配信処理、あるいは、ストレージ装置へのメッセージの永続化の処理を特定のブローカサーバに集約しているので、低速コンシューマサーバの発生時においても、ブローカサーバのリソースを効率的に利用することができ、コンシューマサーバへの安定したメッセージの配信を実現することができる。
【０２１９】
本発明は、上述した各実施形態によって限定されるものではなく、本発明の主旨から逸脱しない範囲において様々な態様を採りえるものであることは言うまでもない。たとえば、上述した各実施形態では、各コンシューマサーバへ配信すべきメッセージの滞留量を得るために、各コンシューマサーバに配信した最後のメッセージのメッセージＩＤを利用しているが、各コンシューマサーバへの配信が完了していないメッセージの数を直接的に管理してもよい。具体的には、各コンシューマサーバへのメッセージ配信時にカウンタ値をインクリメントし、確認応答受信時にそのカウンタをデクリメントすることで、滞留メッセージ量を直接的に管理することができる。
【０２２０】
また、上述した実施形態では、プロデューササーバから配信されるメッセージを１台の通常配信用ブローカサーバのみが受信し、そのコピーを他のブローカサーバに転送しているが、プロデューササーバにおいて、その配信順と共に個々のメッセージを一意に識別できる識別子を配信メッセージに付加し、すべてのブローカサーバでプロデューササーバからの配信メッセージを受信するようにしてもよい。このようにすることで、正常配信用ブローカサーバの処理負荷をさらに低減させ、より効率よくメッセージ配信を行うことが可能となる。
【符号の説明】
【０２２１】
１００、２００、３００・・・ブローカサーバ
４００・・・プロデューササーバ
５００・・・コンシューマサーバ
１０５・・・ストレージ装置
１０６・・・ネットワーク
８００・・・共有ストレージ装置
１１１・・・データ送受信部
１１２・・・メッセージ管理部
１１３・・・配信処理部
１１４・・・切替処理部
１１５・・・管理インタフェース
１１６・・・メッセージバッファ
６１０・・・ブローカサーバ表
６２０・・・配信担当表
６３０・・・メッセージＩＤカウンタ
６４０・・・配信状況表
７１０、７２０、７３０・・・判定しきい値表
【図１】
0005439219.tif 000002
【図２】
0005439219.tif 000003
【図３】
0005439219.tif 000004
【図４】
0005439219.tif 000005
【図５】
0005439219.tif 000006
【図６】
0005439219.tif 000007
【図７】
0005439219.tif 000008
【図８】
0005439219.tif 000009
【図９】
0005439219.tif 000010
【図１０】
0005439219.tif 000011
【図１１】
0005439219.tif 000012
【図１２】
0005439219.tif 000013
【図１３】
0005439219.tif 000014
【図１４】
0005439219.tif 000015
【図１５】
0005439219.tif 000016
【図１６】
0005439219.tif 000017
【図１７】
0005439219.tif 000018
【図１８】
0005439219.tif 000019
【図１９】
0005439219.tif 000020
【図２０】
0005439219.tif 000021
【図２１】
0005439219.tif 000022
【図２２】
0005439219.tif 000023
【図２３】
0005439219.tif 000024
【図２４】
0005439219.tif 000025
【図２５】
0005439219.tif 000026
【図２６】
0005439219.tif 000027
【図２７】
0005439219.tif 000028
【図２８】
0005439219.tif 000029
【図２９】
0005439219.tif 000030
【図３０】
0005439219.tif 000031
【図３１】
0005439219.tif 000032