(57)【特許請求の範囲】
【請求項１】
負荷分散装置と複数のサーバとを備えた負荷分散処理システムであって、
前記サーバは、それぞれ複数のプロセスが実行可能であり、
前記負荷分散装置は、
クライアントからのリクエストを各サーバに対して割り当てるために、前記プロセス毎に固定的に設定されたサーバの優先順位と、対象となるプロセスに関して前記各サーバに依頼可能な最大リクエスト数と、前記対象となるプロセスに関して前記各サーバが現在実行している実行中リクエスト数とを記憶した記憶手段と、
クライアントからリクエストを受け付ける度に、その受け付けたリクエストの対象となるプロセスを特定し、その対象となるプロセスに関して、前記記憶手段を参照して、前記実行中リクエスト数が前記最大リクエスト数に達していないサーバのうち最も優先順位の高いサーバである目的サーバを設定し、その目的サーバに対して前記実行中リクエスト数が前記最大リクエスト数に到達するまで連続してリクエストを割り当てるとともに、前記目的サーバの前記実行中リクエスト数が前記最大リクエスト数に到達した場合には、前記目的サーバを次に優先順位が高いサーバに設定することで、前記対象となるプロセスに関して、前記優先順位の高い前記サーバから順次、前記最大リクエスト数に到達するまでリクエストの割り当てを行う振り分け手段と、を備える負荷分散処理システム。
【請求項２】
負荷分散装置と複数のサーバとを備えた負荷分散処理システムであって、
前記複数のサーバでは、それぞれ複数のプロセスが実行可能であり、
前記負荷分散装置は、
各サーバに対して処理を割り当てる優先度を示すサーバ別の優先順位と、各サーバでの最大処理量と、各サーバでの実行中処理量とをプロセス別に記憶した記憶手段と、
リクエストを受け付けると、前記記憶手段を参照し、前記実行中処理量が前記最大処理量に達していないサーバのうち、最も優先順位の高いサーバに対して前記リクエストを割り当てる振り分け手段と、を備え、
前記振り分け手段は、受け付けたリクエストがどのプロセスに対するリクエストであるかを特定し、前記特定されたプロセスに対する前記優先順位、前記最大処理量、及び前記実行中処理量に基づいて、当該リクエストを割り当てるサーバを決定し、
前記優先順位は、前記負荷分散装置に対する接続順序が後のサーバで実行されるプロセスほど高く設定される、負荷分散処理システム。
【請求項３】
前記プロセス別の最大処理量は、プロセス別の、それぞれのサーバに依頼可能な最大リクエスト数であり、
前記実行中処理量は、各サーバで処理を実行している、プロセス別のリクエスト数である、請求項２に記載の負荷分散処理システム。
【請求項４】
前記複数のサーバは、それぞれ、自サーバで実行可能なプロセスを前記負荷分散装置へ通知し、
前記負荷分散装置は、前記通知を受け付けたサーバに前記プロセス別の優先順位を割り当てて、前記記憶手段に登録する手段をさらに備える、請求項１から３のいずれかに記載の負荷分散処理システム。
【請求項５】
前記複数のサーバは、それぞれ、自サーバで実行可能なプロセス別の前記最大処理量又は前記最大リクエスト数を前記負荷分散装置へ通知する、請求項１から４のいずれかに記載の負荷分散処理システム。
【請求項６】
複数のプロセスが実行可能な複数のサーバのいずれかに、クライアントからのリクエストを振り分ける負荷分散装置であって、
前記プロセス毎に固定的に設定された前記各サーバの優先順位と、対象となるプロセスに関して前記各サーバに依頼可能な最大リクエスト数と、前記対象となるプロセスに関して前記各サーバが現在実行している実行中リクエスト数とを記憶した記憶手段と、
クライアントからリクエストを受け付ける度に、その受け付けたリクエストの対象となるプロセスを特定し、前記記憶手段を参照して、対象となるプロセスに関して、前記実行中リクエスト数が前記最大リクエスト数に達していないサーバのうち最も優先順位の高いサーバである目的サーバを設定し、その目的サーバに対して前記実行中リクエスト数が前記最大リクエスト数に到達するまで連続してリクエストを割り当てるとともに、前記目的サーバの前記実行中リクエスト数が前記最大リクエスト数に到達した場合には、前記目的サーバを次に優先順位が高いサーバに設定することで、前記対象となるプロセスに関して、前記優先順位の高い前記サーバから順次、前記最大リクエスト数に到達するまでリクエストの割り当てを行う振り分け手段と、を備える負荷分散装置。
【請求項７】
複数のプロセスが実行可能な複数のサーバのいずれかに、負荷分散装置がクライアントからのリクエストを振り分けるための負荷分散方法であって、
前記負荷分散装置は、
前記プロセス毎に固定的に設定されたサーバの優先順位と、対象となるプロセスに関して前記各サーバに依頼可能な最大リクエスト数と、を記憶するステップと、
前記対象となるプロセスに関して前記各サーバが現在実行している実行中リクエスト数を記憶するステップと、
クライアントからのリクエストを受け付ける度に、その受け付けたリクエストの対象となるプロセスを特定し、前記記憶手段を参照して、前記対象となるプロセスに関して、前記実行中リクエスト数が前記最大リクエスト数に達していないサーバのうち最も優先順位の高いサーバである目的サーバを設定し、その目的サーバに対して前記実行中リクエスト数が前記最大リクエスト数に到達するまで連続してリクエストを割り当てるとともに、前記目的サーバの前記実行中リクエスト数が前記最大リクエスト数に到達した場合には、前記目的サーバを次に優先順位が高いサーバに設定することで、前記対象となるプロセスに関して、前記優先順位の高い前記サーバから順次、前記最大リクエスト数に到達するまでリクエストの割り当てを行うステップと、を備える負荷分散方法。
【請求項８】
複数のプロセスが実行可能な複数のサーバのいずれかに、クライアントからのリクエストを振り分ける負荷分散のためのコンピュータプログラムであって、
コンピュータに実行されると、
前記プロセス毎に固定的に設定された前記各サーバの優先順位と、対象となるプロセスに関して前記各サーバに依頼可能な最大リクエスト数と、を記憶するステップと、
前記複数のサーバのそれぞれで実行中の処理量を記憶するステップと、
クライアントからのリクエストを受け付ける度に、その受け付けたリクエストの対象となるプロセスを特定し、前記記憶手段を参照して、前記対象となるプロセスに関して、前記実行中リクエスト数が前記最大リクエスト数に達していないサーバのうち最も優先順位の高いサーバである目的サーバを設定し、その目的サーバに対して前記実行中リクエスト数が前記最大リクエスト数に到達するまで連続してリクエストを割り当てるとともに、前記目的サーバの前記実行中リクエスト数が前記最大リクエスト数に到達した場合には、前記目的サーバを次に優先順位が高いサーバに設定することで、前記対象となるプロセスに関して、前記優先順位の高い前記サーバから順次、前記最大リクエスト数に到達するまでリクエストの割り当てを行うステップと、が行われるコンピュータプログラム。
【請求項９】
複数のサーバのいずれかにリクエストを振り分ける負荷分散装置であって、
前記複数のサーバでは、それぞれ複数のプロセスが実行可能であり、
前記複数のサーバのそれぞれについて、優先順位、最大処理量、及び実行中処理量をプロセス別に記憶した記憶手段と、
リクエストを受け付けると、前記記憶手段を参照し、前記実行中処理量が前記最大処理量に達していないサーバのうち、最も優先順位の高いサーバに対して前記リクエストを割り当てる手段と、を備え、
前記リクエストを割り当てる手段は、受け付けたリクエストがどのプロセスに対するリクエストであるかを特定し、前記特定されたプロセスに対する前記優先順位、前記最大処理量、及び前記実行中処理量に基づいて、当該リクエストを割り当てるサーバを決定し、
前記優先順位は、前記負荷分散装置に対する接続順序が後のサーバで実行されるプロセスほど高く設定される、負荷分散装置。
【請求項１０】
複数のサーバのいずれかに、負荷分散装置がリクエストを振り分けるための負荷分散方法であって、
前記複数のサーバでは、それぞれ複数のプロセスが実行可能であり、
前記負荷分散装置は、
前記複数のサーバのそれぞれについて、優先順位及び最大処理量がプロセス別に記憶されるステップと、
前記複数のサーバのそれぞれで実行中の処理量をプロセス別に記憶するステップと、
リクエストを受け付けると、前記実行中の処理量が前記最大処理量に達していないサーバのうち、最も優先順位の高いサーバに対して前記リクエストを割り当てるステップと、を備え、
前記リクエストを割り当てるステップは、受け付けたリクエストがどのプロセスに対するリクエストであるかを特定し、前記特定されたプロセスに対する前記優先順位、前記最大処理量、及び前記実行中処理量に基づいて、当該リクエストを割り当てるサーバを決定し、
前記優先順位は、前記負荷分散装置に対する接続順序が後のサーバで実行されるプロセスほど高く設定される、負荷分散方法。
【請求項１１】
複数のサーバのいずれかにリクエストを振り分ける負荷分散のためのコンピュータプログラムであって、
前記複数のサーバでは、それぞれ複数のプロセスが実行可能であり、
コンピュータに実行されると、
前記複数のサーバのそれぞれについて、優先順位及び最大処理量をプロセス別に記憶するステップと、
前記複数のサーバのそれぞれで実行中の処理量をプロセス別に記憶するステップと、
リクエストを受け付けると、前記実行中の処理量が前記最大処理量に達していないサーバのうち、最も優先順位の高いサーバに対して前記リクエストを割り当てるステップと、が行われ、
前記リクエストを割り当てるステップは、受け付けたリクエストがどのプロセスに対するリクエストであるかを特定し、前記特定されたプロセスに対する前記優先順位、前記最大処理量、及び前記実行中処理量に基づいて、当該リクエストを割り当てるサーバを決定し、
前記優先順位は、前記負荷分散装置に対する接続順序が後のサーバで実行されるプロセスほど高く設定される、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアントサーバシステムにおいて、システム全体の負荷の状況を容易に把握するための負荷分散技術に関する。
【背景技術】
【０００２】
クライアントサーバシステムの負荷分散の手法は、種々提案されている（例えば特許文献１）。
【特許文献１】特開平１０−２７５１２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、従来の負荷分散技術では、負荷を分散させた結果、システム全体としてどの程度の負荷状態になっているのかを容易に把握できないようになっていた。例えば、複数のサーバにラウンドロビンなどで負荷分散するときは、全サーバにどの程度の負荷がかかっているかを把握しなければ、システム全体としての負荷状態を把握できなかった。
【０００４】
そこで、本発明の目的は、システム全体にかかる負荷の状態を容易に把握するための負荷分散技術を提供することである。
【課題を解決するための手段】
【０００５】
本発明の一実施態様に従う負荷分散処理システムは、負荷分散装置と複数のサーバとを備える。そして、前記負荷分散装置は、各サーバに対して処理を割り当てる優先度を示すサーバ別の優先順位と、各サーバでの最大処理量と、各サーバでの実行中処理量とを記憶した記憶手段と、リクエストを受け付けると、前記記憶手段を参照し、前記実行中処理量が前記最大処理量に達していないサーバのうち、最も優先順位の高いサーバに対して前記リクエストを割り当てる振り分け手段と、を備える。
【０００６】
好適な実施形態では、前記複数のサーバでは、それぞれ複数のプロセスが実行可能である。そして、前記記憶手段には、前記優先順位、前記最大処理量、及び前記実行中処理量が、プロセス別に記憶されていて、前記振り分け手段は、受け付けたリクエストがどのプロセスに対するリクエストであるかを特定し、前記特定されたプロセスに対する前記優先順位、前記最大処理量、及び前記実行中処理量に基づいて、当該リクエストを割り当てるサーバを決定するようにしてもよい。
【０００７】
好適な実施形態では、前記複数のサーバは、それぞれ、自サーバで実行可能なプロセスを前記負荷分散装置へ通知し、前記負荷分散装置は、前記通知を受け付けたサーバに前記プロセス別の優先順位を割り当てて、前記記憶手段に登録する手段をさらに備えていてもよい。
【０００８】
好適な実施形態では、前記優先順位は、前記負荷分散装置に対する接続順序が後のサーバで実行されるプロセスほど高く設定されるようにしてもよい。
【０００９】
好適な実施形態では、前記複数のサーバは、それぞれ、自サーバで実行可能なプロセス別の前記最大処理量を前記負荷分散装置へ通知するようにしてもよい。
【００１０】
好適な実施形態では、前記プロセス別の最大処理量は、プロセス別の、それぞれのサーバに依頼可能な最大リクエスト数であり、前記実行中処理量は、各サーバで処理を実行している、プロセス別のリクエスト数であってもよい。
【００１１】
本発明の一実施態様に従う、複数のサーバのいずれかにリクエストを振り分ける負荷分散装置は、前記複数のサーバのそれぞれについて、優先順位、最大処理量、及び実行中処理量を記憶した記憶手段と、リクエストを受け付けると、前記記憶手段を参照し、前記実行中処理量が前記最大処理量に達していないサーバのうち、最も優先順位の高いサーバに対して前記リクエストを割り当てる手段と、を備える。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の一実施形態に係る負荷分散処理システムについて、図面を参照して説明する。
【００１３】
図１は、本実施形態に係る負荷分散処理システムの構成を示す図である。
【００１４】
本システムは、ネットワーク９を介して接続された複数のクライアント５からリクエストを受け付けて、いずれかのサーバ３に割り当てる負荷分散装置１と、負荷分散装置１から割り当てられたリクエストに対応するプロセスを実行する複数のサーバ３とを備える。
【００１５】
負荷分散装置１、各サーバ３及び各クライアント５は、いずれも例えば汎用的なコンピュータシステムにより構成され、以下に説明する負荷分散装置１、各サーバ３及び各クライアント５内の個々の構成要素または機能は、例えば、コンピュータプログラムを実行することにより実現される。
【００１６】
また、各サーバ３の機種及び処理能力などの各サーバ３の仕様は、いずれも同一である必要はなく、それぞれ異なっていてもよい。
【００１７】
各クライアント５は、それぞれ、所定の処理の実行を要求するリクエストを生成し、出力する。このリクエストには、サーバ３上で動作するどのプロセスに対するリクエストであるかを示す情報（例えばプロセス名）が含まれている。
【００１８】
また、各サーバ３は、負荷分散装置１に対して、サーバ名などの自らの識別情報と、実行可能なプロセス名などのプロセスの識別情報を通知する。例えば、あるサーバ３が負荷分散装置１に新たに接続されたとき、あるいは、既に接続されているサーバ３に新たにプロセスが追加されたときに、それらのサーバ３は、上記のサーバ名及びプロセス名の通知をするようにしてもよい。
【００１９】
負荷分散装置１は、クライアント５からのリクエストを受け付けて、複数のサーバ３のいずれかにそのリクエストを割り当てるリクエスト処理部１１と、参照テーブル１８及びステータステーブル１９を記憶した記憶部１３と、記憶部１３に参照テーブル１８を登録する登録処理部１５とを備える。
【００２０】
図２には、参照テーブル１８の一例を示す。
【００２１】
本実施形態では、参照テーブル１８は、同図に示すように、プロセス別のテーブルで構成されている。同図の例は、プロセスａの参照テーブル１８である。参照テーブル１８は、対象となるプロセスが実行可能なサーバ名１８１と、各サーバに対象となるプロセスの処理を割り当てるときの優先順位１８２と、対象となるプロセスに関して、各サーバに依頼可能な最大処理量を示す最大リクエスト数１８３とが含まれている。
【００２２】
ステータステーブル１９には、各サーバ３でのプロセスの実行状態が登録されている。
【００２３】
図３には、ステータステーブル１９の一例を示す。
【００２４】
同図に示すように、ステータステーブル１９は、参照テーブル１８と同様にプロセス別のテーブルで構成されている。そして、同図の例は、プロセスａのステータステーブル１９である。ステータステーブル１９は、サーバ名１９１と、対象となるプロセスに関して、各サーバが実行している処理量を示す現在実行中のリクエスト数１９２とが含まれている。
【００２５】
登録処理部１５は、各サーバ３から、それぞれのサーバで実行可能なプロセス名の通知を受けると、この情報を参照テーブル１８に登録する。例えば、サーバＡから「プロセスａ」及び「プロセスｂ」が実行可能である旨の通知を受けると、「プロセスａ」及び「プロセスｂ」の参照テーブル１８に、それぞれサーバＡを登録する。
【００２６】
優先順位１８２は、予め固定的に設定しておいてもよいが、サーバ３の仕様や状態に応じて動的に設定されるようにしておくと、いずれかのサーバ３に障害が発生してもシステム全体に影響がないし、メンテナンスの手間もかからない。一例としては、負荷分散装置1に対するサーバ３の接続順序（サーバ３の起動順序）に応じて、負荷分散装置１の登録処理部１５で優先順位１８２が自動設定されるようにすることが挙げられる。このときの優先順位１８２は、負荷分散装置1に対する接続順序が後のサーバ３で実行されるプロセスほど高くなるように設定すれば、システム全体の処理能力の不足に応じて新たに追加されるサーバ３の能力をフル活用することができる。
【００２７】
また、プロセス毎の最大リクエスト数１８３は、予め固定的に設定しておいてもよいが、上述したプロセス名の通知と併せて、各サーバ３から通知させることが望ましい。これは、最大リクエスト数に応じて各サーバ３に対する最大処理負荷が定まるので、それぞれのサーバ３が指定するのが好ましいからである。
【００２８】
リクエスト処理部１１は、いずれかのクライアント５からリクエストを受け付けると、参照テーブル１８及びステータステーブル１９を参照して、いずれかのサーバ３へそのリクエストを割り当て、そのリクエストに応じたプロセスを実行させる。
【００２９】
例えば、リクエスト処理部１１は、リクエストを受け付けると、そのリクエストに含まれているプロセス名を検出して、そのリクエストを実行させるプロセスを特定する。そして、そのプロセスに関する参照テーブル１８及びステータステーブル１９を参照し、実行中リクエスト数１９２が最大リクエスト数１８３に達していないサーバのうち、最も優先順位１８２の高いサーバを特定し、それに対してリクエストを割り当てる。
【００３０】
例えば、プロセスａに対するリクエストを受け付けると、リクエスト処理部１１は、図２に示すプロセスａの参照テーブル１８及びステータステーブル１９を参照して、優先順位１８２の高い順に、各サーバ３での実行中リクエスト数１９２が最大リクエスト数１８３に到達しているか否かを判定する。そして、実行中リクエスト数１９２が最大リクエスト数１８３まで達していないサーバ３のうち、最も優先度の高いサーバ３に対して、リクエストを割り当てる。
【００３１】
図２の例では、プロセスａについて、最も優先順位の高いサーバＡは、既に実行中のリクエスト数１９２が最大リクエスト数１８３に達している。そこで、次に優先順位の高いサーバＢについて参照すると、実行中のリクエスト数１９２が最大リクエスト数１８３まで余裕があるので、サーバＢが割り当て対象のサーバとして特定される。そして、リクエスト処理部１１は、受け付け中のリクエストをサーバＢに実行させる。
【００３２】
リクエスト処理部１１は、さらに、ステータステーブル１９を管理する。すなわち、リクエスト処理部１１が、新たにリクエストを割り当てたときは、割り当てたサーバ３の実行中リクエスト数１９２に１を加算する。また、割り当てたリクエストに関する処理が終了したときは、そのサーバ３の実行中のリクエスト数１９２から１を減算する。
【００３３】
この結果、リクエスト処理部１１は、最も優先順位の高いサーバ３の実行中リクエスト数１９２が最大リクエスト数１８３に到達するまでは、そのサーバ３に連続して処理を割り当てることになる。そして、優先順位の最も高いサーバ３の実行中リクエスト数１９２が最大リクエスト数１８３になると、優先順位の次に高いサーバ３に対して、同様に、実行中リクエスト数１９２が最大リクエスト数１８３に到達するまで、そのサーバ３に処理を依頼し続ける。以降、これを繰り返す。
【００３４】
なお、いずれかのサーバ３で処理が終了すると、実行中リクエスト数１９２もそれに応じて更新される。従って、例えば、最も優先順位の高いサーバが、一度最大リクエスト数１８３に到達したときであっても、実行中リクエスト数１９２が最大リクエスト数１８３を下回り、いわゆる空きが生じる状態になることがある。このときに新たにリクエストを受け付けたときは、上述の処理手順に従って割り当てが行われるので、最上位のサーバにリクエストが割り当てられる。
【００３５】
このようにして、優先順位の高いサーバから順に、依頼可能な処理量の上限値に到達するまで処理を依頼するようにして負荷分散を実現した場合、プロセス別の処理能力が負荷分散処理システム全体で足りているか否か、つまり、システム全体に係る負荷の状態の判定を極めて容易に行うことが可能になる。例えば、最も優先順位の低いサーバの実行中リクエスト数１９２を参照すれば、そのプロセスの処理能力が負荷分散処理システム全体で不足していないかどうか、容易に判定できる。つまり、最も優先順位の低いサーバの実行中リクエスト数が、その上限値である最大リクエスト数、ないしはそれに近い数であれば、システム全体に対する負荷が大きく、処理能力が不足している、ないしは不足気味であることがわかる。
【００３６】
さらに、全サーバの全体の実行中リクエスト数１９２を参照すれば、システム全体の処理能力のうち、どの程度を使っているかも容易に判定可能である。
【００３７】
上述した本発明の実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【００３８】
例えば、上述の実施形態では、プロセス別の優先順位に基づいて負荷分散をし、プロセス別に処理能力が十分であるか否かを判定している。しかしながら、プロセスごとに分けずに、上記と同様の負荷分散を行ってもよい。
【００３９】
また、上述の実施形態では、最大処理量及び実行中処理量を計測するためのパラメータに、リクエスト数を用いているが、ＣＰＵタイムなどのこれ以外のパラメータを用いてもよい。
【図面の簡単な説明】
【００４０】
【図１】本発明の一実施形態に係る負荷分散処理システムの構成を示す。
【図２】参照テーブル１８の一例を示す。
【図３】ステータステーブル１９の一例を示す。
【符号の説明】
【００４１】
１    負荷分散装置
３    サーバ
５    クライアント
１１    リクエスト処理部
１３    記憶部
１５    登録処理部
１８    参照テーブル
１９    ステータステーブル
【図１】
0004515354.tif 000002
【図２】
0004515354.tif 000003
【図３】
0004515354.tif 000004