以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理システムを示す図である。第1の実施の形態の情報処理システムは、情報処理装置10およびクライアント装置21〜23を含む。クライアント装置21〜23は、ネットワークを介して情報処理装置10にアクセスする。
例えば、情報処理装置10はサーバコンピュータであり、クライアント装置21〜23はユーザが操作する端末装置としてのクライアントコンピュータである。情報処理装置10は、クライアント装置21〜23と他の情報処理装置との間でアクセスを中継する中継装置であってもよい。例えば、情報処理装置10は、リバースプロキシサーバ、ロードバランサ、ファイアウォール、または、ルータなどの通信装置であってもよい。
情報処理装置10は、受信部11および制御部12を有する。受信部11は、例えば、NIC(Network Interface Card)などの通信インタフェースである。制御部12は、CPU(Central Processing Unit)やDSP(Digital Signal Processor)などのプロセッサを含んでもよく、プロセッサに実行させるプログラムを記憶するメモリを含んでもよい。複数のプロセッサの集合(マルチプロセッサ)を「プロセッサ」と呼んでもよい。また、制御部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field-Programmable Gate Array)などの特定用途の集積回路を含んでもよい。
受信部11は、複数のアクセスを並行して受信することができる。各アクセスは、複数のユーザ識別子の何れかを含む。同じユーザ識別子を用いて並行して複数のアクセスを行うことを多重アクセスと呼ぶことができ、多重アクセスにおけるアクセス数を多重度と呼ぶことができる。多重アクセスは、例えば、同じユーザが既に行ったアクセスの応答を待たずに他のアクセスを行うことで発生し得る。また、多重アクセスは、例えば、同じユーザが情報処理装置10との間に複数のコネクションや複数のセッション(例えば、HTTPセッション)を維持することで発生し得る。一定時間内に(同時期に)同じユーザ識別子を用いて複数のアクセスを行うことを、多重アクセスと呼んでもよい。
ここで、「ユーザ」はアクセス元を示す一定の単位であればよく、個人でもよいし会社や会社内の部署などの組織でもよい。ユーザに対しては、アクセス元を識別できるようなユーザ識別子が割り当てられている。ユーザ識別子は、IP(Internet Protocol)アドレスなどの通信アドレスや通信アドレスの範囲でもよいし、情報処理装置10の管理者が各ユーザに割り当てる記号であってもよい。同じユーザ識別子を用いて複数のクライアント装置から情報処理装置10にアクセスすることも可能である。例えば、クライアント装置21,22がユーザ識別子Aを用いて情報処理装置10にアクセスし、クライアント装置23がユーザ識別子Bを用いて情報処理装置10にアクセスする。
制御部12は、情報処理装置10で並行して処理するアクセスの数が多くなり過ぎないよう、受信部11で受信されたアクセスを処理するか処理せずに拒否するか制御する。
まず、制御部12は、複数のユーザ識別子それぞれについて、情報処理装置10における当該ユーザ識別子を含むアクセスの受信状況を監視する。ユーザ識別子毎の受信状況として、例えば、当該ユーザ識別子を含むアクセスの多重度が閾値を超えているか否かを監視する。閾値は、例えば、情報処理装置10の管理者によって予め設定された値であり、ユーザ識別子に応じて異なってもよい。この場合、ユーザ識別子毎の受信状況を示す情報は、多重度が閾値を超えた回数を示す情報であってもよい。
次に、制御部12は、情報処理装置10が並行して処理可能なアクセスの総数と各ユーザ識別子の受信状況とから、ユーザ識別子毎に、並行して処理するアクセスの上限数を決定する。例えば、各ユーザ識別子に対して、並行して処理することを許容するアクセスの許容数が設定されているとする。ユーザ識別子毎の許容数は、情報処理装置10の管理者とユーザとの間の契約に応じて定義してもよく、受信状況の監視で用いた上記の閾値と同じでもよい。制御部12は、例えば、並行して処理可能なアクセスの総数から各ユーザ識別子の許容数を除いて余った数(アクセス余裕数)を、アクセスの受信状況に応じて複数のユーザ識別子に分配する。この場合、各ユーザ識別子の上限数は、当該ユーザ識別子の許容数に、分配された数を加えたものとする。なお、情報処理装置10が並行して処理可能なアクセスの総数は、例えば、情報処理装置10の管理者によって予め設定される。
好ましくは、制御部12は、受信状況の監視の結果として多重度が相対的に大きい傾向にあると判断されたユーザ識別子に対して、上限数を大きく設定する。例えば、制御部12は、受信状況を示す情報として多重度が閾値を超えた回数を示す情報をユーザ識別子毎に取得し、上記のアクセス余裕数を多重度が閾値を超えた回数の比に従って分配する。
ユーザ識別子毎の上限数が決定されると、制御部12は、一のユーザ識別子を含むアクセスが受信されたときに、当該一のユーザ識別子に対応する上限数に基づいてアクセスを拒否するか否か制御する。新たなアクセスが受信されることで現在のアクセスの多重度が上限数を超えることになった場合、当該新たなアクセスは拒否される。アクセスを拒否する場合、制御部12は、例えば、アクセスを拒否した旨を示すエラー情報を返信する。
例えば、並列に処理可能なアクセスの総数が6であり、ユーザ識別子Aの上限数が4、ユーザ識別子Bの上限数が2と決定されたとする。すると、クライアント装置21,22から情報処理装置10へのユーザ識別子Aを用いたアクセスについては、多重度4の多重アクセスが許可される。しかし、4つのアクセスを維持した状態で更にユーザ識別子Aを用いたアクセスを行うと、この5番目のアクセスは拒否される。同様に、クライアント装置23から情報処理装置10へのユーザ識別子Bを用いたアクセスについては、多重度2の多重アクセスが許可される。しかし、2つのアクセスを維持した状態で更にユーザ識別子Bを用いたアクセスを行うと、この3番目のアクセスは拒否される。
第1の実施の形態の情報処理システムによれば、ユーザ識別子毎にアクセスの多重度が制限されるため、情報処理装置10全体で多重度の総数を制限するのみである場合と比べてユーザ間の公平性を維持できる。また、アクセスの受信状況に応じてユーザ識別子毎の上限数が決定されるため、複数のユーザからの実際のアクセス状況を反映させることができ、適切な上限数を設定できる。また、アクセス状況の変化にも柔軟に対応可能であり、上限数を手動で設定する場合と比べて適切なアクセス制限を容易に達成できる。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムを示す図である。第2の実施の形態の情報処理システムは、クライアント31〜34、リバースプロキシサーバ100およびWebサーバ100a,100b,100cを含む。クライアント31〜34は、ネットワーク41に接続されている。ネットワーク41は、例えば、インターネットなどの広域ネットワークである。リバースプロキシサーバ100およびWebサーバ100a,100b,100cは、ネットワーク42に接続されている。ネットワーク42は、例えば、データセンタなどの建物内のLAN(Local Area Network)である。
クライアント31〜34は、人間が操作する端末装置としてのコンピュータである。クライアント31〜34は、ネットワーク41,42を介してリバースプロキシサーバ100にアクセスする。第2の実施の形態では、アプリケーション層の通信プロトコルとして主にHTTPを想定する。すなわち、クライアント31〜34は、Webサーバ100a,100b,100cによって提供されるサービスを利用するとき、リバースプロキシサーバ100に対してHTTPリクエストを送信する。
ここで、クライアント31,32は組織Aで使用され、クライアント33は組織Bで使用され、クライアント34は組織Cで使用されている。組織A,B,Cは、それぞれ1つの会社でもよいし会社内の1つの部署でもよい。組織A,B,CがWebサーバ100a,100b,100cによって提供されるサービスを利用するにあたり、契約などを通じてサービス提供者から組織A,B,CにユーザIDが付与される。ユーザIDとして、組織Aには「ユーザA」が付与され、組織Bには「ユーザB」が付与され、組織Cには「ユーザC」が付与されている。各組織で使用されるクライアントは、その組織に付与されたユーザIDを用いてリバースプロキシサーバ100にアクセスする。
なお、上記の説明は一例であり、ユーザIDを付与する単位を個人やクライアント(端末装置)としてもよい。また、IPアドレスなどの通信アドレスによってアクセス元のユーザを識別できる場合には、サービス提供者から組織A,B,CにユーザIDを付与しなくてもよい。また、上記の説明ではクライアント31〜34を端末装置としたが、サーバ装置がリバースプロキシサーバ100にアクセスするようにしてもよい。
リバースプロキシサーバ100は、クライアント31〜34とWebサーバ100a,100b,100cとの間でアクセスを中継するサーバコンピュータである。リバースプロキシサーバ100は、クライアント31〜34からHTTPリクエストを受信する。HTTPリクエストには、サービスを示すURL(Uniform Resource Locator)が含まれている。すると、リバースプロキシサーバ100は、Webサーバ100a,100b,100cの中から、受信したHTTPリクエストに含まれるURLに応じたWebサーバを選択し、選択したWebサーバにHTTPリクエストを転送する。
また、リバースプロキシサーバ100は、リバースプロキシサーバ100やWebサーバ100a,100b,100cの負荷が大きくなり過ぎないように、クライアント31〜34からのアクセスの多重度を制御する。同じユーザIDを用いた多数のアクセスを並行して受信した場合、リバースプロキシサーバ100は、一部のアクセスを転送せずに拒否する。多重アクセスは、1台のクライアント(例えば、ユーザBのクライアント33)によって行われることもあるし、同じユーザIDを共有する複数台のクライアント(例えば、ユーザAのクライアント31,32)によって行われることもある。
Webサーバ100a,100b,100cは、HTTPのアクセスを処理するサーバコンピュータである。Webサーバ100a,100b,100cは、リバースプロキシサーバ100からネットワーク42を介してHTTPリクエストを受信すると、URLに応じたデータ処理を行い、処理結果を示すHTTPレスポンスをリバースプロキシサーバ100に返信する。HTTPレスポンスは、リバースプロキシサーバ100がネットワーク41,42を介してクライアント31〜34に転送する。
図3は、アクセスの振り分け例を示す図である。第2の実施の形態では、多重アクセスの一例として、同じ組織が使用する1またはそれ以上のクライアントとリバースプロキシサーバ100との間に、複数のHTTPセッションが設定される状態を考える。また、第2の実施の形態では、組織A,B,Cにサービスを提供するために、各組織に付与されたユーザIDを含むURLをサービス提供者が用意する。各組織で使用されるクライアントは、ユーザIDを含むURLを指定したHTTPリクエストを送信する。
例えば、組織Aのクライアント31,32は、「ユーザA」を含むURLを指定したHTTPリクエストを送信する。リバースプロキシサーバ100は、「ユーザA」を含むURLを指定したHTTPリクエストを、Webサーバ100aに転送するようにする。クライアント31,32とリバースプロキシサーバ100の間には、タイムアウトなどにより切断されていない有効なHTTPセッションを複数維持できる。すなわち、クライアント31,32はリバースプロキシサーバ100に多重アクセスすることができる。
同様に、例えば、組織Bのクライアント33は、「ユーザB」を含むURLを指定したHTTPリクエストを送信する。リバースプロキシサーバ100は、「ユーザB」を含むURLを指定したHTTPリクエストを、Webサーバ100bに転送するようにする。クライアント33とリバースプロキシサーバ100の間には、タイムアウトなどにより切断されていない有効なHTTPセッションを複数維持できる。すなわち、クライアント33はリバースプロキシサーバ100に多重アクセスすることができる。
また、例えば、組織Cのクライアント34は、「ユーザC」を含むURLを指定したHTTPリクエストを送信する。リバースプロキシサーバ100は、「ユーザC」を含むURLを指定したHTTPリクエストを、Webサーバ100cに転送するようにする。クライアント34とリバースプロキシサーバ100の間には、タイムアウトなどにより切断されていない有効なHTTPセッションを複数維持できる。すなわち、クライアント34はリバースプロキシサーバ100に多重アクセスすることができる。
なお、上記の説明ではURLによってアクセス元の組織を識別することとしたが、リバースプロキシサーバ100は、他の方法によってアクセス元の組織を識別するようにしてもよい。例えば、クライアント31〜34で使用されるIPアドレスなどの通信アドレスや通信アドレスの範囲が固定である場合、リバースプロキシサーバ100は、HTTPリクエストの送信元アドレスによって組織A,B,Cを識別してもよい。また、IPアドレスなどの通信アドレスをユーザIDとして用いてもよい。
図4は、アクセスの多重度を制限する例を示す図である。リバースプロキシサーバ100は、ユーザID毎にアクセスの多重度を制御する。リバースプロキシサーバ100は、アクセスの多重度がそのユーザIDに対して設定された最大多重度を超えないように、受信されたアクセスを転送するか拒否するか判断する。アクセスを拒否する場合、リバースプロキシサーバ100は、そのアクセスを何れのWebサーバにも転送せず、エラー(例えば、HTTP503エラー)を示すHTTPレスポンスを返信する。
例えば、「ユーザA」の最大多重度=22であるとする。クライアント31,32が複数のHTTPリクエストを並行して送信することで、クライアント31,32とリバースプロキシサーバ100の間に複数のHTTPセッションが設定される。ここで、「ユーザA」についての22個の有効なHTTPセッション(HTTPセッション#1〜#22)が存在するとする。そして、「ユーザA」についての23番目のHTTPセッション(HTTPセッション#23)によって新たなHTTPリクエストが送信されたとする。すると、リバースプロキシサーバ100は、HTTPセッション#23のHTTPリクエストをWebサーバ100aに転送せずに破棄し、HTTP503エラーを返信する。
なお、アクセスの多重度は、同時アクセス数、同時セッション数、同時接続数などと呼ぶこともある。HTTPレスポンスをアクセス元にまだ返信していないHTTPリクエストの数(処理中のHTTPリクエストの数)を、アクセスの多重度として用いることもできる。また、確立されているTCP(Transmission Control Protocol)コネクションの数を、アクセスの多重度として用いることもできる。また、直近の所定時間内に受信されたHTTPレスポンスの数を、アクセスの多重度として用いることもできる。
以下では、ユーザ毎の最大多重度を決定する方法を中心に説明する。
図5は、リバースプロキシサーバのハードウェア例を示すブロック図である。リバースプロキシサーバ100は、CPU101、RAM102、HDD(Hard Disk Drive)103、画像信号処理部104、入力信号処理部105、ディスクドライブ106および通信インタフェース107を有する。
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されているプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを備えてもよく、リバースプロキシサーバ100は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合(マルチプロセッサ)を「プロセッサ」と呼んでもよい。
RAM102は、CPU101が実行するプログラムや情報処理に用いられるデータを一時的に記憶する揮発性メモリである。なお、リバースプロキシサーバ100は、RAM以外の種類のメモリを備えてもよく、複数の種類のメモリを備えてもよい。
HDD103は、OS(Operating System)やアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、リバースプロキシサーバ100は、SSD(Solid State Drive)などの他の種類の不揮発性の記憶装置を備えてもよく、複数の種類の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、リバースプロキシサーバ100に接続されたディスプレイ51に画像を出力する。ディスプレイ51としては、例えば、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ(PDP:Plasma Display Panel)、有機EL(OELD:Organic Electro-Luminescence)ディスプレイなどを用いることができる。
入力信号処理部105は、リバースプロキシサーバ100に接続された入力デバイス52から入力信号を取得しCPU101に通知する。入力デバイス52としては、例えば、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、リバースプロキシサーバ100に複数の種類の入力デバイスが接続されてもよい。
ディスクドライブ106は、記録媒体53に記録されたプログラムやデータを読み取る駆動装置である。記録媒体53として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)を使用できる。ディスクドライブ106は、例えば、CPU101からの命令に従って、記録媒体53から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
通信インタフェース107は、ネットワーク42に接続され、クライアント31〜34やWebサーバ100a,100b,100cと通信を行う。
ただし、リバースプロキシサーバ100はディスクドライブ106を備えなくてもよく、端末装置からネットワーク経由でリバースプロキシサーバ100を制御できる場合には画像信号処理部104や入力信号処理部105を備えなくてもよい。また、ディスプレイ51や入力デバイス52は、リバースプロキシサーバ100の筐体と一体に形成されてもよい。クライアント31〜34やWebサーバ100a,100b,100cも、上記と同様のハードウェアにより実現できる。なお、CPU101は第1の実施の形態の制御部12の一例、通信インタフェース107は第1の実施の形態の受信部11の一例である。
図6は、リバースプロキシサーバの機能例を示すブロック図である。リバースプロキシサーバ100は、設定ファイル記憶部110、多重度情報記憶部120、ログ記憶部130、起動処理部140およびアクセス処理部150を有する。設定ファイル記憶部110、多重度情報記憶部120およびログ記憶部130は、例えば、RAM102またはHDD103に確保した記憶領域として実現できる。起動処理部140およびアクセス処理部150は、例えば、ソフトウェアのモジュールとして実現できる。
設定ファイル記憶部110は、後述する設定ファイルを記憶する。設定ファイルは、リバースプロキシサーバ100がアクセスを転送するためのソフトウェアを起動するときに参照される。設定ファイルには、起動モードやユーザID毎の設定多重度が記述される。設定多重度は、許容される多重度の下限値であり、サービス提供者と組織A,B,Cの間の契約などに応じて決定される。設定ファイルは、例えば、リバースプロキシサーバ100の管理者によって記述され、予め設定ファイル記憶部110に格納される。
多重度情報記憶部120は、後述する多重度テーブルを記憶する。多重度テーブルには、ユーザID毎の最大多重度と設定多重度が含まれる。最大多重度は、前述のように許容される多重度の上限値であり、リバースプロキシサーバ100がアクセスを転送するためのソフトウェアを起動するときに設定ファイルに基づいて自動的に算出される。設定ファイルで指定された起動モードによって、最大多重度の算出方法が異なる。
ログ記憶部130は、後述する超過ログを記憶する。超過ログは、ユーザID毎のアクセスの受信状況を示す通信ログであり、設定多重度(許容される多重度の下限値)を超えて受信されたアクセスを記録しておく。ただし、設定多重度を超えて受信されたアクセス以外のアクセスも含めた通信ログを、ログ記憶部130に記憶しておいてもよい。超過ログは、ユーザID毎の最大多重度を算出するために利用される。サービス提供者は、組織A,B,Cとの契約を見直すための判断材料として超過ログを利用してもよい。
起動処理部140は、リバースプロキシサーバ100の管理者からの指示に応じて(例えば、起動コマンドを受信することで)、アクセスを転送するためのソフトウェアを起動する。起動処理部140は、最大多重度算出部141およびログ集計部142を有する。
最大多重度算出部141は、設定ファイル記憶部110から設定ファイルを読み出し、設定ファイルに記述された起動モードに応じた方法で、ユーザID毎の最大多重度を算出する。そして、最大多重度算出部141は、最大多重度を登録した多重度テーブルを生成し多重度情報記憶部120に格納する。最大多重度算出部141は、最大多重度を算出するにあたり、ログ集計部142に超過ログの集計を依頼することがある。
ログ集計部142は、最大多重度算出部141からの要求に応じて、ログ記憶部130から超過ログを読み出し、超過ログに記録されたアクセスをユーザID毎に集計する。そして、ログ集計部142は、ユーザID毎の設定多重度の超過状況を示すログ集計テーブルを生成し、最大多重度算出部141にログ集計テーブルを渡す。ログ集計テーブルは、ユーザID毎の最大多重度を算出するために利用される。
アクセス処理部150は、クライアント31〜34からアクセスを受信し、アクセスをWebサーバ100a,100b,100cに転送するか判断する。アクセス処理部150は、多重度計数部151、超過判定部152およびアクセス転送部153を有する。
多重度計数部151は、ユーザID毎に現在のアクセスの多重度をカウントする。前述のように、例えば、多重度計数部151は、多重度として有効なHTTPセッション数をカウントする。または、多重度計数部151は、多重度として、処理中のHTTPリクエストの数、TCPコネクションの数、直近の所定時間内に受信されたHTTPレスポンスの数などをカウントしてもよい。前述のように、ユーザIDは、例えば、HTTPリクエストに含まれるURLから抽出することができる。
超過判定部152は、受信されたアクセスからユーザIDを抽出し、多重度情報記憶部120に記憶された多重度テーブルから、抽出されたユーザIDに対応する最大多重度と設定多重度を検索する。そして、超過判定部152は、抽出されたユーザIDに対応する現在の多重度を多重度計数部151に問い合わせ、現在の多重度が最大多重度を超えているか判断する。また、超過判定部152は、現在の多重度が設定多重度を超えているか判断し、設定多重度を超えている場合はログ記憶部130に記憶された超過ログにアクセスを記録する。なお、多重度計数部151が回答する多重度は、転送するか否かをまだ判定していない最新のアクセスを含めた多重度である。
アクセス転送部153は、受信されたアクセスの転送を制御する。アクセス転送部153は、超過判定部152で多重度が最大多重度以下であると判定されたユーザIDから、転送先のWebサーバを選択し、選択したWebサーバにそのユーザIDを含むアクセスを転送する。また、アクセス転送部153は、超過判定部152で多重度が最大多重度を超えていると判定されたユーザIDのアクセスについては、転送せずにエラーメッセージ(例えば、HTTP503エラーを示すHTTPレスポンス)を返信する。ただし、後述するように、最大多重度を超えて受信されたアクセスをすぐに拒否するのではなく、所定回数は最大多重度を超えたアクセスを許容するようにする。
図7は、設定ファイルの例を示す図である。図7に示すような設定ファイル111が、設定ファイル記憶部110に記憶される。設定ファイル111は、起動モード、システム多重度、違反許容回数およびユーザID毎の設定多重度の項目を含む。
起動モードは、「デフォルトモード」と「超過状況反映モード」から1つ選択される。デフォルトモードは、アクセスの設定多重度からの超過状況を監視するモードであり、超過ログを参照せずに設定多重度に基づいて最大多重度が決定される。超過状況反映モードは、デフォルトモードで取得された超過ログを最大多重度に反映させるモードである。
システム多重度は、リバースプロキシサーバ100が許容するアクセスの多重度の合計である。システム多重度は、リバースプロキシサーバ100の転送能力、Webサーバ100a,100b,100cのアクセス処理能力、ネットワーク42の伝送帯域などを考慮して、リバースプロキシサーバ100の管理者によって予め決定される。例えば、ユーザA,B,C全体でシステム多重度=100と設定される。
違反許容回数は、1つのユーザIDについてアクセスの多重度が最大多重度を超えてもよい回数である。多重度が最大多重度を超えた回数(違反回数)が違反許容回数を超えると、以降は最大多重度を超えて受信されたアクセスが拒否される。例えば、違反許容回数=3と設定される。なお、図7では違反許容回数は全ユーザIDについて同一としているが、ユーザIDによって違反許容回数を変えるようにしてもよい。
設定多重度は、前述の通り、許容される多重度の下限値であり、少なくとも設定多重度までの多重アクセスは許容されることを示す。例えば、ユーザAの設定多重度=20,ユーザBの設定多重度=30,ユーザCの設定多重度=40と設定される。
図8は、多重度テーブルの例を示す図である。図8に示すような多重度テーブル121が、多重度情報記憶部120に記憶される。多重度テーブル121は、ユーザID、設定多重度、最大多重度、違反回数およびシステム多重度の項目を含む。
ユーザIDの項目には、組織A,B,Cに付与された識別子が登録される。設定多重度の項目には、設定ファイル111に記述されたユーザID毎の設定多重度が登録される。最大多重度の項目には、起動時に最大多重度算出部141によって算出されたユーザID毎の最大多重度が登録される。ここでは、最大多重度は、設定多重度に追加数αを加えたものとする。追加数αはユーザIDによって異なることがある。追加数αは、起動モードがデフォルトモードであるときは設定多重度に基づいて算出され、起動モードが超過状況反映モードであるときは超過ログに基づいて算出される。
違反回数の項目には、設定ファイル111に記述された違反許容回数と現在の違反回数とが登録される。違反回数は、アクセスを転送するソフトウェアが起動してから停止するまで蓄積されるようにしてもよいし、稼働中に一定周期でリセットされるようにしてもよい。システム多重度の項目には、設定ファイル111に記述されたシステム多重度と最大多重度の合計とが登録される。最大多重度の合計が設定ファイル111に記述されたシステム多重度を超えないように、ユーザ毎の最大多重度が算出される。
なお、後述するように、起動モードがデフォルトモードであるときは、多重度情報記憶部120に1つの多重度テーブルが格納される。この1つの多重度テーブルが、全ての時間帯において使用される。一方、起動モードが超過状況反映モードであるときは、多重度情報記憶部120に最大多重度の異なる複数の多重度テーブルが格納される。この複数の多重度テーブルが、時間帯に応じて使い分けられる。時間帯の変化に伴って使用する多重度テーブルを切り替えたとき、切替前の多重度テーブルの違反回数を切替後の多重度テーブルに引き継いでもよいし、引き継がない(リセットする)ようにしてもよい。
図9は、超過ログの例を示す図である。図9に示すような超過ログ131が、ログ記憶部130に記憶される。超過ログ131は、ユーザIDと受信時刻の項目を含む。超過ログ131には、設定多重度を超えて受信されたアクセス毎に、そのアクセスに含まれるユーザIDとそのアクセスの受信時刻とが超過判定部152によって記録される。
なお、図9では超過ログ131をCSV(Comma Separated Values)形式で記述しているが、タブ区切り形式など他の形式で記述してもよい。また、超過ログ131へのアクセスの記録は、デフォルトモードのときのみ行ってもよいし、デフォルトモードか超過状況反映モードかにかかわらず行ってもよい。以下の説明では、後者の場合を想定する。
図10は、ログ集計テーブルの例を示す図である。図10に示すようなログ集計テーブル143が、ログ集計部142によって生成される。ログ集計テーブル143は、ユーザIDおよび複数の時間帯の項目を含む。時間帯の一例として、0−3時,3−6時,6−9時,9−12時,12−15時,15−18時,18−21時,21−24時の8つの時間帯が設定される。ただし、この時間帯の設定方法は一例であり、アクセスを集計する期間の単位は任意に設定できる。例えば、曜日・日・月を考慮してもよい。
ログ集計部142は、超過ログ131に記録されたアクセスを、ユーザIDと時間帯に応じて分類する。そして、ログ集計部142は、ユーザIDと時間帯が同じアクセスの数をカウントすることで、ログ集計テーブル143を生成する。
例えば、0−3時の時間帯には、ユーザAのアクセス超過が10回発生し、ユーザB,Cのアクセス超過が発生していないことがログ集計テーブル143に登録される。また、例えば、3−6時の時間帯には、ユーザA,B,Cのアクセス超過が全く発生していないことがログ集計テーブル143に登録される。また、例えば、6−9時の時間帯には、ユーザAのアクセス超過が4回発生し、ユーザBのアクセス超過が3回発生し、ユーザCのアクセス超過が2回発生したことが、ログ集計テーブル143に登録される。
次に、リバースプロキシサーバ100の起動処理とアクセス処理の手順例を説明する。
図11は、起動処理の手順例を示すフローチャートである。起動コマンドの入力などを契機として、アクセスを転送するソフトウェア(例えば、Webサーバソフトウェア)がリバースプロキシサーバ100で起動するとき、図11のような起動処理が実行される。
(S11)最大多重度算出部141は、起動コマンドが入力されると、設定ファイル記憶部110に記憶された設定ファイル111を読み込む。
(S12)最大多重度算出部141は、設定ファイル111に記述された起動モードがデフォルトモードであるか判断する。起動モードがデフォルトモードの場合は処理をS13に進め、超過状況反映モードの場合は処理をS15に進める。
(S13)最大多重度算出部141は、設定ファイル111に記述されたシステム多重度からユーザA,B,Cの設定多重度を引いた余裕数を算出する。余裕数は、組織A,B,Cがそれぞれ設定多重度で多重アクセスしている状態で、リバースプロキシサーバ100が更に追加で処理可能なアクセスの数である。最大多重度算出部141は、算出した余裕数を、ユーザA,B,Cの設定多重度の比に従ってユーザA,B,Cに分配する。分配されたアクセスの数が、ユーザA,B,Cの追加数αに相当する。そして、最大多重度算出部141は、設定多重度に追加数αを加えたアクセス数を最大多重度とする。
(S14)最大多重度算出部141は、算出したユーザA,B,Cの最大多重度に基づいて、多重度テーブル121を生成して多重度情報記憶部120に格納する。このとき生成する多重度テーブルは1個でよい。そして、起動処理を終了する。
(S15)最大多重度算出部141は、ログ集計部142にログ集計を依頼する。ログ集計部142は、ログ記憶部130に記憶された超過ログ131を読み込む。
(S16)ログ集計部142は、超過ログ131に記録されたアクセスを、ユーザIDと時間帯に応じて分類し、ユーザIDと時間帯が同じアクセスの数をカウントする。これにより、図10に示したようなログ集計テーブル143が生成される。最大多重度算出部141は、超過ログ131の集計結果としてログ集計テーブル143を取得する。なお、時間帯の設定方法は、リバースプロキシサーバ100の管理者によって予め指定される。設定ファイル111に時間帯の設定方法を記述しておいてもよい。
(S17)最大多重度算出部141は、複数の時間帯の中から1つ選択する。
(S18)最大多重度算出部141は、設定ファイル111に記述されたシステム多重度からユーザA,B,Cの設定多重度を引いた余裕数を算出する。最大多重度算出部141は、算出した余裕数を、選択した時間帯におけるユーザA,B,Cの超過回数の比(ログ集計テーブル143が示すアクセス数の比)に従ってユーザA,B,Cに分配する。分配されたアクセスの数が、ユーザA,B,Cの追加数αに相当する。そして、最大多重度算出部141は、設定多重度に追加数αを加えたアクセス数を最大多重度とする。
(S19)最大多重度算出部141は、算出したユーザA,B,Cの最大多重度に基づいて、多重度テーブルを生成して多重度情報記憶部120に格納する。このとき生成した多重度テーブルは、選択した時間帯と対応付けられる。
(S20)最大多重度算出部141は、全ての時間帯を選択したか判断する。全て選択した場合は処理をS21に進め、未選択の時間帯がある場合は処理をS17に進める。
(S21)超過判定部152は、多重度テーブルの切替をスケジューリングする。すなわち、超過判定部152は、現在の時間帯に応じて、多重度情報記憶部120に記憶された複数の多重度テーブルのうち使用する多重度テーブルを変更するようにする。
なお、1またはそれ以上の多重度テーブルが生成された後、リバースプロキシサーバ100の管理者がそれら多重度テーブルを修正できるようにしてもよい。例えば、設定多重度または超過ログ131に基づいて自動的に算出された最大多重度を、リバースプロキシサーバ100の管理者が手動で微調整できるようにしてもよい。
なお、上記の説明では超過ログ131に記録されたアクセスを集計するタイミングを、超過状況反映モードでソフトウェアが起動するときとしたが、他のタイミングで集計してもよい。例えば、アクセス処理を行っている間にリアルタイムに超過ログ131に記録されたアクセスを集計してもよい。また、例えば、デフォルトモードで動作していたソフトウェアが停止するときに集計してもよい。また、上記の説明では超過状況反映モードでソフトウェアが起動するときに全ての時間帯の最大多重度を算出したが、時間帯が切り替わるときに次の時間帯の最大多重度を算出するようにしてもよい。
図12は、アクセス処理の手順例を示すフローチャートである。クライアント31〜34の何れかからアクセスを受信したとき、図12のようなアクセス処理が実行される。
(S31)超過判定部152は、アクセスとしてのHTTPリクエストに含まれるURLから、アクセス元に付与されているユーザIDを抽出する。ただし、HTTPヘッダにCookieとしてユーザIDを記載しておくなど、他の方法によってクライアント31〜34からリバースプロキシサーバ100にユーザIDを伝達することも可能である。
(S32)超過判定部152は、多重度計数部151に問い合わせて、抽出したユーザIDについての現在のアクセスの多重度を確認する。ここで確認される多重アクセスの1つとして、転送の可否を今回判断するアクセスも含まれている。
(S33)超過判定部152は、多重度情報記憶部120に記憶されている多重度テーブル121から、抽出されたユーザIDに対応する設定多重度を検索する。起動モードが超過状況反映モードである場合には、複数の多重度テーブルのうち現在の時間帯に対応する多重度テーブルが使用される。そして、超過判定部152は、現在の多重度が設定多重度を超えているか判断する。現在の多重度が設定多重度より大きい場合には処理をS34に進め、現在の多重度が設定多重度以下である場合には処理をS38に進める。
(S34)超過判定部152は、ログ記憶部130に記憶された超過ログ131に、抽出されたユーザIDとアクセスの受信時刻とを記録する。
(S35)超過判定部152は、多重度テーブル121から、抽出されたユーザIDに対応する最大多重度を検索する。そして、超過判定部152は、現在の多重度が最大多重度を超えているか判断する。現在の多重度が最大多重度より大きい場合には処理をS36に進め、現在の多重度が最大多重度以下である場合には処理をS38に進める。
(S36)超過判定部152は、多重度テーブル121におけるユーザIDに対応する違反回数をインクリメントする(1だけ加算する)。そして、超過判定部152は、違反回数が違反許容回数を超えているか判断する。違反回数が違反許容回数より大きい場合は処理をS37に進め、違反回数が違反許容回数以下である場合は処理をS38に進める。
(S37)アクセス転送部153は、受信されたアクセスをWebサーバ100a,100b,100cに転送せずに拒否することを決定する。そして、アクセス転送部153は、リバースプロキシサーバ100が混雑している旨のエラー(例えば、HTTP503エラー)を示すHTTPレスポンスをアクセス元に返信し、アクセス処理を終了する。エラーの返信によって受信されたアクセスの処理が完了することで、アクセスの多重度(例えば、有効なHTTPセッションの数)が減少し得る。
(S38)アクセス転送部153は、HTTPリクエストに含まれるURLに基づいてWebサーバ100a,100b,100cの中から転送先のWebサーバを選択する。例えば、「ユーザA」を含むURLを指定したアクセスの転送先をWebサーバ100a、「ユーザB」を含むURLを指定したアクセスの転送先をWebサーバ100b、「ユーザC」を含むURLを指定したアクセスの転送先をWebサーバ100cとする。ただし、アクセスを振り分ける基準はユーザIDでなくてもよい。アクセスの振り分け方法は、例えば、リバースプロキシサーバ100の管理者によって予め設定される。
(S39)アクセス転送部153は、受信されたアクセスとしてのHTTPリクエストを、選択したWebサーバにネットワーク42を介して転送する。
図13は、デフォルトモードにおける最大多重度の算出例を示す図である。前述のように、デフォルトモードではユーザA,B,Cの設定多重度の比に従って余裕数をユーザA,B,Cに割り振り、ユーザA,B,Cの最大多重度を決定する。
例えば、システム多重度=100,ユーザAの設定多重度=20,ユーザBの設定多重度=30,ユーザCの設定多重度=40であるとする。すると、多重アクセスの余裕数は100−(20+30+40)=10と算出される。そして、この余裕数=10が、設定多重度の比=20:30:40でユーザA,B,Cに分配される。すなわち、ユーザAの追加数α=2,ユーザBの追加数α=3,ユーザCの追加数α=4と算出される。これにより、ユーザAの最大多重度=20+2=22,ユーザBの最大多重度=30+3=33,ユーザCの最大多重度=40+4=44と決定される。
なお、ユーザA,B,Cの最大多重度の合計22+33+44=99は、システム多重度=100以下に収まっている。最大多重度は整数であり比率計算において端数処理が行われるため、最大多重度の合計がシステム多重度と一致しないこともある。リバースプロキシサーバ100は、何れのユーザIDにも分配されずに残った余裕数(図13の例では残りの余裕数=1)を所定のルールに基づいて何れかのユーザIDに割り当ててもよい。また、管理者が手動で、残った余裕数を何れかのユーザIDに割り当ててもよい。
図14は、超過状況反映モードにおける最大多重度の算出例を示す図である。前述のように、超過状況反映モードでは時間帯毎にユーザA,B,Cの超過回数の比に従って余裕数をユーザA,B,Cに割り振り、ユーザA,B,Cの最大多重度を決定する。
例えば、システム多重度=100,ユーザAの設定多重度=20,ユーザBの設定多重度=30,ユーザCの設定多重度=40であるとする。また、0−3時の時間帯では、ユーザAの超過回数=10,ユーザBの超過回数=0,ユーザCの超過回数=0であるとする。3−6時の時間帯では、ユーザAの超過回数=0,ユーザBの超過回数=0,ユーザCの超過回数=0であるとする。6−9時の時間帯では、ユーザAの超過回数=4,ユーザBの超過回数=3,ユーザCの超過回数=2であるとする。
すると、0−3時の時間帯では、余裕数=10が超過回数の比=10:0:0でユーザA,B,Cに分配される。すなわち、ユーザAの追加数α=10,ユーザBの追加数α=0,ユーザCの追加数α=0と算出される。これにより、ユーザAの最大多重度=20+10=30,ユーザBの最大多重度=30+0=30,ユーザCの最大多重度=40+0=40と決定される。なお、ユーザA,B,Cの最大多重度の合計30+30+40=100は、システム多重度=100と一致している。
一方、3−6時の時間帯では、超過回数の比=0:0:0である。この場合は、余裕数=10を設定多重度の比=20:30:40でユーザA,B,Cに分配することにする。すなわち、デフォルトモードと同様に、ユーザAの追加数α=2,ユーザBの追加数α=3,ユーザCの追加数α=4と算出する。これにより、ユーザAの最大多重度=20+2=22,ユーザBの最大多重度=30+3=33,ユーザCの最大多重度=40+4=44と決定される。なお、超過回数の比=0:0:0である場合に、余裕数を均等に(比を1:1:1として)ユーザA,B,Cに分配するようにしてもよい。
また、6−9時の時間帯では、余裕数=10が超過回数の比=4:3:2でユーザA,B,Cに分配される。すなわち、ユーザAの追加数α=4,ユーザBの追加数α=3,ユーザCの追加数α=2と算出される。これにより、ユーザAの最大多重度=20+4=24,ユーザBの最大多重度=30+3=33,ユーザCの最大多重度=40+2=42と決定される。なお、ユーザA,B,Cの最大多重度の合計24+33+42=99は、システム多重度=100未満となっている。このように、時間帯毎に超過回数を集計するため、時間帯によってユーザA,B,Cの最大多重度が異なっている。
以上、リバースプロキシサーバ100による多重度制御を説明したが、このような多重度制御の機能は様々なシステム形態として実装することが可能である。
図15は、多重度制御機能の実装例を示す第1の図である。
(A)多重度制御機能の1つの実装形態として、Webサーバで実行される既存のWebサーバソフトウェアの中に、追加のソフトウェアモジュールとして多重度制御モジュールを組み込む形態が考えられる。
(B)また、多重度制御機能の1つの実装形態として、Webサーバで実行される既存のWebサーバソフトウェアに対して、アドオンソフトウェアとして多重度制御アドオンをインストールする形態も考えられる。
(C)また、多重度制御機能の1つの実装形態として、アクセスを中継するサーバコンピュータである中継サーバに、多重度制御ソフトウェアをインストールする形態も考えられる。なお、上記では主にHTTPを用いたアクセスを想定したが、他のアプリケーション層のプロトコルを用いたアクセスについても多重度制御を行うことが可能である。例えば、上記の中継サーバは、ファイルサーバに対するファイル共有プロトコルを用いたアクセスの多重度を制御してもよい。また、例えば、中継サーバは、アプリケーションサーバに対する分散オブジェクト通信プロトコルを用いたアクセスの多重度を制御してもよい。また、中継サーバは、複数の種類のアクセスの多重度を制御してもよい。
図16は、多重度制御機能の実装例を示す第2の図である。
(A)多重度制御機能の1つの実装形態として、負荷分散装置(ロードバランサ)に、多重度制御のための集積回路(多重度制御回路)を組み込む形態も考えられる。または、ロードバランサに、ロードバランサのプロセッサに実行させる多重度制御のためのファームウェア(多重度制御ファームウェア)を組み込む形態も考えられる。多重度制御回路や多重度制御ファームウェアは、ルータなどの通信装置に組み込んでもよい。
(B)また、多重度制御機能の1つの実装形態として、多重度制御のための装置(多重度制御装置)を作成する形態も考えられる。多重度制御装置の機能は、集積回路やプロセッサに実行させるファームウェアとして実現できる。多重度制御装置は、複数のアクセスの多重度を制御してもよい。例えば、クライアント31〜34からWebサーバ・ファイルサーバ・アプリケーションサーバへの経路上に多重度制御装置が設定される。
第2の実施の形態の情報処理システムによれば、ユーザID単位でアクセスの多重度を制限できるため、リバースプロキシサーバ100が受信するアクセス全体の多重度を制限する場合と比べてユーザ間の公平性を維持できる。また、デフォルトモードでは、アクセスの余裕数が設定多重度に応じてユーザA,B,Cに分配されるため、最大多重度が公平に設定される。また、超過状況反映モードでは、アクセスの余裕数が、過去に多重度が設定多重度を超過した回数に応じてユーザA,B,Cに分配されるため、リバースプロキシサーバ100やWebサーバ100a,100b,100cの処理能力を活用できる。
また、リバースプロキシサーバ100を一定期間(例えば、1ヶ月など)デフォルトモードで動作させた後で超過状況反映モードに切り替えることで、適切な最大多重度が自動的に決定される。また、多重度が設定多重度を超過した回数を継続的に監視することで、ユーザA,B,Cのアクセス状況の変化にも柔軟に対応することが可能となる。また、時間帯毎に各ユーザIDの最大多重度を切り替えるため、ユーザによって多重アクセスの多い時間帯が異なる場合には、できる限り各ユーザの需要を満たすことが可能となる。
なお、前述のように、第1の実施の形態の情報処理は、情報処理装置10やクライアント装置21〜23にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、リバースプロキシサーバ100やWebサーバ100a,100b,100cやクライアント31〜34にプログラムを実行させることで実現できる。
プログラムは、コンピュータ読み取り可能な記録媒体(例えば、記録媒体53)に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、FDおよびHDDが含まれる。光ディスクには、CD、CD−R(Recordable)/RW(Rewritable)、DVDおよびDVD−R/RWが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からHDDなどの他の記録媒体(例えば、HDD103)にプログラムを複製して(インストールして)実行してもよい。