説明

メッセージ処理システム、メッセージ処理装置及びメッセージ処理方法

【課題】ガベージコレクションに伴うシステム応答時間の悪化を回避することを目的とする。
【解決手段】メッセージを処理するアプリケーションが動作する複数のサーバで構成されたサーバクラスタを含むメッセージ処理システムは、所定の規則に基づいて、受信したメッセージの振り分け先のサーバを選択する振り分け装置を有し、前記サーバクラスタは、各サーバの状態を管理するサーバ状態管理部と、前記振り分け先のサーバの状態に応じて、前記メッセージを転送するサーバを決定するメッセージ転送部と、を有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メッセージ処理システム、メッセージ処理装置及びメッセージ処理方法に関する。
【背景技術】
【0002】
Java言語のような一部のプログラミング言語では、メモリ管理の簡便化を目的として、メモリ解放を自動化するガベージコレクション(GC:Garbage Collection)が採用されている。ガベージコレクションは利便性の高い機能であるが、その反面、メモリの自動解放処理中にシステムが一時停止するなどの影響がある。
【0003】
特許文献1では、メソッド内部でのみ利用されるオブジェクトをガベージコレクション対象外の領域に格納することにより、ガベージコレクションの影響を抑えようとしている。しかし、この方式ではメソッドをまたがって存在するようなオブジェクトが多く存在する場合には効果が得られない。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2004−78750号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上記のように、ガベージコレクションは、システムの一時停止などにより、システム応答時間に影響を及ぼす。電話サービスのように高品質なサービスが要求されるサーバにおいてガベージコレクションを適用すると、システムの一時停止によってサービス品質が低下する恐れがある。
【0006】
本発明は、ガベージコレクションに伴うシステム応答時間の悪化を回避することを目的とする。
【課題を解決するための手段】
【0007】
上記の課題を解決するため、本発明のメッセージ処理システムは、
メッセージを処理するアプリケーションが動作する複数のサーバで構成されたサーバクラスタを含むメッセージ処理システムであって、
所定の規則に基づいて、受信したメッセージの振り分け先のサーバを選択する振り分け装置を有し、
前記サーバクラスタは、
各サーバの状態を管理するサーバ状態管理部と、
前記振り分け先のサーバの状態に応じて、前記メッセージを転送するサーバを決定するメッセージ転送部と、
を有することを特徴とする。
【0008】
また、本発明のメッセージ処理装置は、
メッセージを処理する複数のアプリケーションが動作するメッセージ処理装置であって、
各アプリケーションの状態を管理するアプリケーション状態管理部と、
各アプリケーションの状態に応じて、受信したメッセージを転送するアプリケーションを決定するメッセージ転送部と、
を有することを特徴とする。
【0009】
また、本発明のメッセージ処理方法は、
アプリケーションが動作する複数のサーバで構成されたサーバクラスタでメッセージを処理するメッセージ処理方法であって、
前記サーバクラスタの外部の振り分け装置により、所定の規則に基づいて、受信したメッセージの振り分け先のサーバを選択するステップと、
前記サーバクラスタにより、各サーバの状態を管理するステップと、
前記サーバクラスタにより、前記振り分け先のサーバの状態に応じて、前記メッセージを転送するサーバを決定するステップと、
を有することを特徴とする。
【発明の効果】
【0010】
本発明の実施例によれば、システム応答時間を改善することが可能になる。
【図面の簡単な説明】
【0011】
【図1】本発明の実施例に係るシステムの全体構成を示す図
【図2】本発明の実施例に係るサーバクラスタの構成を示す図
【図3】図2に示す振り分け機能部及びクラスタ機能部を詳細に示す図
【図4】本発明の実施例に係る動作シーケンスを示す図(ガベージコレクションが発生していない場合)
【図5】本発明の実施例に係る動作シーケンスを示す図(ガベージコレクションが発生している場合)
【図6】本発明の変形例に係るサーバの構成を示す図
【発明を実施するための形態】
【0012】
以下、図面を参照して本発明の実施例について説明する。
【0013】
本発明の実施例では、ガベージコレクションを採用した複数のサーバで構成されたサーバクラスタを含むシステムについて説明する。他サーバ又は端末などの対向装置からのメッセージは、サーバクラスタの各サーバにより処理される。
【0014】
このため、本実施例のシステムは、メッセージをサーバクラスタの各サーバに振り分ける振り分け装置(ロードバランサ)を含む。ロードバランサは、対向装置からメッセージを受信し、所定の規則に基づいて、受信したメッセージの振り分け先のサーバを選択する。
【0015】
ガベージコレクションの発生状況は、ガベージコレクションの影響を受けない外部機能(クラスタ機能部)によって管理されており、ガベージコレクションの発生状況のようなサーバの状態に応じて、受信したメッセージは、適切なサーバのアプリケーションに転送される。例えば、ロードバランサで選択された振り分け先のサーバでガベージコレクションが発生している場合に、クラスタ機能部は、ガベージコレクションの発生していないサーバにメッセージを転送する。
【0016】
このようにして、ロードバランサに負荷を集中させることなく、ガベージコレクションに伴う応答時間の悪化を回避することができる。
【0017】
<システムの全体構成>
図1は、本発明の実施例に係るシステムの全体構成を示す図である。本実施例のシステムは、サーバクラスタ100と、対向装置600とを有する。サーバクラスタ100は、IP(Internet Protocol)ネットワーク500のような通信網を介して、他サーバ610や端末620のような対向装置600に対してサービスを提供する。
【0018】
具体的には、サーバクラスタ100は、ロードバランサ200と、サーバ群300と、プラットフォーム管理装置400とで構成される。
【0019】
ロードバランサ200は、他サーバ610及び端末620からのメッセージを各サーバに振り分ける装置である。なお、メッセージとは、サーバ300上のアプリケーションで処理される対向装置600からの信号であり、例えば、対向装置600から送信されたリクエストと、各サーバ300からのリクエストに対して対向装置600から送信されたレスポンスとを含む。
【0020】
各サーバ300上では、メッセージを処理するアプリケーションが動作している。各サーバ300には、ガベージコレクションが採用されており、アプリケーションが動的に確保したメモリ領域のうち、不要になった領域は自動的に解放される。
【0021】
プラットフォーム管理装置400は、サーバクラスタ100を管理する装置である。プラットフォーム管理装置400は、保守ネットワーク700に接続されており、保守者はプラットフォーム管理装置400を利用してサーバクラスタの管理を行うことができる。
【0022】
<サーバクラスタの構成>
図2は、本発明の実施例に係るサーバクラスタ100の構成を示す図である。前述のようにサーバクラスタ100には、ロードバランサ200とサーバ群300とが含まれる。
【0023】
具体的には、ロードバランサ200は、振り分け機能部210を有する。対向装置600は、振り分け機能部210がオープンするUDP(User Datagram Protocol)ポート又はTCP(Transmission Control Protocol)ポートをサーバクラスタ100への宛先ポートとして認識している。振り分け機能部210は、対向装置600から送信されたメッセージを受信し、サーバ群300に振り分ける。例えば、対向装置600から送信されるHTTP(Hypertext Transfer Protocol)又はSIP(Session Initiation Protocol)のリクエストや、各サーバ300からのリクエストに対する応答メッセージは、ロードバランサ200上の振り分け機能部210で受信され、サーバ群300に振り分けられる。
【0024】
サーバ300は、クラスタ機能部310によってサーバクラスタを構成している。各サーバ300では、JavaVM(Java Virtual Machine)320上で動作するアプリケーション330が稼働している。JavaVM320とは、Javaアプリケーション330を実行する環境を提供するソフトウェアであり、ガベージコレクションは、JavaVM320上で発生する。アプリケーション330は、振り分け機能部210及びクラスタ機能部310を介して、対向装置600からのメッセージを受信する。クラスタ機能部310は、JavaVM320上に実装しないこととする。このため、クラスタ機能部310においてガベージコレクションは発生しない。アプリケーション330がクラスタ機能部310と連携して動作するために、アプリケーション330は、JNI(Java Native Interface)又はRPC(Remote Procedure Call)などを利用して、JavaVM320の外部の機能を呼び出してもよい。
【0025】
図3は、振り分け機能部210とクラスタ機能部310とを詳細に示す図である。
【0026】
振り分け機能部210は、振り分け先制御部211を有する。振り分け先制御部211は、所定の規則に基づいて、対向装置600から受信したメッセージ(IPパケット)をサーバクラスタ100の各サーバ300に振り分ける。例えば、振り分け先制御部211は、ラウンドロビン、重み付けラウンドロビン、又は負荷の少ないサーバ300を選択する方法などに基づいて、受信したメッセージの振り分け先のサーバを選択する。
【0027】
クラスタ機能部310は、メッセージ転送部311とサーバ状態管理部312とを有する。
【0028】
サーバ状態管理部312は、プラットフォーム管理装置400からクラスタ構成の設定に関する情報を受信すると共に、各サーバ300の状態を管理する。サーバ状態管理部312は、プラットフォーム管理装置400から、例えば、サーバクラスタが何台のサーバで構成されているか、どのサーバがメッセージ処理に利用可能であるかなどを受信する。また、サーバ状態管理部312は、各サーバ300の状態として、例えば、アプリケーション330の死活状態及び障害発生状況、サーバ300の負荷状態、JavaVM320のGC状態などを管理する。GC状態とは、ガベージコレクションによるアプリケーション330の稼働・停止状態を示すデータである。GC状態の取得は、JavaVM320が提供するJVMTI(Java Virtual Machine Tool Interface)によって取得可能である。
【0029】
メッセージ転送部311は、振り分け機能部210で選択されたサーバの状態に応じて、メッセージを実際に転送するサーバを決定し、メッセージをアプリケーション330に転送する。例えば、振り分け機能部210で選択されたサーバでガベージコレクションが発生している場合、メッセージ転送部311は、他のサーバにメッセージを転送する。また、アプリケーション330のプロセスが停止している場合、アプリケーション330に障害が発生している場合、メモリの利用率が予め設定しておいた閾値をオーバーした場合、又はサーバ300の負荷が高い場合にも、メッセージ転送部311は、他のサーバにメッセージを転送してもよい。メッセージ転送先のサーバは、サーバ状態管理部312を参照して決定されてもよい。例えば、メッセージ転送先のサーバは、ガベージコレクションが発生していないサーバでもよく、予め決められた予備のサーバでもよく、負荷の少ないサーバでもよい。
【0030】
また、メッセージ転送部311は、メッセージ処理結果のような信号を対向装置600に返信する。対向装置600とサーバクラスタ100が信号を送受信する場合、実際にアプリケーション330の処理を実行しているのは分散されたサーバ300上であるが、対向装置600にはロードバランサ200上の振り分け機能部210と信号をやりとりしているように見せる。このようにして、内部サーバ構成が隠蔽される。従って、各サーバ300上のアプリケーション330が信号を送信する場合も、対向装置600に対して直接IPパケットを送信するのではなく、メッセージ転送部311及び振り分け機能部210を介して信号を送信する。
【0031】
<サーバクラスタの動作シーケンス>
図4及び図5は本発明の実施例に係る動作シーケンスを示す図である。
【0032】
図4は、振り分け機能部210で選択されたサーバ(1)300でガベージコレクションが発生していない場合に相当する。対向装置600からメッセージを受信すると、振り分け機能部210(振り分け先制御部211)は、所定の規則に基づいて振り分け先のサーバ(1)300を選択し、受信したメッセージを振り分け先のサーバ(1)300上のメッセージ転送部311に転送する(S401)。メッセージ転送部311は、自サーバ(1)のサーバ状態管理部312にアプリケーション330の状態を問い合わせる(S402)。サーバ状態管理部312から特に問題がないとの応答が返ってきた場合(S403)、メッセージ転送部311は、アプリケーション330にメッセージを渡して動作を開始させる。アプリケーション330が処理の結果として対向装置600へのメッセージの送信を要求する場合(S405)、メッセージ転送部311は、振り分け機能部210を介してメッセージを対向装置600へ送信する(S406)。
【0033】
図5は、振り分け機能部210で選択されたサーバ(1)でガベージコレクションが発生している場合に相当する。サーバ(1)上のJavaVM320がガベージコレクションを開始すると、アプリケーション330の動作が一時停止する。このように、ガベージコレクションが発生すると、サーバ(1)のサーバ状態管理部312はGC発生イベントを受信する(S501)。この状態で振り分け機能部210(振り分け先制御部211)が対向装置600からメッセージを受信し、振り分け先のサーバ300としてサーバ(1)300を選択すると、受信したメッセージは、振り分け先のサーバ(1)300上のメッセージ転送部311に転送される(S502)。メッセージ転送部311は、自サーバ(1)のサーバ状態管理部312にアプリケーション330の状態を問い合わせると(S503)、サーバ状態管理部312から「GC実施中」との応答を受ける(S504)。従って、メッセージ転送部311は、予め決められたサーバ300の中から転送先のサーバ(2)300を決定し、メッセージを転送する(S505)。メッセージを受信した転送先のサーバ(2)300では、メッセージ転送部311がメッセージを受信し、アプリケーション330にメッセージを渡す(S506)。アプリケーション330が対向装置600への信号の送信を要求する場合(S507)、メッセージ転送部311は、転送元のメッセージ転送部311及び振り分け機能部210を介して対向装置600へ信号を送信する(S508、S509)。
【0034】
<変形例>
本発明の概念は、サーバクラスタだけではなく、単一サーバによるシステムにおいても適用可能である。図6は、本発明の概念を単一サーバに適用した場合の変形例に係るサーバの構成を示す図である。
【0035】
図6に示すように、サーバ300上に同一のアプリケーション330を複数起動し、クラスタ機能部310でそれぞれのアプリケーション330の状態を監視させる。この場合も同様に、クラスタ機能部310は、JavaVM320上に実装しないこととする。このため、クラスタ機能部310においてガベージコレクションは発生しない。
【0036】
JavaVM320のガベージコレクションなどによってアプリケーション330が停止した場合には、クラスタ機能部310が他のアプリケーション330にメッセージを転送する。例えば、他のJavaVM320のプロセスにメッセージをサーバ300内部で振り分けてもよい。このようにして、ガベージコレクションによる影響を回避することができる。
【0037】
クラスタ機能部310は、基本的にはラウンドロビンなどの所定の規則に基づいて、メッセージを振り分け、ガベージコレクションが発生している場合には、ガベージコレクション発生中のJavaVM320を避けて振り分けてもよい。また、クラスタ機能部310は、通常時はメッセージを振り分けない予備のアプリケーション330を起動させておき、メッセージを処理しているアプリケーション330でガベージコレクションが発生した場合に、予備のアプリケーション330に振り分けてもよい。
【0038】
具体的には、クラスタ機能部310は、図3に示すように、メッセージ転送部311とサーバ状態管理部312とを有する。
【0039】
サーバ状態管理部312は、各アプリケーションの状態を管理する。例えば、サーバ状態管理部312は、前述のようにJVMTIを利用したGC発生イベントを管理してもよく、更に、JMX(Java Management Extensions)によるJavaVM320のメモリ利用状況の統計データ、アプリケーション330における例外の発生状況、アプリケーション330のプロセスの死活状態なども管理してもよい。
【0040】
メッセージ転送部311は、アプリケーションの状態に応じて、メッセージを実際に転送するアプリケーション330を決定し、メッセージをアプリケーション330に転送する。例えば、前述のように、ガベージコレクションによりアプリケーション330が一時停止している場合、メッセージ転送部311は、他のアプリケーション330にメッセージを転送する。また、例えば、ガベージコレクションは発生していないが、アプリケーション330の不具合によってメモリの利用率が予め設定しておいた閾値をオーバーした場合などを停止イベントとして、GCイベント発生時と同様に他のアプリケーション330にメッセージを転送してもよい。このように、アプリケーション330が異常動作を行った場合においてもサービスの継続が可能となる。
【0041】
<実施例の効果>
前述の通り、本発明の実施例では、ガベージコレクションを採用したサーバクラスタシステムにおいて、ガベージコレクションの影響を受けないクラスタ機能310をアプリケーション330の前段に配備し、ガベージコレクションが発生して停止しているアプリケーション330を避けてメッセージが処理される。このため、ガベージコレクションによる影響を抑制することが可能となる。ガベージコレクションなどにより、アプリケーションが一時的に利用不可能になった場合にも、システムの応答時間を改善することができる。
【0042】
また、ロードバランサ200がガベージコレクションの発生などを意識する必要が無く、ラウンドロビンのような単純な振り分け方法でメッセージを振り分けることができるため、ロードバランサ200が性能上のボトルネックとなることを避けることができる。
【0043】
以上、本発明の実施例について説明したが、本発明は、上記の実施例に限定されることなく、特許請求の範囲内において、種々の変更・応用が可能である。
【0044】
説明の便宜上、本発明の実施例に係るシステムは機能的なブロック図を用いて説明しているが、本発明のシステムは、ハードウエア、ソフトウェア又はそれらの組み合わせで実現されてもよい。また、2以上の実施例又は変形例が必要に応じて組み合わせて使用されてもよい。
【符号の説明】
【0045】
100 サーバクラスタ
200 ロードバランサ
210 振り分け機能部
211 振り分け先制御部
300 サーバ
310 クラスタ機能部
311 メッセージ転送部
312 サーバ状態管理部
320 JavaVM
330 アプリケーション
400 プラットフォーム管理装置
500 IPネットワーク
600 対向装置
700 保守ネットワーク

