JP2005092862A - 負荷分散方法及びクライアント・サーバシステム - Google Patents

負荷分散方法及びクライアント・サーバシステム Download PDF

Info

Publication number
JP2005092862A
JP2005092862A JP2004171364A JP2004171364A JP2005092862A JP 2005092862 A JP2005092862 A JP 2005092862A JP 2004171364 A JP2004171364 A JP 2004171364A JP 2004171364 A JP2004171364 A JP 2004171364A JP 2005092862 A JP2005092862 A JP 2005092862A
Authority
JP
Japan
Prior art keywords
server
servers
client
load
requests
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004171364A
Other languages
English (en)
Other versions
JP2005092862A5 (ja
Inventor
Mineyoshi Masuda
峰義 増田
Toshiaki Tarui
俊明 垂井
Tatsuo Higuchi
達雄 樋口
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2004171364A priority Critical patent/JP2005092862A/ja
Publication of JP2005092862A publication Critical patent/JP2005092862A/ja
Publication of JP2005092862A5 publication Critical patent/JP2005092862A5/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

【課題】サービス需要の増減に応じてサーバ・クラスタシステムを構成するサーバの台数を変更するクラスタ再構成技術に適合した、クライアントとサーバ・クラスタシステム間の負荷分散方法を提供する。
【解決手段】複数のクライアント100と、クライアント100からのリクエストを処理する複数のサーバ800を含み、複数のサーバの数を動的に変更するサーバ・クラスタ1100と、によって構成されるクライアント・サーバシステムに用いられる負荷分散方法であって、クライアント100は、サーバ・クラスタ1100を構成するサーバの数を検出し、サーバ数の増加が検出された直後は、該増加したサーバに対して送出されるリクエストの配分を他のサーバに比べて小さく設定し、前記設定された配分に基づいて前記複数のサーバに対してリクエストを送出する。
【選択図】 図1

Description

本発明は、インターネット上での電子商取引等のサービス構築に用いられる、サービス利用者からのリクエストを処理するサーバ・クラスタシステム等を用いたクライアント・サーバシステムにおいて、サービス需要の増減に応じてサーバ・クラスタシステムを構成するサーバの台数を変更するクラスタ再構成技術に適合した、クライアントとサーバ・クラスタシステム間の負荷分散方法及び負荷分散方法を実装したクライアント・サーバシステム関する。
複数のサーバをネットワークで結合し、見かけ上単一のサーバを構成するサーバ・クラスタシステムが、インターネット上で電子商取引等の各種サービスを提供する計算機システムに用いられている。計算機システムとしてサーバ・クラスタシステムを用いる場合、クライアントとサーバ・クラスタシステムとの間で負荷分散を行うことが一般的である。具体的には、クライアントからのサービス処理要求(リクエスト)を、サーバ・クラスタシステムを構成する複数のサーバの各々の処理能力に応じて振り分けるよう、リクエストの配分を決定する。
この負荷分散に用いるアルゴリズム、すなわち、どのサーバにどれだけのリクエストを送出するかを決定する手順は、システムの性能を左右する。負荷分散アルゴリズムが適切でない場合、クライアントからのリクエストが均等にサーバに振り分けられず、サーバ間で負荷の不均衡が生じる。負荷の重いサーバでは、負荷が軽い他のサーバと比較すると、リクエストに対する処理時間が大幅に大きくなり、リクエスト処理が遅れてしまう。例えば、インターネット上でのサービスの場合、リクエスト処理の遅れは、サービス利用者への応答の遅れとして顕在化する。
この、システムにとって重要な要素である負荷分散アルゴリズムの代表的なものにラウンドロビン方式が知られている。ラウンドロビン方式とは、同時に入力する複数の要求信号の内の一つを予め設定された優先順位に従って、かつ均等に選択されるように、優先順位の並び替えを行う方式である。このラウンドロビン方式を利用すると、負荷分散先のサーバに、リクエストを順番に送出することができる(例えば、特許文献1参照)。
また、ラウンドロビン方式を応用した方式に、重み付きラウンドロビン方式がある。重み付きラウンドロビン方式とは、ラウンドロビン方式の優先順位を、所定の重みに従って並び替えを行う方式である。この重み付けラウンドロビン方式を利用すると、サーバのプロセッサの動作周波数やメモリ量などを基に、サーバの性能値を“重み”として算出しておき、サーバに、重みに応じた数のリクエストを振り分けることができる(例えば、特許文献2参照)。
また、近年、クラスタ再構成技術と呼ばれる、サーバ・クラスタシステムを動的に再構成する技術が提案されている。このクラスタ再構成技術は、クライアントからのサービス要求を、負荷分散装置によってサーバ・クラスタで稼働中のいずれかのサーバに振り分け、アクセスの負荷に応じてサーバ・クラスタの構成(台数)を変更する技術である。このクラスタ再構成技術は、インターネット上でのサービスを提供するシステムのように、サービス利用者数の変動が大きいシステムでは特に有効である(例えば、特許文献3参照)。
また、NAS(Network Attached Storage)にサーバ・クラスタシステムを適用し、容量拡張、減縮が容易に行えるよう、ファイルの識別子にハッシュ関数を適応し、ファイルと該ファイルの格納先とを組み合わせたテーブルを管理するシステムも知られている(例えば、特許文献4参照。)。
また、負荷分散装置が負荷を分散させる対象のサーバを追加した際、追加直後からの一定期間は、追加したサーバに分散させるリクエストの数に「上限を設定する」機能であるスロースタートメカニズムを備える負荷分散装置(Load Balancer)である“Foundry ServerIron”が知られている(例えば、非特許文献1参照。)。負荷分散のアルゴリズムとして、「最小コネクション数」アルゴリズムを適用した場合、通常であれば追加した直後のコネクションの数がゼロである追加サーバに対して、連続的にリクエストが送られてしまい、追加したサーバで処理されるリクエストの応答が大幅に悪化する。スロースタートメカニズムを用いた場合は、追加直後からの一定期間、追加サーバへ送るリクエスト数に上限を設けるため、このような応答時間の悪化を避けることができる。その上限値、あるいは上限値をかける期間などのパラメータは、管理者により設定可能である。
特開2000−231496号公報 特開2001−217836号公報 特開2002−163241号公報 米国特許公開2003/0220985号公報 ファウンドリーネットワークス株式会社、"Foundry ServerIron Switch Installation and Configuration Guide"、p.12-62〜12-69、[online]、[平成16年5月14日検索]、インターネット<URL:http://www.foundrynetworks.co.jp/services/documentation/siug/PDFs/SIguide.ZIP>
前述したクラスタ再構成技術を、不適切な負荷分散アルゴリズムと併用した場合、サーバ・クラスタシステムに新たにサーバを追加した際に、サーバ・クラスタシステム内を構成するサーバ間で負荷の不均衡が発生することがある。このサーバ間での負荷の不均衡は、クラスタ再構成技術を用いてサーバ・クラスタシステムに新たに追加したサーバと、クラスタ内で既に動作していた既存のサーバとの間で、リクエスト処理能力に差があることが原因である。
このような、サーバ間でリクエスト処理能力に差が起こる原因の一つに“キャッシュ”がある。
例として、複数のキャッシュ・サーバで構成されるサーバ・クラスタシステムについて説明する。キャッシュ・サーバは、Webサーバの前段(Webサーバとサービス利用者との間)に配置され、Webサーバの代わりに、サービス利用者からのWebコンテンツ配信要求に対するWebコンテンツを配信する。要求されたWebコンテンツがキャッシュ・サーバ内にキャッシングされている場合、キャッシングされているコンテンツをWebサーバから取得することなく、サービス利用者に即時に配信できるため、サービス利用者への応答時間は短い。一方、Webコンテンツがキャッシュ・サーバ内にキャッシングされていない場合、Webコンテンツを、一旦Webサーバから取得した後、サービス利用者に配信を行う必要があるため、サービス利用者への応答時間が長くなる。つまり、キャッシュ・サーバ内にWebコンテンツがキャッシュされているか否かで、サービス利用者への応答時間に大きな差ができる。
このような特性を持つキャッシュ・サーバから構成されるサーバ・クラスタシステムに、新たにキャッシュ・サーバを一台追加した場合、キャッシュ・サーバを追加した直後は、追加されたキャッシュ・サーバ内にはWebコンテンツは全くキャッシングされていない。そのため、追加直後のキャッシュ・サーバは、利用者からの要求を受けるたびにWebサーバからコンテンツを取得する必要があり、サービス利用者への応答時間が長くなる。一方、これまでサーバ・クラスタシステム内で稼動していた既存のキャッシュ・サーバは、多くのWebコンテンツをキャッシングしているので、新たに追加されたキャッシュ・サーバと比較すると、サービス利用者への応答時間が短い。
このように、サービス利用者からの要求を処理する能力に差がある既存キャッシュ・サーバと追加キャッシュ・サーバに、ラウンドロビン方式で同数のリクエストを送出した場合、追加されたキャッシュ・サーバでは、リクエストの処理が間に合わず、サーバ内で未処理リクエストの長い待ち行列が発生する。そのため、待ち行列の理論に従い、サービス利用者への応答時間は指数関数的に長くなる。そのため、応答時間の大幅な遅れが発生し、サービス利用者に多大な不利益を与える、ひいてはサービス提供者の信頼を損なう。
本発明は、このような問題に鑑みてなされたものであり、サーバ・クラスタシステムに新たにサーバが追加された際、追加されたサーバにおいて、リクエスト処理時間が長大になることを回避する分散制御方法を提供する。
本発明は、複数のクライアントと、前記複数のクライアントからのリクエストを処理する複数のサーバを含み、前記複数のサーバの数を動的に変更するサーバ・クラスタと、によって構成されるクライアント・サーバシステムに用いられる負荷分散方法であって、前記クライアントは、前記サーバ・クラスタを構成するサーバの数を検出し、サーバ数の増加が検出された直後は、該増加したサーバに対して送出されるリクエストの配分を他のサーバに比べて小さく設定し、前記設定された配分に基づいて前記複数のサーバに対してリクエストを送出することを特徴とする。
本発明では、サーバ・クラスタシステムにサーバを追加した直後は特別な負荷分散を行う。すなわち、既存のサーバと比較して性能(処理能力)が劣る追加サーバに対するリクエスト送出量を、既存サーバに比べて抑えることで、追加サーバにおいてリクエスト処理時間が長大になることを回避する。
本発明のクライアント・サーバシステムは、クライアントからのリクエストを処理するための複数のサーバから構成されるサーバ・クラスタシステムとクライアントとからなり、サーバ・クラスタシステムを構成するサーバの台数は、リクエスト数の変動に応じて増減する。クライアントには、サーバ・クラスタシステムにリクエストを振り分ける負荷分散機能と、リクエストの振り分け方を制御する負荷制御プログラムとを備える。また、前記負荷制御プログラムはサーバ・クラスタシステムのサーバ台数の変更を検出する機能を持つ。
本発明の特徴は、負荷制御プログラムが追加サーバへのリクエスト送出量を調整し、既存サーバへのリクエスト送出量に比べて、追加直後の追加サーバへのリクエスト送出量を少なくし、時間経過と供に追加サーバへのリクエスト送出量を段階的に増加させることである。
負荷制御プログラムは、サーバ・クラスタシステムを構成するサーバ台数の変更を検知する機能を持つ。例えば、サーバ・クラスタシステムのサーバ台数を管理する管理サーバを備え、管理サーバが、サーバ台数の変更があった場合に、その変更を負荷制御プログラムに通知する。負荷制御プログラムは、サーバ台数変更の通知の検出を契機として、追加サーバへのリクエストの送出を開始する。
負荷制御プログラムは、追加サーバへのリクエスト送出量を段階的に増加させる。この増分の計算方法には二つの方式がある。一つは、追加サーバから性能情報を取得し増分計算に利用する方式、もう一つは、サーバから性能情報を取得しない方式である。
サーバ・クラスタシステムからの性能情報を利用する場合、負荷制御プログラムは、追加サーバから、例えばキャッシュヒット率やリクエストの待ち行列長といった性能情報を取得する機能と、その性能情報を基にリクエスト送出量の増分を計算する機能を持ち、計算結果に従って、追加サーバへのリクエスト送出量を増加させる。
追加サーバからの性能情報を利用しない場合、負荷制御プログラムは、予め定められた規則(例えば、サーバが追加されてから所定の時間内は、リクエストの送出量を10秒間毎に10%増加させる)に従い追加サーバへのリクエスト送出量を増加させる。
本発明によると、複数のクライアントと、前記複数のクライアントからのリクエストを処理する複数のサーバを含み、前記複数のサーバの数を動的に変更するサーバ・クラスタと、によって構成されるクライアント・サーバシステムに用いられる負荷分散方法であって、前記クライアントは、前記サーバ・クラスタを構成するサーバの数を検出し、サーバ数の増加が検出された直後は、該増加したサーバに対して送出されるリクエストの配分を他のサーバに比べて小さく設定し、前記設定された配分に基づいて前記複数のサーバに対してリクエストを送出することを特徴とするので、サーバ・クラスタシステムに新たにサーバが追加された際に、追加サーバでのリクエスト処理時間が長大となることを回避できる。
本発明の実施の形態について、図面を参照して説明する。
図1は、本発明の第1の実施の形態のクライアント・サーバシステムの概要を表すブロック図である。
本実施の形態のクライアント・サーバシステムは、複数のクライアント100がサーバ間ネットワーク700によってサーバ・クラスタシステム1100と接続されている。
クライアント100は、サーバ・クラスタシステム1100にサービスを要求し、サーバ・クラスタシステム1100から要求に対する結果を受け取る。このクライアント100では、負荷分散機能300及び負荷制御プログラム400が動作している。なお、クライアント100からサーバ・クラスタシステム1100に送信するサービスの処理の要求を「リクエストの送出」と呼ぶ。
負荷制御プログラム400は、サーバ・クラスタシステム1100を構成する各サーバに対して、各々どれだけの配分でリクエストを送出するのかをクライアント100が判断するためのデータである、負荷重み表405を作成する。また、負荷分散機能300は、負荷制御プログラム400が作成した負荷重み表405に従って、各々のサーバとクライアントプログラム200との間の通信量を制御する。すなわち、サーバ・クラスタシステム1100を構成する各サーバに対するリクエストの送出を振り分け、各サーバにリクエストを送出する。
このように、負荷制御プログラム400が各サーバに対するリクエストの配分を決定することによって負荷設定部が構成される。
サーバ・クラスタシステム1100は、複数のサーバがネットワークによって疎結合されており、クライアント100からは単一のサーバとして見えるシステムである。
このサーバ・クラスタシステム1100には、クラスタ再構成技術が適用され、サービスを停止させることなく、システムを構成するサーバの台数を変更することができる。このクラスタ再構成技術は、サーバ・クラスタシステム1100に新たなサーバの追加、及びサーバ・クラスタシステム1100で動作しているサーバの削減ができる。なお、サーバ・クラスタシステム1100に追加された新たなサーバを「追加サーバ900」、既にサーバ・クラスタシステム内で動作しているサーバを「既存サーバ800」と呼ぶ。
また、クライアント100及びサーバ・クラスタシステム1100には、サーバ・クラスタシステム1100のサーバやサービスの構成の状態を取得し管理する、管理サーバ600が接続されている。
サーバ・クラスタシステム1100は、管理サーバ600とエージェント・プログラム1000とによってクラスタ再構成技術が実装されている。具体的には、エージェント・プログラム1000は、サーバ・クラスタシステム1100を構成する全てのサーバに備えられ動作している。管理サーバ600とエージェント・プログラム1000とは相互に通信しながらサーバ・クラスタシステム1100の構成を管理する。エージェント・プログラム1000は、サーバ・クラスタシステム1100を構成する各サーバの負荷を計測し、定期的に管理サーバ600に報告する。管理サーバ600は、エージェント・プログラム1000より報告を受け収集した負荷情報を分析し、サーバ・クラスタシステム1100へのサーバの追加、又はサーバ・クラスタシステム1100からのサーバ削減を決定する。
なお、管理サーバ600を設けずに、管理サーバ600の機能を、サーバ・クラスタシステム1100に組み込んだり、クライアント100に組み込んでもよい。
本発明の第1の実施の形態では、サーバ・クラスタシステム1100に新規に追加された追加サーバ900へのリクエスト送出量を、追加した当初(直後)は既存サーバ800に比べて低く抑え、その後は段階的に増やしていくように制御する。追加サーバ900がサーバ・クラスタシステム1100に追加された直後は、追加サーバ900に備えられているキャッシュメモリ等に充分なキャッシュが蓄えられておらず、追加サーバ900の処理能力は既存サーバ800と比較すると低いので、既存サーバ800と同等のリクエストが送出されると、未処理リクエストの長い待ち行列が発生してしまう可能性がある。そのため、追加サーバ900がサーバ・クラスタシステム1100に追加された直後は、クライアント100からのリクエスト送出量を低く抑えるように制御する。その後、所定の時間が経過すればキャッシュメモリ等に充分なキャッシュが蓄えられ、既存サーバ800と同様の処理を行うことができるようになる。
この制御は、負荷制御関数411を適切に定義することで実現できる。すなわち、追加された直後のサーバの重みを、初めは小さな値に、時間経過と供に段階的に大きな値になるように算出する負荷制御関数411を定義する。
本発明のクライアント・サーバシステムの実施形態の一例として、3層Webシステムが挙げられる。3層Webシステムは、Webサーバ、アプリケーション(AP)サーバ、データベース(DB)サーバが、それぞれサーバ・クラスタシステムを構成し、かつ、それらのサーバ・クラスタシステムがWebサーバ、APサーバ、DBサーバの順に層構造をなすシステムである。3層Webシステムでは、サービス利用者からのリクエストは、階層構造に従って、Webサーバ→APサーバ→DBサーバの順に流れ作業で処理される。この3層Webシステムでは、サービス利用者が使用する計算機とWebサーバの間、例えば、WebサーバとAPサーバの間、APサーバとDBサーバとの間がクライアントとサーバの関係となる。具体的には、WebサーバとAPサーバとの間では、WebサーバがクライアントでありAPサーバがサーバである。また、APサーバとDBサーバとの間では、APサーバがクライアントであり、DBサーバがサーバである。
また、クライアント100がWebサーバであり、Webサーバ・プログラムとしてApacheを用い、サーバ・クラスタシステム1100がAPサーバであり、APサーバ・プログラムとしてTomcatを用いた場合、負荷分散機能300は、Apacheに組み込まれるTomcatの負荷分散モジュールとなる。
次に、負荷制御プログラム400の詳細について説明する。
図2は、負荷制御プログラム400構造及び処理の流れを示すブロック図である。
負荷制御プログラム400は、サーバ性能表403と負荷重み表405の二つのデータをテーブルとして持つ。また、サーバ性能表403を作成するための機能である台数検出機能401及び性能検出機能402を持つ。更に、サーバ性能表403から負荷重み表405を作成する機能である負荷重み計算機能404を持つ。
403は、サーバ性能表の一例を示している。サーバ性能表403には、サーバ・クラスタシステム1100を構成するサーバ毎にエントリが作成される。各エントリには、サーバ性能表403内でのエントリ管理番号としてサーバ毎に付されたサーバ番号(サーバ#)、サーバにアクセスを行うためのURL(Uniform Resource Locator)情報(URL)、サーバの性能を示す複数のパラメータ(P1〜PN)、サーバが新たに追加された時
刻(t0)が記録されている。
サーバの性能を示すパラメータの例としては、サーバのプロセッサの個数、プロセッサの動作周波数、主記憶搭載量等のシステム稼動中には変更が行われない静的パラメータ、及び、サーバ内でのキャッシュヒット率、サーバ内でのリクエスト待ち行列長等のシステム稼動中に処理の負荷状況に応じて変更される動的パラメータの2種類が記録される。
405は、負荷重み表の一例を示している。負荷重み表405は、サーバ性能表403と同じく、サーバ・クラスタシステム1100を構成するサーバ毎にエントリが作成され記録されている。各エントリには、負荷重み表405内でのエントリ管理番号としてサーバ毎に付されたサーバ番号(サーバ#)、サーバにアクセスを行うためのURL、サーバ性能の評価値である重みが記録されている。
台数検出機能401及び性能検出機能402の役割は、サーバ性能表403のエントリを作成し記録することである。台数検出機能401は、サーバ性能表403のエントリを新規に作成し、サーバの静的パラメータを記録する。性能検出機能402はサーバの動的パラメータを取得し記録する。
負荷重み計算機能404は、所定のタイミングに動作し、サーバ性能表403を基に負荷重み表405の内容を更新する。具体的には、負荷重み計算機能404は、一定時間間隔で定期的に動作し、サーバ性能表403から各サーバの性能パラメータを読み込んで、読み込んだ性能パラメータを負荷制御関数411に入力する(メッセージ408)。負荷制御関数411は読み込んだ各サーバの性能パラメータから各サーバの重みを計算し、計算した重みを負荷重み表405に記録する(メッセージ409)。
なお、この負荷制御関数411は自由に設定し記述することが可能であり、サーバ性能の動的パラメータを入力値とした複雑な多次元関数として定義することもできる。例えば、キャッシュのヒット率が低い場合はリクエスト送出量を低くする関数、リクエストの待ち行列長が高い場合にはリクエストの送出量を低くする関数等を負荷制御関数411として設定する。また、複数の負荷制御関数411を予め設定しておき、条件によって複数の負荷制御関数411を切り替えて使い分けることもできる。
この負荷制御関数411の例を図3及び図4に示す。図3の例では、負荷制御関数411を、サーバが新たに追加されてからの時間(サーバ性能表403のパラメータ“t0”)を入力値として関数を定義している。この負荷制御関数には、サーバが追加されてから所定の時間が経過するまではリクエスト送出量を時間に比例して増加させ、所定の時間が経過した後は入力値(経過時間)に関係なくリクエスト送出量を一定とする関数が定義されている。
図4の例では、負荷制御関数411を、待ち行列長を入力値として関数を定義している。図4によると、待ち行列長とリクエスト送出量とが反比例の関係となるような関数が定義されている。すなわち、待ち行列長が長い間はリクエスト送出量を減少させ、待ち行列長が短くなるとリクエスト送出量を増加させる。
図5は、負荷制御プログラム400の台数検出機能401の処理を示すフローチャートである。なお、図5では、サーバ・クラスタシステム1100に新たにサーバ(追加サーバ900)が追加された場合を例として示している。
まず、台数検出機能401は通常は待機状態にある。ここで、管理サーバ600からサーバ・クラスタシステム1100の構成(サーバの数等)が変更されたことの通知を受信すると(処理1201)、該通知から追加サーバ900に関する情報を取得する(処理1202)。
次に、管理サーバ600から受信した追加サーバ900に関する情報から、追加サーバ900のサーバ名を取得する(処理1203)。次に、取得したサーバ名を用いて、サーバ性能表403内に該追加サーバ900のエントリが存在するかを判定する(処理1204)。エントリが無いと判定した場合は、追加サーバ900に対する一意なサーバ番号を
新規に生成する。そして、生成したサーバ番号のエントリをサーバ性能表403に新たに作成し(処理1205)、処理1206に進む。既にエントリがあると判定した場合は、エントリの新規作成は行わず処理1206に進む。
処理1206では、受信した追加サーバ900に関する情報から、追加サーバ900のURL、追加サーバ900の静的なパラメータを抽出して取得し、サーバ性能表403の該当するサーバ番号のエントリに書き込んで記録する。その後、再び待機状態に戻り、構成が変更されたことの通知を待機する。
このように、台数検出機能401が追加サーバの数が変更されたことを検出することによって台数検出部が構成される。
図6は、負荷制御プログラム400の、性能検出機能402の処理を示すフローチャートである。
性能検出機能402は所定のタイミングに動作し、サーバ性能表403の各エントリの動的パラメータの値を更新する。まず、サーバ性能表403内のエントリを調査し、現在サーバ性能表403に記録されているサーバ名を取得する(処理1301)。次いで、サーバ性能表403に記録されている各サーバと通信し、動的パラメータに関する性能情報を取得する(処理1302)。次に、取得した性能情報をサーバ性能表403に記録する(処理1303)。そして、この処理1301から処理1303の処置をエントリの数だけ繰り返す。
このように、性能検出機能401が、各サーバの状態である動的パラメータを取得することによって状態取得部が構成される。
図7は、負荷重み計算機能404の処理を示すフローチャートである。
負荷重み計算機能404は、所定のタイミング(例えば、タイマのカウント等によって定期的)にサーバ性能表403を参照し、サーバ性能表403から所定のエントリのサーバの性能パラメータを取得する(処理1401)。次に、取得した性能パラメータを入力値として負荷制御関数411に入力し、該エントリのサーバの重みを計算する(処理1402)。次に、計算した重みを、負荷重み表405の当該サーバのエントリに書き込み記録する(処理1403)。次に、サーバ番号を加算することで次のエントリを設定する(処理1404)。このようにすることで、サーバ性能表403のサーバ番号の順に、全てのエントリに対する重みが算出される。
なお、この図7の負荷重み計算機能404の処理の実行タイミングは、定期的に行う以外に、台数検出機能401又は性能検出機能402がサーバ性能表403のエントリを更新したことを契機に行うことができる。例えば、台数検出機能401が、サーバ性能表403のエントリを更新した後、その旨を負荷重み計算機能404に通知する。負荷重み計算機能404は、この通知を契機として図7のフローチャートに従って重みを算出し、負荷重み表405を更新する。性能検出機能402がサーバ性能表403を更新した場合も、負荷重み計算機能404に対して同様の通知を行うことで重みを算出し、負荷重み表405を更新する。
次に、負荷分散機能300によって、クライアントプログラム200とサーバ・クラスタシステム1100との間で行われる負荷分散の処理について説明する。
まず、コネクション・プールについて説明する。
コネクション・プールとは、計算機間通信の高速化技術である。一般に、計算機間で通信を行う場合、「コネクション」と呼ばれる通信路を確立する必要がある。なお、確立されたコネクションは通信が終了すると破棄される。このコネクションを確立する処理には時間を要するため、通信の度にコネクションを確立する処理をしていては通信効率が低下する。コネクション・プールは、一度確立したコネクションを、使用後(通信終了後)にも廃棄せずにコネクションの状態を記憶(プール)する。プールされたコネクションは、再度、同一経路での通信が行われる際に再利用することで、再度コネクションを確立する処理を省略することができ、通信効率を向上することができる。
図8は、三台のサーバ(800a、800b、800c)で構成されたサーバ・クラスタシステム1100にクライアントプログラム200がリクエストを送出する場合のコネクション・プールの実装例を示す。
コネクション配分機能301は、各々のサーバにコネクション・プール304を作成し、その管理を行う。
図8は、クライアント100からサーバ800aへは、五つのコネクション・プール304aのうち三つのコネクション(図8中の網掛け部分)を使用し、クライアント100からサーバ800bへは五つのコネクション・プール304bのうち一つのコネクションを使用し、クライアント100からサーバ800cへは五つのコネクション・プール304cのうち二つのコネクションを使用している状況を表している。
なお、図8では全てのサーバに対して同じ数のコネクション・プールを設けているが、プール可能なコネクションの数はサーバ毎に異なっていても構わない。
コネクション配分機能301は、コネクション管理表302に、プールしているコネクションの数と現在使用中のコネクションの数とを、コネクション・プール304毎に記録する(メッセージ303)。
クライアントプログラム200は、サーバ・クラスタシステム1100にリクエストを送出する際、通信に必要なコネクションをコネクション・プールから取得して使用するために、まずコネクション配分機能301に対して、コネクションの割当てを要求する(メッセージ201)。要求を受けたコネクション配分機能301は、まずコネクション管理表302を参照し(メッセージ303)、どのコネクション・プール304からコネクションを取得するかを決定する(図8では、コネクション・プール304bから取得)。次に、取得したコネクションをクライアントプログラム200に割当て、その旨をクライアントプログラム200に送信する(メッセージ202)。クライアントプログラム200は、割当てられたコネクションを使用してサーバ800bと通信を行う。クライアントプログラム200は、通信が終了すると、コネクションの使用が終了した旨のメッセージ203をコネクション配分機能301に送信して、コネクションをコネクション配分機能301に返却する。コネクション配分機能301は、このメッセージを受け取って、使用中のコネクションを未使用のコネクションに変更して、コネクション管理表302を更新する。
図9は、負荷分散機能300に前述したコネクション・プールを用いた場合の、負荷分散機能のデータ構造、及びデータの処理を示すブロック図である。
負荷分散機能300は、クライアントプログラム200とサーバ・クラスタシステム1100との間の負荷分散を行う。負荷分散機能300は、コネクション配分機能301とコネクション管理表302を保持している。
クライアントプログラム200は、サーバ・クラスタシステム1100にリクエストを送出する際に、通信に必要なコネクションの割当てを要求する(メッセージ201)。要求を受けたコネクション配分機能301は、コネクション管理表302を参照して(メッセージ303)、どのコネクション・プールからコネクションを取得するかを決定する。
コネクション管理表302は、図9に示すように、サーバ番号(サーバ#)、サーバにアクセスするためのURL、プール可能なコネクション数の最大の値(最大コネクション)、現在使用されているコネクションの数(使用中コネクション)を一覧として保持している。
コネクション配分機能301は、このコネクション管理表302を参照して、どのサーバにいくつのコネクションを割当てるかを決定し、結果をコネクション管理表302に記録して反映する。クライアントプログラム200は、割当てられたコネクションを使用してサーバにリクエストを送出する。
図10は、負荷分散機能300の処理を示すフローチャートである。
負荷分散機能300は、クライアントプログラム200からコネクション割当ての要求を受信すると(処理1501)、コネクション管理表302を参照し、現在のコネクション割当て状況に関する情報を取得する(処理1502)。次に、負荷重み表405を参照し、各サーバの重みを取得する(処理1503)。なお、処理1502と処理1503の順序は逆でもよい。
次に、コネクション配分機能301が、取得した現在のコネクション割当て状況とサーバ毎の重みとを基に、重み付きラウンドロビン等の負荷分散アルゴリズムに従って、どのサーバにいくつのコネクションを割当てるかを選定する(処理1504)。次に、選定したコネクションを、クライアントプログラム200に通知し、各サーバに対するコネクションを割当てる(処理1505)。
このように、コネクション・プールを使用することで、サーバ・クラスタシステム1100を構成する各サーバの負荷に応じて、各サーバのコネクションの割当てを決定する。各サーバに割当てたコネクションの数に従って、リクエスト送出の割合が決まる。
以上説明したように、本発明の第1の実施の形態のクライアント・サーバシステムでは、クライアント100がリクエストを送出するサーバ・クラスタシステム1100の構成が変更され、新たに追加サーバ900が追加されたときは、該追加サーバ900に対するリクエストの送出量を、既存サーバ800と比較して少なくする。このようにすることで、追加サーバ900の、未処理リクエストの長い待ち行列の発生を抑えることができ、サーバ・クラスタシステム1100全体としての処理の効率を高めることができる。
なお、第1の実施の形態では、性能検出機能402が取得する動的パラメータの例として、キャッシュヒット率、待ち行列長を挙げたが、その他に、メモリ使用量、スワップ回数等のメモリに関連する情報、CPU使用率等のCPUに関連する情報、物理ディスクへの入出力量等の入出力に関連する情報、ネットワーク通信量等のネットワークに関連する情報等を動的パラメータに使用して、リクエスト送出量を制御してもよい。
また、負荷制御関数411への入力値として、動的パラメータの値をそのまま入力したが、値の変化量を負荷制御関数411に入力してもよい。例えば、取得した待ち行列長の値が10から30に変化した場合、入力値を30とするのではく、変化量の20を入力値とする。変化量を入力することで、待ち行列長が短期間に急激に上昇した場合に、重みを小さくする制御が可能となる。なお、変化量を算出するためには、以前に取得した値を、負荷重み表405又は別の表に記録しておく必要がある。
また、性能検出機能402は、サーバ・クラスタシステム1100に属するサーバから直接性能情報500を取得したが、その他の取得方法として、管理サーバ600がサーバ・クラスタシステム1100に属するサーバから性能情報500を取得し、その後、性能検出機能402へ性能情報500をまとめて送信してもよい。
また、負荷分散機能300及び負荷制御プログラム400は、各クライアント100内に実装されているが、負荷分散装置を別に設け、負荷分散装置によって、複数のクライアント100からのリクエストを集約し、サーバ・クラスタシステム1100の各サーバにリクエストを振り分けるように実装してもよい。
次に、本発明の第2の実施の形態について説明する。
第2の実施の形態は、本発明をストレージ・システム(ストレージ装置)に適用した場合の実施形態であり、クライアント、ディレクトリサーバ・クラスタシステム及びストレージによって、サーバ・クライアントシステムが構成されている。
図11は、本発明の第2の実施の形態のストレージ・システムの構成を示したブロック図である。
本実施の形態のストレージ・システムは、ディレクトリサーバ・クラスタ2600が、クライアント2000にファイルサービスを提供する。
クライアント2000は、ディレクトリサーバ・クラスタ2600に対してファイルサービスを要求する。ディレクトリサーバ・クラスタ2600は、複数のディレクトリサーバ(既存ディレクトリサーバ2100及び追加ディレクトリサーバ2200)がネットワークによって疎結合されており、クライアント2000からは単一のディレクトリサーバとして見えるクラスタシステムである。
ファイルの実体(データ)はストレージ2300に格納されている。ディレクトリサーバ・クラスタ2600とストレージ2300とは、SAN(Storage Area Network)2500によって接続されている。ディレクトリサーバ・クラスタ2600とSAN2500とはネットワーク2501を介して接続され、ストレージ2300とSAN2500とはネットワーク2502を介して接続されている。また、クライアント2000とディレクトリサーバ・クラスタ2600とは、サーバ間ネットワーク2400によって接続されている。
一般的なファイルシステムは、ファイルの格納場所を指示する「ディレクトリ情報」と、ディレクトリ情報によって指示される「ファイルの実体」とからなり、ディレクトリ情報とファイルの実体(データ)は同一の記憶装置に格納される。
本実施の形態のストレージ・システムでは、ディレクトリ情報はディレクトリサーバ・クラスタ2600に格納され、ファイルの実体はストレージ2300に格納される。そのため、ディレクトリ情報には、ファイルが格納されているストレージを示す情報と、該ストレージ内での格納位置を示す情報が記録される。
これら複数のディレクトリサーバ(既存ディレクトリサーバ2100及び追加ディレクトリサーバ2200)はクラスタ構成をとっており、ディレクトリ情報は複数のディレクトリサーバ2200に分散して格納される。なお、あるファイルのディレクトリ情報を格納しているディレクトリサーバ2100を、そのファイルの「担当ディレクトリサーバ」と呼ぶ。あるファイルとそのファイルの担当ディレクトリサーバとの対応は、クライアント2000が保持するファイル割当て管理表2001に記録されている。なお、全てのクライアント2000は、同一内容のファイル管理表2001を持っている。
このように、クライアント2000が、あるファイルとそのファイルの担当ディレクトリサーバとの対応を割当管理表2001が保持することによって、割当保持部が構成される。
次に、クライアント2000が出すファイル取得要求を、このストレージ・システムが処理する手順について説明する。
クライアント2000は、ストレージ・システムのディレクトリサーバ・クラスタ2600にファイル取得要求(メッセージ2401)を送信する。クライアント2000がファイルを取得するためには、まず、取得を要求するファイルの担当ディレクトリサーバを特定する必要がある。クライアント2000は、ファイルとそのファイルの担当ディレクトリサーバとの対応が記録されているファイル割当て管理表2001を参照し、取得を要求するファイルの担当ディレクトリサーバを特定する。次に、特定した担当ディレクトリサーバにファイル取得要求を送信する。
ディレクトリサーバ2100は、クライアント2000からのファイル取得要求を受け取ると、ディレクトリ情報を参照して、該ファイルが格納されているストレージ2300を特定する。次に、特定したストレージ2300にファイルを要求する。ファイルの要求を受け取ったストレージ2300はファイルを送信し、ディレクトリサーバ2100はファイルを取得する。取得したファイルは、要求を送信したクライアント2000に対して送信される。
ここで、ディレクトリサーバ2100のキャッシュについて説明する。
一般に、ディレクトリサーバはキャッシュメモリ等のキャッシュを持っている。ディレクトリサーバ2100は、一度ストレージ2300から取得したファイルをメモリ上のキャッシュ領域に格納する。以降、ディレクトリサーバ2100は、同一のファイルの取得要求に対しては、キャッシングしたファイルを送信し、ストレージ2300からファイルを取得する処理を省略する。このようにすることで、ディレクトリサーバ2100からファイルを取得する処理の効率が向上する。
ここで、第1の実施の形態のようにディレクトリサーバ・クラスタ2600を構成するディレクトリサーバの数を動的に変更する場合を説明する。
追加ディレクトリサーバ2200がディレクトリサーバ・クラスタ2600に追加された場合、既存ディレクトリサーバ2100が担当しているストレージ2300のファイルのうち、いくつかのファイルの担当が追加ディレクトリサーバ2200に移管される。すなわち、いくつかのファイルの担当ディレクトリサーバが既存ディレクトリサーバ2100から追加ディレクトリサーバ2200に変更される。
ストレージ2300のファイルの担当ディレクトリサーバが変更されると、これに伴って、クライアント2000が持つファイル割当て管理表2001の内容が変更される。具体的には、例えば、ファイル“File1”の担当ディレクトリサーバがサーバ“SRV1”からサーバ“SRV2”に変更される。この場合、全てのクライアント2000が持つファイル割当て管理表2001の内容が更新される。このファイル割当て管理表2001の更新は、第1の実施の形態と同様に管理サーバを設け、管理サーバから各クライアントに通知してもよいし、ディレクトリサーバ2100からクライアント2000に対して直接通知してもよい。
次に、この新たに追加された追加ディレクトリサーバ2200のキャッシュの状態について説明する。追加ディレクトリサーバ2200をディレクトリサーバ・クラスタ2600に追加し、いくつかのファイルの担当ディレクトリサーバ2100が追加ディレクトリサーバ2200に変更された時点では、追加ディレクトリサーバ2200のキャッシュにはファイルが一切キャッシングされていない。そのため、担当ディレクトリサーバが変更されたファイルにファイルの取得要求があった場合には、要求されたファイルを一度ストレージ2300に要求する必要があり、キャッシュが効果的に働かない。そのため、該ファイル取得要求に対する返答には多大な時間がかかる。
したがって、多数のファイルの担当ディレクトリサーバを一度に追加ディレクトリサーバ2200に変更した場合は、追加ディレクトリサーバ2200での処理が滞り、結果として、ディレクトリサーバ・クラスタ2600からクライアント2000への返答が全体的に悪化する。このようなシステムの性能悪化を防止するために、追加ディレクトリサーバ2200が担当するファイルを一時に一度に増やすのではなく、徐々に増やす必要がある。
既存ディレクトリサーバ2100から追加ディレクトリサーバ2200に、ファイルの担当を徐々に移管する方法について説明する。この移管は、クライアント2000が持つファイル割当て管理表2001の変更に、非特許文献1のようにハッシュ関数を用いることで実現できる。
図12はファイル割当て管理表2001を変更する方法を模式的に示した説明図であり、ファイルの担当を徐々に移管する方法の一例を示す。このファイル割当て管理表2001は、ハッシュ関数2002と、サーバ名変換表2003から構成される。
クライアント2000は、ファイル取得要求を送信する際に、まず、ファイル名をハッシュ関数2002に入力し、ファイル名をハッシュ値に変換する。なお、ここで変換されたハッシュ値の最大値は、ディレクトリサーバの総数よりも充分大きな値になるようにハッシュ関数を設定する。次に、変換したハッシュ値からサーバ名変換表2003を引くことで参照し、ハッシュ値とディレクトリサーバ名との対応を取得し、そのファイルの担当ディレクトリサーバ名を特定する。
ここで、追加ディレクトリサーバ2200が担当するファイルを徐々に増やすには、サーバ名変換表2003を徐々に変更する操作で実現できる。具体的には、例えば、既存ディレクトリサーバ2100が担当していたファイル“File1”の担当ディレクトリサーバを追加ディレクトリサーバ2200へ変更する場合、ファイル“File1”のハッシュ値に対応するサーバ名変換表2003のエントリに記録されている既存ディレクトリサーバ2100を追加ディレクトリサーバ2200に変更する。この変更操作を、一度に複数のハッシュ値に対して行うのではなく、段階的に徐々に行う。
この、既存ディレクトリサーバ2100から追加ディレクトリサーバ2200に、担当ディレクトリサーバを変更するファイルを増やす方法については、前述の第1の実施の形態と同様である。すなわち、図1の負荷制御プログラム400と同等の働きをするプログラムが各クライアント2000上で動作し、担当ディレクトリサーバが変更されるファイルの数を、負荷制御関数411によって算出することで徐々に増加させる。
本発明の第2の実施の形態のストレージ・システムでは、前述したように、クライアント2000がファイルの取得を要求するディレクトリサーバ・クラスタ2600の構成が変更され、新たに追加ディレクトリサーバ2200が追加されたときは、該追加ディレクトリサーバ2200が担当するストレージ2300のファイルの数を、既存ディレクトリサーバ2100と比較して小さくする。このようにすることで、追加ディレクトリサーバ2200での処理が滞ることを防ぐことができ、ディレクトリサーバ・クラスタ2600全体としての処理の効率を高めることができる。
次に、本発明の第3の実施の形態のクライアント・サーバシステムについて説明する。
前述した第1及び第2の実施の形態では、クライアント100がリクエスト数を制御していたが、第3の実施形態では、サーバ側でリクエスト数を制御する。追加サーバ900がその処理能力を越える過剰なリクエストを受信した場合、キューに蓄積された未処理のリクエストを追加サーバ900から既存サーバ800へ送ることで、追加サーバ900の負担を軽減する。
図13は、第3の実施の形態のクライアント・サーバシステムの構成を示すブロック図である。
図1で示した例では、クライアント側の負荷分散機能がサーバへ送るリクエスト数を制御していたが、本発明の第3の実施の形態では図13に示すように、サーバ側でリクエスト数を制御する。
まず、図13の各構成要素について説明する。クライアント100では、クライアントプログラム200及びクライアント側負荷分散機能3000が動作している。クライアントプログラム200は、クライアント使用者からの要求を受け付ける。クライアントプログラム200が受け付けた要求は、次にクライアント側負荷分散機能3000に送られる。クライアント側負荷分散機能3000は、サーバ・クラスタシステム1100に含まれるサーバからその一つを選択して、選択したサーバに処理を要求するためのリクエストを送る(801及び901)。図1に示した第1の実施の形態では、クライアント側負荷分散機能3000がサーバを選択する際に、追加されたばかりのサーバには、送信するリクエスト数を軽減するように制御した。これに対して、第3の実施の形態では、クライアント側負荷分散機能3000ではなく、サーバ側負荷分散機能3101がリクエスト数の制御を行う。
サーバ(追加サーバ900及び既存サーバ800)は、クライアント100からのリクエストを受信し、リクエストを処理した後、その結果をクライアント100へ返す。サーバ(追加サーバ900及び既存サーバ800)では、リクエストを処理するサーバ・プログラム3102、サーバの負荷状況に応じてリクエストをサーバ・プログラム3102へ分散させるサーバ側負荷分散機能3101、及び、サーバ側負荷分散機能3101に対してサーバの負荷に関する情報を提供するサーバ側負荷制御プログラム3100が動作している。
サーバ側負荷制御プログラム3100の機能は、第1の実施の形態で前述したクライアント100において動作する負荷制御プログラム400(図1)とほぼ同等である。すなわち、サーバ側負荷制御プログラム3100は、台数検出機能401から得られるサーバ・クラスタシステム1100内のサーバ台数情報及び性能検出機能402から得られる各サーバの性能情報を元にして、負荷重み表405を作成する。負荷制御プログラム400及びサーバ側負荷制御プログラム3100で異なる点は、作成した性能検出機能402の使用方法である。第1の実施の形態で前述したクライアント100において生成される性能検出機能402(図1)は、クライアント100がサーバの性能情報をサーバから収集するために使用される。これに対して、第3の実施の形態の性能検出機能402は、サーバ・クラスタシステム1100に属するサーバがお互いの性能情報を交換するために使用される(3202)。
サーバ側負荷分散機能3101は、サーバ側負荷制御プログラム3100が作成した負荷重み表405に従って、そのリクエストを処理するサーバを決定する。
ここで、サーバ側負荷制御プログラム3100の処理の流れについて説明する。はじめに、サーバ側負荷分散機能3101は、クライアント100からリクエストを受信する。自サーバの負荷が低い場合、サーバ側負荷分散機能3101はクライアント100から受信したリクエストを自サーバのサーバ・プログラム3102へ送信し、リクエストを処理させる。一方、自サーバの負荷が高い場合、リクエストを自サーバのサーバ・プログラム3102へは送信せず、負荷重み表405を参照し、負荷が低い別のサーバのサーバ側負荷分散機能3101にそのリクエストを渡す(3201)。前述したように、負荷重み表405に記録された、追加された直後のサーバ900の重みは、既存サーバ800に比べて低く設定されるため、リクエストの渡し先として追加サーバ900が選択される割合が低くなる。こうすることによって、追加サーバ900に対して急激にリクエストが集中しないようなリクエスト数の制御を実現でき、追加サーバ900で処理されたリクエストの応答時間が大幅に悪化することを避けることができる。
次に、本発明の第4の実施の形態について説明する。
第1乃至第3の実施の形態では、いずれもサーバごとにリクエスト数を制御している。また、サーバ・クラスタシステム1100にサーバが追加されたことを契機として、リクエスト数制御を開始している。これに対して第4の実施の形態では、サーバごとではなくソフトウェアアプリケーション(以下、単に「アプリケーション」と記述する)ごとにリクエスト数を制御する。また、サーバの追加ではなくアプリケーションの追加を契機としてリクエスト数の制御を開始する。
一つのサーバを複数のアプリケーションで共有する場合に、アプリケーション単位でのリクエスト数制御が必要となる。以下に、アプリケーション単位でのリクエスト数制御を簡単な例を挙げて説明する。
サーバ・クラスタシステム1100において3台のサーバ、サーバA、サーバB、サーバCが存在し、サーバAおよびサーバB上でアプリケーション1が動作し、サーバC上ではアプリケーション2が動作している。ここで、アプリケーション2へのリクエストが急激に増加し、サーバC一台では増加したリクエストを処理しきれなくなったとする。このような場合、リクエストに対する応答時間が悪化することを回避するために、管理サーバ600がサーバBのエージェントプログラム1000に指示を出し、指示を受けたサーバBのエージェントプログラム1000が、サーバBにもアプリケーション2を追加し、アプリケーション2が動作するサーバ台数を増やす。この時点で、アプリケーション2が動作しているサーバが計二台となり、また、サーバBは、アプリケーション1とアプリケーション2を共有していることになる。ここで前述の通り、サーバBにアプリケーション2を追加した直後には、アプリケーション2の低い処理性能が問題となるため、サーバB上のアプリケーション2へのリクエスト数をサーバC上のアプリケーション2に比べて少なくする必要がある。そのためには、第1の実施の形態において前述した負荷制御プログラム400がアプリケーション単位で負荷を制御する必要がある。
アプリケーション単位でのリクエスト数制御を実現するためには、図1における負荷制御プログラム400が、サーバごとの性能ではなく、アプリケーションごとに性能を管理すればよい。そこで、サーバ性能表403及び負荷重み表405のサーバごとのエントリを、図14に示すように、アプリケーションごとのエントリに変更する。負荷分散機能300は、アプリケーションごとに記載された負荷重み表405を参照し、追加直後のアプリケーションに送るリクエスト数が少なくなるように制御を行う。こうすることによって、追加アプリケーション2に対して急激にリクエストが集中しないようなリクエスト数の制御を実現でき、追加アプリケーション2で処理されたリクエストの応答時間が大幅に悪化することを避けることができる。
なお、この図14に示す負荷分散プログラムを用いることで、クライアント主導でリクエストの配分を決定(第1実施形態:図1、第2の実施形態:図11)、又は、サーバ主導でリクエストの配分を決定(第3の実施形態:図13)、のどちらにも適用することができる。
本発明は、Webサーバ→アプリケーションサーバ→データベースサーバのように階層構造に従って処理される階層Webシステムにおける、前段サーバと後段サーバとの負荷分散に適用すると有用である。また、複数のディレクトリサーバが複数のストレージ2300のディレクトリ情報を分担して保持するストレージ・システムのディレクトリサーバにおける負荷分散に適用すると有用である。
本発明の第1の実施の形態のクライアント・サーバシステムの概要を表すブロック図である。 本発明の第1の実施の形態の負荷制御プログラム400構造及び処理の流れを示すブロック図である。 本発明の第1の実施の形態の負荷制御関数411の例を示すグラフである。 本発明の第1の実施の形態の負荷制御関数411の他の例を示すグラフである。 本発明の第1の実施の形態の台数検出機能401の処理を示すフローチャートである。 本発明の第1の実施の形態の性能検出機能402の処理を示すフローチャートである。 本発明の第1の実施の形態の負荷重み計算機能404の処理を示すフローチャートである。 コネクション・プールの実装例を示すブロック図である。 本発明の第1の実施の形態の負荷分散機能300データ構造、及びデータの処理を示すブロック図である。 本発明の第1の実施の形態の負荷分散機能300の処理を示すフローチャートである。 本発明の第2の実施の形態のストレージ・システムの構成を示したブロック図である。 ファイル割当て管理表2001を変更する方法を模式的に示した説明図である。 本発明の第3の実施の形態のクライアント・サーバシステムの概要を表すブロック図である。 本発明の第4の実施の形態の負荷制御プログラム400構造及び処理の流れを示すブロック図である。
符号の説明
100 クライアント
200 クライアントプログラム
300 負荷分散機能
301 コネクション配分機能
302 コネクション管理表
400 負荷制御プログラム
401 台数検出機能
402 性能検出機能
403 サーバ性能表
404 負荷重み計算機能
405 負荷重み表
411 負荷制御関数
500 性能情報
600 管理サーバ
700 サーバ間ネットワーク
800 既存サーバ
900 追加サーバ
1000 エージェント・プログラム
1100 サーバ・クラスタシステム
2000 クライアント
2001 ファイル割当て管理表
2003 サーバ名変換表
2100 既存ディレクトリサーバ
2101 エージェント
2200 追加ディレクトリサーバ
2300 ストレージ
2400 LAN
2500 SAN
2600 ディレクトリサーバ・クラスタ
3000 クライアント側負荷分散機能
3100 サーバ側負荷制御プログラム
3101 サーバ側負荷分散機能
3102 サーバ・プログラム
3200 リクエスト処理要求
3201 サーバ間でのリクエスト受け渡し
3202 サーバ間での負荷情報の受け渡し

Claims (14)

  1. 複数のクライアントと、
    前記クライアントからのリクエストを処理する複数のサーバを含み、前記複数のサーバの数を動的に変更するサーバ・クラスタと、によって構成されるクライアント・サーバシステムに用いられる負荷分散方法であって、
    前記クライアントは、
    前記サーバ・クラスタを構成するサーバの数を検出し、
    サーバ数の増加が検出された直後は、該増加したサーバに対して送出されるリクエストの配分を他のサーバに比べて小さく設定し、
    前記設定された配分に基づいて前記複数のサーバに対してリクエストを送出することを特徴とする負荷分散方法。
  2. 前記クライアントは、前記増加したサーバに対して送出されるリクエストの配分を、時間の経過と共に増加するように設定することを特徴とする請求項1に記載の負荷分散方法。
  3. 前記クライアントは、前記サーバ・クラスタのサーバの数の増加が検出されたことを契機として、該増加したサーバに対して送出されるリクエストの配分を、他のサーバに比べて小さく設定することを特徴とする請求項1に記載の負荷分散方法。
  4. 前記クライアントは、
    前記増加したサーバの性能に関する情報を取得し、
    該取得した情報に基づいて、該増加したサーバに対して送出されるリクエストの配分を設定することを特徴とする請求項1に記載の負荷分散方法。
  5. 前記クライアントは、
    前記増加したサーバの状態に関する情報を取得し、
    該取得した情報に基づいて、該増加したサーバに対して送出されるリクエストの配分を設定することを特徴とする請求項1に記載の負荷分散方法。
  6. 前記クライアントは、前記サーバの状態に関する情報として、キャッシュヒット率、キャッシュ使用率又はリクエストの待ち数に関する情報の一つ以上を取得することを特徴とする請求項5に記載の負荷分散方法。
  7. 前記クライアント・サーバシステムは、前記サーバの数を管理する管理サーバを備え、
    前記クライアントは、前記管理サーバから、前記サーバ・クラスタのサーバの数の増加の通知を受信したことを契機として、該増加したサーバに対して送出されるリクエストの配分を、他のサーバに比べて小さく設定することを特徴とする請求項1又は2に記載の負荷分散方法。
  8. 前記クライアント・サーバシステムは、前記サーバの性能に関する情報を取得する管理サーバを備え、
    前記クライアントは、
    前記管理サーバから、前記増加したサーバの性能に関する情報を取得し、
    該取得した情報に基づいて、該増加したサーバに対して送出されるリクエストの配分を設定することを特徴とする請求項1に記載の負荷分散方法。
  9. 前記クライアントは、前記サーバとの間の通信接続数を設定することによって、前記増加したサーバに対して送出されるリクエストの配分を設定することを特徴とする請求項1から8のいずれか一つに記載の負荷分散方法。
  10. 前記クライアントは、前記サーバに送出されるリクエストの各サーバに対する割当を変更することによって、前記各サーバに対して送出されるリクエストの配分を設定することを特徴とする請求項1に記載の負荷分散方法。
  11. 前記クライアント・サーバシステムは、前記サーバに接続されるストレージ装置を備え、
    前記サーバは、前記ストレージ装置に記憶されるファイルの格納場所を示すディレクトリ情報を保持し、
    前記クライアントは、前記サーバに送出されるリクエストの各サーバに対する割当として、各サーバへの前記ディレクトリ情報を格納する割当を変更することによって、前記各サーバに対して送出されるリクエストの配分を設定することを特徴とする請求項10に記載の負荷分散方法。
  12. 複数のクライアントと、
    前記クライアントからのリクエストを処理する複数のサーバを含み、前記複数のサーバの数を動的に変更するサーバ・クラスタと、によって構成されるクライアント・サーバシステムであって、
    前記クライアントは、
    前記各サーバに対して送出されるリクエストの配分を設定する負荷設定部と、
    前記サーバ・クラスタを構成するサーバの数を検出する台数検出部と、
    前記負荷設定部によって設定された配分に基づいて、前記複数のサーバに対してリクエストを送出する負荷分散部と、を備え、
    前記負荷設定部は、前記台数検出部によってサーバ数の増加が検出された直後は、該増加したサーバに対して送出されるリクエストの配分を他のサーバに比べて小さく設定することを特徴とするクライアント・サーバシステム。
  13. 前記クライアントは、前記サーバに送出されるリクエストの各サーバに対する割当てを保持する割当保持部を備え、
    前記負荷分散部は、前記リクエストの前記サーバに対する割当を変更することによって、前記各サーバに対して送出するリクエストの配分を設定することを特徴とする請求項12に記載のクライアント・サーバシステム。
  14. 前記クライアント・サーバシステムは、前記サーバに接続されるストレージ装置を備え、
    前記サーバは、前記ストレージ装置に記憶されるファイルの格納場所を示すディレクトリ情報を保持するディレクトリ情報保持部を備え、
    前記クライアントは、前記サーバに送出されるリクエストの各サーバに対する割当として、前記ディレクトリ情報を格納しているサーバの割当を保持する割当管理部を備え、
    前記負荷分散部は、前記ディレクトリ情報を格納しているサーバの割当を変更することによって、前記各サーバに対して送出するリクエストの配分を設定することを特徴とする請求項13に記載のクライアント・サーバシステム。
JP2004171364A 2003-08-11 2004-06-09 負荷分散方法及びクライアント・サーバシステム Pending JP2005092862A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004171364A JP2005092862A (ja) 2003-08-11 2004-06-09 負荷分散方法及びクライアント・サーバシステム

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2003291286 2003-08-11
JP2004171364A JP2005092862A (ja) 2003-08-11 2004-06-09 負荷分散方法及びクライアント・サーバシステム

Publications (2)

Publication Number Publication Date
JP2005092862A true JP2005092862A (ja) 2005-04-07
JP2005092862A5 JP2005092862A5 (ja) 2007-04-26

Family

ID=34466814

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004171364A Pending JP2005092862A (ja) 2003-08-11 2004-06-09 負荷分散方法及びクライアント・サーバシステム

Country Status (1)

Country Link
JP (1) JP2005092862A (ja)

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008148278A (ja) * 2006-11-17 2008-06-26 Fujitsu Ltd リソース管理装置及びそれを用いた無線ネットワーク制御装置
JP2008310555A (ja) * 2007-06-14 2008-12-25 Asyst Technologies Japan Inc プロセス状態監視装置
JP2009258777A (ja) * 2008-04-11 2009-11-05 Toshiba Corp 医用画像管理サーバおよび医用画像管理システム
JP2013025497A (ja) * 2011-07-19 2013-02-04 Nippon Telegr & Teleph Corp <Ntt> 分散処理システム、分散処理方法、負荷分散装置、負荷分散方法、及び、負荷分散プログラム
JP2013025720A (ja) * 2011-07-25 2013-02-04 Nippon Telegr & Teleph Corp <Ntt> 分散処理システム、分散処理方法、負荷分散装置、負荷分散方法、及び、負荷分散プログラム
JP2013242751A (ja) * 2012-05-22 2013-12-05 Nippon Telegr & Teleph Corp <Ntt> 負荷分散システムおよび負荷分散方法
JP2014235547A (ja) * 2013-05-31 2014-12-15 富士通フロンテック株式会社 負荷分散装置、障害復旧方法、及び、プログラム
JP2015534175A (ja) * 2012-09-14 2015-11-26 ピークシー, インコーポレイテッド ソフトウェア定義ネットワークアタッチ可能記憶システムおよび方法
US9240998B2 (en) 2011-11-07 2016-01-19 Shinra Technologies, Inc. Management apparatus and control method of management apparatus
CN105339896A (zh) * 2013-06-28 2016-02-17 甲骨文国际公司 用于云端连接共享集合的***和方法
JP2018164285A (ja) * 2014-05-13 2018-10-18 グーグル エルエルシー エニーキャストデータトラフィックをロードバランシングするための方法およびシステム
CN113765966A (zh) * 2020-09-01 2021-12-07 北京沃东天骏信息技术有限公司 一种负载均衡方法和装置
WO2023105671A1 (ja) * 2021-12-08 2023-06-15 日本電信電話株式会社 計算機及びプログラム
CN112799849B (zh) * 2021-02-18 2024-03-19 腾讯科技(深圳)有限公司 一种数据处理方法、装置、设备及存储介质
US11973823B1 (en) * 2023-01-11 2024-04-30 Dell Products L.P. Offloading namespace redirection to backup clients in a scale out cluster

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05143559A (ja) * 1991-04-17 1993-06-11 Toshiba Corp 分散処理システムにおける負荷分散方法
JPH0612395A (ja) * 1992-06-29 1994-01-21 Canon Inc マルチプロセサシステムにおけるタスク割り付け方法
JPH06243112A (ja) * 1993-02-19 1994-09-02 Seiko Epson Corp マルチプロセッサ装置
JPH10334057A (ja) * 1997-06-04 1998-12-18 Nippon Telegr & Teleph Corp <Ntt> 分散システム環境におけるバッチジョブの動的負荷分散処理方法およびそのシステム
JP2000259591A (ja) * 1999-03-11 2000-09-22 Matsushita Electric Ind Co Ltd 分散処理ジョブ実行方法およびネットワークシステム
JP2000330897A (ja) * 1999-05-17 2000-11-30 Nec Corp ファイアウォール負荷分散システム、ファイアウォール負荷分散方法および記録媒体
JP2001175629A (ja) * 2000-11-15 2001-06-29 Hitachi Ltd データベース管理方法
JP2002108839A (ja) * 2000-09-28 2002-04-12 Mitsubishi Electric Corp 通信ネットワークシステム、ジョブ割当方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
JP2002163241A (ja) * 2000-11-29 2002-06-07 Ntt Data Corp クライアントサーバシステム
JP2002269061A (ja) * 2001-03-08 2002-09-20 Ntt Comware Corp クライアントサーバシステム、中継サーバ、接続先サーバの決定方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05143559A (ja) * 1991-04-17 1993-06-11 Toshiba Corp 分散処理システムにおける負荷分散方法
JPH0612395A (ja) * 1992-06-29 1994-01-21 Canon Inc マルチプロセサシステムにおけるタスク割り付け方法
JPH06243112A (ja) * 1993-02-19 1994-09-02 Seiko Epson Corp マルチプロセッサ装置
JPH10334057A (ja) * 1997-06-04 1998-12-18 Nippon Telegr & Teleph Corp <Ntt> 分散システム環境におけるバッチジョブの動的負荷分散処理方法およびそのシステム
JP2000259591A (ja) * 1999-03-11 2000-09-22 Matsushita Electric Ind Co Ltd 分散処理ジョブ実行方法およびネットワークシステム
JP2000330897A (ja) * 1999-05-17 2000-11-30 Nec Corp ファイアウォール負荷分散システム、ファイアウォール負荷分散方法および記録媒体
JP2002108839A (ja) * 2000-09-28 2002-04-12 Mitsubishi Electric Corp 通信ネットワークシステム、ジョブ割当方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
JP2001175629A (ja) * 2000-11-15 2001-06-29 Hitachi Ltd データベース管理方法
JP2002163241A (ja) * 2000-11-29 2002-06-07 Ntt Data Corp クライアントサーバシステム
JP2002269061A (ja) * 2001-03-08 2002-09-20 Ntt Comware Corp クライアントサーバシステム、中継サーバ、接続先サーバの決定方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"Foundry ServerIron▲R▼ Switch Installation and Configuration Guide", [ONLINE], vol. [retrieved on 2009-03-06], JPN6009011822, June 2002 (2002-06-01), pages 12 - 62, ISSN: 0001274705 *

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008148278A (ja) * 2006-11-17 2008-06-26 Fujitsu Ltd リソース管理装置及びそれを用いた無線ネットワーク制御装置
JP2008310555A (ja) * 2007-06-14 2008-12-25 Asyst Technologies Japan Inc プロセス状態監視装置
JP2009258777A (ja) * 2008-04-11 2009-11-05 Toshiba Corp 医用画像管理サーバおよび医用画像管理システム
JP2013025497A (ja) * 2011-07-19 2013-02-04 Nippon Telegr & Teleph Corp <Ntt> 分散処理システム、分散処理方法、負荷分散装置、負荷分散方法、及び、負荷分散プログラム
JP2013025720A (ja) * 2011-07-25 2013-02-04 Nippon Telegr & Teleph Corp <Ntt> 分散処理システム、分散処理方法、負荷分散装置、負荷分散方法、及び、負荷分散プログラム
US9240998B2 (en) 2011-11-07 2016-01-19 Shinra Technologies, Inc. Management apparatus and control method of management apparatus
JP2013242751A (ja) * 2012-05-22 2013-12-05 Nippon Telegr & Teleph Corp <Ntt> 負荷分散システムおよび負荷分散方法
JP2015534175A (ja) * 2012-09-14 2015-11-26 ピークシー, インコーポレイテッド ソフトウェア定義ネットワークアタッチ可能記憶システムおよび方法
US9549026B2 (en) 2012-09-14 2017-01-17 Peaxy, Inc. Software-defined network attachable storage system and method
JP2014235547A (ja) * 2013-05-31 2014-12-15 富士通フロンテック株式会社 負荷分散装置、障害復旧方法、及び、プログラム
CN105339896A (zh) * 2013-06-28 2016-02-17 甲骨文国际公司 用于云端连接共享集合的***和方法
JP2018164285A (ja) * 2014-05-13 2018-10-18 グーグル エルエルシー エニーキャストデータトラフィックをロードバランシングするための方法およびシステム
CN113765966A (zh) * 2020-09-01 2021-12-07 北京沃东天骏信息技术有限公司 一种负载均衡方法和装置
CN112799849B (zh) * 2021-02-18 2024-03-19 腾讯科技(深圳)有限公司 一种数据处理方法、装置、设备及存储介质
WO2023105671A1 (ja) * 2021-12-08 2023-06-15 日本電信電話株式会社 計算機及びプログラム
US11973823B1 (en) * 2023-01-11 2024-04-30 Dell Products L.P. Offloading namespace redirection to backup clients in a scale out cluster

Similar Documents

Publication Publication Date Title
US20050038890A1 (en) Load distribution method and client-server system
US8191068B2 (en) Resource management system, resource information providing method and program
CN109308221B (zh) 一种基于WebSocket长连接的Nginx动态负载均衡方法
US7388839B2 (en) Methods, apparatus and computer programs for managing performance and resource utilization within cluster-based systems
JP3382953B2 (ja) 有限メモリコンピュータシステム上におけるクライアント管理フロー制御方法及び装置
US7734726B2 (en) System and method for dynamically allocating processing on a network amongst multiple network servers
JP2005092862A (ja) 負荷分散方法及びクライアント・サーバシステム
JP6881575B2 (ja) 資源割当システム、管理装置、方法およびプログラム
US9154572B2 (en) Changing I/O types for processing data requests
JP2013506908A (ja) 企業ネットワーク内の割り当てられたクラウドリソースの動的な負荷分散およびスケーリング
JP2013525931A (ja) コンテンツ配信に利用される動的バインド
Beniwal et al. A comparative study of static and dynamic load balancing algorithms
CN103067293A (zh) 负载均衡设备的连接管理和复用的方法和***
US11347550B1 (en) Autoscaling and throttling in an elastic cloud service
JP2005031987A (ja) コンテンツ配信システムにおけるコンテンツ配置管理システム及びコンテンツ配置管理プログラム
Soundarabai et al. Comparative study on load balancing techniques in distributed systems
Cai et al. Response time aware operator placement for complex event processing in edge computing
JP2003131960A (ja) データ中継方法
Breitgand et al. On cost-aware monitoring for self-adaptive load sharing
JP4394710B2 (ja) 負荷制御装置及び方法及びプログラム
JP2001202318A (ja) データ配信システム
JP2004046372A (ja) 分散処理システム、リソース割当方法およびプログラムならびにリソース割当プログラムが記録された記録媒体
JP2007179246A (ja) 計算機管理方法、計算機管理プログラム、および、計算機管理サーバ
KR20030014513A (ko) 서버 부하의 분산을 위한 클라이언트 데이터 공유 시스템및 그 방법
CN108243225B (zh) 一种分布式***、管理方法及访问方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070309

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070309

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090303

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090317

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090518

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090616