(57)【要約】【課題】コンピュータ・システム内でタスクをスケジューリングするシステム、方法およびプログラム製品を提供すること。【解決手段】開示されるシステムは、複数のレベルを有し、各レベルが、少なくとも１つのキューを有する。各キューは、少なくとも１つの処理機能と、それに関連するクラスタを有する。タスク除去率が減るようにタスクを効率的にスケジューリングするために、キューの間でさまざまなレベルでフロー制御技法が使用される。フロー制御指示に基づいて、ディスパッチ速度の変更またはキューのバッファ容量の変更などの訂正処置を、キューによって実行することができる。開示されるシステムおよび方法は、連繋負荷ディストリビュータ（ＣＬＤ）アーキテクチャまたは連繋負荷ディストリビュータ・フレームワークとして実施することができる。【選択図】図１
2004199678.tif 000002
【特許請求の範囲】
【請求項１】
マルチレベル・コンピュータ・システムで処理される要求のスケジューリングの方法であって、前記コンピュータ・システムの各レベルが、少なくとも１つのキューを有し、各キューが、少なくとも１つの処理機能を関連付けられ、
ａ．第１レベルの前記キューに前記要求をバッファリングするステップと、
ｂ．前記第１レベルに隣接する他のレベルとフロー情報を交換するステップと、
ｃ．前記要求の分類値を得るステップと、
ｄ．前記得られた値に基づいて前記要求をスケジューリングするステップと
を含む方法。
【請求項２】
スケジューリングする前記ステップが、前記要求をディスパッチするステップを含む、請求項１に記載の方法。
【請求項３】
スケジューリングする前記ステップが、前記要求を分類するステップを含む、請求項１に記載の方法。
【請求項４】
スケジューリングする前記ステップが、前記要求を除去するステップを含む、請求項１に記載の方法。
【請求項５】
前記得られた分類値が事前定義の値より大きい場合に、前記第１レベルで前記要求を処理するステップをさらに含む、請求項１に記載の方法。
【請求項６】
前記分類値を得る前記ステップが、
ａ．前記交換されるフロー情報に基づいてユーティリティ値を計算するステップと、
ｂ．前記計算されるユーティリティ値が事前定義の値より小さい場合に訂正処置を仮定するステップと、
ｃ．前記仮定される訂正処置を考慮した後の前記ユーティリティ値を再計算するステップと
を含む、請求項１に記載の方法。
【請求項７】
ａ．前記再計算されるユーティリティ値が前記事前定義の値より大きい場合に、仮定された訂正処置を行うステップと、
ｂ．前記仮定された訂正処置を行った後に、前記第１レベルで前記要求を処理するステップと
をさらに含む、請求項６に記載の方法。
【請求項８】
訂正処置を仮定する前記ステップが、適当なキューが要求を受け入れることができない場合に、前記適当なキューの要求処理容量の増加を仮定するステップを含む、請求項６に記載の方法。
【請求項９】
訂正処置を仮定する前記ステップが、次レベルのキューが要求を受け入れることができない場合に、適当なキューからの要求ディスパッチ速度の減少を仮定するステップを含む、請求項６に記載の方法。
【請求項１０】
マルチレベル・コンピュータ・システムで処理される要求のスケジューリングに適するシステムであって、前記コンピュータ・システムの各レベルが、少なくとも１つのキューを有し、各キューが、少なくとも１つの処理機能を関連付けられ、
ａ．第１レベルと前記第１レベルに隣接する他のレベルとの間でフロー情報を交換する手段と、
ｂ．前記交換されるフロー情報に基づいて、前記要求の分類値を得る手段と、
ｃ．前記要求をスケジューリングする手段と
を含むシステム。
【請求項１１】
前記スケジューリングする手段が、前記要求をディスパッチする手段をさらに含む、請求項１０に記載のシステム。
【請求項１２】
前記スケジューリングする手段が、前記要求を分類する手段をさらに含む、請求項１０に記載のシステム。
【請求項１３】
前記スケジューリングする手段が、前記要求を除去する手段をさらに含む、請求項１０に記載のシステム。
【請求項１４】
前記得られる分類値が事前定義の値より大きい場合に、前記第１レベルで前記要求を処理する手段をさらに含む、請求項１０に記載のシステム。
【請求項１５】
前記分類値を得る前記手段が、
ａ．前記交換されるフロー情報に基づいてユーティリティ値を計算する手段と、
ｂ．仮定された訂正処置を検討した後の前記ユーティリティ値を再計算する手段と、
ｃ．前記再計算されるユーティリティ値が事前定義の値より大きい場合に、前記仮定された訂正処置を行う手段と
を含む、請求項１０に記載のシステム。
【請求項１６】
前記仮定された訂正処置を行う前記手段が、第２レベル・キューが余分な要求を受け入れることができない場合に、第１レベル・キューの要求ディスパッチ速度を減らす手段を含む、請求項１５に記載のシステム。
【請求項１７】
前記仮定された訂正処置を行う前記手段が、第２レベル・キューが余分な要求を受け入れることができない場合に、第２レベル・キューの要求処理容量を増やす手段を含む、請求項１５に記載のシステム。
【請求項１８】
コンピュータ・システムで要求をスケジューリングするコンピュータ・プログラム製品であって、
ａ．第１レベルのキューに前記要求をバッファリングするプログラム命令手段と、
ｂ．前記第１レベルに隣接する他のレベルとフロー情報を交換するプログラム命令手段と、
ｃ．前記要求の分類値を得るプログラム命令手段と、
ｄ．前記分類値に基づいて前記要求をスケジューリングするプログラム命令手段と
を含むコンピュータ・プログラム製品。
【請求項１９】
コンピュータ・システムでのロード・バランシングに適する装置であって、
ａ．複数のキューであって、
ｉ．着信要求をバッファリングする第１レベル・キューと、
ｉｉ．複数の後続レベル・キューであって、キューの各後続レベルが、着信要求のクラスに対応する、複数の後続レベル・キューと
を含む複数のキューと、
ｂ．ユーザ定義パラメータに基づいて、前記要求を複数の後続レベル・キューに分類する手段と、
ｃ．前記複数のレベルのキューの間で情報を交換する手段と、
ｄ．前記キューからの前記要求を前記キューまたはターゲット・コンポーネントの少なくとも１つにディスパッチする手段と
を含む装置。
【請求項２０】
ディスパッチする前記手段が、要求の平行ディスパッチの手段を含む、請求項１９に記載の装置。
【請求項２１】
情報を交換する前記手段が、前記キューからの要求のディスパッチ速度を制御する手段を含む、請求項１９に記載の装置。
【請求項２２】
前記要求が、ＱｏＳ／ＳＬＡおよび前記後続レベル・キューからの情報に基づいて前記第１レベル・キューで分類される、請求項１９に記載の装置。
【請求項２３】
コンピュータ・システムでのロード・バランシングのコンピュータ・プログラム製品であって、
ａ．複数のキューを生成するプログラム命令手段であって、前記複数のキューが、
ｉ．着信要求をバッファリングする第１レベル・キューと、
ｉｉ．複数の後続レベル・キューであって、キューの各後続レベルが、着信要求のクラスに対応する、複数の後続レベル・キューと
を含む、プログラム命令手段と
ｂ．ユーザ定義パラメータに基づいて、前記要求を複数のクラスに分類するプログラム命令手段と、
ｃ．前記複数のレベルのキューの間で情報を交換するプログラム命令手段と、
ｄ．前記キューからの前記要求を前記キューまたはターゲット・コンポーネントの少なくとも１つにディスパッチするプログラム命令手段と
を含むコンピュータ・プログラム製品。
【請求項２４】
コンピュータ・システムで要求をスケジューリングするのに適するシステムであって、
ａ．複数のクラスタと、
ｂ．複数のロード・バランサであって、各ロード・バランサが、少なくとも１つのクラスタに対応し、
ｉ．要求を受け取る手段と、
ｉｉ．隣接レベル・ロード・バランサから情報を交換する手段と、
ｉｉｉ．前記要求の分類値を得る手段と、
ｉｖ．前記分類値に基づいて次レベル・クラスタに前記要求をディスパッチする手段と
を含む、複数のロード・バランサと
を含むシステム。
【請求項２５】
ネットワークで要求をスケジューリングする方法であって、前記ネットワークが、複数のロード・バランサを含み、
ａ．第１レベル・ロード・バランサで要求を受け取るステップと、
ｂ．前記特定の要求に関する情報を隣接レベル・ロード・バランサと交換するステップと、
ｃ．前記交換される情報を処理することによって前記要求の分類値を得るステップと、
ｄ．前記得られる値に基づいて前記要求をスケジューリングするステップと
を含む方法。
【請求項２６】
前記交換される情報を処理する前記ステップが、
ａ．前記要求の転送の閾ユーティリティ値を判定するステップと、
ｂ．前記要求の転送のユーティリティ値を得るステップと、
ｃ．前記ユーティリティ値と前記閾ユーティリティ値とを比較するステップと、
ｄ．ユーティリティ値が前記閾ユーティリティ値より小さい場合に訂正処置を行うステップと
を含む、請求項２５に記載の方法。
【請求項２７】
ユーティリティの閾値を判定する前記ステップが、さらに
ａ．前記ネットワークがサービスを必要とするＱｏＳ要件およびＳＬＡ要件を識別するステップと、
ｂ．前記ネットワーク内で前記要求に割り振られるリソースを判定するステップと
を含む、請求項２６に記載の方法。
【請求項２８】
前記ユーティリティ値を得る前記ステップが、
ａ．要求ヘッダから前記要求に関係するＱｏＳおよびＳＬＡを識別するステップと、
ｂ．次レベル・バランサで前記要求に対応する割り振られるリソースを判定するステップと、
ｃ．前記ユーティリティ値を得るために前記識別された情報および前記判定された情報を処理するステップと
を含む、請求項２６に記載の方法。
【請求項２９】
訂正処置を行う前記ステップが、前記ロード・バランサでの要求ディスパッチ速度を下げるステップを含む、請求項２６に記載の方法。
【請求項３０】
訂正処置を行う前記ステップが、余分な負荷を受け入れるためにロード・バランサ容量を増やすステップを含み、ロード・バランサ容量を増やすステップが、前記要求の前記ユーティリティ値を増やす、請求項２６に記載の方法。
【請求項３１】
ネットワーク内で要求をスケジューリングするコンピュータ・プログラム製品であって、
ａ．第１レベル・ロード・バランサで要求を受け取る第１プログラム命令手段と、
ｂ．前記要求に関する情報を隣接レベル・ロード・バランサと交換する第２プログラム命令手段と、
ｃ．前記交換される情報に基づいて前記要求の分類値を得る第３プログラム命令手段と、
ｄ．前記分類値に基づいて前記要求をスケジューリングする第４プログラム命令手段と
を含むコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・システムのタスク・スケジューリングの分野に関する。具体的には、本発明は、コンピュータ・システムで除去される要求の数の削減と、サービス品質（Quality of Service、ＱｏＳ）およびサービス・レベル・アグリーメント（Service Level Agreement、ＳＬＡ）の実施とタスク・スケジューリングの方法、システム、およびフレームワークに関する。
【背景技術】
【０００２】
コンピュータ・システムは、さまざまなタスクを実行し、さまざまな要求を処理する処理能力およびメモリを有するシステムと定義することができる。そのような要求は、ネットワークを介するデータベースへのアクセスなどの単純なデータ要求から、元の要求を処理するためにデータベース内のあるデータを必要とするアプリケーションの実行の要求などの複雑な要求までの広範囲にわたる可能性がある。
【０００３】
要求（またはタスク）を受け取り、処理するコンピュータ・システムは、その容量に関するある制限を有する。コンピュータ・システムが同時に処理できる要求の最大の個数には限度がある。そのような制限は、コンピュータ・システムの設計および容量に起因して生じる可能性がある。したがって、システムがそれに基づいて展開されるＣＰＵ速度、メモリ容量、ネットワーク接続速度などのパラメータによって、システムの処理できる要求の数が制限される。したがって、要求の数がこの限度を超えると、完全には処理されない要求がいくつか生じる。コンピュータ・システムに達する前に除去される要求も生じる。これらの要求は、コンピュータ・システムによって全く受け取られない。また、コンピュータ・システムによって受け取られるが、部分的に実行されただけで打ち切られる要求も生じる。これは、通常は、メモリの不足またはネットワーク接続のタイムアウトに起因して発生する。
【０００４】
そのようなシステムの１つの例を、インターネットベースのオンライン株式取引サービスとすることができる。そのようなサービスによって、ユーザの要求時に、特定の株の価格に関する情報がユーザに供給される。しかし、そのようなオンライン・インターネット・サービスのユーザの数が増加するにつれて、オンライン・インターネット・サービスのサーバによって並行に処理されるユーザ要求の数が、時々収拾不可能になる。たとえば、バスケットボールに関する特定の情報を供給するオンライン・インターネット・サービスのサーバは、全国レベルのバスケットボール・トーナメントの決勝中に、ユーザ要求で過負荷になる。実際に、要求の過負荷に起因して、部分的にしか処理されないユーザ要求が生じ、全く処理されない要求が生じる。これらの、完全には処理されないか全く処理されない要求は、除去されたと見なされる。
【０００５】
要求自体の完全な処理にクリティカルであるトランザクションが処理されない場合に、要求は除去されたとみなされる。要求Ａの部分的な処理によって生成される要求Ｂが、要求Ａの完全な処理にクリティカルであると仮定する。しかし、要求Ｂが除去される（たとえば、要求Ｂを処理するコンポーネントに対する要求の過負荷に起因して）場合に、要求Ａを完全に処理することはできない。そのような場合に、要求Ａも、除去されたとみなされる。
【０００６】
したがって、要約すると、要求が除去されたとみなされるには、（ｉ）システムまたはシステム・コンポーネントによる要求の処理（部分的なまたは完全な）の前に、コンポーネントに対する要求過負荷に起因して、要求が、処理に関する将来の検討から除外される（すなわち、完全に除去される）か、（ｉｉ）要求の完全な処理にクリティカルなトランザクションが打ち切られるか、（ｉｉｉ）元の要求の処理から生成され、その完全な処理が元の要求の完全な処理にクリティカルである別の要求が除去された場合である。
【０００７】
過負荷に起因する要求除去の問題に対処する方法の１つが、同一システムの複数の複製（すなわち複数のサーバ）を使用して、着信要求を処理することである。したがって、単一のサーバの代わりにサーバのクラスタを使用して、要求を処理することができる。ロード・バランサは、クラスタの前で要求を受け取り、複製の間での要求の公平な分配を保証するのに使用される。ロード・バランサは、コンポーネントの過負荷を防ぐために、クラスタのさまざまなコンポーネントの間でユーザ要求を均等に分配するハードウェア装置またはソフトウェア・プログラムである。たとえば、ロード・バランサを使用して、サーバの複数の複製（ｈｔｔｐｌサーバなど）の間でユーザ要求を分配することができる。この分配は、各コンポーネントの作業負荷、要求の内容タイプ（ビデオまたはテキスト）、コンポーネントの地理的配置、および期待されるＱｏＳおよびＳＬＡなどの、事前定義の判断基準に基づくものとすることができる。さらに、後で説明するように、類似するコンポーネントの間でこれらの要求を分配する事前定義の方法や技法が存在する可能性がある。
【０００８】
同一サーバの複数のインスタンスを使用すると、各サーバによって処理される要求の数が減る。これによって、サーバが過負荷になる機会が減る。しかし、いくつかのケースでの要求の数は、非常に多いので、その要件を満たすために複数のサーバを有することは非実用的である。ネットワーク伝送速度の向上およびユーザ／クライアントの数の増加によって、ネットワークを介する要求の伝送が、コンポーネントで要求を処理する速度またはロード・バランサによって要求が転送される速度あるいはその両方よりはるかに速い。このため、コンポーネント／ロード・バランサでの要求の蓄積が引き起こされ、したがって、コンポーネント／ロード・バランサが過負荷になる。これが、コンポーネント／ロード・バランサでの要求除去につながる。他のいくつかの場合に、コンポーネントが、要求を処理し始めるが、高いロード条件に起因して、処理が、事前定義の期間内に完了しない。これも、要求除去につながる可能性がある。
【０００９】
要求除去は、コンピュータ・システムの性能に悪影響を及ぼす。第１に、リソースすなわち、要求を処理し、転送したロード・バランサのリソース、または要求の部分的処理に使用されたリソースあるいはその両方の浪費がある。これは、リソース使用率の減少につながる。第２に、処理される時に、要求が、コンポーネントのいくつか（その要求を処理したもの）の状態の変化をもたらす場合がある。要求が、中間コンポーネントで除去される場合には、そのシステムを、最も最近の一貫性のある状態にロール・バックする必要が生じる可能性がある。言い換えると、システム全体を、除去された要求の処理が開始される前のそのシステムの状態に戻さなければならない。各ロールバックは、要求処理でのシステムの応答時間を悪化させ、システムのスループットを低下させ、システム・リソースも浪費する。第３に、システム・リソースの浪費が、十分なシステム・リソースが使用可能でなくなることに起因して、そうでなければ処理できたはずの他のリソースの除去を引き起こす場合がある。第４に、上で述べたものと同一の理由から、そうでなければよりよいサービス品質で処理できたはずのいくつかの他の要求が、より低いサービス品質で処理される。第５に、除去される要求の部分的処理に浪費された時間が、除去されたか失敗した要求に関するユーザ応答時間に追加される。これによって、ユーザに提供されるサービス品質（ＱｏＳ）が阻害される可能性があり、ユーザとネットワークの間のサービス・レベル・アグリーメント（ＳＬＡ）の侵害にもつながる可能性がある。最後に、要求の処理の応答時間が長くなるにつれて、ユーザの不満が高まる。
【００１０】
上で述べた要求除去の不利益に鑑みて、要求除去の数を減らすことが肝要である。要求除去を減らすためにロード・バランサを使用する複数の方法および技法がある。ロード・バランサによってユーザ要求の分配を実行する例示的な方法の１つが、ラウンド・ロビン・ドメイン・ネーム・サーバ（Round Robin Domain Name Server、ＲＲ−ＤＮＳ）手法である。この方法では、要求が、回転式（すなわちラウンド・ロビン式）に１つずつ複数のサーバにルーティングされる。
【００１１】
特定のユーザ要求のターゲット・コンポーネントを決定するための、クラスタ（類似するコンポーネントの）内の個々のコンポーネントの間での情報の流れという発想に基づく他のいくつかのロードバランシング解決策がある。この情報は、負荷がロード・バランサによって平衡化される、クラスタ内の各コンポーネントの負荷レベルに関連するものとすることができる。
【００１２】
そのような解決策の１つが、米国特許第５９３８７３２号、表題"Loadbalancing and fail over of network services"に開示されている。この方法では、コンポーネントのクラスタ内の通信の維持と、それらの間の協力の調整に対処する。これは、サービスを提供するコンポーネントの１つまたは複数が、障害を介するなど、時々使用不能になる場合であっても、そのグループによって提供されるサービスが使用可能なままになるようにするために行われる。各処理要素は、グループ内の他のすべての処理要素に周期的に制御メッセージを送って、通信を維持するのを助ける。このメッセージは、送出側コンポーネントの状況ならびにグループ内の他のコンポーネントの知覚された状況に関するデータが含まれる。
【００１３】
もう１つの解決策が、チョウ（Myongsu Choe）およびトロッパ（CarlTropper）著の研究論文、"Flow Control and Dynamic Load Balancing in Time Warp"で提案された。この論文では、フロー制御および動的ロード・バランシングを一体化するアルゴリズムが開示されている。フロー制御は、クラスタ内のプロセッサによって、その間で負荷を共用または分配するのに使用される。この場合のフロー制御は、ターゲット・コンポーネントの間のフロー制御である。
【００１４】
オスマン（Ossama Othman）、オライアン（Carlos O'Ryan）、およびシュミット（DouglasC. Schmidt）著の研究論文"The Design and Performance of an Adaptive CORBA LoadBalancing Service"でも、解決策が提案されている。この論文は、将来の研究で、所与のクラスタ（コンポーネントの）からターゲット複製（コンポーネント）を決定するためにさまざまなロード・バランサの間のフロー制御を使用する必要を掲げている。
【００１５】
上で説明した解決策のすべてで、要求を処理するターゲット・コンポーネントを決定するために、クラスタ（類似するコンポーネントの）内のさまざまなコンポーネントの間での情報交換が使用されている。しかし、これらのどれもが、高い要求速度で働くことを意図されたシステムでの要求除去の問題に対処していない。完了の前に最終的に除去される要求も、処理され、これによって、リソースの浪費と、処理時間および電力消費の増加が引き起こされる。これが、より低いシステム効率をもたらす。これらの解決策は、上で説明した要求除去の通常の不利益も有する。
【特許文献１】米国特許第５９３８７３２号、表題"Load balancingand fail over of network services"
【非特許文献１】チョウ（Myongsu Choe）およびトロッパ（CarlTropper）著、"Flow Control and Dynamic Load Balancing in Time Warp"
【非特許文献２】オスマン（Ossama Othman）、オライアン（CarlosO'Ryan）、およびシュミット（Douglas C. Schmidt）著、"The Design and Performance of anAdaptive CORBA Load Balancing Service"
【発明の開示】
【発明が解決しようとする課題】
【００１６】
したがって、上の説明に鑑みて、コンピュータ・システムでの要求除去の数を減らすことができるシステムおよび方法の必要が存在する。具体的に言うと、ロード・バランサでの要求除去の数を減らすシステムおよび方法の必要がある。ロード・バランサでのサービス品質（ＱｏＳ）およびサービス・レベル・アグリーメント（ＳＬＡ）の実施を容易にするシステムおよび方法の必要も存在する。システムのスループットを高める、ロードバランシング・フレームワークの必要も存在する。これは、システム・リソースの浪費を減らすために必要である。
【課題を解決するための手段】
【００１７】
本発明の目的は、コンピュータ・システムで要求をスケジュールすることである。
【００１８】
本発明の具体的な目的は、コンピュータ・システムの中間コンポーネントおよびロード・バランサで除去される要求の数を減らすことである。
【００１９】
本発明のもう１つの具体的な目的は、サービス品質（ＱｏＳ）およびサービス・レベル・アグリーメント（ＳＬＡ）を実施することである。
【００２０】
本発明のもう１つの具体的な目的は、フロー制御メッセージを処理し、ＱｏＳ／ＳＬＡを実施する、ロード・バランサ内のシステムおよび方法を提供することである。
【００２１】
本発明のもう１つの具体的な目的は、ロード・バランサならびにシステムの要求スループットを高めることである。
【００２２】
本発明のもう１つの目的は、システム・リソース使用率を最大にすることである。
【００２３】
本発明のもう１つの目的は、要求の区別された分配を提供することである。
【００２４】
本発明のもう１つの目的は、システム・ロールバックの数を最小にすることである。
【００２５】
本発明のもう１つの目的は、ユーザへの応答時間を減らすことである。
【００２６】
本発明の上記および他の目的は、複製の組の間で負荷を平衡化する、方法、システム、およびコンピュータ・プログラム製品によって提供される。この方法は、実施されるポリシに基づいてコンピュータ・システムに到達する要求をスケジューリングすることを目的とする。コンピュータ・システムには、複数のレベルが含まれ、各レベルは、少なくとも１つのキューを有し、各キューは、少なくとも１つのバッファを有し、各キューは、少なくとも１つの処理コンポーネントに関連する。各キューは、それに関連する任意の個数のクラスタに対応するものとすることもできる。着信要求は、完全に処理される前に、１つまたは複数のレベルを介して処理される。フロー制御情報が、要求除去を減らすために２つのレベルの間で交換される。本発明の一実施形態では、すでに説明したロード・バランサ内の上の方法の実施形態を説明する。着信要求が、第１レベル・キューに保管される。要求は、さらに、ユーザ定義のパラメータ（ＱｏＳ／ＳＬＡなど）に基づいて、複数のクラスに分類される。その後、要求は、事前定義の判断基準に基づいて、複数の第２レベル・キューの１つに転送される。たとえば、各第２レベル・キューを、要求のクラスに対応するものとすることができる。キューの２つのレベルの間に、制御情報のフローが存在する。この制御情報は、第２レベル・キューの状態に基づいて要求を適当な第２レベル・キューに転送するのに使用され、これによって、ロード・バランサ内で除去される要求の数が減る。
【００２７】
本発明のもう１つの実施形態では、上で述べたロード・バランサを、フレームワークで使用して、複数のクラスタの間で負荷を動的に平衡化することができる。着信要求が、第１レベル・ロード・バランサで受け取られる。ロード・バランサは、１つまたは複数の要求を、要求のタイプまたはターゲット・コンポーネントの状態あるいはその両方に基づいて、ターゲット・コンポーネントに並行にディスパッチする。ロード・バランサは、要求除去が起ころうとしているのを感知する場合に、フロー制御メッセージを生成し、そのメッセージを前レベル・ロード・バランサに送る。フロー制御メッセージを受け取る時に、ロード・バランサは、対応する処置を講ずることを決定することができ、その結果、後のレベルの要求除去が回避される。ロード・バランサは、前レベル・ロード・バランサおよび次レベル・ロード・バランサと交換できるフロー制御メッセージも生成することができる。
【００２８】
本発明の好ましい実施形態を、以下で、本発明を例示するが制限しない添付図面に関して説明する。図では、類似する符号が類似する要素を示す。
【発明を実施するための最良の形態】
【００２９】
使用される用語法
論理インスタンス：論理インスタンスとは、物理インスタンス／コンポーネントまたは物理インスタンス／コンポーネントのある容量のいずれかである。論理インスタンスは、物理インスタンスの名前／アドレスと、物理インスタンス内で割り振られた容量との対によって表すことができる。本明細書の用語「インスタンス」および「複製」の使用のすべてが、「論理インスタンス」の同意語である。
【００３０】
クラスタ：クラスタとは、サポートされる機能性、インスタンスを使用するためのプロトコルなどに関して同一である論理インスタンスの集合である。
【００３１】
次レベル・ロード・ディストリビュータ：ロード・ディストリビュータ（ＬＤ）−ｘの次レベル・ロード・ディストリビュータ（ＬＤ）とは、ＬＤ−ｘに隣接し、トポロジ的にその次のＬＤである。たとえば、図６では、ＬＤ６０６およびＬＤ６０８が、ＬＤ６０２の次レベルＬＤであり、ＬＤ６１４が、ＬＤ６０６およびＬＤ６０８の次レベルＬＤである。
【００３２】
前レベル・ロード・ディストリビュータ：ＬＤ−ｘの前レベル・ロード・ディストリビュータとは、ＬＤ−ｘに隣接し、トポロジ的にその前のＬＤである。たとえば、図６では、ＬＤ６０２が、ＬＤ６０６およびＬＤ６０８の前レベルであり、ＬＤ６０６およびＬＤ６０８が、ＬＤ６１４の前レベルＬＤである。
【００３３】
フロントエンド：フロントエンドとは、エンド・ユーザから要求を受け取る、アプリケーション・インスタンスのクラスタである。
【００３４】
要求分類要因（ＲＣＦ）：ＲＣＦは、要求をカテゴリに分類（他の要求から区別）するのに使用される。たとえば、本発明の一実施形態で、要求に関連する顧客識別またはサービス・クラス／グレード、あるいは顧客ＩＤと要求のサービス・クラスの組合せを、ＲＣＦとして使用して、着信要求を分類する。ＲＣＦ値の計算に使用することができる他のパラメータは、要求タイプ（たとえば、カタログ表示要求、ショッピング要求など）、要求の複雑さ、要求の優先順位などとすることができる。
【００３５】
負荷モニタ：Ｃの状態またはＣに対する負荷あるいはその両方を監視できるような所与の時点でのシステムまたは別のコンポーネントＣに関連付けられるコンポーネントＭ。Ｃの状態には、可用性、応答時間、ＣＰＵ消費などが含まれる。Ｃに対する負荷は、ＣまたはＣを展開する基礎になるシステムの消費される容量の尺度である。
【００３６】
リソース・マネージャ：ある顧客から別の顧客へのリソースの割振り／割振り解除、または関連するシステムの容量プラニング、あるいはその両方が可能なコンポーネントＲ。
【００３７】
本発明は、要求除去を最小にするためにフロー制御技法を使用するモデル（システムおよび方法）を提供する。要求のスケジューリングは、既存のポリシ／技法を使用して実行することができる。本明細書での説明のために、そのようなポリシの単純で一般的な例を選ぶ、すなわち、高いユーティリティ値を有する要求を転送し、要求のユーティリティ値は、要求が完全に処理される確率と、要求の優先順位（要求クラスとも称する）とによって決定される。この例を、図３に関して後で詳細に説明する。要求除去を減らすために実施する／従うことができる多数のそのようなポリシがありえることは、当業者に明白であろう。
【００３８】
図１に、本発明の好ましい実施形態による、要求を処理するコンピュータ・システム１００を示す。システム１００は、１つまたは複数のレベルを有することができ、各レベルは、その中に１つまたは複数のキューを有する。各レベルのキューは、さらに、１つまたは複数のバッファと、それに関連する１つまたは複数の処理機能を有することができる。例示のために、図１に、コンピュータ・システムの２つのレベル（すなわち、１０８および１１２）だけを示す。また、例示のために、図１に、その中に１つのキュー（すなわち１０２および１１０）だけを有する各レベルを示す。また、各キューは、１つのバッファ（すなわち、１０４および１２２）だけを有するものとして図示されている。
【００３９】
広義には、要求がシステム１００で処理される形は、次の通りである。キュー１０２に、バッファ１０４およびそれに関連する処理機能１０６が含まれる。キュー１０２内のバッファ１０４は、着信要求を受け取り、これらの着信要求を処理機能１０６に転送する。処理機能１０６は、要求ディスパッチ機能（要求のディスパッチに使用される）または要求分類機能（要求を分類するのに使用される）とすることができる。例示のために、図１に、処理機能１０６が要求ディスパッチ機能であるキュー１０２を示す。キューには、任意の数のクラスタを関連付けることができる。任意選択として、キューに、クラスタを関連付けないことができる。そのような場合には、あるキューに別のキューを続け、最後のキューだけがクラスタを関連付けられるようにすることができる。クラスタは、同等のタスクを実行するコンポーネント・インスタンスを含む。例示のために、図１に、クラスタ１０８に関連するキュー１０２を示し、このクラスタ１０８は、実際には、要求実行機能を実行するコンポーネントのクラスタである。要求ディスパッチ機能によって、要求が、クラスタ１０８にディスパッチされ、クラスタ１０８によって、要求が処理され、次のレベルのキュー１１０に転送される。各キューに、前のレベル／次のレベルのキューからの処理制御メッセージ／フロー制御メッセージを交換する交換モジュール１１６と、フロー制御メッセージの指示を実施する実施モジュール１１８と、制御信号／フロー制御信号を作成し、送る時を感知する感知モジュール１２０も含まれることが好ましい。そのようなモデルの実施形態が、必ずしも３つの別個のモジュールのすべてを有するのではないことに留意されたい。たとえば、ある実施形態が、３つのすべてのモジュールの機能を実行する１つのモジュールだけを有する場合がある。しかし、３つのすべてのモジュールの機能を、どの実施形態でも実行する必要がある。これらモジュールの使用を、本明細書で後で詳細に説明する。キュー１１０は、バッファと、要求ディスパッチ機能も有する。要求ディスパッチ機能によって、要求が、キュー１１０に関連するクラスタ１１２にディスパッチされる。クラスタ１１２のコンポーネントによって、要求が適当に処理される。クラスタ１１２からの要求が、要求の処理要件に応じて複数のキューに転送される場合がありえることに留意されたい。この処理要件に関する情報を、要求のヘッダに保管することができ、したがって、この情報は、ターゲット・キューを決定するためにクラスタ１１２のコンポーネントによって処理される。
【００４０】
開示されるシステムでは、異なるレベルのキューの間に情報（メッセージ）のフローがある。言い換えると、キュー１０２および１１０は、情報を交換する（１１４）。既に述べたように、この２つのキューの交換モジュールが、ある判断基準に基づいて要求除去を減らすためにキュー１０２が訂正処置を講じられるようにするために、情報１１４を交換する。バッファ管理ポリシを使用して、訂正処置を完全にまたは部分的に実行することができる。バッファ管理ポリシの簡単な例の１つを、下で例示のため説明する。
【００４１】
バッファ管理ポリシの例は、次の通りである。要求を分類（またはディスパッチ）し、ＦＣＦＳ（先着順サービス）に基づいて次のレベルに転送する。キューによって、フロー制御情報に基づいて、次レベルのキューで要求が残存する確率が判定される。あるレベルの各キューは、フロー制御信号を前のレベルのキューに送ることができ、制御信号を次のレベルのキューに送ることができる。この情報は、キューにある要求の残存確率に対応する負荷情報に関するものとすることができる。この確率および要求の優先順位を使用して、要求のユーティリティ値を判定することを図３に関して詳細に説明する。着信要求の数が、キューの要求処理容量を超える場合には、キューは、より高いユーティリティ値の要求を受け取り、他の要求を除去すると決断することができる。キューは、次レベル・キューに転送できなかった要求をハッシュ・テーブルに編成することもでき、その結果、それらの要求を、次レベル・キューが要求を受け取る準備ができるとすぐに転送できるようになる。
【００４２】
要求除去を減らすために、キューによって、複数の訂正処置を実行することができる。これらの訂正処置を、図２に関して詳細に説明する。これらの訂正処置は、実施モジュール１１８によって実行され、除去される要求の数のかなりの削減がもたらされる。また、本発明の好ましい実施形態では、これらの処置によって、ＱｏＳ／ＳＬＡ標準規格の厳密な実施がもたらされる。
【００４３】
図２は、本発明の好ましい実施形態による、要求を処理するために従われるステップのシーケンスを示す流れ図である。以下の説明では、要求のユーティリティ値の例が、本発明の好ましい実施形態の動作を示すだけのために使用されることに留意されたい。以下の説明を、どのような形でも、制限的であると考えてはならない。
【００４４】
ステップ２０２で、キュー１０２によって、要求を受け取り、バッファに保管する。ステップ２０４で、キュー１０２の交換モジュール１１６によって、キュー１１０の負荷およびクラスタ１１２の負荷に関する情報１１４を受け取る。ステップ２０６で、キュー１０２の実施モジュール１１８によって、情報１１４と、任意選択として要求に関する情報（要求ヘッダに保管されている可能性がある）に基づいて、クラスタ１１２への要求転送の「ユーティリティ値」を計算する。例示のために、ユーティリティ値が、要求の完了の確率に依存し、この確率が、後続レベルのキューおよびクラスタの負荷に基づくと仮定する。次レベル・キューおよび対応するクラスタの負荷が高いと、要求の完了の確率が下がり、したがって、要求のユーティリティ値が下がる。こうなるのは、完了の低い確率を有する要求がキュー１０２によって転送される場合に、その要求によってキュー１０２の処理時間およびシステム・リソースが利用されるからである。この要求が、その後キュー１１０で除去され、これによってシステム・リソースおよび時間が浪費される可能性が、非常に高い。ユーティリティ値は、要求のクラスにも基づくものとすることができる。たとえば、ＱｏＳ／ＳＬＡレベル・ゴールドの要求の転送は、ＱｏＳ／ＳＬＡレベル・ブロンズの要求の転送よりも、商業的に有用である。要求のユーティリティ値を判定するために導入することができる多数の他の要因があることは、当業者に明白である。しかし、説明のために、情報１１４を使用して計算することができる完了の確率と、要求パケットのヘッダから得ることができる要求クラスだけを含むように要求のユーティリティ値を制限する。この例によるユーティリティ値の計算は、図３に関して詳細に例を使用して説明する。
【００４５】
ステップ２０８で、要求の計算されたユーティリティ値を、キュー１０２に割り当てられた閾ユーティリティ値と比較する。閾ユーティリティ値は、計算され、各キューに割り当てられる。この閾値は、特定のキューについて固定された値である。この閾値は、次レベル・キューおよび対応するクラスタの推定負荷に関する情報を使用することと、キューによって処理される要求クラスを検討することによって計算される。この値は、システムの後続のスケール・アップまたはスケール・ダウンの度に、またはキューによって処理される要求クラスの変更について、変更されなければならない。
【００４６】
計算されたユーティリティ値が、閾ユーティリティ値を超える場合には、ステップ２１０で、キュー１０２の処理機能１０６によって要求を処理する（ディスパッチするか分類する）。しかし、計算されたユーティリティ値が、閾ユーティリティ値より小さい場合には、ステップ２１２で、キュー１０２の感知モジュールによって、要求の修正されたユーティリティ値を計算する。修正されたユーティリティ値は、キューが訂正処置を実施すると仮定した後に要求のユーティリティ値を増やすために計算される。この値は、訂正処置を講じるコストに基づく。コストは、主に、訂正処置を講じるためのメモリ消費および処理能力使用量によって左右される。ユーティリティ値を、訂正処置が講じられた後の要求の完了の確率および要求のクラスに基づくものとすることもできる。
【００４７】
キューによって講じられる訂正処置は、下記とすることができる。まず、キューの感知モジュールによって、制御信号を送ってその要求ディスパッチ速度を変更することができ、その結果、次レベル・キューおよび対応するクラスタの負荷が、最適レベルに達する。要求が、以前に、次レベル・キューでの過負荷に起因して低いユーティリティ値を有した場合には、制御信号によって、負荷が減らされ、したがって、要求の完了の確率が増える。これによって、要求のユーティリティ値の増加がもたらされる。この処置に関連するコストは、通常は、この処置が小さいコードの実行だけを伴うので、非常に低い。したがって、要求の修正されたユーティリティ値は、一般に要求の元のユーティリティ値より高い（完了の確率の増加に起因する）。この処置を講じることに関係するステップを、図４に関して詳細に説明する。ステップ２１４で、修正されたユーティリティ値を、修正された閾ユーティリティ値と比較する。スケール・アップが実行されない（すなわち、第２の処置が実行されない）場合に、修正された閾ユーティリティ値が、元の閾ユーティリティ値と同一になることに留意されたい。修正された閾ユーティリティ値が、修正された閾値より小さい場合には、ステップ２１６で、要求を除去する。そうでない場合には、ステップ２１８で、ステップ２１２で仮定された訂正処理を講じ、要求を、キューによってそのクラスタにディスパッチし、これによって、ステップ２２０で、適当な処理の後に、要求が次のレベルに転送される。
【００４８】
ユーティリティ値、閾ユーティリティ値、修正されたユーティリティ値、および修正された閾ユーティリティの概念をより明瞭に示すため、図３の表を検討されたい。説明される形が、例示のために働くことだけを意図され、どのような形でも本発明を制限するものと考えてはならないことに留意されたい。説明を単純にするために、ユーティリティ値を計算する非常に単純な例を選ぶ、すなわち、残存確率（０から１の間）にＱｏＳレベル（ブロンズ要求で１、シルバー要求で２、またはゴールド要求で３）をかける。したがって、０．７５の残存確率を有する要求Ａ（たとえばブロンズ要求）は、０．７５×１＝０．７５のユーティリティ値を有する。この要求は、キューによってディスパッチされる。というのは、ユーティリティ値が、閾ユーティリティ値（このキューについては＝０．５）を超えるからである。同様に、図３に示された要求Ｂもディスパッチされる。しかし、０．４８のユーティリティ値を有する要求Ｃ（０．１６の完了確率を有するゴールド要求（ＱｏＳ＝３））は、閾ユーティリティ値（０．５）の方が高いので、転送されない。修正された閾ユーティリティ値は、ロード・バランサのディスパッチ速度を変更する修正処置が講じられると仮定することによって計算される。この訂正処置のステップは、図４で説明する。要求Ｃ’が、修正された要求である。図３から、ディスパッチ速度を修正する訂正処置が講じられる場合に、完了確率が０．２０に増える。しかし、その処置に関連するコスト要因（たとえば０．９）がある。したがって、要求Ｃ’の修正されたユーティティ値は、０．２×３×０．９＝０．５４になり、これは、閾ユーティリティ値０．５より大きい。したがって、訂正処置を講じると、要求Ｃのユーティリティ値が増え、これによって、要求Ｃを除去する必要がなくなる。
【００４９】
また図３を参照して、要求Ｄの場合（完了確率＝０．４、ＱｏＳレベル＝１（ブロンズ））を検討されたい。第１の処置を講じたと仮定した後であっても、修正されたユーティリティ値（０．４５）は、閾ユーティリティ値を超えない。しかし、第２の処置（スケール・アップ）を講じたと仮定する。この処置に関連するコストは、第１の処置のコスト（０．９の乗算要因）より高い（０．８の乗算要因）。したがって、修正されたユーティリティ値は、０．６×１×０．８＝０．４８になる。しかし、この場合に、閾ユーティリティ値も、０．４５に減る（スケール・アップに起因して）。したがって、第２の訂正処置を講じる場合には、要求Ｄを渡すことができる。しかし、要求Ｅなど、両方の訂正処置を講じた場合であっても渡されない要求が存在する可能性がある。そのような要求は、システムによって除去される。
【００５０】
図４に、キューがロード・バランサ内で実施され、ロード・バランサのディスパッチ速度を修正した後に要求が渡せるようになる、例示的な例でのステップのシーケンスを示す。やはり、要求を渡せるようにする多数の形があり、以下の説明では、その１つの可能な形を示す。この処置で使用される情報には、次レベル・ロード・バランサおよびそれに対応するクラスタの負荷に関する情報が含まれる。ステップ４０２で、キューが、特定の要求クラスｒの要求を受け取る。ステップ４０４で、キューの実行可能モジュールが、要求クラスｒに関する要求の現在の着信速度、要求クラスｒに関する着信要求の期待される速度、および次レベル・ロード・バランサからの要求クラスｒの要求の現在のディスパッチ速度に関する情報を受け取る。要求の完了の確率は、この受け取られた情報をキューの実施モジュールで処理することによって判定される。この確率は、多数の形で計算することができる。確率を計算する例示的な形の１つを、ステップ４１０に関して説明する。
【００５１】
ステップ４０６で、キューが、要求クラスに関する情報を収集する。この情報は、着信要求のヘッダに格納されることが好ましい。要求のＱｏＳ／ＳＬＡレベルを、要求クラスの例の１つとすることができる。単純な実施の例を、ゴールド要求に３、シルバー要求に２、ブロンズ要求に１の値を割り当てることとすることができる。ステップ４０８で、キューが、ステップ４０４および４０６で収集した情報に基づいて、要求のユーティリティ値を計算する。やはり、前に述べたように、この情報をキューによって使用してユーティリティ値を得る多数の形が存在する可能性がある。前に説明したように、それを行う単純な例の１つが、完了の確率と要求クラス・レベルの乗算によるものである。したがって、次レベル・ロード・バランサの負荷が７５％（完了確率＝０．２５）である場合に、ブロンズ要求のユーティリティ値は、０．２５（ゴールド要求のユーティリティ値は０．７５、シルバー要求のユーティリティ値は０．５）である。
【００５２】
ブロンズ要求のユーティリティ値が、閾ユーティリティ値より小さいと仮定する。その場合には、修正されたユーティリティ値は、キューの要求ディスパッチ速度の変化を仮定することによって計算される。ステップ４１０で、要求ディスパッチ速度の変化を、収集した情報を使用してキューの実施モジュールによって計算する。ディスパッチ速度の計算には、どのような技法でも使用することができる。以下は、特定の要求クラスの残存確率に基づいてディスパッチ速度の変化を計算する単純な例示的な形である（この例では、要求の優先順位（要求クラス）を考慮に入れていない。要求クラスの考慮ありまたはなしでディスパッチ速度を計算する多数の方法があることは、当業者に明白である）。最後に、ステップ４１２で、要求ディスパッチの計算された新しい速度で要求をディスパッチする。
【００５３】
Ｑ＝｛Ｑ２、Ｑ３、Ｑ４、…、Ｑ−ｋ｝の前レベル・キューを有するキューＱ−ｍを検討されたい。Ｑ−ｍのバッファが、要求クラス−ｒのクリティカル値（たとえば９５％満杯）より大きい場合には、キューＱ−ｍは、Ｑ内のキューのフロー制御メッセージを生成すると判断する。このフロー制御メッセージには、Ｑ−ｍでのクラスｒの着信要求速度Ｒｒｍが含まれる。期待される着信速度はＥｒｍである。受取り側のキューＱ−ｋは、このメッセージを処理し、そのディスパッチ速度を訂正すると判断する。Ｑ−ｋによって実施される処置は、ディスパッチ速度を下げることである。最終的なディスパッチ速度ｄｒｋを計算するのに使用される式の例は、下記とすることができる。
Ｄｒｋが、ＣＬＤ−ｋからのクラスｒの要求の現在のディスパッチ速度であるものとする。
着信速度への寄与の割合は、Ｃ＝Ｄｒｋ／Ｒｒｍである。
ディスパッチ速度に対する変更は、ｚｒｋ＝Ｃ×（Ｅｒｍ−Ｒｒｍ）である。
新しいディスパッチ速度はｄｒｋ＝Ｄｒｋ＋ｚｒｋである。
ｄｒｋ＜Ｄｒｋの場合には、Ｑ−ｋは、要求クラス−ｒのディスパッチ速度をｄｒｋまで減らす。これは、ディスパッチされる要求のそれぞれの後に遅延を追加して、新しいディスパッチ速度を実施することによって達成される。
【００５４】
開示されるモデル（システムおよび方法）は、ある事前定義のパラメータ（サービス品質／サービス・レベル・アグリーメント（ＱｏＳ／ＳＬＡ）など）に基づいて要求を分類し、処理する能力も有する。本発明を使用することによって、システムで発生する要求除去の数が大幅に減る。また、システム・リソース使用は、コンピュータ・システム内の中間コンポーネントで要求が除去される機会が減るので、はるかに効率的になる。本発明の一実施形態では、厳密なサービス品質／サービス・レベル・アグリーメント（ＱｏＳ／ＳＬＡ）の実施が保証され、これによって、サービス品質の改善がもたらされる。これによって、ユーザ要求に対するより高速の応答時間が保証される。
【００５５】
これまでに説明したシステムのハードウェア実施形態は、下記の形で行うことができる。各キューを、集積回路によって実施することができる。バッファは、ＤＲＡＭ技術または、より高速のメモリ動作のためにキャッシュ・メモリを実施するのに使用される技術を使用して実施することができる。フロー制御メッセージを処理するサブコンポーネントに、マイクロプロセッサ、メモリ、および通信プロセッサも含めることができる。処理機能は、多少のメモリを有するマイクロプロセッサおよび通信プロセッサとして実施することもできる。バッファ、処理機能、およびコントローラの間に、通信リンクがある。各サブコンポーネントは、所望の構成および挙動のために特定の命令を介してプログラムすることができる。
【００５６】
説明したシステムは、ソフトウェア実施形態も有することができ、これは、メモリおよび処理能力を有する計算装置で実施することができる。各コンポーネントは、一般的なプログラミング言語（Ｃ、Ｃ＋＋、またはＪａｖａ（Ｒ）など）のいずれかを使用して記述されるソフトウェア・コードの形で実施される。これらのソフトウェア・コードによって、実行時に、コンポーネントの機能性を実行するために、計算装置のメモリおよび処理能力が使用される。
【００５７】
これまでに述べたモデルは、図５に関して説明する連繋負荷ディストリビュータ（ＣＬＤ）アーキテクチャで実施することができる。このモデルは、複数のそのようなＣＬＤ（図５で説明する）を使用する連繋負荷分配フレームワークでも実施することもできる。そのようなフレームワークを、図６に関して詳細に説明する。
【００５８】
実施形態１：連繋負荷ディストリビュータ（ＣＬＤ）
これまでに説明したモデルのＣＬＤとしての実施形態は、ｎレベルのキューを有し、ｎ≧１である。最初の（ｎ−１）個のレベルのどれにも、クラスタは関連付けられない。これらのレベルの各キューの処理機能は、要求分類機能である。ｎ番目のレベルは、キューごとに１つまたは複数のクラスタを有し、これらのレベルの処理機能は、要求ディスパッチ機能である。
【００５９】
これまでに説明した実施形態を、例を使用して説明する。図５に、連繋負荷ディストリビュータ（ＣＬＤ）５００の全体的なシステム・アーキテクチャの例を示す。ＣＬＤ５００には、２レベルのキューすなわち、第１レベル・キュー（グローバル要求ハンドラ（ＧＲＨ）５０２）および第２レベル・キュー（特定要求ハンドラ（ＳＲＨ）５０４）が含まれる。ＧＲＨ５０２は、クラスタを関連付けられず、ＧＲＨ５０２の処理機能は、要求分類機能である（要求クラシファイヤ（ＲＣ）とも称する）。ＲＣは、要求分類要因（ＲＣＦ）に基づいて要求を分類し、ＲＣＦは、ある事前定義のパラメータ（後で説明するように、サービス・ベースの分類または顧客ベースの分類など）に依存するものとすることができる。ＧＲＨ５０２から分類された要求を受け取る複数のＳＲＨ（第２レベル・キュー、ＳＲＨ５０４に似る）がある。これらのＳＲＨは、要求のさまざまなクラスに対応するものとすることができる。図示の例では、各ＳＲＨが、要求ディスパッチ機能（要求ディスパッチャ（ＲＤ）とも称する）を有する。各ＳＲＨは、１つまたは複数のクラスタを有することができ、そのクラスタに、ＳＲＨが要求をディスパッチする。本発明のＣＬＤ実施形態を、２レベルのキューに関して説明したが、複数レベルのキューも使用できることに留意されたい。たとえば、第２レベル・キューでの要求の副分類を設けることができる。３つのレベルを有するロード・バランサの例示的実施形態は、グローバル・バッファとして働く１つの第１レベル・キュー、異なるサービス・クラスの複数の第２レベル・キュー、および異なる顧客クラスの複数の第３レベル・キューを有することができる。
【００６０】
ＣＬＤ５００は、感知モジュール、交換モジュール、および実施モジュールの機能性を実行する、要求ディスパッチ・マネージャ（ＲＤＭ）５０６および負荷分配コントローラ（ＬＤＣ）５０８を有する。この実施形態では、交換モジュール、感知モジュール、および実施モジュールが、キュー固有として図示されていない、すなわち、各キューが、この３つのモジュールを有しないことに留意されたい。その代わりに、この例示的ＣＬＤアーキテクチャでは、これらのモジュールの機能性を実施する、１つのＲＤＭおよび１つのＬＤＣだけがある。ＲＤＭ５０６は、ＳＲＨ５０４の負荷状態のセンサとして働き、ＧＲＨ５０２とＳＲＨ５０４の間のメッセージの交換を可能にする。ＲＤＭ５０６は、ＳＲＨがほぼ満杯の状態（後で詳細に説明する）に達した時に、ＧＲＨに適当なメッセージを送る。ＲＤＭ５０６は、各複製に関する動的負荷情報を得るために、負荷モニタ（ＬＭ）とも情報を交換する。ＬＤＣ５０８は、他のＣＬＤとの間で、メッセージを受け取り、生成し、送る（図６に関して説明する）。ＬＤＣ５０８は、リソース・マネージャ（ＲＭ）とも情報を交換する。
【００６１】
ＣＬＤアーキテクチャを、これから詳細に説明する。図５に関して既に述べたように、ＣＬＤ５００は以下のコンポーネント、グローバル要求ハンドラ（ＧＲＨ）５０２、要求ディスパッチ・マネージャ（ＲＤＭ）５０６、特定要求ハンドラ（ＳＲＨ）５０４、および負荷分配コントローラ（ＬＤＣ）５０８を有する。ＧＲＨ５０２には、バッファ、要求レシーバ、および要求分類機能が含まれる。ＲＤＭ５０６には、ＬＤＣ５０８およびＧＲＨ５０２からのメッセージのレシーバと、ＳＲＨ５０４、ＬＤＣ５０８、およびＧＲＨ５０２へのメッセージのセンダが含まれる。ＲＤＭ５０６によって、ＳＲＨ５０４とＧＲＨ５０２の間のメッセージ５１０の交換が可能になる。ＲＤＭ５０６には、任意選択として、負荷モニタに関する負荷レシーバおよびメッセージ・センダも含まれる。ＳＲＨ５０４には、要求レシーバ、第２レベル・バッファ（ＳＬＢ）と称するバッファ、および要求ディスパッチ機能が含まれる。ＬＤＣ５０８には、新しい要求クラスに基づくか、クラスタ容量などの変更に基づいて、動的にＣＬＤの構成を修正するモジュールが含まれる。ＬＤＣ５０８には、ＱｏＳ／ＳＬＡ関係のインテリジェンスを実施する任意選択のモジュールも含まれる。たとえば、ＬＤＣ５０８は、満杯になる頻度、要求除去の割合などに基づいて、ＱｏＳクラスごとのバッファ・サイズを判断することができる。
【００６２】
ＧＲＨ５０２は、第１レベル・キューであり、ＳＲＨの組は、第２レベル・キューからなる。ＳＲＨの数は、要求クラスの数によって左右される。好ましい実施形態では、その数が、要求クラスの数と等しい。ＧＲＨ５０２は、主に、着信要求の受け取りの責任を負い、任意選択として、要求／他の定義された判断基準の正当性の認証に基づいて管理制御を実行し、要求を受け入れ、各要求を分類し、要求のクラスに適当なＳＲＨに要求を送る。各ＳＲＨ５０４は、主に、ＧＲＨ５０２から要求を受け取り、バッファが満杯でない場合にその要求をバッファにバッファリングし、満杯の場合には要求を選択的に除去し（前にモデルの説明で既に説明したバッファ管理ポリシに従って）、使用されるロード・バランシング技法に基づいて各要求をディスパッチする責任を負う。ＧＲＨ５０２およびＲＤＭ５０６は、ＧＲＨ５０２および各ＳＲＨ５０４の間のフロー制御を実施するために、フロー制御を実行しなければならない。ＲＤＭ５０６は、ＳＲＨ５０４およびＳＲＨ５０４のそれぞれのディスパッチ速度の管理を実行する責任を負う。
【００６３】
ＧＲＨ５０２は、要求を受け取る場合に、バッファが満杯であるか否かを検査する。満杯の場合には、ＬＤＣ５０８が、ユーティリティ値に基づいて要求を選択的に除去するか、要求を受け入れるようにＧＲＨ５０２に指示する。既に説明したように、実施されるバッファ管理ポリシによって、要求がそのユーティリティ値に基づいて処理される形が左右される。要求を処理する例示的な形は、キューが、閾ユーティリティ値より高いユーティリティ値の要求を受け取り、他の要求を除去できることとすることができる。また、次レベル・キューに転送できない（ユーティリティ値が低いことに起因する）要求をハッシュテーブルに編成することができ、その結果、これらの要求を、次レベル・キューが要求を受け取る準備ができるとすぐに転送することができる。要求を受け入れた後に、ＧＲＨ５０２は、要求をグローバル要求バッファにバッファリングする。ＧＲＨ５０２の要求分類機能が、バッファ内の要求を分類し、そのＲＣＦに基づいて正しいＳＲＨにディスパッチする。アプリケーションレベルの要求を分類するために（ロード・バランサがアプリケーション・レベルのロード・バランシングを実行している場合）、ＧＲＨ５０２の要求分類機能が、要求分類要因（ＲＣＦ）を判定するために、要求の要求ヘッダを解析する。ロード・バランサが、ネットワーク・レベルのロード・バランシングを行っている場合に、ＧＲＨ５０２の要求分類機能は、優先順位または他の情報あるいはその両方（どの種類のＲＣＦが使用されるかに依存する）についてＩＰパケット・ヘッダを解析し、ＲＣＦを判定する。
【００６４】
ＲＣＦを、ＧＲＨ５０２によって計算することができる。ＲＣＦに基づいて、ＧＲＨ５０２は、そのＲＣＦ値に関連する次レベル・バッファＢの状態を検査する。ＳＲＨ５０４のバッファが満杯の場合には、ＧＲＨ５０２のバッファ管理ポリシによって、要求を処理する方法が判断される。ＬＣＤ５０８によって、ＳＲＨ５０４に、要求のユーティリティ値に基づいて、受け取った要求の一部を除去するように指示することもできる。そうでなければ、ＲＣＦを判定した後に、ＧＲＨ５０２の要求分類機能が、要求を適当なＳＲＨに引き渡す。
【００６５】
ＳＲＨ５０４は、要求をキューにバッファリングする。同時に、ＳＲＨのＲＤが、ターゲット・クラスタ内の各複製の負荷情報を受け取る。ロード・バランシング技法が静的な技法（たとえばラウンド・ロビン・ロード・バランシング技法）である場合には、負荷情報は不要である。しかし、動的なロード・バランシング技法の場合には、要求ディスパッチ機能が、特定の要求クラス（そのＳＲＨが属する）のクラスタの各複製の負荷情報を必要とする可能性がある。この負荷情報は、負荷モニタから受け取られる。要求ディスパッチに、２つの可能性があることに留意されたい。まず、要求ごとに、ターゲット・クラスタ内の各複製の負荷情報が入手され、対応するユーティリティ値が計算される。しかし、要求密度が高いネットワークでは、要求ディスパッチ速度が、非同期フロー制御メッセージを得る速度よりもあまりに高い。その場合には、負荷情報を、事前定義の基礎で受け取る。たとえば、この情報を、関係するクラスタ内の複製の負荷に大きい変化がある時だけ受け取ることができる。その場合の要求ディスパッチ速度は、使用可能な負荷情報に基づいて計算される。クラスタの負荷に大きい変化がある時に限って、新しい負荷情報が、入手され、ユーティリティ値の計算に使用される。説明した実施形態では、前者の形の要求のディスパッチを説明した。しかし、後者の形および多数の他の形を使用して、本発明の趣旨および範囲から逸脱せずにこの目的を達成できることは、当業者に明白であろう。
【００６６】
好ましい実施形態では、受け取った負荷情報に基づいて、ＲＤが、負荷が最小の複製を識別し、その複製が正の残余容量を有するかどうか、すなわち、その複製が、さらに要求を処理できるかどうかを識別する。その後、ＲＤは、バッファから要求を検索し、その（最小の負荷の）複製にディスパッチする。ＲＤは、ディスパッチ速度に基づいてディスパッチを継続する。
【００６７】
各ＳＲＨ５０４のＲＤは、使用されるロード・バランシング技法に基づいて、ターゲット複製（クラスタ）に要求をディスパッチする。要求ディスパッチ機能は、要求をターゲット複製にディスパッチする方法を知る必要がある。使用される要求ディスパッチ技法は、ネットワーク・レベルとアプリケーション・レベルのロード・バランシングで異なるので、要求ディスパッチ機能も、それぞれに別々に実施することができる。アプリケーション・ロード・バランシングの場合に、要求ディスパッチは、アプリケーションのそれぞれの使用するプロトコルに応じて、アプリケーションごとに異なる。したがって、アプリケーションのクラスについて、要求ディスパッチ機能の１つの実施形態だけがある。
【００６８】
ＧＲＨ内のＲＣおよびＳＲＨ内のＲＤは、ＣＬＤがアプリケーション・レベル・ロード・バランシングまたはネットワークレベル・ロード・バランシングのどちらに使用されるかに依存するので、これらを、ロード・バランサのプラグ可能コンポーネントとして実施することができる。そのようなプラグ可能コンポーネントは、スタートアップ中にロード・バランサによって使用される。このコンポーネントは、アプリケーションレベル・ロード・バランシングについてアプリケーション依存である。
【００６９】
ＲＤＭ５０６は、各ＳＲＨ５０４の負荷の状態を追跡する。ＳＲＨが、ほぼ満杯（たとえば、７５％満杯、これはユーザが定義することができる）になる場合に、ＲＤＭ５０６は、フロー制御メッセージをＧＲＨ５０２に送る。ほぼ満杯状態は、必ずバッファの満杯状態以下である。ＧＲＨ５０２がフロー制御を実施する時までに、ＧＲＨ５０２が、特定の要求クラスについてさらに要求を送っている可能性があるので、ほぼ満杯状態は有用である。フロー制御メッセージには、とりわけ、要求クラスと、その要求クラスの着信要求速度が含まれる。ＧＲＨ５０２は、要求の転送を中止するか、要求をディスパッチする速度を減らすか、他の手段を講じることができ、これは、モデルに関して前に説明した。ＳＲＨ状態が、「ほぼ満杯」状態から「ほぼ満杯でない」状態に戻る場合に、ＲＤＭ５０６は、状態変化に関するメッセージをＧＲＨ５０２に送る。ＧＲＨ５０２は、前の状態に戻ることができる。ＧＲＨ５０２のバッファがほぼ満杯になるか、ＧＲＨ５０２が、あるＳＬＢがより頻繁にほぼ満杯になるのを観察するか、ＧＲＢが満杯なのでＧＲＨ５０２が要求を除去しているか、着信要求速度が、ＳＲＨ５０４にディスパッチする速度よりはるかに高いか、類似する状況が生じる場合に、ＧＲＨ５０２は、その状態に関する制御メッセージをＬＤＣ５０８に送る。このメッセージには、関連するデータが含まれ、着信要求速度、要求分類速度、ＳＲＨの要求ディスパッチ速度などを含めることができる。ＬＤＣは、ＧＲＢ／ＳＬＢのバッファ・サイズを増やすか、フロー制御メッセージを前のレベルのロード・バランサに送るか、その両方を行うかを判断する。
【００７０】
ＬＤＣ５０８は、要求クラスｒのフロー制御メッセージを受け取る時に、ｒのディスパッチ速度をどれほど減らすか、ｒの要求のディスパッチをどれだけの時間だけ停止するか、要求クラスｒのＧＲＨおよびＳＲＨのバッファ・サイズをどれだけ増やすか（この前の２つの判断に起因してバッファリングされる要求を処理するために）を判断する。ＬＤＣ５０８は、ｒの最新の要求ディスパッチ速度を知らない場合に、その値に関する制御メッセージを介してＲＤＭに尋ねることができる。ＬＤＣ５０８は、値および判断を計算し、最終的な要求ディスパッチ速度、要求ディスパッチを停止する時間、またはＳＬＢサイズの増加、あるいはこれらの組合せを実施するようにＲＤＭに指示する。同様に、ＧＲＨ５０２についてこれに関する指示がある場合には、ＬＤＣ５０８は、ＧＲＨ５０２にも指示する。ＲＤＭ５０６は、指示に従ってＳＲＨ５０４のディスパッチ速度を制御する。ＲＤＭ／ＧＲＨは、必要な場合に、それぞれＳＬＢ／ＧＲＢのバッファ・サイズを増やす。ＧＲＨ５０２およびＲＤＭ５０６は、指示の成功裡の実施についてＬＤＣ５０８に肯定応答を送り、そうでない場合には、否定応答がＬＤＣ５０８に送られる。
【００７１】
リソース・マネージャのメッセージに起因して、または他の理由に起因して（ＳＬＢまたはＧＲＢの頻繁なオーバーフローに対抗するなど）、ＬＤＣ５０８が、バッファのいずれかのサイズを変更する（増やす／減らす）と判断する場合がある。ＧＲＢのサイズを変更するために、ＬＤＣ５０８は、ＧＲＨ５０２に指示する。ＧＲＨ５０２は、指示を実施し、成功裡の変更の際には肯定応答、そうでない場合には否定応答を送る。ＳＬＢのサイズを変更するため、またはＳＲＨのディスパッチ速度を変更するために、ＬＤＣ５０８は、特定の要求クラスに必要な処置に関して知らせることによって、ＲＤＭ５０６に指示する。ＲＤＭ５０６は、指示の処置を実施し、成功裡の変更の際には肯定応答、そうでない場合には否定応答を送る。
【００７２】
リソース・マネージャは、新しい要求クラスｒを追加する場合に、その更新に関してＣＬＤのＬＤＣ５０８に通知する。更新には、可能なＱｏＳ／ＳＬＡパラメータ、または可能な最大要求速度、あるいはその両方も含まれる。ＬＤＣは、ｒの新しいＳＲＨを作成し、要求クラスのリストにｒを追加するようにＲＤＭに指示する。ＲＤＭは、ＬＤＣによって指定されるＳＬＢサイズのＳＲＨを作成する。次に、ＲＤＭは、ＬＤＣにメッセージを送り、成功裡のＳＲＨ作成について知らせる。ＲＤＭは、ＳＲＨを作成できない場合に、ＬＤＣに否定の応答を送る。ＲＤＭからの肯定の応答を受け取る時に、ＬＤＣは、ＧＲＢサイズの変更および新しい要求クラスｒの追加についてＧＲＨに指示する。ＧＲＨは、ＧＲＢサイズを増やし、要求クラスのリストを更新することによって、ＬＤＣ指示を実施する。ＧＲＨは、成功裡の完了時に肯定応答を送る。ＧＲＨは、失敗した場合に、否定応答を送る。
【００７３】
ＧＲＨ／ＬＤＣ／ＲＤＭでのなんらかの種類の障害によって、ロード・バランサが効果的にロード・バランサに要求クラスｒを追加できない場合には、ＬＤＣは、リソース・マネージャに否定応答を送ることができる。
【００７４】
同様に、要求クラスｒの削除について、ＬＤＣは、対応するＳＲＨを削除するようにＲＤＭに指示する。ＲＤＭは、そのような指示を受け取る時に、「要求ｒのＳＲＨを削除せよ」という制御メッセージをＧＲＨに送る。次にＧＲＨは、外部からｒに関する要求をそれ以上受け取るのを停止し、ｒのすべての要求をＳＲＨに転送する。ＧＲＨは、肯定応答をＲＤＭに送る。ＧＲＨからの肯定応答を受け取る時に、ＲＤＭは、ｒのＳＬＢが空になる（ディスパッチされる要求がなくなる）まで待ち、その後、ＳＲＨを削除する。ＲＤＭは、その後、ＬＤＣに肯定応答を送る。ＬＤＣは、ＧＲＢのサイズを変更し、適宜レコードから要求クラスｒを削除するようにＧＲＨに指示する。ＧＲＨは、ＧＲＢのサイズを変更し、リストを更新し、その後、肯定応答をＬＤＣに送る。ＧＲＨとＲＤＭの両方から肯定応答を受け取る時に、ＬＤＣは、必要であれば、「要求クラスｒが除去された」ことを含む肯定応答をＲＭに送ることができる。ＧＲＨ／ＬＤＣ／ＲＤＭでのなんらかの種類の障害によって、ロード・バランサが効果的に要求クラスｒを削除できない場合には、ＬＤＣは、リソース・マネージャに否定応答を送ることができる。
【００７５】
各要求クラスの要求は、他の要求クラスの要求と並行にディスパッチされる。ＣＬＤは、２つのディスパッチャが一時に同一のインスタンスに要求を送らないことを保証するために、平行ディスパッチを使用するが、各論理インスタンスは、１つのリソース・クラスだけに属さなければならない。論理インスタンスが、クラスタ内の、物理インスタンス／複製または物理インスタンス／複製のある容量のいずれかであることに留意されたい。たとえば、要求クラスがゴールドおよびシルバーである場合に、論理インスタンスは、ゴールドまたはシルバーのいずれかに属すが、両方には属さない。
【００７６】
代替実施形態では、このアーキテクチャに順次ディスパッチ技法も使用することができる。平行列ディスパッチの代わりに、下記の技法を使用して順次ディスパッチを実施することができる。各ＳＲＨの要求ディスパッチャを削除する。これらの要求ディスパッチャの代わりに、すべての要求クラスに関する単一要求のディスパッチャを使用する。この要求ディスパッチャは、任意のパラメータ（たとえばＱｏＳ／ＳＬＡベースの重み）に基づいてさまざまなキューの間でスケジューリングを実行し、一時に１つの要求をディスパッチする責任を負う。
【００７７】
実施形態１で説明したＣＬＤでは、要求の処理に二重レベル・バッファリングを使用する。２レベルのバッファの間に、情報フローが存在する。これは、要求が第２レベルで受け入れられる確率を識別するのに役立つ。その結果、低い残存確率を有する要求が、第１レベルで除去され、これによって、システム・リソース（たとえば、メモリ可用性および処理能力）の浪費が減る。
【００７８】
ＣＬＤによって、要求の区別されたロード・バランシングも実行され、これによって、ＱｏＳ／ＳＬＡの厳密な実施がもたらされる。
【００７９】
各ＳＲＨは、ターゲット・コンポーネントに直接に要求をディスパッチする。したがって、要求の平行ディスパッチが行われる。要求が、ターゲット・コンポーネントに最終的にディスパッチされる前に通過しなければならないボトルネックはない。これによって、ＣＬＤのスループットが高まる。
【００８０】
ＣＬＤで除去される要求の数は、システム・リソースがより効率的に使用されるので減る。したがって、第２レベルに転送される要求は、高い残存確率を有するか、転送の高いユーティリティを有するものだけである。これは、ＣＬＤアーキテクチャのレベル間のフロー制御によって達成される。
【００８１】
実施形態１：ＣＬＤは、オブジェクト指向技術を使用して実施することができる。たとえば、Ｃ＋＋を使用して、システムを実施することができる。各モジュール／エンティティは関連するクラス、Ｂｕｆｆｅｒ、Ｑｕｅｕｅ、ＧＲＨ、ＳＲＨ、ＬＤＣ、ＲＤＭ、ＲＤを有する。ＳＬＢおよびＧＲＢは、Ｂｕｆｆｅｒのサブクラスである。オブジェクト・メッセージングが、これらのクラスのオブジェクトの間で、通信を実行するのに使用される。ＣＬＤには、１つのＧＲＨ、複数のＳＲＨ、１つのＲＤＭ、および１つのＬＤＣのオブジェクトが含まれる。各ＧＲＨに、オブジェクトＧＲＢが含まれる。各ＳＲＨに、ＳＬＢおよびＲＤのオブジェクトが含まれる。各ＲＤＭが、各ＳＲＨとの関連関係を有する。各ＬＤＣに、前レベル・ロード・バランサおよび次レベル・ロード・バランサのリストが含まれる。ＲＤＭは、ロード・バランサとの関連を有する。
【００８２】
もう１つの実施形態では、ＣＬＤが、ＩＣまたは論理回路あるいはその両方であり、これに、マイクロプロセッサＩｎｔｅｌ  ｘ８６としてのＬＤＣ、別のマイクロプロセッサＩｎｔｅｌ  ｘ８６としてのＲＤＭ、Ｉｎｔｅｌ  ｘ８６としてのＲＤ、ＧＲＢのＤＲＡＭメモリを有するＧＲＨが含まれる。ＳＬＢも、ＤＲＡＭメモリとして実施される。要求を受け取り、要求を送り、フロー制御メッセージを通信する入出力に標準ネットワーク・カード／インターフェースを使用することができる。ロード・バランサの間の通信のプロトコルを、ＴＣＰ／ＩＰとすることができる。
【００８３】
実施形態２：連繋負荷バランシングのフレームワーク
図１に関して説明したモデルは、マルチレベル処理システム（フレームワーク）で実施され、クラスタの前の各ロード・バランサ（スケジューラ）を、キューとしてモデル化することができる。そのようなキューの処理機能は、ディスパッチ機能である。各キューに関連する１つまたは複数のクラスタがありえる。感知モジュール、実施モジュール、および交換モジュールの機能性を、各ロード・バランサ（ＣＬＤ５００）のＬＤＣ５０８によって実行することができる。図５に関して上で説明したＣＬＤ５００は、そのようなマルチ・レベル処理システム（フレームワーク）で、図６に示されているように使用される。
【００８４】
ここで、このフレームワークが使用される環境を短く説明する。連繋負荷バランシング・フレームワークを使用する集中システムに、システムの複製の組が含まれる。これらの複製は、着信要求について負荷が平衡化される。連繋する負荷バランシング・フレームワークを使用する分散システムに、そのコンポーネントのクラスタが含まれる。システム全体の複製は、使用されない。コンポーネントの複製のクラスタが使用される。各クラスタに、１つのコンポーネントの複製が含まれる。クラスタに関連するロード・バランサが、そのクラスタの複製の間で負荷を分配する。中間クラスタでの要求除去を減らすために、ロード・バランサの間でクラスタにまたがってフロー制御が使用される（図６）。
【００８５】
連繋負荷バランシング・フレームワーク（図１で説明したモデルに基づく）の例を、図６に関してこれから説明する。本発明の趣旨および範囲から逸脱せずにＣＬＤ５００を使用する連繋負荷バランシング・フレームワークの多数の変形形態がありえることに留意されたい。
【００８６】
このフレームワークで使用されるＣＬＤは、感知モジュール、実施モジュール、および交換モジュールの機能性を実行するために、ＣＬＤ５００のアーキテクチャを有する。この例のフレームワークには、それぞれクラスタ６０４、クラスタ６１０、クラスタ６１２、およびクラスタ６１６のコンポーネントに要求を分配するＣＬＤ６０２、ＣＬＤ６０６、ＣＬＤ６０８、およびＣＬＤ６１４（それぞれがＣＬＤ５００のシステム・アーキテクチャを有する）が含まれる。情報（またはメッセージ）６１８が、ＣＬＤ６０６およびＣＬＤ６０２の間で交換され、情報６２０が、ＣＬＤ６０８とＣＬＤ６０２の間で交換される。同様に、情報６２２が、ＣＬＤ６１４とＣＬＤ６０６の間で交換され、情報６２４が、ＣＬＤ６１４とＣＬＤ６０８の間で交換される。
【００８７】
ロード・バランシング・フレームワークへの要求は、ＣＬＤ６０２に進み、クラスタ６０４のフロントエンド・コンポーネントの１つに分配される。フロントエンド・コンポーネントによる処理の後に、要求は、その要求の後続処理要件に応じて、ＣＬＤ６０６（サーバ・アプリケーションＡのクラスタ６１０を制御する）またはＣＬＤ６０８（サーバ・アプリケーションＢのクラスタ６１２を制御する）のいずれかに進む可能性がある。この処理の後に、要求が、ＣＬＤ６１４に送られ、ＣＬＤ６１４によって、要求の処理を完了するために、要求が、クラスタ６１６内のデータベースの間で分配される。さまざまなクラスタへの要求のフローは、ＣＬＤ間の情報のフローによって左右される。
【００８８】
これから、ＣＬＤ５００を、上で説明した連繋負荷バランサ・フレームワークで使用する方法を説明する。既に説明したように、各ＣＬＤ５００が、ＬＤＣ５０８を有し、これによって、ＣＬＤ５００が、メッセージを生成し、フレームワーク内の他のＣＬＤと交換できるようになる。したがって、この実施形態では、ＬＤＣ５０８が、ＣＬＤ５００（キューとして働く）の感知モジュールならびに生成モジュールとして働く。ＬＤＣ５０８は、負荷モニタ（ＬＭ）とも情報を交換する。前に説明したモジュール／コンポーネントのほかに、ＬＤＣ５０８には、さまざまなコンポーネント、隣接するロード・バランサ、および隣接するリソース・マネージャからのメッセージのレシーバと、そのようなコンポーネントへのメッセージのセンダー（sender）と、始動時のシステムの初期化のモジュール、クラスタ内の動的な修正に起因してＣＬＤレコードを更新するモジュールも含まれる。ＬＤＣ５０８は、新しい要求クラスに基づくか、クラスタの要求処理容量の変化に基づいてＣＬＤの構成を動的に修正するモジュールも有する。手短に言えば、ＬＤＣ５０８は、ＬＤＣシステム全体を管理し、ロード・バランサの間でクラスタにまたがってフロー制御を適用する責任を負う。
【００８９】
ＧＲＨ５０２のバッファがほぼ満杯になる（たとえば、前レベルＣＬＤの高い要求ディスパッチ速度に起因する）場合に、ＧＲＨは、その状態に関してＬＤＣに制御メッセージを送る。このメッセージは、関連するデータが含まれ、着信要求速度、要求分類速度、要求ディスパッチ速度などを含めることができる。ＬＤＣは、ＧＲＢのバッファ・サイズを増やす、または前レベルＣＬＤにフロー制御メッセージを送る、あるいはその両方を行うかどうかを判断する。
【００９０】
ＬＤＣ５０８は、フロー制御メッセージを生成し、前レベル・ロード・ディストリビュータに送る時を判断する責任を負う。ＧＲＨがほぼ満杯である時に、ＬＤＣは、ＧＲＨにフロー制御メッセージを送ることができる。ＧＲＨは、必要な場合にＧＲＢのバッファ・サイズを増やす。ＧＲＨは、指示を成功裡に実施した場合に肯定応答をＬＤＣに送り、そうでない場合には、否定応答がＬＤＣに送られる。フロー制御指示を成功裡に実施した時に、ＬＤＣは、要求クラスｒの新しいディスパッチ速度をすべての次レベル・ディストリビュータに送る。そのようなＣＬＤは、そのメッセージを受け取る時に、レコードを更新する。
【００９１】
要求クラスｒのクラスタ内のＳＬＢの容量またはあるインスタンスの容量（要求速度に関する）の大きい増加がある場合に、ＬＤＣは、前レベル・ロード・バランサに、容量の増加、それが処理できる予測（容量増加に起因する）最大要求速度、ｒに関する現在のディスパッチ速度、ｒに関する現在の着信要求などについて通知する。ＬＤＣは、要求クラスｒに関して前のロード・バランサにフロー制御メッセージを最近に送った場合に限って通知する。前レベルＣＬＤのＬＤＣは、そのようなメッセージを受け取るとすぐに、ｒに関する要求ディスパッチ速度の可能な増加の量ｄを計算する。その後、前レベルＣＬＤのＬＤＣは、ＧＲＨまたはＲＤＭあるいはその両方に、ｒのディスパッチ速度を増やすように指示する。
【００９２】
リソース・マネージャは、新しい要求クラスｒを追加する場合に、ＣＬＤのＬＤＣにその更新に関して通知する。更新には、可能なＱｏＳ／ＳＬＡパラメータまたは可能な最大要求速度あるいはその両方も含まれる。フロントエンド・クラスタへのクラスｒの要求速度は、所与の点での要求クラスｒのすべてのエンドユーザからの集合要求速度である。しかし、フロントエンド・クラスタのクラスｒの各要求によって、次のクラスタに関する複数の要求が生成される場合がある。したがって、クラスタごとに、おそらくは異なる着信要求速度がある。ＬＤＣは、ｒに関する、ＧＲＢサイズに対する可能な変更およびＳＬＢの可能なサイズに基づいて判断する。ＬＤＣは、まず、ＳＬＢへの適当な変更を行うようにＲＤＭに指示する。ＲＤＭから肯定の応答を受け取る時に、ＬＤＣは、ＧＲＢサイズの変更および新しい要求クラスｒの追加についてＧＲＨに指示する。ＧＲＨは、ＧＲＢサイズを増やし、要求クラスのリストを更新することによって、ＬＤＣ指示を実施する。ＧＲＨは、成功裡の完了の際に肯定応答を送る。ＧＲＨは、失敗する場合に、否定応答を送る。
【００９３】
同様に、要求クラスｒの削除について、ＬＤＣは、ＧＲＢサイズの可能な変更について判断する。ＬＤＣは、適当なＳＲＨを削除するようにＲＤＭに指示を送る。ＲＤＭから肯定の応答を受け取る時に、ＬＤＣは、適当に、ＧＲＢのサイズを変更し、レコードから要求クラスｒを削除するようにＧＲＨに指示する。ＧＲＨは、ＧＲＢのサイズを変更し、リストを更新し、肯定の応答をＬＤＣに送る。ＧＲＨおよびＲＤＭの両方から肯定の応答を受け取る時に、ＬＤＣは、必要な場合に、「要求クラスｒが削除された」ことを含む肯定応答をＲＭに送ることができる。ＧＲＨ／ＬＤＣ／ＲＤＭでのなんらかの種類の障害によって、ロード・バランサが効果的に要求クラスｒを削除できない場合には、ＬＤＣは、必要な場合に、リソース・マネージャに否定応答を送ることができる。
【００９４】
図７に示されているように代替実施形態では、クラスタ間ロード・バランサの間での集中フロー制御を使用することができる。この実施形態では、ＣＬＤごとにＬＤＣを有するのではなく、集中的な形でフロー制御を実行する１つまたは複数の集中ＬＤＣ７０２を設けることができる。この集中ＬＤＣ７０２の重要な機能に、フロー制御が含まれる。リソース・マネージャ割振りプランの実施、ＲＤを作成または削除するようにＲＤＭに指示すること、ＧＲＨおよびＲＤＭからの制御メッセージの受取、スタートアップ中のＣＬＤの初期化を含むＬＤＣの機能の一部を、各ロード・ディストリビュータにローカルなエンティティ（たとえば部分的なＬＤＣ）によって実行することができる。対応するロード・バランシング・フレームワークを、図７に示す。
【００９５】
ロード・バランシングに関する提案されるフレームワークによって、クラスタごとの基礎でのロード・バランシングおよびクラスタ間ロード・バランサの間のフロー制御が容易になる。連繋負荷ディストリビュータ（ＣＬＤ）のシステムが、クラスタ間ロード・バランサの間の分散フロー制御を実行する。連繋負荷ディストリビュータは、システムに存在する場合に、リソース・マネージャによるカスタマへのインスタンス容量の動的な割振りおよび割振り解除を考慮する。また、ＣＬＤは、システムに存在する場合に、負荷モニタによって収集される動的な負荷情報を使用して、負荷を効率的に平衡化する。ＣＬＤは、顧客ごとの現在の着信要求速度および顧客ごとの要求ディスパッチ速度、または容量割振り／割振り解除、あるいはその両方に基づいて、あるいは他のシステム状態に基づいて、前レベルＣＬＤに制御メッセージを送るかどうかを動的に決定する。
【００９６】
本発明の好ましい実施形態を図示し、説明したが、本発明が、これらの実施形態だけに制限されないことは明瞭である。請求項に記載の本発明の趣旨および範囲から逸脱しない多数の修正、変更、変形、置換、および同等物が可能であることは、当業者に明白であろう。
【００９７】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００９８】
（１）マルチレベル・コンピュータ・システムで処理される要求のスケジューリングの方法であって、前記コンピュータ・システムの各レベルが、少なくとも１つのキューを有し、各キューが、少なくとも１つの処理機能を関連付けられ、
ａ．第１レベルの前記キューに前記要求をバッファリングするステップと、
ｂ．前記第１レベルに隣接する他のレベルとフロー情報を交換するステップと、
ｃ．前記要求の分類値を得るステップと、
ｄ．前記得られた値に基づいて前記要求をスケジューリングするステップと
を含む方法。
（２）スケジューリングする前記ステップが、前記要求をディスパッチするステップを含む、上記（１）に記載の方法。
（３）スケジューリングする前記ステップが、前記要求を分類するステップを含む、上記（１）に記載の方法。
（４）スケジューリングする前記ステップが、前記要求を除去するステップを含む、上記（１）に記載の方法。
（５）前記得られた分類値が事前定義の値より大きい場合に、前記第１レベルで前記要求を処理するステップをさらに含む、上記（１）に記載の方法。
（６）前記分類値を得る前記ステップが、
ａ．前記交換されるフロー情報に基づいてユーティリティ値を計算するステップと、
ｂ．前記計算されるユーティリティ値が事前定義の値より小さい場合に訂正処置を仮定するステップと、
ｃ．前記仮定される訂正処置を考慮した後の前記ユーティリティ値を再計算するステップと
を含む、上記（１）に記載の方法。
（７）ａ．前記再計算されるユーティリティ値が前記事前定義の値より大きい場合に、仮定された訂正処置を行うステップと、
ｂ．前記仮定された訂正処置を行った後に、前記第１レベルで前記要求を処理するステップと
をさらに含む、上記（６）に記載の方法。
（８）訂正処置を仮定する前記ステップが、適当なキューが要求を受け入れることができない場合に、前記適当なキューの要求処理容量の増加を仮定するステップを含む、上記（６）に記載の方法。
（９）訂正処置を仮定する前記ステップが、次レベルのキューが要求を受け入れることができない場合に、適当なキューからの要求ディスパッチ速度の減少を仮定するステップを含む、上記（６）に記載の方法。
（１０）マルチレベル・コンピュータ・システムで処理される要求のスケジューリングに適するシステムであって、前記コンピュータ・システムの各レベルが、少なくとも１つのキューを有し、各キューが、少なくとも１つの処理機能を関連付けられ、
ａ．第１レベルと前記第１レベルに隣接する他のレベルとの間でフロー情報を交換する手段と、
ｂ．前記交換されるフロー情報に基づいて、前記要求の分類値を得る手段と、
ｃ．前記要求をスケジューリングする手段と
を含むシステム。
（１１）前記スケジューリングする手段が、前記要求をディスパッチする手段をさらに含む、上記（１０）に記載のシステム。
（１２）前記スケジューリングする手段が、前記要求を分類する手段をさらに含む、上記（１０）に記載のシステム。
（１３）前記スケジューリングする手段が、前記要求を除去する手段をさらに含む、上記（１０）に記載のシステム。
（１４）前記得られる分類値が事前定義の値より大きい場合に、前記第１レベルで前記要求を処理する手段をさらに含む、上記（１０）に記載のシステム。
（１５）前記分類値を得る前記手段が、
ａ．前記交換されるフロー情報に基づいてユーティリティ値を計算する手段と、
ｂ．仮定された訂正処置を検討した後の前記ユーティリティ値を再計算する手段と、
ｃ．前記再計算されるユーティリティ値が事前定義の値より大きい場合に、前記仮定された訂正処置を行う手段と
を含む、上記（１０）に記載のシステム。
（１６）前記仮定された訂正処置を行う前記手段が、第２レベル・キューが余分な要求を受け入れることができない場合に、第１レベル・キューの要求ディスパッチ速度を減らす手段を含む、上記（１５）に記載のシステム。
（１７）前記仮定された訂正処置を行う前記手段が、第２レベル・キューが余分な要求を受け入れることができない場合に、第２レベル・キューの要求処理容量を増やす手段を含む、上記（１５）に記載のシステム。
（１８）コンピュータ・システムで要求をスケジューリングするコンピュータ・プログラム製品であって、
ａ．第１レベルのキューに前記要求をバッファリングするプログラム命令手段と、
ｂ．前記第１レベルに隣接する他のレベルとフロー情報を交換するプログラム命令手段と、
ｃ．前記要求の分類値を得るプログラム命令手段と、
ｄ．前記分類値に基づいて前記要求をスケジューリングするプログラム命令手段と
を含むコンピュータ・プログラム製品。
（１９）コンピュータ・システムでのロード・バランシングに適する装置であって、
ａ．複数のキューであって、
ｉ．着信要求をバッファリングする第１レベル・キューと、
ｉｉ．複数の後続レベル・キューであって、キューの各後続レベルが、着信要求のクラスに対応する、複数の後続レベル・キューと
を含む複数のキューと、
ｂ．ユーザ定義パラメータに基づいて、前記要求を複数の後続レベル・キューに分類する手段と、
ｃ．前記複数のレベルのキューの間で情報を交換する手段と、
ｄ．前記キューからの前記要求を前記キューまたはターゲット・コンポーネントの少なくとも１つにディスパッチする手段と
を含む装置。
（２０）ディスパッチする前記手段が、要求の平行ディスパッチの手段を含む、上記（１９）に記載の装置。
（２１）情報を交換する前記手段が、前記キューからの要求のディスパッチ速度を制御する手段を含む、上記（１９）に記載の装置。
（２２）前記要求が、ＱｏＳ／ＳＬＡおよび前記後続レベル・キューからの情報に基づいて前記第１レベル・キューで分類される、上記（１９）に記載の装置。
（２３）コンピュータ・システムでのロード・バランシングのコンピュータ・プログラム製品であって、
ａ．複数のキューを生成するプログラム命令手段であって、前記複数のキューが、
ｉ．着信要求をバッファリングする第１レベル・キューと、
ｉｉ．複数の後続レベル・キューであって、キューの各後続レベルが、着信要求のクラスに対応する、複数の後続レベル・キューと
を含む、プログラム命令手段と
ｂ．ユーザ定義パラメータに基づいて、前記要求を複数のクラスに分類するプログラム命令手段と、
ｃ．前記複数のレベルのキューの間で情報を交換するプログラム命令手段と、
ｄ．前記キューからの前記要求を前記キューまたはターゲット・コンポーネントの少なくとも１つにディスパッチするプログラム命令手段と
を含むコンピュータ・プログラム製品。
（２４）コンピュータ・システムで要求をスケジューリングするのに適するシステムであって、
ａ．複数のクラスタと、
ｂ．複数のロード・バランサであって、各ロード・バランサが、少なくとも１つのクラスタに対応し、
ｉ．要求を受け取る手段と、
ｉｉ．隣接レベル・ロード・バランサから情報を交換する手段と、
ｉｉｉ．前記要求の分類値を得る手段と、
ｉｖ．前記分類値に基づいて次レベル・クラスタに前記要求をディスパッチする手段と
を含む、複数のロード・バランサと
を含むシステム。
（２５）ネットワークで要求をスケジューリングする方法であって、前記ネットワークが、複数のロード・バランサを含み、
ａ．第１レベル・ロード・バランサで要求を受け取るステップと、
ｂ．前記特定の要求に関する情報を隣接レベル・ロード・バランサと交換するステップと、
ｃ．前記交換される情報を処理することによって前記要求の分類値を得るステップと、
ｄ．前記得られる値に基づいて前記要求をスケジューリングするステップと
を含む方法。
（２６）前記交換される情報を処理する前記ステップが、
ａ．前記要求の転送の閾ユーティリティ値を判定するステップと、
ｂ．前記要求の転送のユーティリティ値を得るステップと、
ｃ．前記ユーティリティ値と前記閾ユーティリティ値とを比較するステップと、
ｄ．ユーティリティ値が前記閾ユーティリティ値より小さい場合に訂正処置を行うステップと
を含む、上記（２５）に記載の方法。
（２７）ユーティリティの閾値を判定する前記ステップが、さらに
ａ．前記ネットワークがサービスを必要とするＱｏＳ要件およびＳＬＡ要件を識別するステップと、
ｂ．前記ネットワーク内で前記要求に割り振られるリソースを判定するステップと
を含む、上記（２６）に記載の方法。
（２８）前記ユーティリティ値を得る前記ステップが、
ａ．要求ヘッダから前記要求に関係するＱｏＳおよびＳＬＡを識別するステップと、
ｂ．次レベル・バランサで前記要求に対応する割り振られるリソースを判定するステップと、
ｃ．前記ユーティリティ値を得るために前記識別された情報および前記判定された情報を処理するステップと
を含む、上記（２６）に記載の方法。
（２９）訂正処置を行う前記ステップが、前記ロード・バランサでの要求ディスパッチ速度を下げるステップを含む、上記（２６）に記載の方法。
（３０）訂正処置を行う前記ステップが、余分な負荷を受け入れるためにロード・バランサ容量を増やすステップを含み、ロード・バランサ容量を増やすステップが、前記要求の前記ユーティリティ値を増やす、上記（２６）に記載の方法。
（３１）ネットワーク内で要求をスケジューリングするコンピュータ・プログラム製品であって、
ａ．第１レベル・ロード・バランサで要求を受け取る第１プログラム命令手段と、
ｂ．前記要求に関する情報を隣接レベル・ロード・バランサと交換する第２プログラム命令手段と、
ｃ．前記交換される情報に基づいて前記要求の分類値を得る第３プログラム命令手段と、
ｄ．前記分類値に基づいて前記要求をスケジューリングする第４プログラム命令手段と
を含むコンピュータ・プログラム製品。
【図面の簡単な説明】
【００９９】
【図１】本発明の好ましい実施形態による、要求を処理するシステムの例を示す図である。
【図２】本発明の好ましい実施形態による、要求を処理するために実施されるステップのシーケンスの例を示す図である。
【図３】ユーティリティ値の計算を示すのに使用される表の例を示す図である。
【図４】ロード・バランサの要求ディスパッチ速度を修正した後に要求が渡せるようになる、例示的な事例でのステップのシーケンスを示す図である。
【図５】要求除去の数を減らすための情報のフローという発想に基づく連繋負荷ディストリビュータ（ＣＬＤ）の全体的なシステム・アーキテクチャを示す図である。
【図６】図５で説明したＣＬＤの間での情報のフローという発想に基づく連繋負荷バランシング・フレームワークを示す図である。
【図７】ロード・バランサの間での情報のフローという発想に基づくもう１つの連繋負荷バランシング・フレームワークを示す図である。
【符号の説明】
【０１００】
５００  連繋負荷ディストリビュータ（ＣＬＤ）
５０２  グローバル要求ハンドラ（ＧＲＨ）
５０４  特定要求ハンドラ（ＳＲＨ）
５０６  要求ディスパッチ・マネージャ（ＲＤＭ）
５０８  負荷分配コントローラ（ＬＤＣ）
６０２  ＣＬＤ
６０４  クラスタ
６０６  ＣＬＤ
６０８  ＣＬＤ
６１０  クラスタ
６１４  ＣＬＤ
６１２  クラスタ
６１６  クラスタ
【図１】
2004199678.tif 000003
【図２】
2004199678.tif 000004
【図３】
2004199678.tif 000005
【図４】
2004199678.tif 000006
【図５】
2004199678.tif 000007
【図６】
2004199678.tif 000008
【図７】
2004199678.tif 000009