説明

分散要求ルーティング

クライアント要求を処理する複数のサーバが、それらの間で要求を転送することにより負荷の平衡化を達成する。サーバは、最初にクライアント要求を受け取ると、ファーストチャンスサーバと呼ばれる、複数のサーバのうちの別のサーバを無作為に選択し、要求をこのサーバに転送する。ファーストチャンスサーバは、要求を受け取ると、過負荷であるか否かを判断し、そうでない場合に要求を処理する。しかし過負荷の場合は、その負荷を1つ又は複数の所定の隣接サーバの負荷と比較する。隣接サーバ(複数可)の方がファーストチャンスサーバより高負荷の場合、ファーストチャンスサーバは要求を処理する。そうでない場合、ファーストチャンスサーバは要求を最も負荷のかかっていない隣接サーバに転送する。要求を受け取る隣接サーバは、それを直接処理するか、又はその現負荷及びその隣接サーバ(複数可)の負荷に基づいて別の隣接サーバに要求を転送する。

【発明の詳細な説明】
【技術分野】
【0001】
[発明の分野]
本発明は、包括的には負荷分散に関する。詳細には、本発明は、要求を処理のために複数のサーバの間で平衡化する要求ルーティング方法に関する。
【背景技術】
【0002】
[発明の背景]
クライアント・サーバアプリケーションは、次第に複数のサーバにわたって配備されるようになってきている。これらのサーバは、異なる地理的場所にあってもなくてもよく、合せて特定のアプリケーションに対するバックエンド処理能力を提供する。たとえば、サーバは、ウェブページをキャッシュしクライアントウェブブラウザからの要求に応答する、地理的に分散したウェブキャッシュプロキシ等、コンテンツ配信網をサポートすることができる。サーバはまた、インターネットに配備されるグリッド(GRID)機能の汎用コンピューティングマシン(PC、ワークステーション、…)であってもよく、そこでは、各サーバは、グリッドクライアントユーザによって提出されるタスクを受け取り処理する。サーバはまた、共有ディスク並列データベースサーバ若しくは共有メモリ並列データベースサーバ又はレプリケーションデータベースサーバ等のデータベースサーバであってもよい。同様に、複数のコンピューティングマシンにわたってピア・ツー・ピアアプリケーションも配備されており、ピア群からの任意のピアが別のピア/サーバントからの要求を処理する。(なお、説明を容易にするために、クライアント・サーバの用語及び例を使用して本発明を説明することに留意されたい。しかしながら、本発明は、ピア・ツー・ピアアーキテクチャを含む他のアーキテクチャ/アプリケーションにも適用可能であることが理解されるべきである。)
【0003】
説明の目的で、特定のアプリケーションのための要求/タスクを処理することを目的とするm個のサーバ(0、1、…、m−1と番号を付す)と、これらのサーバに対して要求/タスクを送信することができる任意の数のクライアントとがあると想定する。従来、これらのマルチサーバ環境では、m個のサーバのうち、クライアントの要求を最初に受け取ったサーバが、この要求の処理を行い、結果をクライアントに返す。しかしながら、これらの複数サーバ環境では、クライアント要求をサービスするために次第に要求ルーティングを使用するようになってきている。要求ルーティングでは、実際にクライアント要求を受け取るサーバは、何らかの方式を使用してm個のサーバのうちの別のサーバを確定し、その後、要求を処理のためにこの確定したサーバに転送する。たとえば、図1は、サーバ102〜105と、処理のためにこれらのサーバに要求/タスクを送信するクライアント110〜115とを含む一例としてのネットワーク100を示す。クライアント112がサーバ103に要求120を送信すると想定する(サーバ103の選択は、無作為であっても所定の選択であってもよい)。サーバ103は、この要求を受け取ると、要求ルーティング方式を実行して、サーバ105等、この要求を実際にサービスする別のサーバを確定する。そして、サーバ103は、要求120をクライアント112からこのサーバ105に転送する。そして、サーバ105は、この要求を処理し、結果121をサーバ103に返し、そして、サーバ103は結果をクライアント112に転送する。
【0004】
管理者は、これらのマルチサーバ環境において、様々なことを目的として要求ルーティング方式を使用する。これらの目的は、たとえば、クライアントが求めているコンテンツ情報を有する可能性がより高いサーバに要求をルーティングするため、クライアントへの近接性に基づいてサーバ/ネットワークに要求をルーティングするため、帯域幅の可用性に基づいて要求をルーティングするため、及びサーバ間で負荷を平衡化するために要求を
ルーティングするためなどである。最後の用途、すなわち負荷分散は、ここでは特に重要である。より具体的には、任意の数のクライアントをサポートするm個のサーバから成るマルチサーバ環境の場合、優れた性能スケーラビリティを達成することを目的として、サーバ間でクライアント要求を分散させるために要求ルーティングの使用することが増えている。負荷分散要求ルーティング方式によれば、クライアント要求到着率が増減するのに合わせて、m個のサーバの各々における負荷も一様に増減することが保証される。それにより全体的に応答時間(たとえば、ウェブページダウンロード時間、タスク完了時間)が短くなり、スループットが高くなり、且つクライアント要求に対する可用性が高くなることが確実になる。それにも拘わらず、クライアント要求率及び/又はサーバの数が増大する際にスケーラブルであり、且つ分散サーバ間での平衡化した負荷を達成する負荷分散要求ルーティング方式は、システム全体の動的性質のため、且つ予測不可能なタスク到着パターン及びタスクサイズのため、得ることが困難である。
【0005】
従来、負荷分散には、以下を含むいくつかの要求ルーティング方式/方法が使用されてきた。すなわち、(1)「最低負荷」、(2)「2つのランダム選択」、(3)「ランダム」及び(4)「ラウンドロビン」である。「最低負荷」要求ルーティング方法は、クライアント要求が受け取られた時の全サーバの負荷を知っているサーバに依存する。特に、この方法は、通常、非集中化式か又は集中化式で実装される。非集中化の実装では、m個のサーバのいずれもが最初にクライアント要求を受け取ることができる。サーバは、要求を受け取ると、m個のサーバ群の中で、その時点で負荷が最低であるサーバを確定し、その後、そのサーバに対し処理のために要求をルーティング/転送する。集中化の実装では、ディスパッチャが使用される。このディスパッチャが、まず、任意のクライアント要求を受け取り、その要求をその時点で負荷が最低であるサーバに転送する。
【0006】
実装に拘わらず、「最低負荷」方法においては、ディスパッチャ/初期(initial)サーバが、要求を受け取って転送する時点での他の全サーバの負荷を知っていれば、サーバ間で負荷を最適に分散することができる。これらの条件下であれば、最低負荷方法は、サーバ間で負荷を平衡化することができ、且つスケーラブルであって、クライアント要求率が増大するに従い、クライアント要求に対する全応答時間は緩やかに増大する。しかしながら、これらの理想的な条件が満足されず、サーバにおける現負荷情報が正確ではない(すなわち、陳腐化する)場合、負荷分散はあまり正確でなくなり、クライアント要求に対する平均応答時間は急激に増大することになる。
【0007】
「最低負荷」方法においてサーバ間で負荷情報を広める一方法は、ポーリング方法を用いる方法である。ここでは、ディスパッチャ又は各サーバは、他のサーバに現在の負荷を定期的にポーリングする。ディスパッチャ/サーバが他のサーバの現負荷に関して最新状態を保持できるように、ポーリング率は非常に高く設定されることが理想的である。しかしながら、ポーリングには、ディスパッチャ/サーバ毎におよそO(m)のメッセージオーバヘッドが必要である。同様に、ネットワークが拡大し、サーバの数mが増大するに従い、ディスパッチャ/サーバにおけるポーリング負荷もまた増大する。このため、オーバヘッドを増大させるが負荷情報を最新に維持する高い/適当なポーリング率と、オーバヘッドを低減するが陳腐化した負荷情報をもたらす低ポーリング率との間にトレードオフがある。
【0008】
ピギーバック方法は、メッセージオーバヘッドが大きいポーリング方法に対する代替方法である。通常は、サーバが別のサーバに処理をしてもらうために要求を転送する場合、処理サーバは、転送サーバに対して応答を返すことになる。ピギーバック方法では、処理サーバは、この応答を返す時に転送サーバに対してその現負荷も送信する。転送サーバは、後続するクライアント要求を処理する時にこの負荷情報を利用する。その結果、この方法では、ポーリング方法のオーバヘッド問題が起こらない。しかしながら、上記と同様に
、各サーバにおいて負荷情報が最新でない場合、サーバは、負荷が最低ではないサーバにクライアント要求を転送する可能性があり、それによりクライアント要求に対する平均応答時間が増大することになる。
【0009】
より詳細には、ピギーバック方法での負荷情報の配布は、要求率に直接連動する。要求率が増大すると、各サーバは初期クライアントの要求をより頻繁に受け取ることになる。そして、各サーバが要求をより頻繁に転送し、それにより負荷情報をより頻繁に受け取ることになる。このため、要求率が低すぎる場合、負荷情報が最新の状態に維持されないことになる。この問題に幾分か関連して、ネットワークが拡大しサーバの数mが増大するに従い、要求がより広く分散/分配されるため、各サーバが他のすべてのサーバにおいて最新であり続けることはより困難となる。特に、ディスパッチャ方法は、これらの問題のいくつかを克服する可能性があるが、ディスパッチャがシステムに対するボトルネック及び単一障害点(single point of failure)となる。
【0010】
「最低負荷」方法では、負荷情報の陳腐化に直接関連する「フラッシュクラウド(flashing crowd)」問題もある。一般に、あるサーバが他のサーバより比較的負荷が低いと想定する。このサーバに関する負荷情報が他のすべてのサーバに対して十分頻繁に広められていない場合、他のサーバは、常にこのサーバの負荷が低いと判断し、要求をこのサーバにすべて転送することになり、このサーバが突然過負荷になってしまう。そして、問題は連鎖する。残りのサーバは、この時、次に負荷が低いサーバを検知し、要求を再びそのサーバに転送し、このサーバが過負荷になる。このシナリオは、サーバの各々において順に続き、最後には負荷を平衡化するという当初の意図が覆される。
【0011】
「2つのランダム選択」方法について述べると、ここではサーバは、最初にクライアントから要求を受け取る度に、すべてのサーバの中から一様にランダムに他の2つのサーバを選択する。そして、最初のサーバは、2つのランダムに選択したサーバの負荷を比較し、負荷の低い方のサーバに処理をさせるために要求を転送する。たとえば、図1において、クライアント110がサーバ103に要求を送信すると想定する。サーバ103は、この要求を受け取ると、サーバ102及びサーバ104等の他の2つのサーバをランダムに決定する。そして、サーバ103は、サーバ102の現負荷とサーバ104の現負荷とを比較し、負荷の低い方のサーバに要求を転送する。そして、要求を転送されたサーバは、結果をサーバ103に返し、サーバ103は結果をクライアント110に転送する。
【0012】
「最低負荷」方法と同様に、「2つのランダム選択」方法では、理想的には、各サーバが、要求が転送されている時点で他のすべてのサーバの負荷を知っていることが必要である(2つのランダムに選択されるサーバがどのサーバでもあり得るため)。これらの理想的な条件が満たされると想定すると、「2つのランダム選択」方法は、「最低負荷」方法と略同様に適切に機能し且つスケールし、クライアント要求率が増大するに従い、クライアント要求に対する全応答時間が緩やかに増大する。しかしながら、上記のように、「2つのランダム選択」方法は、実際にはピギーバック方法又はポーリング方法を使用し、サーバ毎におよそO(m)のメッセージオーバヘッドが必要である。したがって、2つの「ランダム選択」方法には、上述した「最低負荷」方法と同じ問題がある。すなわち、負荷情報がサーバ間で充分頻繁に広められない場合、各サーバにおける情報が陳腐化し、その結果、クライアント要求に対する平均応答時間が急激に増大する。したがって、この方法でもまた、フラッシュクラウド問題が起こる可能性がある。
【0013】
「ランダム要求」ルーティング方法に関して述べると、サーバは、クライアントから最初に要求を受け取る度に、すべてのサーバの中から一様に無作為に選択された別のサーバにその要求を転送する。負荷情報がまったく使用されないため、この方法は、「最低負荷」方法及び「2つのランダム選択」方法で負荷情報を順に回す際に発生する欠点のすべて
を回避する。メッセージオーバヘッドがなく、したがって陳腐化問題もない。したがって、この方法では、「フラッシュクラウド」問題がなく、サーバの数mが増大する際に悪影響を受けず、クライアント要求に対する応答時間は一定のままである。
【0014】
しかしながら、ランダム要求方法は適切にスケールせず、m個のサーバ間で負荷を均等に拡散させないということが証明され且つ経験的に示されている。より詳細には、クライアント要求率が増大するに従い、サーバによっては他のサーバより負荷が重くなり、他のサーバより早く最大負荷容量に達する。その結果、過負荷サーバが利用不可能となるか又は要求の処理に遅延が生じるようになるに従って、m個のサーバ間のクライアント要求に対する全応答時間が増大する。したがって、「最低負荷」方法及び「2つのランダム選択」方法での負荷情報が正確に保たれると想定すると、これらの2つの方法は「ランダム」方法よりかなり適切に機能する。
【0015】
「ラウンドロビン」要求ルーティング方法について述べると、サーバは、最初にクライアントから受け取る各要求について、その要求を他のサーバに処理させるためにラウンドロビン式で連続的に転送する(すなわち、最初のサーバは、要求aをサーバiに転送し、要求bをサーバi+1に転送し、要求cをサーバi+2に転送する、等である)。このメカニズムにより、サーバを選択するための乱数発生器の使用が回避され、この場合もまた、サーバ間で負荷情報を渡さなければならないマイナス面が回避される。しかしながら、概して、この方法にはスケーラビリティに関し「ランダム」方法と同じ問題があることが一般に知られている。クライアント要求率が増大するに従い、サーバによっては他のサーバより負荷が重くなり、クライアント要求に対する応答時間が急速に増大する。さらに、この方法の下でサーバが同期化されてしまい、各サーバが要求を続けて同じサーバに転送する可能性があり、それにより「フラッシュクラウド」シナリオがもたらされる。
【0016】
示したように、「最低負荷」方法及び「2つのランダム選択」方法は、負荷情報がそれほど陳腐化しないと想定すると、「ランダム」方法及び「ラウンドロビン」方法よりかなり適切に機能する。負荷情報を交換する要求ルーティング方法であって、負荷情報が陳腐化する場合であっても負荷を適切に平衡化することが示されている他の要求ルーティング方法がさらに存在する。しかしながら、これらの他の方法でも、「最低負荷」方法及び「2つのランダム選択」方法のように、ポーリングが使用される場合に相当量の負荷メッセージオーバヘッドが必要である。より重要なことには、これらの他の方法は、すべてのサーバが全体のクライアント要求到達率を事前に知っていると想定しているが、それは通常現実的ではない。
【発明の開示】
【発明が解決しようとする課題】
【0017】
全般的に、要求ルーティング負荷分散の従来の方法にはいくつかの欠点がある。「最低負荷」方法及び「2つのランダム選択」方法は、適切に機能し且つ要求率が増大してもスケールする。しかしながら、これらの方法は、他のすべてのサーバの負荷を知っていること、及びこの情報が正確であり続けることに依存する。ポーリング方法によればこの精度を提供することができるが、メッセージオーバヘッドが大きくなってしまう。ピギーバック方法は、メッセージオーバヘッド問題を克服するが、要求率が高くない限りすべてのサーバを正確に維持しない。これらの方法には、フラッシュクラウド問題もある。他の方法は、負荷情報の陳腐化による影響が少なく、これらの2つの方法と同程度に適切に機能するが、すべてのサーバが要求到着率を知っていることに依存し、それは実際的ではない。「ランダム」方法及び「ラウンドロビン」方法では、負荷情報を交換する必要がなく、それにより関連する問題が回避されるが、これらの方法は適切にスケールせず、要求到着率が増大するに従って性能が急速に劣化する。
【課題を解決するための手段】
【0018】
[本発明の概要]
したがって、従来技術のこれらの不都合及び他の不都合を克服し、適切に機能し且つ要求率が増大する際に適切にスケールし、サーバ間の負荷情報を維持するためのオーバヘッドが大きくならない、負荷分散要求ルーティング方法を提供することが望ましい。本発明によれば、m個のサーバ群の中の1つのサーバが最初にクライアントから処理要求を受け取ると、そのサーバはm個のサーバ群から別のサーバを無作為に選択し、このサーバに処理させるために要求を転送する。この無作為に選択されたサーバを、ファーストチャンスサーバ(first-chance server)と呼ぶ。
【0019】
ファーストチャンスサーバは、転送された要求を受け取ると、自身の現負荷を過負荷定数と比較して、現在過負荷であるか否かを判断する。過負荷でない場合、ファーストチャンスサーバは、要求を処理し、応答をクライアントに直接又は転送サーバを介して転送し戻す。しかしながら、ファーストチャンスサーバは、過負荷である場合には、自身の現負荷を所定の隣接サーバの負荷と比較する。ファーストチャンスサーバは、その隣接サーバより低い負荷がかかっているか又は比較的等しい負荷がかかっている場合には、要求を処理する。そして、応答をクライアントに転送し戻す。
【0020】
しかしながら、ファーストチャンスサーバに隣接サーバより重い負荷がかかっている場合には、要求を隣接サーバに転送する。より詳細には、ファーストチャンスサーバは、この要求を直接転送するか、又は別の方法として最初の転送サーバに隣接サーバについて通知する。この後者の場合、転送サーバは、処理のために要求を隣接サーバに送信する。
【0021】
本発明の一実施の形態によれば、隣接サーバが要求をいかに受け取るかに拘わらず、隣接サーバは要求を処理し、応答をクライアントに直接、又はファーストチャンスサーバ/転送サーバを介して転送する。また、本発明のさらなる実施形態によれば、隣接サーバは要求を自動的には処理はせずに、ファーストチャンスサーバと同様に続行し、過負荷でないと判断した場合に要求を処理する。過負荷である場合、隣接サーバは自身の負荷を自身に隣接するサーバの負荷と比較し、この第2の隣接サーバより負荷が低い場合には要求を自身で処理し、逆にこの第2の隣接サーバより負荷が重い場合には、要求をこの第2の隣接サーバに転送する。転送される場合、プロセスは同様に続く。
【0022】
本発明のまたさらなる実施形態によれば、ファーストチャンスサーバは、上述したように1つの隣接サーバのみではなく、2つ以上の隣接サーバを保持する。この場合もまた、ファーストチャンスサーバが過負荷でない場合には、要求を自身で処理する。しかしながら、過負荷である場合には、ファーストチャンスサーバは自身の負荷をその隣接サーバの負荷と比較する。これらの隣接サーバのうちの1つがファーストチャンスサーバより低負荷の場合、ファーストチャンスサーバは要求を処理のためにこの隣接サーバに転送する。そうでない場合、ファーストチャンスサーバは自身で要求を処理する。
【発明の効果】
【0023】
全体として、本発明はスケーラブルであり、要求率が増大する際、従来技術による方法と比較して優れていなくても同等な性能を得る。さらに、本発明によるサーバは、より正確な負荷情報を維持し、その結果、大幅に優れた性能を達成する。
【発明を実施するための最良の形態】
【0024】
本発明は、m(0〜m−1)個の複数のサーバ間での負荷の平衡化を目的として、これら複数のサーバのうちの任意のサーバにクライアント要求/タスクを分散させる、簡単かつスケーラブルな要求ルーティング方法である。要求/タスクを処理のためにm個のサーバに送信することができるクライアントの数は任意である。さらに、要求に対応する初期
サーバをクライアントがどのように選択するかは種々の方法を採用できる。クライアントは、要求のすべてに対して常に同じサーバを選択しても良いし、各要求に対してサーバを無作為に選択しても良い。(なお、本発明を、クライアント・サーバの用語及び例を使用して説明するが、本発明は、ピア・ツー・ピアアーキテクチャを含む他のアーキテクチャ/アプリケーションに適用可能である、ということが理解されるべきである。)
【0025】
本発明によれば、各サーバi(i=0〜m−1)は、サーバの現在の作業負荷を表す指標wiを保持する。たとえば、wiは、サーバiにおける未解決の要求(すなわち、完了していない要求)の数を示してもよい。現負荷に関し、各サーバはまた、2つの閾値Wi及びθiも保持する。Wiは、各サーバに固有であっても、いくつかのサーバ又はすべてのサーバにわたって同じであってもよい。Wiは、サーバiが過負荷になり、可能であれば要求を別のサーバにゆだねるべきである点を表す閾値である。θiもまた、各サーバに固有であっても、いくつかのサーバ又はすべてのサーバにわたって同じであってもよい。θiは、隣接サーバがサーバiより低負荷であり、したがってサーバiに代わって追加の要求を処理することができる点を示す、サーバiと隣接サーバとの間の比較閾値である。概して、θiは、サーバiと隣接サーバとの間の相対的な計算能力に基づいて設定されるべきである。
【0026】
各サーバはまた、ハッシュ関数Hash:Qi−>{0,1,…,m−1}も保持する(ただしQiはクライアント要求すべての空間であり、各要求をゼロ(0)とm−1との間の乱数に等しい確率でマッピングする)。Qi等のハッシュ関数は容易に利用可能であり、本発明に特有なものではない。たとえば、ウェブページ要求q(ただしqはURLである)の場合、Qi=「URLにおけるすべての文字の和 mod m」である。最後に、各サーバはまた、独自の隣接サーバを有するように隣接サーバの概念も保持する。たとえば、m個のサーバを論理的にリング状に順番に並べることができ、その場合、サーバiの「隣接サーバ」を、「隣接サーバ=サーバ(i+1) mod m」として定義することができる。隣接サーバを保持することに加えて、各サーバiはまた、後述するように、この隣接サーバの現負荷wnext-neighborを測定することも可能である。
【0027】
サーバ間でクライアント要求を要求ルーティングする本発明の第1の実施形態は、図3A、図3B及び図3Cの方法ステップ及び図2の例示的な例によって示すように、3つのモジュールを含む。説明の目的で、本発明の要求ルーティング方法の一部であるm個のサーバのすべてが、3つのモジュールの各々を実行すると想定する。サーバがあるモジュールを実行するか否か及びいつ実行するかは、後述するように、それが要求qをいかに受け取るかによって決まる。しかしながら、各サーバがすべてのモジュールを実行する必要はない、ということが理解されるべきである。たとえば、サーバは、最初にクライアント要求を受け取ったときに、図3Aの方法を実行する。あるサーバが最初のクライアント要求を決して受け取らない場合は、図3Aの方法を実行する必要はない。さらに、図3A、図3B及び図3Cの方法があるサーバにおいて1つのプロセスとして実行されるか、又はいくつかのプロセスとして実行されるは、本発明では限定されない。
【0028】
本発明の第1の実施形態の個々のステップについて述べると、クライアント210等のクライアントが、最初のサービス要求qをサーバ202等の任意のサーバiに対して行うと、サーバi202は図3Aの方法を実行する。具体的には、ステップ302において、サーバi202はまず、クライアント210から要求qを受け取る(220に示すように)。サーバi202は、要求を受け取ると、ステップ304に進み、m個のサーバからサーバ204等のサーバkを無作為に決定するために要求qに基づいてハッシュ関数Qiを実行する(すなわち、k=0〜m−1の場合、k=Qi(q))。ここで、サーバ204を、要求qの「ファーストチャンス」サーバと呼ぶ。サーバk204が決定すると、サーバi202はステップ306に進み、要求qを処理のためにサーバk204に転送する(
222に示すように)。そして、サーバi202はステップ308に進み、サーバkからの応答を待つ。なお、説明の目的で、サーバk及びサーバiを異なるサーバとして示すことに留意されたい。しかしながら、サーバiは、ランダムサーバkを選択する時、m個のサーバからの自分自身を選択する場合もある(すなわち、kはiに等しい場合もある)。
【0029】
サーバk204は、サーバiからサービス要求q222を受け取ると、図3Bの方法を実行する。大まかにいうと、サーバkは、自身の現負荷をその隣接サーバの負荷と比較し、この比較に基づいて、要求qを直接サービスすべきか、要求をその隣接サーバにゆだねるべきであるかを判断する。より具体的には、ステップ310で開始して、サーバk204は、サーバi202から要求qを受け取る。そして、サーバkはステップ312に進み、自分自身の現負荷wkを閾値Wkと比較する。wkがWk以下である場合(すなわち、wk≦Wkである場合)、サーバkは過負荷ではない。この場合、サーバkはステップ314に進み、要求qを処理する。そして、サーバkは、ステップ316において要求qに対する応答をサーバi202に返す(228に示すように)。サーバiは、ステップ318においてサーバkからこの応答を受け取り、ステップ320においてこの応答をクライアント210に返す(230に示すように)。なお、ステップ202において、サーバkが要求qに対する応答をクライアント210に直接返すことは妨げられるものではなく、本発明はいずれの代替形態にも等しく適用可能である、ということに留意されたい。
【0030】
しかしながら、ステップ312において、サーバk204が過負荷である(すなわちwk>Wkである)と判断した場合、次に、要求qを処理のためにその隣接サーバ(ここでは、たとえばサーバ203)に転送すべきか否かを判断する。具体的には、ステップ322において、サーバkは、その現負荷wkをその隣接サーバ203の現負荷wnext-neighborと比較し、2つの負荷が閾値θk内にあるか(すなわちwk−wnext-neighbor≦θk)否かを判断する。なお、サーバk204がその隣接サーバの現負荷wnext-neighborを確定するタイミングは本発明では限定されないことに留意されたい。たとえば、サーバkは、ステップ322の一部として隣接サーバの現負荷を要求してもよい。サーバkが要求qを処理のために隣接サーバに転送する場合、隣接サーバは、サーバkに返信する応答とともにその現負荷をピギーバックすることができる。そして、サーバkは、ファーストチャンスサーバとして受け取る後続するクライアント要求に対してこの負荷を使用する。同様に、サーバkは、バックグラウンドポーリングプロセスの一部として負荷を定期的に要求してもよい。あるいは、隣接サーバ203は、その負荷をサーバkに定期的に送信してもよい。
【0031】
ステップ322においてサーバkが2つの負荷が閾値θk内にあると判断する場合、サーバkはその隣接サーバより低い負荷がかかっているか、又は2つのサーバは比較的等しい負荷がかかっている。この場合、サーバkはステップ314に進み、自分自身で要求qを処理する。ステップ316において、サーバk204は、要求qに対する応答をサーバi202に返す(228に示すように)。サーバiは、ステップ318において、サーバkからこの応答を受け取り、ステップ320において応答をクライアント210に返す(230に示すように)。(この場合もまた、サーバkは、別の方法として、要求qに対する応答を直接クライアント210に送信することができる。)
【0032】
しかしながら、サーバk204が、ステップ322において、2つの負荷が閾値θk内になく、隣接サーバ203にサーバk204自体より軽い負荷がかかっていると判断した場合、隣接サーバ203が要求qを処理することに適している。この場合、隣接サーバを、要求qの「セカンドチャンスサーバ(second-chance server)」と呼ぶ。したがって、サーバk204はステップ324に進み、要求qを処理のためにその隣接サーバ203に転送する(224に示すように)。そして、サーバk204はステップ326に進み、その隣接サーバ203からの応答を待つ。
【0033】
隣接サーバ203は、サーバk204から要求qを受け取ると、「セカンドチャンスサーバ」となり、したがって図3Cの方法を実行する。より具体的には、ステップ330で開始して、サーバ203はサーバk204から要求qを受け取る。そして、サーバ203はステップ332に進み、要求qを処理した後、ステップ334に進み、要求qに対する応答をサーバk204に返す(226に示すように)。ステップ328において、サーバkは、サーバ203からこの応答を受け取り、ステップ316において応答をサーバi202に返す(228に示すように)。そして、サーバi202はステップ320においてクライアント210に対する応答を返す(230に示すように)。(この場合もまた、隣接サーバ203は、別の方法として、要求qに対する応答をクライアント210に直接送信することができる。同様に、サーバkは、サーバ203から応答を受け取ると、サーバiをバイパスして応答を直接クライアント210に送信することができる。)
【0034】
本発明の第2の実施形態によれば、サーバk204は、その隣接サーバ203が要求qを処理すべきであると判断した場合(すなわちステップ322)、ステップ324において処理のために隣接サーバ203に要求qを転送するのではなく、サーバi202に、隣接サーバ203がこの要求を処理すべきであることを通知する(すなわち、ステップ324〜326〜328〜316がバイパスされる)。したがって、ステップ322から、サーバk204は、隣接サーバ203に関する情報を転送することによってサーバiに迅速に応答する。サーバiは、この情報を受け取ることに応じて、隣接サーバ203に要求qを直接転送し、その後サーバ203からの応答を待つ。上記と同様に、サーバ203は、要求qを受け取ると、それを処理し、その後応答をサーバi202に直接転送し戻し、それによりサーバi202は応答をクライアント210に返す。あるいは、サーバ203が応答を直接クライアント210に送信してもよい。
【0035】
全体として、本発明によれば、要求は、サーバkの負荷が少なくともWkであり、且つ隣接サーバの負荷より少なくともθk大きい場合にのみ、無作為のファーストチャンスサーバkからセカンドチャンス/隣接サーバに転送されることに留意されたい。Wk及びθkをともにゼロに設定することは、隣接サーバの負荷がサーバkの負荷より低い場合は、要求qが隣接サーバに転送されることを意味する。しかしながら、それとは正反対に、Wk又はθkを大きい数に設定すると、本方法は「ランダム負荷」方法に戻り、サーバkは常に要求を処理して決して隣接サーバを考慮しない。概して、管理者は、個々の環境及びアプリケーションに基づいてWk及びθkをこれらの2つの両極端の間で変更することができる。たとえば、サーバkとその隣接サーバとの間で要求を転送することにより、幾分かの余分の通信オーバヘッドがもたらされる(ただし、後述するように、このサーバkと隣接サーバとの間での要求の転送により、従来技術の純粋な「ランダム」方法と比較して負荷分散が強化される)。したがって、管理者は、負荷分散とこのオーバヘッドとをトレードオフするために、Wk及びθkに対して適当な値を採用することができる。異なる観点から、m個のサーバはウェブキャッシュプロキシであると想定する。ここで、管理者は、Wk及びθkを、サーバkをその隣接サーバより優先する値に設定することができ、それには、サーバkにおけるキャッシュヒット率を増大させるという効果がある。この場合もまた、これは負荷分散を犠牲にする可能性がある。したがって、管理者は、キャッシュヒット率と負荷分散とのバランスをとるような2つのパラメータに対する適当な値を採用することができる。
【0036】
全体として、本発明はスケーラブルであり、「ランダム」方法及び「ラウンドロビン」方法より優れた性能を提供し、「最低負荷」方法及び「2つのランダム選択」方法より優れていなくても同等な性能を提供する。この利点に加えて、本発明は、使用する方法に関わらず「最低負荷」方法及び「2つのランダム選択」方法と比較してメッセージパッシングのオーバヘッドが最小であり、それにより、本発明の実装の複雑さが軽減し且つ単純と
なる。同様に、本発明は、陳腐化した負荷情報の影響を受けにくくなる。
【0037】
スケーラビリティに関して、図4は、到着率が増大する際の全応答時間に関して「ランダム」方法、「2つのランダム選択」方法及び本発明を比較する、例示的なシミュレーションを示す。このシミュレーションは、本発明でのすべてのサーバと、「2つのランダム選択」方法によるすべてのサーバとが、他のすべてのサーバの負荷を常に正確に知っているという理想的な条件の下で、且つ本発明でのWk及びθkがすべてのサーバに対してゼロ(0)に設定されて、行われた。図から分かるように、本発明は、要求率が増大するに従って性能が急速に劣化する「ランダム」方法より十分に適切に機能した(この場合もまた、「ラウンドロビン」方法は「ランダム」方法と同様の性能を有するものと推定される)。重要なことに、本発明は、「2つのランダム選択」方法とまさに同程度によく機能した(この場合もまた、「最低負荷」方法は、「2つのランダム選択」方法と同様の性能を有するものと推定される)。
【0038】
特に、サーバ毎の定期的なポーリング率を高くすることで、このシミュレーションが実行された理想的な条件を達成することができる。重要なことに、「最低負荷」方法及び「2つのランダム選択」方法でのポーリング方法では、各サーバが他のすべてのサーバの現負荷を知っていることが必要であり、サーバ毎にO(m)という相当量の負担が課せられる。この相当量のオーバヘッドとは反対に、本発明では、各サーバが、その隣接サーバの現負荷のみを知っていればよく、サーバ毎の複雑性はO(1)である。この場合もまた、ピギーバック方法により、本発明のメッセージパッシングのオーバヘッドは「最低負荷」方法及び「2つのランダム選択」方法と同じになる。しかしながら、この場合でさえ、サーバはそれ自体の負荷及び隣接サーバの負荷のみを保持すればよいため、本発明での複雑性が低くなる。「最低負荷」方法及び「2つのランダム選択」方法では、すべてのサーバがそれ自体の負荷と他のすべてのサーバの負荷とを保持しなければならない。このため、本出願では、従来技術の方法に比較して優れていないまでも同等な性能が得られ、より適切に機能する従来の方法に比較してメッセージオーバヘッド及び/又は複雑性が大幅に低減する。
【0039】
陳腐化した負荷情報に対する影響の受け易さに関し、図5は、要求/到着率が一定に維持されるがサーバの数が増大する際の全応答時間に関して、「最低負荷」方法、「2つのランダム選択」方法、「ランダム」方法及び本発明を比較する、別の例示的なシミュレーションを示す。ここでは、サーバ間で負荷情報を広めるためにピギーバック方法が使用された。したがって、応答を渡す副次的効用として負荷が渡されるため、すべての方法のメッセージオーバヘッド及び複雑性は同じである。さらに、本発明の場合、Wk及びθkはすべてのサーバに対してゼロ(0)に設定された。全体として、シミュレーションは、陳腐化した負荷情報を有するサーバの影響を示す。図示するように、「2つのランダム選択」方法及び「最低負荷」方法は陳腐化した負荷情報の影響を受けやすく、「2つのランダム選択」方法は「ランダム」方法まで劣化し、「最低負荷」方法には本質的にフラッシュクラウド効果がもたらされる。全体として、本発明によるサーバは、より正確な負荷情報を保持し、その結果、大幅に優れた性能を達成する。
【0040】
いくつかの他の点を強調すべきである。第1に、本方法は無作為にファーストチャンスサーバを選択し、各サーバは固有の隣接サーバを有するため、本発明ではフラッシュクラウド問題がない。第2に、上述したように、他の従来技術による要求ルーティング方法は良い性能を達成するが、各サーバが他のすべてのサーバの負荷を知っており、且つ各サーバが要求到着率を知っている必要がある。この場合もまた、本発明は、これらの方法に比較して簡略化され、各サーバはその隣接するサーバの負荷のみを知っていればよい。
【0041】
ここで本発明のさらなる実施形態を参照する。例示的な一例を図6に示す本発明の第3
の実施形態によれば、隣接サーバ203は、「セカンドチャンスサーバ」として作用しサーバk204からサービス要求qを受け取ると、図3Cの方法を実行して要求を処理するのではなく、図3Bの方法を実行する(本発明のこの実施形態によれば、図3Cの方法は不要である)。より具体的には、要求qを受け取ると、隣接サーバ203はその現負荷を定数Wnext-neighbor203と比較する。サーバ203の負荷がWnext-neighbor203以下である場合、それは過負荷ではなく、サービス要求qを処理して、応答を直接又はサーバk204やサーバi202を介してクライアント210に転送し戻す。
【0042】
しかしながら、隣接サーバ203は、それが過負荷であると判断した場合、次に、その隣接サーバ(たとえばサーバ602)にかかっている負荷がより軽いためそのサーバに対して要求qを処理のために転送すべきであるか否かを判断する。この場合もまた、この判断は、閾値θnext-neighbor203に対するサーバ203及びサーバ602の負荷の相対的な比較に基づく。サーバ203は、サーバ602より低負荷又は2つのサーバが比較的等しい負荷であると判断すると、自分自身で要求qを処理し、応答をクライアント210に直接又はサーバk204やサーバi202を介して転送し戻す。
【0043】
しかしながら、サーバ203は、サーバ602の負荷の方が軽く要求qを処理するのに適していると判断すると、要求qを処理のためにサーバ602に転送する(610に示すように)。したがって、その後サーバ602は、また図3Bの方法を実行し、要求を実行して応答をクライアントに返す(612に示すように)か、又は要求qをその隣接サーバに渡す。したがって、あるサーバが十分に利用されておらず、且つ/又はその隣接サーバより負荷が低くなるまで、要求qはサーバ間で連続的に渡される。この場合もまた、このように各サーバが要求qをその隣接サーバに渡すのではなく、第2の実施形態で説明したように、サーバはその隣接サーバをサーバiにゆだねてもよく、その後サーバiは要求をその隣接サーバに転送してもよい(すなわち、サーバ204はサーバi202をサーバ203に向けさせ、サーバ203はサーバiをサーバ602に向けさせる等)ことにも留意されたい。
【0044】
図7A、図7B及び図7Cは、本発明の第4の実施形態を示し、図8は、この実施形態の例示的な一例を示す。この実施形態によれば、各サーバは、1つではなく2つ以上の隣接サーバを保持する(説明を容易にするために、図7A、図7B及び図7C並びに図8は2つの隣接サーバに関する)。この実施形態は、第1の実施形態と同様に進み、サーバi202は図3Aと同じステップである図7Aの方法ステップを実行する。図7Bに進み、サーバk204はステップ310においてサーバiから要求を受け取る。上記のように、サーバkが過負荷でない場合、サーバkが自分自身で要求qを処理する(ステップ312〜320)。
【0045】
しかしながら、サーバk204は、過負荷である場合、ステップ702に進み、その作業負荷をその隣接サーバ(たとえばサーバ203及び802)の各々と相対的に比較して、いずれかの隣接サーバがサーバk自身よりかかっている負荷が軽く、したがって要求qを処理するのにより適しているか否かを判断する。本発明のこの実施形態によれば、サーバkは、この比較のために別々の定数θk1及びθk2を保持してもよい。この場合もまた、各θを、比較される2つのサーバ間の相体的な計算能力に基づいて設定すべきである。いずれの隣接サーバも負荷がより軽くない場合、サーバk204はそれ自身で要求qを処理し、応答をクライアント210に返す(ステップ314〜316)。しかしながら、いずれかの隣接サーバ203/802の負荷がより軽い場合、サーバkはステップ706に進み、要求qを処理のためにより利用されていないサーバに転送する(810/814に示すように)(この場合もまた、サーバk204は、要求を隣接サーバ203/802に転送するのではなく、サーバiに隣接サーバを通知しサーバiに要求を転送させてもよい)。そして、サーバkは、サーバ203/802からの応答を待ち(812/816に示す
ように)、最後にクライアントに応答を返す(ステップ708、710、316、318及び320)。(なお、さらなる代替形態として、サーバkは、その負荷を同時に両隣接サーバと比較するのではなく、その負荷をまず1つの隣接サーバと比較し、その隣接サーバの負荷の方が低い場合には要求を処理のためにこの隣接サーバに転送してもよい。サーバkは、第1の隣接サーバがサーバkより負荷が重い場合にのみ第2の隣接サーバを検査する。)この場合もまた、要求を処理する隣接サーバは第1の実施形態と同様に進み、図3Cと同じステップである図7Cの方法ステップを実行してもよく、又は第3の実施形態と同様に進んで図7Bの方法ステップを実行してもよい。
【0046】
本発明の上述した実施形態は例示的であるようにのみ意図されている。当業者には、本発明の精神及び範囲から逸脱することなく多数の他の実施形態が考案されてもよい。
【図面の簡単な説明】
【0047】
【図1】図1は、従来技術による負荷分散要求ルーティング方法の例示的な一例の図である。
【図2】図2は、図3A、図3B及び図3Cに示すような本発明の第1の実施形態の例示的な例を示す図である。
【図3】図3A、図3B及び図3Cは、サーバが単一の隣接サーバを有する場合の、負荷の平衡化を達成するためにサーバ間でクライアント要求/タスクを分散させる、本発明の第1の例示的な実施形態の方法ステップを示す。
【図4】図4は、要求到着率が変化する際の全応答時間に関し、従来技術による負荷分散要求ルーティング方法と本発明とを比較する、例示的なシミュレーションのスケーラビリティ結果を示す図である。
【図5】図5は、陳腐化した負荷情報による各方法の影響の受け易さに関し、従来技術による負荷分散要求ルーティング方法と本発明とを比較する例示的なシミュレーションを示す図である。
【図6】図6は、サーバ間でクライアント要求/タスクを分散させる本発明のさらなる実施形態の例示的な例を示す図である。
【図7】図7A、図7B及び図7Cは、サーバが2つ以上の隣接サーバを有する場合の、負荷の平衡化を達成するためにサーバ間でクライアント要求/タスクを分散させる、本発明のまたさらなる例示的な実施形態の方法ステップを示す図である。
【図8】図8は、図7A、図7B及び図7Cに示すような本発明の例示的な一例を示す図である。