【特許請求の範囲】
【請求項1】
メッセージを処理するアプリケーションが動作する複数のサーバで構成されたサーバクラスタを含むメッセージ処理システムであって、
所定の規則に基づいて、受信したメッセージの振り分け先のサーバを選択する振り分け装置を有し、
前記サーバクラスタは、
各サーバの状態を管理するサーバ状態管理部と、
前記振り分け先のサーバの状態に応じて、前記メッセージを転送するサーバを決定するメッセージ転送部と、
を有するメッセージ処理システム。
【請求項2】
前記サーバがガベージコレクションを採用する場合、
前記メッセージ転送部は、前記振り分け先のサーバでガベージコレクションが発生している場合に、前記振り分け先のサーバとは異なるサーバに前記メッセージを転送する、請求項1に記載のメッセージ処理システム。
【請求項3】
前記サーバ状態管理部及び前記メッセージ転送部は、ガベージコレクションが発生しない環境に実装される、請求項2に記載のメッセージ処理システム。
【請求項4】
メッセージを処理する複数のアプリケーションが動作するメッセージ処理装置であって、
各アプリケーションの状態を管理するアプリケーション状態管理部と、
各アプリケーションの状態に応じて、受信したメッセージを転送するアプリケーションを決定するメッセージ転送部と、
を有するメッセージ処理装置。
【請求項5】
アプリケーションが動作する複数のサーバで構成されたサーバクラスタでメッセージを処理するメッセージ処理方法であって、
前記サーバクラスタの外部の振り分け装置により、所定の規則に基づいて、受信したメッセージの振り分け先のサーバを選択するステップと、
前記サーバクラスタにより、各サーバの状態を管理するステップと、
前記サーバクラスタにより、前記振り分け先のサーバの状態に応じて、前記メッセージを転送するサーバを決定するステップと、
を有するメッセージ処理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate