(57)【特許請求の範囲】
【請求項１】
サービスを複数台のサーバへサーバ負荷がバランスするように振り分けるために、サービスの振り分け先を決定するサービス振り分け装置であって、
ネットワークを流れるパケットをキャプチャするパケットキャプチャと、
前記キャプチャしたパケットに関するパケット情報を前記サーバ別にサーバログ部に記録するサーバ弁別部と、
前記キャプチャしたパケットに関するパケット情報を前記サービス別にサービスログ部に記録するサービス弁別部と、
前記サーバログ部の記録からサーバモデルを設定するサーバモデリング部と、
前記サービスログ部の記録からサービス毎にサービスモデルを設定するサービスモデリング部と、
前記サーバモデルと前記サービスモデルとを読み込み、シミュレーションを行うシミュレータと、
前記シミュレーションの結果をもとに振り分け先サーバを選択し、指定するサーバ選択部と
から構成されることを特徴とするサービス振り分け装置。
【請求項２】
クライアントとサーバ間のパケットを中継するパケット中継装置上に前記パケットキャプチャが設けられ、該パケット中継装置からパケットを取得することを特徴とする請求項１に記載のサービス振り分け装置。
【請求項３】
前記サーバモデリング部は、送信処理に対応する待ち行列を持つモデルとしてサーバモデルを構成し、サーバ送信スループット、サーバ処理時間をパラメータとし、
前記サーバログ部の記録に基づき、
連続送信されたパケット列の任意の連続部分列についての、(a) 先頭パケットキャプチャ時刻t-s 、(b) 末尾パケットキャプチャ時刻t-e 、および(c) その部分列で先頭パケットを除いたサイズの合計Ｌから、式Ｌ／（t-e −t-s ）を用いて、サーバ送信スループットを求め、(d) サーバ応答パケットのキャプチャ時刻ts、サイズls、(e) 対応するクライアント応答パケットのキャプチャ時刻tc、サイズlc、および(f) ネットワーク速度Ｂから、
式（ts−tc）−（ls＋lc）／Ｂを用いて、サーバ処理時間を求めることを特徴とする請求項１に記載のサービス振り分け装置。
【請求項４】
前記サービスモデリング部は、
(a) 全サービスのセッション数に占める各サービスのセッション数の割合、(b) サービスの開始頻度あるいは時間間隔、(c) サービス当たりのクライアント−サーバ間の送受信回数、(d) 送受信当たりのクライアント応答のサイズ、パケットサイズ、パケット数、(e) 送受信当たりのサーバ応答のサイズ、パケットサイズ、パケット数、および(f) サーバ応答からクライアント応答までの時間をパラメータとして、サービス毎に前記サービスモデルを構成し、
前記サービスログ部の記録から、それらのパラメータを求めることを特徴とする請求項１に記載のサービス振り分け装置。
【請求項５】
前記シミュレータは、サーバモデルとサービスモデルを用いてシミュレーションを行ない、指定サービスについてサービス時間の平均値あるいは中間値を結果とすることを特徴とする請求項１に記載のサービス振り分け装置。
【請求項６】
前記サーバ選択部において、サービス別に前記シミュレータで１セッションのみをシミュレートした結果を該サービスの基準値とし、複数セッションについてのシミュレーション結果値と該基準値の比率あるいは差が予め設定した閾値を超えれば高負荷と判断することを特徴とする請求項１に記載のサービス振り分け装置。
【請求項７】
前記サーバ選択部において、振り分け先サーバ問い合わせを受けたとき、サーバ毎に対象サービスについて高負荷となるサービス開始頻度を所定の探索手法により求め、それを該サーバの許容度とし、現時点の対象サービスのセッション開始頻度と許容度との差が最も大きなサーバを振り分け先サーバとして指定することを特徴とする請求項６に記載のサービス振り分け装置。
【請求項８】
前記サーバ選択部において、振り分け先サーバ問い合わせを受けたとき、サーバ毎に対象サービスについてシミュレーションを行ない、結果が基準値のβ（所定値）倍となる割合がγ（所定値）以下となるサーバを振り分けサーバとして指定することを特徴とする請求項６に記載のサービス振り分け装置。
【請求項９】
前記サーバ選択部において、振り分け先サーバ問い合わせを受けたとき、サーバ毎に対象サービスについてシミュレーションを行ない、結果が基準値のβ（所定値）倍となる割合が最も小さいサーバを振り分け先サーバとして指定することを特徴とする請求項６に記載のサービス振り分け装置。
【請求項１０】
前記サービスモデリング部は、セッションの各送受信それぞれの処理内容に応じて分類し、それぞれについてパラメータを求めることを特徴とする請求項４に記載のサービス振り分け装置。
【請求項１１】
前記サービス選択部は、サーバ毎に対象サービスについて高負荷となるサービス開始頻度を所定の探索手法により求め、それをサーバの許容度とし、(a) 各サーバの許容度をサービス振り分けの重み付けの値とするか、あるいは、(b) 許容度の相対比率をサーバ分配比率とすることを特徴とする請求項７に記載のサービス振り分け装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、クライアントからのネットワークを介したサービス要求を複数台のサーバに適切に振り分けるサービス振り分け装置に関する。
【０００２】
【従来技術】
近年、ネットワークサービスの複雑化、大規模化に伴う高いサーバ性能への要求に対し、複数台のサーバへサービスを分散させ、台数分の性能を実現する負荷分散技術が一般に用いられている。台数分の性能を実現するためには、各サーバへそれぞれの処理性能に応じた量のサービスを振り分けて負荷をバランスする技術が求められている。
【０００３】
従来、いかに示す技術が知られている。
【０００４】
・サーバのレスポンス時間をとらえ、最もレスポンス時間が短いサーバへサービスを振り分ける方式
・サーバが過負荷時（処理落ちが発生する状態）もしくは高負荷時（待ちが生じることでサービス時間が長くなる状態）のレスポンス時間と現在のレスポンス時間から最も過負荷もしくは高負荷になりにくいと予測したサーバへ振り分ける方式
【０００５】
【発明が解決しようとする課題】
しかしながら、従来方式では次のような問題があった。
【０００６】
・サーバ間に処理能力に差がある場合、最も高速なサーバに負荷が偏る、あるいはサービスの処理内容に差がある場合、サーバ負荷予測を誤り負荷バランスに失敗する。
【０００７】
・各サーバがいずれも少なくとも一度は過負荷もしくは高負荷状態にならなければ閾値がわからず振り分けができない。閾値をユーザが予め設定することは困難である。意図的に閾値を求めるには、サービスを停止してベンチマークテストなどを実行しなければならない。
【０００８】
【課題を解決するための手段】
本発明は、前記課題を解決するために、以下の構成を採用するものである。
【０００９】
すなわち、請求項１の発明によるサービス振り分け装置は、ネットワークを流れるパケットをキャプチャするパケットキャプチャと、キャプチャしたパケットに関するパケット情報をサーバ別にサーバログ部に記録するサーバ弁別部と、キャプチャしたパケットに関するパケット情報をサービス別にサービスログ部に記録するサービス弁別部と、サーバ別の記録からサーバについてのシミュレーション・モデルを設定するサーバモデリング部と、サービス別の記録からサービスについてのシミュレーション・モデルを設定するサービスモデリング部と、サーバモデルとサービスモデルを読み込み、シミュレーションを行うシミュレータと、シミュレータの結果から最適な振り分け先サーバを選択し、指定するサーバ選択部とから構成される。このような構成により、サーバやサービスの制限を受けず、サービストラフィックに影響を与えず、サーバを高負荷あるいは過負荷にすることなく自動的に各サーバの負荷をバランスさせる振り分け先サーバを決定することができる。
【００１０】
請求項２の発明は、クライアントとサーバ間のパケットを中継するパケット中継装置上にパケットキャプチャが設けられ、パケット中継装置からパケットを取得する構成を採る。この構成により、パケットを取りこぼすことがなく確実にキャプチャでき、サーバとサービスモデルの精度を上げることができる。
【００１１】
請求項３の発明は、請求項１のサーバモデリング部において、送信処理に対応する待ち行列を持つモデルとしてサーバモデルを構成し、サーバ送信スループット、サーバ処理時間および単位処理時間をパラメータとし、
サーバログの記録に基づき、
連続送信されたパケット列の任意の連続部分列についての、(a) 先頭パケットキャプチャ時刻t-s 、(b) 末尾パケットキャプチャ時刻t-e 、および(c) その部分列で先頭パケットを除いたサイズの合計Ｌから、
式Ｌ／（t-e −t-s ）を用いて、サーバ送信スループットを求め、
(d) サーバ応答パケットのキャプチャ時刻ts、サイズls、(e) 対応するクライアント応答パケットのキャプチャ時刻tc、サイズlc、および(f) ネットワーク速度Ｂから、
式（ts−tc）−（ls＋lc）／Ｂを用いて、サーバ処理時間を求める構成を採る。この構成により、サーバの仕様の詳細を知ることなく、サーバの正確なモデルを設定することができる。
【００１２】
請求項４の発明は、請求項１のサービスモデリング部において、(a) 全サービスのセッション数に占める各サービスのセッション数の割合、(b)サービスの開始頻度あるいは時間間隔、(c) サービス当たりのクライアント−サーバ間の送受信回数、(d) 送受信当たりのクライアント応答のサイズ、パケットサイズ、パケット数、(e) 送受信当たりのサーバ応答のサイズ、パケットサイズ、パケット数、および(f) サーバ応答からクライアント応答までの時間をパラメータとして、サービス毎にサービスモデルを構成し、サービスログの記録から、それらのパラメータを求める構成を採る。
この構成により、サービスの仕様の詳細や実装の相違を知ることなく、サービスの正確なモデルを設定できる。
【００１３】
請求項５の発明は、請求項１のシミュレータにおいて、サーバモデルとサービスモデルを用いてシミュレーションを行ない、指定サービスについてサービス時間の平均値あるいは中間値を結果とする構成を採る。
この構成により、クライアントから見たサービス品質を忠実に評価することができる。
【００１４】
請求項６の発明は、請求項１のサーバ選択部において、サービス別に前記シミュレータで１セッションのみをシミュレートした結果を該サービスの基準値とし、複数セッションについてのシミュレーション結果値と該基準値の比率あるいは差が予め設定した閾値を超えれば高負荷と判断する構成を採る。
この構成により、シミュレーション結果について自動的に負荷の高低を判断することができる。
【００１５】
請求項７の発明は、請求項６のサーバ選択部において、振り分け先サーバ問い合わせを受けたとき、サーバ毎に対象サービスについて高負荷となるサービス開始頻度を所定の探索手法により求め、それを該サーバの許容度とし、現時点の対象サービスのセッション開始頻度と許容度との差が最も大きなサーバを振り分け先サーバとして指定する構成を採る。
この構成により、最もリソースに余裕があるサーバを少ない手間で選択することができる。
【００１６】
請求項８の発明は、請求項６のサーバ選択部において、振り分け先サーバ問い合わせを受けたとき、サーバ毎に対象サービスについてシミュレーションを行ない、結果が基準値のβ（所定値）倍となる割合がγ（所定値）以下となるサーバを振り分けサーバとして指定する構成を採る。
この構成により、振り分けてもサービス品質を落とさない可能性が最も高いサーバを選択することができる。
【００１７】
請求項９の発明は、請求項６のサーバ選択部において、振り分け先サーバ問い合わせを受けたとき、サーバ毎に対象サービスについてシミュレーションを行ない、結果が基準値のβ（所定値）倍となる割合が最も小さいサーバを振り分け先サーバとして指定する構成を採る。
この構成により、振り分けてもサービス品質を落とさない可能性が高いサーバの中で最も資源に余裕があるサーバを選択することができる。
【００１８】
請求項１０の発明は、請求項４のサービスモデリング部において、セッションの各送受信それぞれの処理内容に応じて、(a) 接続要求と応答、(b) コマンド送信、データ送信と応答、終了などに分類し、それぞれについてパラメータを求める構成を採る。
この構成により、サービスモデルの精度を上げることができる。
【００１９】
請求項１１の発明は、請求項７のサーバ選択部において、サーバ毎に対象サービスについて高負荷となるサービス開始頻度を所定の探索手法により求め、それをサーバの許容度とし、(a) 各サーバの許容度をサービス振り分けの重み付けの値とするか、あるいは、(b) 許容度の相対比率をサーバ分配比率とする構成を採る。
この構成により、重み付けラウンドロビンまたはサービス分配比率に従い負荷を分散する装置における重み付けの値またはサービス分配比率を、実際の振り分けによる試行なしで求めることができ、試行ミスによるシステムのダメージやサービス品質低下を回避することができる。
【００２０】
【発明の実施の形態】
（実施例１）
図１は、本発明によるサーバ振り分け装置１のネットワークシステム内の位置を示す図である。サーバ振り分け装置１は、ネットワーク２へサービスを行うサーバ＃１〜＃Ｎs と同一セグメントに存在する。サーバ振り分け装置１は、負荷分散装置３から、パケットをどのサーバに振り分けるべきかという、振り分け先サーバの問い合わせを受けると、サーバ＃１〜＃Ｎs の中から負荷をバランスさせるために適切なサーバを選択し、負荷分散装置３へ指定する。負荷分散装置３は、各種のネットワークとサーバ間のパケットを中継するものである。
【００２１】
図１に示す本発明のサーバ振り分け装置１の構成を図２に示す。サーバ振り分け装置は、ネットワーク１０に接続しており、ネットワーク１０を流れるパケットをパケットキャプチャ１１でモニタする。パケットキャプチャ１１はモニタしたパケットをサーバ弁別部１２とサービス弁別部１３へ送る。
【００２２】
サービス弁別部１３は、パケットがどういうサービスのパケットであるかを調べる。例えば、ＩＰパケットのヘッダから、サーバアドレスが送信アドレスにあれば送信番号を、宛て先アドレスにあれば受信ポート番号を読み取り、ポート番号をサービスの識別子としてよい。
【００２３】
サービス弁別部１３は、サービスログ部１４内にサービス毎に用意したログへ該パケット情報を記録する。パケット情報は例えば、時刻、パケットサイズ、クライアントアドレス、クライアントポート番号、シーケンス番号、ＳＹＮやＡＣＫなどのフラグ、データの一部であってよい。
【００２４】
サーバ弁別部１２は、例えばＩＰパケットのヘッダから送信アドレスもしくは宛て先アドレスを読み取り、該パケットがサーバ＃１〜＃Ｎｓのいずれから発信されたものか、あるいはいずれへ発信されたものかを調べる。サーバ弁別部１２はサーバを特定したら該パケットについての情報、例えばモニタした時刻、パケットサイズなどを、サーバログ部１５内に用意したログへ記録する。
【００２５】
パケットキャプチャ１１、サービス弁別部１３、サーバ弁別部１２は常時動作してもよく、外部からの指示で動作／停止を行ってもよい。
［サービスモデルのパラメータ設定］サービスモデリング部１６は、サービスログ部１４の記録からサービスについてのシミュレーション・モデルのパラメータをサービス毎に設定する。
パラメータは、例えば、
・サーバ毎に、ある１つのサービスの全サービス数に占める割合、（例えば、Ａ，Ｂ，Ｃ，Ｄの４つのサービスが存在する場合、Ａの割合、Ｂの割合、Ｃの割合、Ｄの割合を求める）
・リクエスト（サービス）の頻度あるいは時間間隔、
・サービス当たりのクライアントとサーバ間での送受信回数、
・１回の送受信中のクライアントからの送信データサイズ、パケットサイズ、パ  ケット数、
・１回の送受信中のサーバからの送信データサイズ、パケットサイズ、パケット  数、
・サーバからのパケットに対するクライアントの応答までの時間、などである。
【００２６】
リクエスト頻度Ｆは例えば、時刻ＴｘからＴｙ（＞Ｔｘ）の間にモニタしたサービス開始パケット数Ｐｎから
Ｆ＝Ｐｎ／（Ｔｙ−Ｔｘ）
で求める。
【００２７】
クライアントとサーバ間の送受信回数Ｎｃは例えば、サービス開始から終了までのパケット数から求める。
【００２８】
サーバからのパケットに対するクライアントの応答までの時間およびクライアントからのパケットに対するサーバの応答までの時間は、図４（ａ）に示す方法で求める。
【００２９】
図４（ａ）はクライアントとサーバ間のサービス１つについての１セッション（開始から終了まで）のパケット送受信の例である。図中、モニタはパケットキャプチャ１１（図２）によるパケットのモニタを意味し、パケット送受信を示す横向き（正確には、斜め下向き）の矢印と時間経過を示す下向きの矢印との交点は、パケットをキャプチャした時刻を意味する。
図４において、ｔ＿ｉはパケットタイムスタンプ、ｔｄ＿ｉは転送時間、ｔｔ＿ｉは送信時間、ｔｐ＿ｉはサーバ処理時間、ｔｃｒ＿ｉはクライアント応答時間である。
図４（ａ）の例では、サービスログ部１４に、６つのパケット（開始、応答１〜３、終了）についての、モニタした時刻ｔ１〜ｔ５と各パケットのサイズなどが記録される。
【００３０】
クライアントの応答時間ｔｃｒ＿１は、次式で求める。
【００３１】
0003769999.tif 000002
ここで、ｔ＿ｉ、ｔ＿ｊは対応するパケットのモニタ時刻、ｌ＿ｉ、ｌ＿ｊはパケットサイズ、Ｂはネットワーク速度であり、これらは実測により求められるものである。ｔｄ＿ｉ、ｔｄ＿ｊ、ｔｃｒ＿１は計算により求められるものである。
【００３２】
上記パラメータそれぞれについて、値をログから複数求めてそれらの平均値としてよく、中間値としてもよく、確率分布を求めて確率変数としてもよい。
【００３３】
サービスモデリング部１６は、設定したモデルをサービスモデル部１７へ出力する。
［サーバモデルのパラメータ設定］
次に、サーバモデリング部１８は、サーバログ部１５の記録からサーバ毎にサーバモデルのパラメータを設定する。パラメータは例えば、
・サーバ送信スループットα、
・サーバ処理時間ｔｐ＿ｉ、
・単位処理時間
などである。
【００３４】
サーバ処理時間ｔｐ＿ｉと送信時間ｔｔ＿ｉを求める例を図４（ａ）に示す。
【００３５】
サーバ送信スループットαはネットワーク速度Ｂと同一としてもよく、設定した値でもよい。図４（ｂ）に示すように連続してサーバがパケットを送信するケースでは次式でαを求めてもよい。
【００３６】
α＝Ｌ／（ｔ７−ｔ６）
Ｌ＝Σｌ＿ｊｉ−ｌ＿ｊ１
ここで、ｔ６は連続パケットの先頭パケットモニタ時刻、ｔ７は末尾パケットモニタ時刻、Ｌは連続パケットの全サイズから先頭パケットサイズを引いた値である。連続したパケットの連続した一部を用いてもよい。
【００３７】
サーバ処理時間ｔｐ＿ｉは次式で求める。
【００３８】
ｔｐ＿ｉ＝（ｔ＿ｊ−ｔ＿ｉ）−ｔｄ＿ｉ−ｔｔ＿ｊ
ｔｄ＿ｉ＝ｌ＿ｉ／Ｂ
ｔｔ＿ｊ＝ｌ＿ｊ／Ｂ
ここで、ｔ＿ｉはクライアントからのパケットｉのモニタ時刻、ｔ＿ｊはそのパケットｉに対応するサーバからのパケットｊのモニタ時刻である。
ｔｄ＿ｉはモニタからサーバまでのパケットｉの転送時間であり、クライアントからのパケットｉのサイズｌ＿ｉをネットワーク速度Ｂで割って得られるものである。
ｔｔ＿ｊはサーバからモニタまでのパケットｊの送信時間であり、サーバからのパケットｊのサイズｌ＿ｊをネットワーク速度Ｂで割って得られるものである。
【００３９】
パラメータは平均値でよく、確率分布でもよく、設定値でもよい。
【００４０】
サーバモデリング部１８は、設定したモデルをサーバモデル部１９へ出力する。
【００４１】
サービス、サーバ両パラメータについて、サービスログの記録全てから求めてもよく、前回のモデリングで用いた記録以降から求めてもよい。また、時間間隔を一定となるようにしてもよい。Ｗｅｂサービスなどのように、サービス中の送受信それぞれを処理内容に応じ、
・接続要求と接続確立応答、
・コマンド送信、データ送信と応答、終了
などに特徴付けることができるサービスについては、処理内容別に上記パラメータを求めてもよい。送受信の単位を例えば、ＴＣＰならばデータ送信とＡＣＫとし、シーケンス番号でそれらの対を識別してもよい。例えば、図４（ｂ）で応答ｊ１、ｊ２と応答ｋを送受信１回分としてよい。
サービスモデリング部１６、サーバモデリング部１８は常時動作してもよく、外部からの指示で動作／停止してもよく、定期的に動作してもよい。
【００４２】
シミュレータ２０は、サービスモデル部１７とサーバモデル部１９からモデルを取り出し、処理１（図５に示す）、処理２（図６に示す）、処理３（図７）、セッションレべル処理（図８に示す）、サービスレベル処理ａ（図１２に示す）、シミュレーションａ（図１５に示す）を実行してシミュレートする。各処理の詳細は後述する。
【００４３】
シミュレータはサーバ選択部２１からの指示で動作してもよく、サービスモデル部１７あるいはサーバモデル部１９の更新時に動作してもよい。
【００４４】
サーバ選択部２１は、サーバ許容度予測処理（図１４に示す）、限界値決定処理（図９に示す）を実行して、サーバ問い合わせに対し、適切なサーバを指定する。
【００４５】
次に、図３にサービス、サーバそれぞれのシミュレーションモデルを示す。
［サーバモデルの処理フロー］
サーバモデル３０は、２つの待ち行列（キュー１、キュー２）および処理１、処理２から構成される。サービスモデル３１は処理３で構成される。
【００４６】
最初に、サーバモデル３０の動作から説明する。処理２の待ち行列（キュー２）はサーバのネットワーク出力処理に相当し、処理１はＣＰＵ処理やファイル処理など他の処理に相当する。シミュレーションではクライアントの応答はキュー１に入り、処理１を実行後、キュー２に入り、処理２の実行後、サーバの応答としてサーバモデル３０から出て行く。キュー１、２はＦＩＦＯでよく、優先度付きＦＩＦＯでもよい。
【００４７】
処理１のフローチャートを図５に示す。
Ｓ５０１でキュー１から応答ｉを取り出す。
応答ｉのサーバ処理時間ｔｐ＿ｉは最初は未設定である。
Ｓ５０２でｔｐ＿ｉが未設定であれば、Ｓ５０３〜Ｓ５０６で応答ｉのタイプに応じたサーバ処理時間をｔｐ＿ｉに設定する。ｔｐ＿ｉはタイプ別でなくてもよい。サーバ処理総時間はサーバパラメータのサーバ処理時間とする。
Ｓ５０７ではサーバでの１回分の処理時間ｔｐｒｃを求める。ｔｐｒｃは単位処理時間とｔｐ＿ｉの小さい方とする。単位処理時間は設定値でよい。
Ｓ５０８では応答ｉに対するサーバ処理を、シミュレーション内部での仮想時間をｔｐｒｃだけ進め、ｔｐ＿ｉをｔｐｒｃだけ減じることで、模倣する。
Ｓ５０９でｔｐ＿ｉが正であれば、Ｓ５１０で応答ｉをキュー１へ入れる。
Ｓ５０９でｔｐ＿ｉが０または負であれば、Ｓ５１１で応答ｉをキュー２へ入れる。
つまり、応答ｉはｔｐ＿ｉが０以下になるまで再びキュー１へフィードバックされ、処理１が繰り返される。
【００４８】
処理２のフローチャートを図６に示す。処理２は、応答ｉに対するサーバ応答ｊについての模倣である。
Ｓ６０１でキュー２から応答ｉを取り出す。
Ｓ６０２で、(1) 応答ｊのサイズをＬｊとし、(2) パケットサイズ（ネットワークに流せるパケットの最大サイズ）とＬｊの小さい方をＰｊｉ（クライアントとサーバ間を流れるパケットのサイズ）とし、(3) Ｐｊｉをサーバ送信スループットαで割ったものをサーバの送信時間ｔｔｉとし、(4) ＬｊからＰｊｉを差し引く。
Ｓ６０７で仮想時間をｔｔｉだけ進める。
Ｓ６０３でサービスモデルの処理３を呼び出す。処理３については後述する。
Ｓ６０４でＬｊが正か否かを判定する。
Ｌｊが正であれば、Ｓ６０５で、(1) パケットサイズ（ネットワークに流せるパケットの最大サイズ）とＬｊの小さい方をＰｊｉ（クライアントとサーバ間を流れるパケットのサイズ）とし、(2) Ｐｊｉをサーバ送信スループットαで割ったものをサーバの送信時間ｔｔｉとし、(3) ＬｊからＰｊｉを差し引く。
Ｓ６０６で仮想時間をｔｔｉだけ進める。
【００４９】
Ｓ６０２、Ｓ６０５において、パケットサイズはネットワークに流せるパケットの最大サイズＭＴＵ（ｍａｘｉｍｕｍ  ｔｒａｎｓｆｅｒ  ｕｎｉｔ）である。ＭＴＵは例えば、ＳＮＭＰ（ｓｉｍｐｌｅ  ｎｅｔｗｏｒｋ  ｍａｎａｇｅｍｅｎｔ  ｐｒｏｔｏｃｏｌ）を使い同じセグメントにあるルータから取得してもよく、一般に用いられている手法であるパスＭＴＵディスカバリで求めてもよく、設定値であってもよい。
Ｓ６０４、Ｓ６０６は応答ｊが複数のパケット送信からなる場合の処理である。
Ｓ６０６、Ｓ６０７でパケット送信処理を、仮想時間を進ませることで模倣する。応答ｊの先頭パケットについては、サービスモデル３１の処理３を呼び出す。
［サービスモデルの処理フロー］
次に、サービスモデル３１の動作を説明する。サービスモデル３１における処理３のフローチャートを図７に示す。処理３はサーバからのパケットに対するクライアントの応答を模倣する。処理３は各セッション開始時とサーバ応答後に実行される。
Ｓ７０１は対応するサービスの終了判定である。終了判定は例えば、設定した送受信回数に達したか否かでもよく、送受信データ総サイズが設定値に達したか否かでもよい。
Ｓ７０２はサービス開始であるかどうかの判定であり、開始以外ではクライアント応答であるため、Ｓ７０３でクライアント応答時間（ｔｃｒｋ）だけ仮想時間を進ませる。
Ｓ７０４はクライアント応答ｋを設定する。設定は例えば、パケットサイズや応答のタイプの設定である。
Ｓ７０５ではキュー１へ応答ｋを入れる。
［セッションレベルのフロー］
図８にセッション（開始から終了まで）レベルのフローを示す。
Ｓ８０１でサービスモデルのパラメータからセッションの例（サービスＳｉ）を設定する。
Ｓ８０２でシミュレーション１が呼び出されたときの仮想時刻をセッション開始時刻Ｔｓとして記録する。
Ｓ８０３でサービスモデルの処理３を呼び出す。
Ｓ８０４でサービスＳｉの終了を待つ。
サービスＳｉが終了したとき、Ｓ８０５で終了時刻（現仮想時刻）とセッション開始時刻Ｔｓの差よりサービス時間Ｒｉを求める。Ｒｉはシミュレーション結果を算出するためのサンプル値として記録する。
［サービスレベルのフロー］
図１２にサービスレベルのフローを示す。
Ｓ１２０１はシミュレーションの終了判定であり、例えば設定したシミュレーション総時間が経過したか否かでもよく、シミュレーション中、待ち行列のいずれかで定常状態の破綻が検出されたか否かでもよく、シミュレーション結果の数が設定値に達したか否かでもよい。
Ｓ１２０２はセッションレベル処理である。
Ｓ１２０３では仮想時間をＴｉだけ進ませる。
シミュレーション２はサービス時間間隔Ｔｉ毎にセッションレベル処理を実行することで、１セッションを模倣する。
［シミュレーションのフロー］
図１５にシミュレーションａのフローを示す。
Ｓ１５０１でサービス毎にモデルをロードする。
Ｓ１５０２の終了判定は、図１２に示す終了判定Ｓ１２０１と同じである。
Ｓ１５０３で全サービスについてサービスレベル処理ａを実行する。
Ｓ１５０４で指定サービスについての結果を記録する。
［基準値を決定するフロー］
図９はサーバ選択で用いる基準値を求めるフローである。
Ｓ９０１でサービスｉについてセッションレベル処理を行なう。
Ｓ９０２でサービスｉ結果Ｒｉを基準値ｉとする。
サーバ選択ではシミュレーション結果が低負荷／高負荷／過負荷のいずれであるかを判定するが、そのときの結果の比較対象が基準値である。高負荷状態とはサービス処理に待ちが生じサービス時間が長くなる状態、過負荷状態とは処理できないサービスが現れる状態を意味する。基準値はサービスそれぞれを別々に１セッションだけシミュレーション評価した結果とする。
【００５０】
シミュレーション結果が低負荷／高負荷／過負荷のいずれであるかの判定は例えば、結果と基準値の比率が閾値を超えたか否かでもよく、結果と基準値の差が閾値を超えたか否かでもよい。
［サーバ許容度予測のフロー］
図１４はサーバ選択で用いるサーバ許容度予測のフローである。
Ｓ１４０１でＨ＝１，Ｌ＝０に設定する。
Ｓ１４０２で指定サービスの頻度をＨ倍してシミュレーションａを実行する。
Ｓ１４０３で低負荷状態か、高／過負荷状態かを判定する。
低負荷状態のときは、Ｓ１４０４でＨの値をＬに設定し、Ｈの値を２倍する。その後、Ｓ１４０２の処理に戻る。
一方、高／過負荷状態のときは、Ｓ１４１２でＨの値が１か否かを判定する。
Ｈの値が１のときは、Ｓ１４０５でサーバｉの許容度を０として、終了する。
Ｈの値が１以外のときはは、Ｓ１４０６で（Ｌ＋Ｈ）／２の値をＭに設定する。
Ｓ１４０７で指定サービスの頻度をＭ倍してシミュレーションａを実行する。
Ｓ１４０８でＳ１４０７の処理結果を判定する。
Ｓ１４０７の処理結果が低負荷を示しているとき、Ｓ１４１１でＭの値をＬに設定し、Ｓ１４０６に戻る。
Ｓ１４０７の処理結果が過負荷を示しているとき、Ｓ１４１０でＭの値をＨに設定し、Ｓ１４０６に戻る。
Ｓ１４０７の処理結果が高負荷を示しているとき、指定サービスの頻度のＭ倍の値をサーバｉの許容度として処理を終了する。
【００５１】
サーバ許容度とは例えば、サーバが高負荷あるいは過負荷状態にならない最大のサービス頻度あるいは最小のサービス間隔である。まず最初に現時点のサービスモデルでのサービス頻度でシミュレーションを行ない、結果が高／過負荷になるまで頻度を２倍にしていく（Ｓ１４０１，Ｓ１４０２，Ｓ１４０３，Ｓ１４０４）。
【００５２】
現時点の頻度で既に高／過負荷の場合をＳ１４１２で判断し、そうであれば許容度を０とする。そうでなければ、２分探索法に基づきシミュレーション結果が高負荷となるサービス頻度を求める。
［許容度探索の例］
図１６はサーバ許容度予測のフローにしたがって許容度探索を行う過程を示す図である。図１６において横軸はサービス頻度（言い換えれば、サーバの負荷）、縦軸は所要のサービス時間である。
最初の頻度１での結果は低負荷であるので倍増していく。頻度２から頻度３としたところで、結果は過負荷となる。ここで探索処理は図１４のＳ１４０３からＳ１４１２へ移り、２分探索となる。直前の頻度２と過負荷となった頻度３の中間の頻度４についてシミュレーションを行う。頻度４は低負荷であるため、さらに頻度４と頻度３の中間の頻度５でシミュレーションを行った結果、高負荷となるる頻度５が求まり、頻度５をサーバの許容度とする。
【００５３】
サーバ選択部２１は、あるサービスについての振り分け先サーバの問い合わせを受けると、サーバそれぞれについて図１４に示すフローを実行して該サービスについての許容度を求める。そして許容度と現時点での頻度との差が最も大きなサーバを振り向け先として指定する。
（実施例２）
サーバ選択について、あるサービスについての振り分け先サーバ問い合わせを受けると、サーバそれぞれについて、サーバ過負荷予測を行う。サーバ過負荷予測とはサーバへ新規サービスを振り分けた場合、過負荷状態になるかどうかをシミュレートすることである。
［サーバ過負荷予測のフロー］
サーバ過負荷予測のフローを図１０に示す。
Ｓ１００１でサーバｉのモデルをロードする。
Ｓ１００２でサーバｉについて、後述するシミレーションｂ（図１１）を実行する。
Ｓ１００３でシミュレーション結果Ｒｉ（サービス時間）の中で基準値ｉのβ（所定値）倍を超えた結果Ｒｉの割合を求める。
それがγ（所定値）以下であれば過負荷にならないと予測する。（Ｓ１００４）γより大きければ過負荷になると予測する。（Ｓ１００５）βとγは設定値を用いてよい。
【００５４】
過負荷予測でのシミュレーションｂを図１１ににより説明する。
前述した図１５に示すシミュレーションａのフローとは、指定サービスについての処理が加わる点が異なる。
Ｓ１１０１でサービス毎にモデルをロードする。
Ｓ１１０２で終了か否かを判定する。
終了していない場合、Ｓ１１０３でシミュレーション毎に指定サービスについてシミュレーシン内での開始時刻を設定する。設定は乱数を用いて決めてもよく、関数を用いてもよく、設定値としてもよい。
Ｓ１１０４では前述した図１２に示すサービスレベル処理ａに加え、後述する図１３に示すサービスレベル処理ｂも実行する。
Ｓ１１０５でサービス処理ｂの結果を記録する。
【００５５】
図１３に示すサービスレベル処理ｂについて説明する。
Ｓ１３０１で指定時刻まで待機する。
Ｓ１３０２で指定サービスについてセッションレベル処理を行なう。
Ｓ１３０３でシミュレーション結果Ｒｉ（サービス時間）を出力する。
【００５６】
図１３のサービスレベル処理ｂでは指定時刻まで待機し（Ｓ１３０１）、１セッションだけ実行する（Ｓ１３０２）点が、図１２のサービスレベル処理ａと異なる。
【００５７】
サーバ選択部２１ではサーバ過負荷予測で過負荷状態にならないサーバを選択する。
【００５８】
図１０に示すサーバ過負荷予測フローにおいて、Ｓ１００４，Ｓ１００５を省き、過負荷となった結果の割合が最も小さなサーバを選択してもよい。
（実施例３）
図１７に示すようにサーバ振り分け装置を負荷分散装置３上に設け、パケット中継装置４０からパケットを取り出す構成とすることもできる。
（実施例４）
各サーバの許容度をサービス振り分けの重み付けの値としたり、あるいは許容度の相対比率をサービス分配比率として、これらの値を負荷分散装置へ送出する。負荷分散装置では、サービス分配比率、あるいは重み付けラウンドロビンなどを使用して、サービスを各サーバへ振り分ける。
【００５９】
前述した図１４に示すサーバ許容度予測フローで各サーバの許容度Ｃｉを求め、Ｃｉを重み付けの値とする。あるいは、許容度Ｃｉを
Ｒｉ＝Ｃｉ／ΣＣｉ
で比率Ｒｉへ変換して、比率Ｒｉをサービス分配比率とする。
【００６０】
分配比率または重み付けの値は一度だけ求めてもよいし、定期的に図１４のフローを実行して再設定してもよいし、ユーザの指示などで再設定してもよい。
（各種処理の体系）
本発明における各種の処理の体系を図１８に示す。
最も下位のレベルの処理として図５、図６、図７に示すサーバモデル処理／サービスモデル処理がある。その次の段階の処理として図８に示すセッションレベル処理がある。その次の段階として図１２、図１３に示すサービスレベル処理がある。その次の段階として図１１、図１５に示すシミュレーョン処理がある。
そして最上位レベルの処理として図１０、図１４に示すサーバ過負荷予測処理／サーバ許容度予測処理がある。サーバ選択部２１におけるサーバ選択処理は、この最後のサーバ過負荷予測処理／サーバ許容度予測処理の結果に基づいて実行されることになる。
【００６１】
【発明の効果】
本発明によれば、サーバを高負荷状態や過負荷状態にすることなく、サーバ負荷をバランスさせるサーバ振り分け装置を実現することができる。
【図面の簡単な説明】
【図１】本発明によるサーバ振り分け装置のネットワークシステム内の位置を示す図である。
【図２】本発明のサーバ振り分け装置の構成を示す図である。
【図３】シミュレーション・モデルを示す図である。
【図４】各種のパラメータの例を示す図である。
【図５】サーバモデルの処理１のフロー図である。
【図６】サーバモデルの処理２のフロー図である。
【図７】サービスモデルの処理３のフロー図である。
【図８】セッションレべルのシミュレーション・フロー図である。
【図９】１サービスについての基準値決定フロー図である。
【図１０】１サーバについてのサーバ過負荷予測フロー図である。
【図１１】シミュレーション・フロー図である。
【図１２】サービスレベルのシミュレーション・フロー図である。
【図１３】サービスレベルのシミュレーション・フロー図である。
【図１４】１サーバについてのサーバ許容度予測フロー図である。
【図１５】シミュレーション・フロー図である。
【図１６】許容度探索の例を示す図である。
【図１７】本発明のサーバ振り分け装置の他の構成を示す図である。
【図１８】本発明における各種の処理の体系を示す図である。
【符号の説明】
１１      バケットキャプチャ
１２      サーバ弁別部
１３      サービス弁別部
１４      サービスログ部
１５      サーバログ部
１６      サービスモデリング部
１７      サービスモデル部
１８      サーバモデリング部
１９      サーバモデル部
２０      シミュレータ
２１      サーバ選択部
【図１】
0003769999.tif 000003
【図２】
0003769999.tif 000004
【図３】
0003769999.tif 000005
【図４】
0003769999.tif 000006
【図５】
0003769999.tif 000007
【図６】
0003769999.tif 000008
【図７】
0003769999.tif 000009
【図８】
0003769999.tif 000010
【図９】
0003769999.tif 000011
【図１０】
0003769999.tif 000012
【図１１】
0003769999.tif 000013
【図１２】
0003769999.tif 000014
【図１３】
0003769999.tif 000015
【図１４】
0003769999.tif 000016
【図１５】
0003769999.tif 000017
【図１６】
0003769999.tif 000018
【図１７】
0003769999.tif 000019
【図１８】
0003769999.tif 000020