【特許請求の範囲】
【請求項1】
複数のサーバ間で負荷分散されるように要求を処理する方法であって、
前記複数のサーバのうちのいずれかにより無作為に第1のサーバに転送される要求を、前記第1のサーバにおいて受け取るステップと、
過負荷である場合、前記第1のサーバの現負荷を、前記第1のサーバに対してあらかじめ定められている前記複数のサーバのうちの第2のサーバの現負荷と比較するステップと、
前記第1のサーバの負荷が前記第2のサーバの負荷を超える場合、前記要求を処理のために前記第2のサーバに転送するステップと、
を含む。
【請求項2】
前記第1のサーバの負荷が前記第2のサーバの負荷より低いか又はそれと同等である場合、前記要求を処理するステップをさらに含む、請求項1に記載の方法。
【請求項3】
前記比較するステップの前に、前記第1のサーバが過負荷であるか否かを判断するために前記第1のサーバの現負荷を過負荷定数と比較するステップをさらに含む、請求項1に記載の方法。
【請求項4】
過負荷でない場合に前記要求を処理するステップをさらに含む、請求項1に記載の方法。
【請求項5】
前記第1のサーバは、前記第1のサーバが前記要求を受け取った転送サーバを通して前記第2のサーバに前記要求を転送する、請求項1に記載方法。
【請求項6】
前記受け取るステップの前に、前記第2のサーバからメッセージを受け取るステップをさらに含み、該第2のサーバの現負荷は前記メッセージにピギーバックされる、請求項1に記載の方法。
【請求項7】
前記複数のサーバは、ピア・ツー・ピアネットワーク内のピアである、請求項1に記載方法。
【請求項8】
前記第2のサーバの負荷が前記第1のサーバの負荷を超える場合、前記第1のサーバの現負荷を、前記第1のサーバに対してあらかじめ定められている前記複数のサーバのうちの第3のサーバの現負荷と比較するステップと、
前記第1のサーバの負荷が前記第3のサーバの負荷を超える場合、前記要求を処理のために前記第3のサーバに転送するステップと
をさらに含む、請求項1に記載の方法。
【請求項9】
前記第1のサーバの負荷が前記第2のサーバの負荷及び前記第3のサーバの負荷より低いか又はそれらと同等である場合、前記要求を処理するステップ、
をさらに含む、請求項8に記載方法。
【請求項10】
複数のサーバ間で負荷分散されるように要求を処理する方法であって、
前記複数のサーバのいずれかにより無作為にファーストチャンス(first-chance)サーバに転送される要求を、前記ファーストチャンスサーバにおいて受け取るステップと、
過負荷でない場合に前記要求を処理するステップと、
過負荷である場合、前記ファーストチャンスサーバの現負荷を、前記ファーストチャンスサーバに対してあらかじめ定められている少なくとも2つの他のサーバの現負荷と比較するステップでと、
前記ファーストチャンスサーバの負荷が前記少なくとも2つの他のサーバのうちのいずれかの負荷を超える場合、前記要求を処理のために前記少なくとも2つの他のサーバのうちの1つに転送するステップと
を含む方法。
【請求項11】
前記ファーストチャンスサーバは、その現負荷を過負荷定数と比較することにより過負荷であるか否かを判断する、請求項10に記載の方法。
【請求項12】
前記ファーストチャンスサーバが過負荷であり、且つ前記ファーストチャンスサーバの負荷が前記少なくとも2つの他のサーバの負荷と同等であるか又はそれより低い場合に、前記要求を処理するステップをさらに含む、請求項10に記載の方法。
【請求項13】
前記少なくとも2つの他のサーバからメッセージを受け取るステップをさらに含み、該少なくとも2つの他のサーバの現負荷は前記メッセージにピギーバックされる、請求項10に記載の方法。
【請求項14】
複数のサーバ間で負荷分散されるようにクライアント要求を処理する方法であって、
第1のサーバにおいてクライアント要求を受け取るステップと、
前記複数のサーバから第2のサーバを無作為に選択するとともに、前記クライアント要求を前記第1のサーバから該第2のサーバに転送するステップと、
該第2のサーバが過負荷である場合、該第2のサーバの現負荷を、該第2のサーバに対してあらかじめ定められている第1の隣接サーバの現負荷と比較するステップと、
前記第2のサーバの負荷が前記第1の隣接サーバの負荷を超える場合、前記クライアント要求を前記第1の隣接サーバに転送するとともに、該第1の隣接サーバが前記クライアント要求を処理するステップと
を含む方法。
【請求項15】
前記ファーストチャンスサーバが過負荷でない場合、該ファーストチャンスサーバは前記要求を処理する、請求項14に記載の方法。
【請求項16】
前記複数のサーバの各々は事前に確定された固有の隣接サーバを有する、請求項14に記載の方法。
【請求項17】
前記第1の隣接サーバによる前記処理するステップは、
該第1の隣接サーバが過負荷である場合、該第1の隣接サーバの現負荷を第2の隣接サーバの現負荷と比較するステップと、
前記第1の隣接サーバの負荷が前記第2の隣接サーバの負荷を超える場合、前記クライアント要求を前記第2の隣接サーバに転送するとともに、該第2の隣接サーバが前記クライアント要求を処理するステップと
をさらに含む請求項14に記載の方法。
【請求項18】
前記第2のサーバが過負荷であり、且つ前記第1の隣接サーバの負荷が前記ファーストチャンスサーバの負荷を超える場合、
前記第2のサーバの現負荷を、該第2のサーバに対してあらかじめ定められている第2の隣接サーバの現負荷と比較するステップと、
前記第2のサーバの負荷が前記第2の隣接サーバの負荷を超えている場合、前記クライアント要求を該第2の隣接サーバに転送するとともに、該第2の隣接サーバが前記クライアント要求を処理するステップと
をさらに含む請求項14に記載の方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公表番号】特表2008−504600(P2008−504600A)
【公表日】平成20年2月14日(2008.2.14)
【国際特許分類】
【出願番号】特願2007−518031(P2007−518031)
【出願日】平成17年3月24日(2005.3.24)
【国際出願番号】PCT/US2005/009864
【国際公開番号】WO2006/011929
【国際公開日】平成18年2月2日(2006.2.2)
【出願人】(399047921)テルコーディア テクノロジーズ インコーポレイテッド (61)
【出願人】(502087460)株式会社トヨタIT開発センター (232)
【Fターム(参考)】