JP4208556B2 - 中継装置 - Google Patents

中継装置 Download PDF

Info

Publication number
JP4208556B2
JP4208556B2 JP2002344026A JP2002344026A JP4208556B2 JP 4208556 B2 JP4208556 B2 JP 4208556B2 JP 2002344026 A JP2002344026 A JP 2002344026A JP 2002344026 A JP2002344026 A JP 2002344026A JP 4208556 B2 JP4208556 B2 JP 4208556B2
Authority
JP
Japan
Prior art keywords
server
data
unit
cookie information
client
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.)
Expired - Fee Related
Application number
JP2002344026A
Other languages
English (en)
Other versions
JP2004178286A (ja
Inventor
一峰 的場
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2002344026A priority Critical patent/JP4208556B2/ja
Publication of JP2004178286A publication Critical patent/JP2004178286A/ja
Application granted granted Critical
Publication of JP4208556B2 publication Critical patent/JP4208556B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Computer And Data Communications (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、クライアントとサーバ間の情報の一貫性を保つ技術(例えばCookie)を用いた情報通信において、クライアントとサーバとの間に位置し、データの中継を行う中継装置に関する。
【0002】
【従来の技術】
現在のインターネットは、IP(Internet Protocol)網の上に構築されている。このIP網上では、サーバとクライアントとの間の通信は、IPパケット(以下、「パケット」と呼ぶ)というデータ単位で実行される。IP網はベストエフォート型のネットワークであるため、データの到着は完全に保障されない。一般的に、現在のインターネットでは、このデータの到着の保障は、TCP(Transport Control Protocol)により実行される。TCPは、IP網上の通信で交換されるデータがクライアントとサーバとの間で正しく送受信されていることを保障する。
【0003】
また、近年、クライアントがサーバにリクエストメッセージを送信しサーバはそれに対するリプライメッセージをクライアントに送信するという通信形態(例えばWebの通信形態)において、クライアントとサーバ(例えばWebサーバ)との間における情報の一貫性を保つ技術が用いられている。以下、リクエストメッセージ及びリプライメッセージを、それぞれを区別する必要がない場合は、単に「メッセージ」と呼ぶ。また、メッセージとは、HTTP(Hypertext Transfer Protocol)のレイヤにおけるデータの単位を指す。TCPによりメッセージが送信される場合、各メッセージは、パケットの最大長を超えない範囲で分割されることによりパケット化され、パケット単位で転送される。
【0004】
このような、HTTPというアプリケーションレイヤの通信においてクライアントとサーバとの間における情報の一貫性を保つ技術(情報共有の技術)の具体例として、Cookieという技術がある。この技術では、メッセージ中の特定の情報要素が使用される。Cookieは、サーバ(例えばWebサーバ)がコンテンツを含むリプライメッセージをクライアントへ送信する際に一般的に利用されているHTTPにおける技術の一つである。
【0005】
クライアントとサーバとの間における通信では、TCPコネクションは通信のたびに切断と接続とが繰り返し実行される。このため、クライアントとサーバとの間でアプリケーションレイヤでの情報の一貫性が保たれない。しかし、Cookieが用いられることにより、TCPコネクションの切断や接続とは関係なく、アプリケーションレイヤで情報の一貫性が保たれる。
【0006】
例えば、クライアントのユーザがサーバによって提供されるサイト内で買い物を行う場合、クライアントのユーザが何をいくつ購入したかという情報を、クライアントとサーバとの間で共有しなければならない。即ち、この情報はクライアントとサーバとの間で一貫性が保たれなくてはならない。
【0007】
図27は、クライアントP1と買い物サイトを運営するサーバP2との間で、Cookieが用いられた場合の通信処理の例を示す図である。サーバP2の買い物サイトでは、仮想的な買い物かごが設けられる。ユーザは、購入を希望する商品をこの買い物かごに入れる。この動作により、最終的に、全ての購入商品の支払手続がまとめて実行される。
【0008】
クライアントP1のユーザがクライアントP1を用いて買い物ページのリンクをクリックすると、クライアントP1は、買い物用ページのデータを要求するリクエストメッセージをサーバP2へ送信する(PSeq1)。サーバP2は、このリクエストメッセージに対応する買い物用ページのデータをクライアントP1へ送信する(PSeq2)。
【0009】
クライアントP1は、受信された買い物用ページのデータを、ディスプレイ等を通じて表示する。クライアントP1のユーザは、表示された買い物用ページを閲覧し、購入を希望する商品(例えば服や電気機器)を買い物かごへ入れるためのボタンをクリックする。クライアントP1は、買い物用ページにおいて、ユーザによって選択された商品を買い物かごへ入れたことを通知するためのリクエストメッセージをサーバP2へ送信する(PSeq3)。
【0010】
サーバP2は、クライアントP1に対応するIDとして”A”を発行する。サーバP2は、このIDと、クライアントP1から通知された商品(買い物かごへ入れられた商品)とを対応付けて記憶する。ここでは、服が買い物かごに入れられたと仮定する。そして、サーバP2は、この商品が買い物かごに入れられている場合の買い物用ページのデータを、クライアントP1へ送信する(PSeq4)。このとき、サーバP2は、発行されたID等の情報を、Cookie情報としてクライアントP1に送信する。
【0011】
クライアントP1は、サーバP2からCookie情報を通知された後は、リクエストメッセージをサーバP2へ送信する際に、サーバP2から通知されたCookie情報をリクエストメッセージに付加する。即ち、クライアントP1は、自身に発行されたCookie情報をリクエストメッセージに付加してサーバP2へ送信することにより、買い物サイトにアクセスする(PSeq5)。
【0012】
サーバP2は、リクエストメッセージに付加されたCookie情報(ID等の情報)を基に、クライアントP1のユーザが買い物かごに入れている商品を検索する。即ち、サーバP2は、ID”A”をもとに、クライアントP1のユーザの買い物かごの中身を確認する。そして、サーバP2は、クライアントP1のユーザが買い物かごに入れている商品などを反映した買い物用ページを作成し、この買い物用ページのデータをクライアントP1へ送信する(PSeq6)。
【0013】
買い物の途中でTCPコネクションが切断された後に再度接続された場合であっても、クライアントP1は、サーバP2に対するリクエストメッセージに、通知されたCookie情報を付加してサーバP2へ送信する。サーバP2は、Cookie情報に含まれるIDと買い物かごの内容とを対応付けて記憶している。このため、Cookie情報によって、アプリケーションレイヤの情報は、サーバP2とクライアントP1との間で一貫性が保たれる。即ち、この買い物サイトにおいては、買い物かごの内容は、サーバP2とクライアントP1との間で常に、TCPコネクションの切断や接続に関係なく一致される。
【0014】
図28は、クライアントP1とサーバP2との間でCookieが用いられた場合の通信手順の概要を示す図である。次に、図28を用いて、Cookieが用いられた場合の通信手順の概要を説明する。
【0015】
サーバP2とクライアントP1との間の通信においてCookieが利用される場合、通信手順として以下の3つの手順が実行される。まず、サーバP2は、Cookie情報を発行し、このCookie情報が付加されたリプライメッセージをクライアントP1へ送信する(第一の通信手順)。次に、クライアントP1は、リプライメッセージを受信し、このリプライメッセージに付加されたCookie情報を、自身が記憶するローカルのCookie表に記録する(第二の通信手順)。以後、クライアントP1は、サーバP2に対するリクエストメッセージに対して、Cookie表に記録されたCookie情報を付加し、このリクエストメッセージをサーバP2へ送信する(第三の通信手順)。次に、各通信手順について詳しく説明する。
【0016】
第一の通信手順では、サーバP2は、クライアントP1に対して送信されるリプライメッセージのHTTPヘッダにSet−Cookieコマンドを記入(付加)する。サーバP2は、リプライメッセージのHTTPヘッダにSet−Cookieコマンドを付加することにより、Cookie情報をリプライメッセージに付加する。Netscape Communications社の仕様では、Set−Cookieコマンドの書式は以下の通りである。
【0017】
Set−Cookie:NAME=VALUE;expires=DATE;path=PATH;domain=DOMAIN_NAME;secure
Set−Cookieコマンドの書式において、サーバP2がCookie情報毎に違う値を記入する項目(フィールド)は、NAME,VALUE,DATE,PATH,DOMAIN_NAMEである。
【0018】
NAME,VALUEフィールドは、このCookie情報の実体を示す。サーバP2は、NAMEフィールドにはCookie情報の名前を、VALUEフィールドにはCookie情報に代入される値をそれぞれ設定する。サーバP2によって発行される上記IDは、VALUEフィールドの値(VALUE値)に相当する。例えば、NAMEフィールドの値(NAME値)が”ID”である場合、VALUE値にはIDの具体的な文字列や数字など(例えば”A”)が設定される。
【0019】
expireフィールド以降のフィールドは、Cookie情報に対する属性を示すフィールド、即ちオプションのフィールドである。以下、expireフィールド以降の各フィールドについて説明する。
【0020】
DATEフィールドはCookie情報の有効期限を示す。クライアントP1は、DATEフィールドの値(DATE値)が示す日時を過ぎたCookie情報を、ローカルのCookie表から消去する。DATE値が無い場合、クライアントP1は、このCookie情報を扱っているブラウザが終了した時点で、このCookie情報をローカルのCookie表から消去する。
【0021】
PATH,DOMAIN#NAMEフィールドは、クライアントP1がCookie情報を付加する対象となるリクエストメッセージを特定するために利用される。DOMAIN_NAMEフィールドは、Cookie情報が付加されるリクエストメッセージの送信先となるドメイン名を示す。PATHフィールドは、ドメイン名によって示されるホストにおけるロケーションを示す。例えば、Cookie情報が付加されるリクエストメッセージが、”www.xxx.zzz/contents/”というアドレスへのコンテンツ要求である場合、”www.xxx.zzz”がDOMAIN_NAMEフィールドの値(DOMAIN_NAME値)、”/contents/”がPATHフィールドの値(PATH値)に相当する。
【0022】
第二の通信手順では、クライアントP1は、Set−Cookieコマンドを含むリプライメッセージをサーバP2から受信する。そして、クライアントP1は、ローカルのCookie表に、リプライメッセージに含まれるCookie情報を逐次記録する。
【0023】
図29は、ローカルのCookie表の例を示す図である。図29を用いてローカルのCookie表について説明する。
【0024】
ローカルのCookie表のDOMAIN_NAME,PATH,NAME,VALUEには、受信されたSet−Cookieコマンドにおける各値が記録される。また、ローカルのCookie表のGMT(Greenwich Mean Time)には、受信されたSet−CookieコマンドにおけるDATE値が記録される。第三の通信手順では、クライアントP1は、リクエストメッセージを送信する際に、送信先のドメイン名(DOMAIN_NAME値)及びパス(PATH値)に対応するCookie情報の有無を、ローカルのCookie表において確認する。対応するCookie情報が記録されている場合、クライアントP1は、このCookie情報をこのリクエストメッセージに付加する。一方、対応するCookie情報が無い場合、クライアントP1は、Cookie情報の付加を実行しない。
【0025】
図30は、Set−Cookieコマンドの各フィールドについてのクライアントP1とサーバP2との処理を示す図である。図30を用いて、Set−Cookieコマンドの各フィールドについてのクライアントP1とサーバP2との処理について説明する。
【0026】
サーバP2は、Cookie情報を発行する際に、DOMAIN_NAMEフィールドやPATHフィールド等に値を代入し、Set−Cookieコマンドをリプライメッセージに付加する。
【0027】
クライアントP1は、ローカルのCookie表において、受信されたSet−Cookieコマンドの各フィールドの値、即ち受信されたCookie情報とNAME値,DOMAIN_NAME値,及びPATH値が同一であるCookie情報を検索する。このとき、受信されたCookie情報にDOMAIN_NAME値が定義されていない場合、クライアントP1は、受信されたCookie情報のDOMAIN_NAME値として、このCookie情報を発行したサーバP2のドメイン名を用いる。また、受信されたCookie情報にPATH値が定義されていない場合、クライアントP1は、受信されたCookie情報のPATH値として、Set−Cookieコマンドの発行元となるロケーションを用いる。
【0028】
該当するCookie情報が検索された場合、クライアントP1は、検索されたCookie情報のVALUE値,PATH値,DOMAIN_NAME値,及びDATE値を、受信されたCookie情報を用いて上書きする。
【0029】
一方、該当するCookie情報が検索されない場合、クライアントP1は、受信されたCookie情報を、ローカルのCookie表に記録する。このとき、受信されたSet−CookieコマンドにDOMAIN_NAME値が定義されていない場合、クライアントP1は、DOMAIN_NAME値として、このCookie情報を発行したサーバP2のドメイン名を記録する。また、受信されたSet−CookieコマンドにPATHの値が定義されていない場合、クライアントP1は、PATHの値として、Set−Cookieコマンドの発行元となるロケーションを記録する。
【0030】
クライアントP1は、リクエストメッセージを送信する際に、ローカルのCookie表を検索し、送信されるリクエストメッセージに付加されるべきCookie情報の有無を確認する。具体的には、クライアントP1は、リクエストメッセージの送信先となるURL(Uniform Resource Locators)をキーとして、ローカルのCookie表に記録される全てのCookie情報について、PATH値及びDOMAIN_NAME値を検索する。
【0031】
クライアントP1は、リクエストメッセージの送信先について、DomainとPathの両方が一致したときのみCookie表に記録されているCookie情報を読み出す。例えば、クライアントP1は、リクエストメッセージの送信先が、ローカルのCookie表に記録されるDOMAIN_NAME値と後方一致するドメインであり、且つローカルのCookie表に記録されるPATHの値で指定されたロケーションと前方一致するアドレスである場合、Cookie表に記録されるCookie情報を読み出す。このとき、クライアントP1は、このDOMAIN_NAME値及びPATH値に対応付けてCookie表に記録されるCookie情報を読み出す。
【0032】
そして、クライアントP1は、読み出された全てのCookie情報を、リクエストメッセージのHTTPヘッダに記入し、このリクエストメッセージをサーバP2に送信する。リクエストメッセージのHTTPヘッダにおけるCookie情報の書式を以下に示す。
【0033】
Cookie: NAME1=VALUE1; NAME2=VALUE2;・・・
上記記載は、Netscape Communications社による仕様であるが、RFC(Request For Comments)等の他の仕様を用いても良い。
【0034】
次に、Cookieに基づいたサーバ負荷分散について説明する。近年、インターネットの利用者数の増大により、人気のあるコンテンツを公開しているサーバに対し、HTTPのリクエストの集中が発生している。このようなサーバは、多くのリクエストメッセージに対して応答処理を行う必要があるため、CPU負荷が上昇し処理能力が不足するという問題がある。
【0035】
このような問題の対処方法として、負荷分散装置を用いる方法がある。図31は、負荷分散装置P3が用いられたシステム(負荷分散システム)P5の概要を示す図である。図31を用いて、負荷分散システムP5について説明する。
【0036】
負荷分散システムP5は、複数台のサーバP2からなるサーバグループP4,1台以上のクライアントP1,及びクライアントP1とサーバグループP4との間に設置される負荷分散装置P3を用いて構成される。
【0037】
負荷分散システムP5では、負荷分散装置P3は、サーバグループ単位に仮想的な代表アドレス(VIP:Virtual IP address)を設定する。クライアントP1は、VIP宛にリクエストメッセージを送信する。負荷分散装置P3は、VIP宛に送信されたリクエストメッセージを受信し、受信されたリクエストメッセージを基に、リクエストメッセージの振り分け先となるサーバP2を、サーバグループP4に含まれる複数のサーバP2の中から決定する。そして、負荷分散装置P3は、振り分け先として決定されたサーバP2に、受信されたリクエストメッセージを転送する。このとき、負荷分散装置P3は、転送対象となるリクエストメッセージの送信先のアドレスを、VIPからサーバP2のアドレスに書き換える。
【0038】
負荷分散システムP5では、負荷分散装置P3がクライアントP1からのリクエストメッセージを各サーバP2へ振り分ける。このため、応答処理の負荷が複数台のサーバP2に分散され、一台のサーバP2が担当する処理負荷が軽減される。
【0039】
このような負荷分散システムP5において、Cookie情報が用いられた場合、以下のような問題が発生する。負荷分散装置P3は、リクエストメッセージに付加されたCookie情報を考慮せずに振り分け先のサーバP2を決定する場合、このCookie情報を発行したサーバP2とは異なるサーバP2に対してこのリクエストメッセージを転送(中継)する可能性がある。この場合、リクエストメッセージを受信したサーバP2は、受信されたリクエストメッセージに含まれるCookie情報を認識できない。このため、リクエストメッセージを受信したサーバP2は、クライアントP1のユーザによる買い物の履歴が反映されていないページを作成しクライアントP1へ送信するという問題が発生する。
【0040】
このような問題を解決する方法として、負荷分散装置がリクエストメッセージに付加されたCookie情報に基づいて、振り分け先となるサーバを決定する方法がある。図32は、リクエストメッセージに付加されたCookie情報に基づいて振り分け先となるサーバP2を決定する負荷分散装置P3aの機能ブロック図である。図32を用いて、このような負荷分散装置P3aについて説明する。
【0041】
負荷分散装置P3aは、Cookie検出部P6,振り分け先サーバ決定部P7,サーバ・Cookie用テーブルP8,ヘッダ更新・パケット送信部P9,Cookie検出部P10,Cookie・サーバ記録部P11,及びヘッダ更新・パケット送信部P12を備える。
【0042】
まず、クライアントP1が対応するCookie情報をローカルのCookie表に記録していないコンテンツへアクセスする場合の負荷分散装置P3aの処理について説明する。
【0043】
クライアントP1は、アクセス先に対応するCookie情報がローカルのCookie表に記録されていないため、Cookie情報が付加されていないリクエストメッセージをVIP宛に送信する。Cookie検出部P6は、VIP宛に送信されたリクエストメッセージを受信する。Cookie検出部P6は、受信されたリクエストメッセージについて文字列検索を行い、Cookie情報の有無を調べる。この場合、リクエストメッセージにCookie情報は付加されていないため、Cookie検出部P6はCookie情報が無いと判断する。このため、負荷分散装置P3aは、Cookie情報が無い場合の処理を実行する。即ち、振り分け先サーバ決定部P7は、Cookie情報を考慮せずに、振り分け先となるサーバP2を決定する。このようなサーバP2の決定法には、例えばラウンドロビン等がある。
【0044】
次に、ヘッダ更新・パケット送信部P9は、決定されたサーバP2へリクエストメッセージを転送するため、サーバP2との間にTCPコネクションを作成する。ただし、既にサーバP2との間にTCPコネクションがある場合、ヘッダ更新・パケット送信部P9は、このTCPコネクションを利用するため、新たなTCPコネクションを作成しなくともよい。ヘッダ更新・パケット送信部P9は、決定されたサーバP2のアドレスなどをもとに、転送されるリクエストメッセージを含むパケットのヘッダ部分の生成又は書き換えを実行する。そして、ヘッダ更新・パケット送信部P9は、決定されたサーバP2に対し、リクエストメッセージを転送する。即ち、ヘッダ更新・パケット送信部P9は、リクエストメッセージを含むパケットを転送する。
【0045】
サーバP2は、リクエストメッセージを受信し、受信されたリクエストメッセージに対するリプライメッセージを送信する。
【0046】
Cookie検出部P10は、サーバP2からリプライメッセージを受信する。Cookie検出部P10は、受信されたリプライメッセージに対して文字列検索を実行し、Cookie情報の有無を調べる。この場合、リプライメッセージにCookie情報が付加されているため、Cookie検出部P6はCookie情報を抽出する。このため、負荷分散装置P3aは、Cookie情報が有る場合の処理を実行する。即ち、Cookie・サーバ記録部P11は、このCookie情報及びこのCookie情報の発行元であるサーバを対応付けて、サーバ・Cookie用テーブルP8に記録する。ヘッダ更新・パケット送信部P12は、このリプライメッセージを含むパケットのヘッダ部分の生成又は書き換えを実行する。そして、ヘッダ更新・パケット送信部P12は、クライアントP1に、このリプライメッセージを含むパケットを転送する。
【0047】
次に、クライアントP1が対応するCookie情報をローカルのCookie表に記録しているコンテンツへアクセスする場合の負荷分散装置P3aの処理について説明する。
【0048】
クライアントP1は、アクセス先に対応するCookie情報がローカルのCookie表に記録されているため、このCookie情報が付加されたリクエストメッセージをVIP宛に送信する。Cookie検出部P6は、VIP宛に送信されたリクエストメッセージを受信する。Cookie検出部P6は、受信されたリクエストメッセージについて文字列検索を行い、Cookie情報の有無を調べる。この場合、リクエストメッセージにCookie情報が付加されているため、Cookie検出部P6はこのCookie情報を抽出する。このため、負荷分散装置P3aは、Cookie情報が有る場合の処理を実行する。即ち、振り分け先サーバ決定部P7は、リクエストメッセージに含まれるCookie情報とサーバ・Cookie用テーブルP8とを参照することにより、このCookie情報の発行元であるサーバP2を特定する。
【0049】
次に、ヘッダ更新・パケット送信部P9は、決定されたサーバP2へパケットを転送するため、サーバP2との間にTCPコネクションを作成する。ただし、既にサーバP2との間にTCPコネクションがある場合、ヘッダ更新・パケット送信部P9は、このTCPコネクションを利用するため、新たなTCPコネクションを作成しなくともよい。ヘッダ更新・パケット送信部P9は、決定されたサーバP2のアドレスなどをもとに、転送されるリクエストメッセージを含むパケットのヘッダ部分の生成又は書き換えを実行する。そして、ヘッダ更新・パケット送信部P9は、決定されたサーバP2に対し、リクエストメッセージを含むパケットを転送する。
【0050】
負荷分散装置P3aは、このように動作することによって、リクエストメッセージに含まれるCookie情報の発行元であるサーバP2を検索し、このサーバP2をリクエストメッセージの振り分け先として決定する。
【0051】
次に、サーバ・Cookie用テーブルP8の構成における問題点について説明する。サーバ・Cookie用テーブルP8が、サーバP2(図33におけるP2a〜P2c)のアドレス(IPアドレス,MACアドレスなど)とCookie情報とを対応付けて記録すると問題が生じる。図33は、この問題の例を示す図である。即ち、複数のサーバP2aとP2bとが、それぞれ異なるクライアントP1a,P1bに対して同一のCookie情報αを発行した場合に問題が生じる。この場合、負荷分散装置P3aは、クライアントP1a又はP1bから送信されるリクエストメッセージについて、このリクエストメッセージに含まれるCookie情報のみによって振り分け先となるサーバを判断することができない。なぜなら、サーバ・Cookie用テーブルP8は、同じCookie情報(α)について、複数のサーバP2のアドレス(サーバP2a,サーバP2b)を記録しているためである。
【0052】
このような問題を解決する方法として、サーバ・Cookie用テーブルP8が、サーバP2のアドレスと、Cookie情報及びクライアントP1(図33におけるP1a〜P1c)のIPアドレスとを対応付けて記録する方法がある。しかし、クライアントP1のIPアドレスが変更される場合がある(例えば、クライアントP1がダイヤルアップ回線などによる接続である場合)。この場合、負荷分散装置P3aは、正しい振り分け先となるサーバP2を判断することができない。
【0053】
従来、この問題を解決する方法として、Cookie情報にサーバP2を一意に示すIDを付与する方法がある(第一の解決方法,第二の解決方法,第三の解決方法)。次に、3種類の方法について、負荷分散装置P3aを用いた方法と異なる点についてのみ、それぞれ説明する。
【0054】
図34は、第一の解決方法を示す図である。第一の解決方法では、負荷分散装置P3bは、サーバP2からクライアントP1に送信されるリプライメッセージがCookie情報を含む場合、このリプライメッセージにサーバP2を一意に示すID(サーバID)を含む新たなCookie情報を挿入する(例えば、非特許文献1の”インサート・モード”参照)。
【0055】
まず、リプライメッセージに対する処理について説明する。メッセージ構築部P13が、サーバP2から受信されたパケットをもとにリプライメッセージを構築する。Cookie生成部P14は、サーバP2を示すサーバIDを含む新たなCookie情報を生成する。具体的には、NAME値は、サーバP2により保持されるコンテンツの中で利用されていないNAME値であり、VALUE値は、サーバIDを示す。また、DATE値,PATH値,DOMAIN_NAME値は、サーバP2によって発行されたCookie情報と同じ値を持つ。
【0056】
Cookie挿入部P15は、Cookie生成部P14によって生成されたCookie情報を、メッセージ構築部P13によって構築されたリプライメッセージに挿入する。Cookie・サーバ記録部P11bは、Cookie生成部P14によって生成されたCookie情報とサーバP2とを対応付けてサーバ・Cookie用テーブルP8bに記録する。例えば、Cookie・サーバ記録部P11bは、新たなCookie情報とサーバP2のアドレスとを対応付けて記録する。そして、メッセージ分割部P16が、このリプライメッセージを再びパケットに分割する。
【0057】
次に、リクエストメッセージに対する処理について説明する。振り分け先サーバ決定部P7は、クライアントP1から送信されるリクエストメッセージに含まれるCookie情報(このCookie情報はサーバP2を一意に示すサーバIDを含む)及びサーバ・Cookie用テーブルP8をもとに、振り分け先となるサーバP2を決定する。
【0058】
図35は、第二の解決方法を示す図である。まず、リプライメッセージに対する処理について説明する。第二の解決方法では、負荷分散装置P3cのみならず、サーバP2も新たな設定がなされる(例えば、非特許文献1の”リライト・モード”参照)。具体的には、サーバP2は、自身が備えるコンテンツの中で利用されていないNAME値と、特に意味を持たないVALUE値(例:”00000000”)とを含むCookie情報(第一Cookie情報)を発行するように設定される。また、サーバP2は、このような意味を持たないCookie情報の他に、クライアントP1等において実際に利用されるCookie情報(第二Cookie情報)も発行する。このとき、第一のCookie情報におけるDATE値は、第二Cookie情報のうち最も長い有効期限と同一の値である。また、第一のCookie情報におけるPATH値及びDOMAIN_NAME値は、第二Cookie情報における値と同じである。
【0059】
負荷分散装置P3cは、サーバP2からクライアントP1に送信されるリプライメッセージが第一Cookie情報を含む場合、この第一Cookie情報のVALUE値に、サーバIDを上書きする。
【0060】
具体的には、Cookie生成部P14cは、サーバP2を一意に示すサーバIDを生成する。Cookie上書き部P17は、生成されたサーバIDを用いて第一Cookie情報のVALUE値を上書きする。Cookie・サーバ記録部P11cは、生成されたサーバIDとサーバP2とを対応付けてサーバ・Cookie用テーブルP8cに記録する。
【0061】
次に、リクエストメッセージに対する処理について説明する。振り分け先サーバ決定部P7は、クライアントP1から送信されるリクエストメッセージに含まれるCookie情報(このCookie情報はサーバP2を一意に示すサーバIDを含む)及びサーバ・Cookie用テーブルP8をもとに、振り分け先となるサーバP2を特定する。
【0062】
次に第三の解決方法について説明する。第三の解決方法では、サーバP2dにおけるCookie情報の発行ルールが変更される(例えば、非特許文献1の”パッシブ・モード”参照)。具体的には、サーバP2dは、Cookie情報を発行する際にサーバP2dを一意に示すサーバIDを含むCookie情報も同時に発行する。第三の解決方法において、サーバIDを含むCookie情報のNAME値は、サーバP2dにより保持されるコンテンツの中で利用されていないNAME値である。また、このCookie情報のVALUE値は、サーバP2dを一意に示すサーバIDである。また、このCookie情報のDATE値は、同時に発行される他のCookie情報のうち最も長い有効期限の値と同一の値である。
【0063】
第三の解決方法では、サーバP2dがCookie情報の内容を決定する。このため、第一の解決方法及び第二の解決方法とは異なり、負荷分散装置P3は、サーバP2dから送信されるリプライメッセージにおけるCookie情報を変更しない。従って、負荷分散装置P3の構成は、図32に示される通りとなる。
【0064】
また、このようにユーザ情報(Cookie情報)を用いて端末装置を特定する技術として、特許文献1や特許文献2がある。
【0065】
【特許文献1】
特開平10−164173号公報
【特許文献2】
特開2001−236320号公報
【非特許文献1】
”F5 ネットワークス社のBIG−IPコントローラが提供するクッキー・パーシステンス”、[online]、F5 Networks、[平成14年9月12日検索]、インターネット<URL : http://www.f5networks.co.jp/ja/solutions/technicalbriefs/tb01.html>
【0066】
【発明が解決しようとする課題】
しかしながら、第一,第二,第三の解決方法は、実際のネットワークに適用される際に問題点が発生する。まず、第二,第三の解決方法における問題点について説明する。第二,第三の解決方法では、負荷分散システムに応じて特定のCookie情報を発行するようにサーバP2の設定を行う必要がある。しかし、実際のネットワークでは、このような設定を行うことが困難な場合がある。
【0067】
実際のネットワークは、ネットワーク部分のみを提供するネットワーク事業者(例:IDC(Internet Data Center))と、サーバ・コンテンツを設置・作成するコンテンツ事業者とが分業して構成される場合がある。図36は、このように構成されたネットワークの概略を示す図である。
【0068】
一般的に、コンテンツ事業者は、負荷分散装置P3によってサーバ振り分けが実行されることを考慮せずにコンテンツを作成する。また、例えばコンテンツ事業者によるディスクスペースのレンタルサービスのように、コンテンツ事業者以外の第三者がコンテンツを作成する場合もある。このような場合、ネットワーク事業者は、負荷分散装置P3によってサーバ振り分けが正しく実行されるように、コンテンツ事業者の持つコンテンツを書き換える、又は書き換えることをコンテンツ事業者に依頼する必要がある。しかし、このような手続は、明らかに時間やコストの無駄となる。
【0069】
従って、負荷分散装置P3は、連携するサーバP2におけるコンテンツの設定変更を要件とすることなく、正しくサーバ振り分けを実行できるように構成されることが好ましい。
【0070】
次に、第一の解決方法が適用された場合における問題点について説明する。第一の解決方法では、サーバP2のコンテンツが設定変更される必要が無いため、上記問題は発生しない。しかし、第一の解決方法では、負荷分散装置P3bがリプライメッセージに新たなCookie情報を挿入するため、クライアントP1において受信されたリプライメッセージとサーバP2において送信されたリプライメッセージとのデータサイズが一致しない。このため、第一の解決方法では以下のような問題が生じる。
【0071】
図37は、第一の解決方法が適用された場合に生じる問題を示す図である。第一の解決方法では、TCPによるパケットロス等の検出において問題が発生する。TCPでは、サーバP2において送信されたパケットのサイズとクライアントP1において受信されたパケットのサイズとを用いてデータの到達が保障される。即ち、サーバP2から送信されたパケットのサイズとクライアントP1によって受信されたパケットのサイズとが一致した場合に、データが正常に到達したと判断される。
【0072】
従って、このデータサイズが一致しない場合、ネットワーク中で発生するパケットロスなどの問題が検出されない可能性がある。例えば、サーバP2が1〜13までのデータ(第一のデータ)をクライアントP1に送信し、その後まもなくサーバP2が13〜16までのデータ(第二のデータ)をクライアントP1に送信したとする。負荷分散装置P3bによって第一のデータのデータサイズが13から16へ変更された場合、クライアントP1は第一のデータのみを受信した時点で1〜16までのデータを受信したと判断する。このとき、クライアントP1は、サーバP2に対し、1〜16までのデータを受信したことを通知するため、サーバP2は1〜16までのデータ送信が終了したと判断する。この後、第二のデータについてパケットロスが発生した場合、クライアントP1及びサーバP2のいずれも、このパケットロスを検出することがない。
【0073】
このような理由により、負荷分散装置装置P3bは、パケットのサイズを変更する場合、エンドホストと同様にTCPの処理を行う必要がある。即ち、負荷分散装置P3bは、サーバP2及びクライアントP1のTCPコネクションを終端し、それぞれを仲介するエンドホストとして動作する必要がある。
【0074】
図38は、TCPの処理を行う負荷分散装置P3bが用いられたネットワークの構成を示す図である。負荷分散装置P3bは、1〜13までのデータをサーバP2から受信した場合、13まで受信したことをサーバP2へ通知する。また、負荷分散装置P3bは、受信されたデータに新たなCookie情報を挿入し、このデータをクライアントP1へ送信する。
【0075】
しかし、負荷分散装置P3bがTCPの処理を全て実行するように構成されると、負荷分散装置P3bにおいて通信負荷が増大し、負荷分散処理の低速化を招く。
【0076】
また、第一の解決方法における負荷分散装置P3bは、メッセージの再構築及びパケットへの再分割を実行する。この処理は、通常の負荷分散処理には必要がない処理であり、結果的に負荷分散処理によるパケット転送速度の低下を招く。
【0077】
このように、負荷分散処理を高速化するためには、サーバ側のコンテンツにおいて負荷分散装置を考慮した設定を不要とし、パケットのサイズを変更せずにCookie情報に基づいたサーバ振り分け処理を実行することが必要となる。
【0078】
このため、本発明は、サーバ側のコンテンツにおいて特に設定を必要とせず、パケットのような通信データのサイズを変更せずに、Cookie情報のようなデータに基づいたサーバ振り分け処理を実行する中継装置(負荷分散装置を含む)を提供することを目的とする。
【0079】
【課題を解決するための手段】
上記問題を解決するため、本発明は以下のような構成をとる。本発明の第一の態様は、中継装置であって、第一のデータを含む通信データをサーバから受信する第一の受信手段と、前記サーバを一意に識別するサーバ識別子を生成する生成手段と、前記第一のデータの一部分である部分データであって、前記サーバ識別子と同じデータ量の部分データを、前記サーバ識別子に置き換えることにより第二のデータを生成する第一の置換手段と、前記部分データと前記サーバ識別子と前記第一のデータを含む通信データの送信元であるサーバとを対応付けたエントリを記憶するサーバ識別子記憶手段と、前記第二のデータを含む通信データをクライアントへ送信する第一の送信手段と、前記第二のデータを含む通信データをクライアントから受信する第二の受信手段と、前記通信データから前記第二のデータを読み出す読出手段と、前記第二のデータに含まれる前記サーバ識別子を用いて、前記サーバ識別子記憶手段からサーバを特定する特定手段と、前記第二のデータに含まれる前記サーバ識別子を、前記サーバ識別子記憶手段にこのサーバ識別子と対応付けて記憶される部分データに置き換えることにより第一のデータを復元する第二の置換手段と、前記第二の置換手段によって復元された第一のデータを含む通信データを、前記特定手段によって特定されたサーバに対して送信する第二の送信手段とを含むように構成される。
【0080】
本発明の第一の態様では、第一の受信手段は、サーバから第一のデータを含む通信データを受信する。このような第一のデータの例として、HTTPメッセージで利用されるCookie情報がある。この場合、サーバはコンテンツサーバであり通信データはリプライメッセージとなる。
【0081】
生成手段は、通信データの送信元となるサーバを自装置において一意に識別するためのサーバ識別子を生成する。第一の置換手段は、第一のデータにおける部分データとサーバ識別子とを置き換えることにより第二のデータを生成する。このとき、部分データとサーバ識別子とのデータ量は同量となる。即ち、第一のデータと第二のデータとはデータ量が同じとなる。
【0082】
サーバ識別子記憶手段は、置き換えの対象となった部分データと、サーバ識別子と、この通信データの送信元であるサーバとを対応付けたエントリを記憶する。例えば、第一のデータがCookie情報である場合、この通信データの送信元であるサーバは、このCookie情報の発行元のサーバとなる。そして、第一の送信手段は、第二のデータを含む通信データをクライアントへ送信する。
【0083】
第二の受信手段がクライアントから第二のデータを含む通信データを受信すると、読出手段は、この通信データから第二のデータを読み出す。特定手段は、読み出された第二のデータに含まれるサーバ識別子を用いて、この通信データが送信されるべきサーバを特定する。このとき、特定手段は、サーバ識別子記憶手段において、このサーバ識別子に対応付けて記憶されるサーバを、この通信データが送信されるべきサーバとして特定する。
【0084】
第二の置換手段は、第二のデータに含まれるサーバ識別子を、サーバ識別子記憶手段において、このサーバ識別子に対応付けて記憶される部分データと置き換える。即ち、第二の置換手段は、第二のデータを用いて、この第二のデータに対応する第一のデータを復元する。そして、第二の送信手段は、復元された第一のデータを含む通信データを、特定手段によって特定されたサーバに対して送信する。
【0085】
このため、本発明の第一の態様によれば、サーバから送信される通信データと、クライアントにおいて受信されるサーバ識別子を含んだ通信データとのデータ量が等しくなる。従って、サーバとクライアントにおけるTCPの処理が正常に動作するため、中継装置がTCP処理を実行する必要が無くなる。よって、中継装置における負荷が軽減され、データ中継処理が高速に実行される。また、通信データのデータ量が等しくなるため、中継装置においてパケットの転送がなされる場合において、パケットの再構築処理を省略することが可能となる。
【0086】
また、第一の置換手段は、サーバから送信される通信データにおける第一のデータの内容に依存することなく処理を実行しサーバ識別子を付加する。そして、特定手段は、第一の置換手段によって付加されたサーバ識別子を用いて、振り分け先となるサーバを特定する。このため、本発明の第一の態様が適用されたシステムでは、サーバにおいて、振り分け処理の実現のために特別に設定等がなされる必要がない。
【0087】
また、本発明の第一の態様は、前記第二の置換手段の処理対象となる前記サーバ識別子と、この第二の置換手段によって生成された前記第一のデータに含まれこの第一のデータを識別するデータ識別子とを対応付けて記憶するデータ識別子記憶手段をさらに備え、前記第一の置換手段は、前記データ識別子記憶手段によって記憶されるデータ識別子と、前記第一の受信手段によって受信された通信データに含まれる第一のデータに含まれるデータ識別子とが一致する場合に、このデータ識別子と対応付けて記憶されるサーバ識別子を用いて第二のデータを生成するように構成されても良い。
【0088】
また、本発明の第一の態様は、前記第一の置換手段による処理を行わない第一のデータを示すデータ識別子を記憶する識別子記憶手段と、前記第一の受信手段によって受信された通信データに含まれる第一のデータを示すデータ識別子が前記識別子記憶手段に記憶されているか否かを判断し、記憶されている場合に、この第一のデータに対する置き換え処理を行わないように前記第一の置換手段を制御する置換制御手段とをさらに備えるように構成されても良い。
【0089】
また、本発明の第一の態様は、前記第一の置換手段による処理を行わない第一のデータに含まれ、この第一のデータが送信されるべきドメインを示すドメイン識別子を記憶するドメイン識別子記憶手段と、前記第一の受信手段によって受信された通信データに含まれる第一のデータに含まれるドメイン識別子が前記ドメイン識別子記憶手段に記憶されているか否かを判断し、記憶されている場合に、この第一のデータに対する処理を行わないように前記第一の置換手段を制御する置換制御手段とをさらに備えるように構成されても良い。
【0090】
また、本発明による第一の態様は、前記サーバから複数の分割データに分割されて送信される前記第一のデータを含む通信データについて前記第一の置換手段による処理が終了した場合、この通信データの他の分割データに対する前記第一の置換手段の処理を省略するように制御する省略制御手段をさらに備えるように構成されても良い。
【0091】
【発明の実施の形態】
〔発明の原理〕
次に、本発明による中継装置の原理について説明する。
【0092】
〈第一の原理〉
上記第一の解決方法が採用されることで、サーバのコンテンツにおいて中継装置を考慮した設定が行われる必要が無くなる。しかし、第一の解決方法では、サーバから送信されるリプライメッセージのサイズとクライアントによって受信されるリプライメッセージのサイズとが相違する。このため、中継装置がTCPの処理を実行する必要が生じ、中継装置におけるパケット転送速度が低下するという問題があった。
【0093】
第一の原理による中継装置は、この問題を解決するため、受信されたリプライメッセージのサイズを変更せずに、サーバ識別子であるサーバIDをこのメッセージのCookie情報の一部に上書きする。即ち、第一の原理による中継装置は、受信されたリプライメッセージに含まれるCookie情報の一部のビット列と、このビット列と同じサイズのサーバIDであるビット列とを書き換える(入れ替える)。
【0094】
図1は、第一の原理の概略を示す図である。第一の原理では、サーバ2によって発行されたCookie情報を含むリプライメッセージを中継装置3aが受信する。中継装置3aは、受信されたリプライメッセージのサイズを変更せずに、サーバIDであるビット列(A)をこのリプライメッセージに含まれるCookie情報の一部のビット列(α)と書き換える。このとき、中継装置3aは、サーバIDであるビット列(A)と書き換えられたビット列(α)とサーバIDが示すサーバ2のアドレスを対応付けて記憶する。中継装置3aは、書き換えられたリプライメッセージをクライアント1へ転送する。クライアント1は、書き換えられたCookie情報を、自身のCookie表に記録する。
【0095】
また、第一の原理では、クライアント1から送信され、クライアント1のCookie表に記録されたCookie情報を含むリクエストメッセージを、中継装置3aが受信する。中継装置3aは、受信されたリクエストメッセージに含まれるCookie情報中のサーバIDであるビット列(A)を、このCookie情報と対応付けて記録されたビット列(α)に書き換える。この時点で、リクエストメッセージに含まれるCookie情報は、サーバ2によって発行されたCookie情報と一致する。そして、中継装置3aは、書き換えられたリクエストメッセージを、サーバIDと対応付けて記録されたアドレス、即ちサーバ2のアドレスへ転送する。
【0096】
図2は、第一の原理に基づく中継装置3aの機能ブロック図である。中継装置3aは、ハードウェア的には、バスを介して接続されたCPU,主記憶(RAM),補助記憶装置(ハードディスク,フラッシュメモリ)等を備えている。中継装置3aは、補助記憶装置に記憶された各種のプログラム(OS,アプリケーション等)が主記憶にロードされCPUにより実行されることによって、ビット列抽出部4,7,Cookie情報書換部5a,ヘッダ更新・パケット送信部6,8等を含む装置として機能する。
【0097】
ビット列抽出部4,7は、CPUやRAM等を用いて構成される。ビット列抽出部4,7は、それぞれ受信されたリクエストメッセージ,リプライメッセージからCookie情報を読み出す。
【0098】
Cookie情報書換部5aは、CPUやRAM等を用いて構成される。Cookie情報書換部5aは、メッセージに含まれるCookie情報の一部のビット列を他のビット列に書き換える。Cookie情報書換部5aの動作は、リクエストメッセージに対する場合とリプライメッセージに対する場合とで異なる。
【0099】
Cookie情報書換部5aは、リプライメッセージに対する処理を実行する場合、このリプライメッセージに含まれるCookie情報の一部のビット列を、サーバIDであるビット列に書き換える。このとき、Cookie情報の一部のビット列とサーバIDであるビット列とは同じデータ長である。そして、Cookie情報書換部5aは、Cookie情報の元のビット列とサーバIDとリプライメッセージの送信元アドレスとを対応付けて記憶する。
【0100】
一方、Cookie情報書換部5aは、リクエストメッセージに対する処理を実行する場合、このリクエストメッセージに含まれるCookie情報のうちサーバIDであるビット列を他のビット列に書き換える。このとき、Cookie情報書換部5aは、サーバIDと対応付けて自身が記憶するビット列に書き換える。
【0101】
次に、リプライメッセージに対してCookie情報書換部5aが実行するビット列の書換方法について説明する。ここでは、リプライメッセージに含まれるCookie情報が、NAME=VALUEという書式のCookie情報である場合について説明する。この場合、Cookie情報書換部5aは、以下に示される二つの書換方法のうちいずれかの方法を採用する。
【0102】
第一の書換方法は、VALUEフィールドのみを書き換える方法である。この方法では、Cookie情報書換部5aは、VALUEフィールドの文字列(ビット列)のうち、あらかじめ定義された長さの文字列をサーバIDに書き換える。このとき、サーバIDの長さはあらかじめ定義された長さと等しい。
【0103】
第二の書換方法は、NAMEフィールドを含むフィールドを書き換える方法である。NAME=VALUEという書式において”=”は必ず一つ以上必要となる。このため、第二の書換方法では、Cookie情報書換部5aは、あらかじめ定義された長さの文字列をサーバIDに書き換える際に、”=”の数に変化がないようにする。具体的には、例えば書き換えられるCookie情報の文字列が”=”を含む場合、あらかじめ定義された長さよりも1文字分長い文字列が、サーバID及び”=”によって書き換えられる。例えば、書き換えられるCookie情報の文字列が”abc=d”であり、サーバIDが”ABCD”である場合、”abc=d”という文字列が、サーバIDに”=”を含めた”ABCD=”という文字列で書き換えられる。このため、”=”の数は変化しない。
【0104】
一方、書き換えられる文字列が”=”を含まない場合、あらかじめ定義された長さの文字列が、サーバIDによって書き換えられる。
【0105】
ヘッダ更新・パケット送信部6,8は、CPUやRAM等を用いて構成される。ヘッダ更新・パケット送信部6,8は、それぞれ、リクエストメッセージ,リプライメッセージを送信する。即ち、ヘッダ更新・パケット送信部6,8は、Cookie情報が書き換えられたメッセージを含むパケットのヘッダ情報を書き換え、それぞれサーバ2,クライアント1へパケットを送信する。
【0106】
次に、図2を用いて、中継装置3aの動作について説明する。なお、以下の説明では、サーバ2からクライアント1へ送信される(向かう)パケット,トラヒックを「下り」と記載する。一方、クライアント1からサーバ2へ送信される(向かう)パケット,トラヒックを「上り」と記載する。
【0107】
まず、中継装置3aが下りのパケット(リプライメッセージを含むパケット)に対して行う処理について説明する。ビット列抽出部7は、受信されたパケットのペイロードから文字列”Set−Cookie”以下のCookie情報を示す文字列を抽出する。また、ビット列抽出部7は、サーバIDが書き込まれる位置を示す書き込み開始位置を特定する。この書き込み開始位置は、採用される書換方法によって異なる。
【0108】
Cookie情報書換部5aは、自装置内で一意となるサーバID(サーバ2を一意に示すID)を作成し、受信されたパケットの送信元サーバとこのサーバIDとを対応付けて記録する。Cookie情報書換部5aは、このサーバIDを用いて、受信されたパケットのCookie情報の一部を書き換える。Cookie情報書換部5aは、書き換え前のビット列とこのサーバIDとを対応付けてさらに記録する。
【0109】
ヘッダ更新・パケット送信部8は、受信されたパケットの送信元アドレスを自装置のアドレスに書き換え、この書き換えに伴って影響を受けるTCP及びIPヘッダのフィールドを書き換える。そして、ヘッダ更新・パケット送信部8は、クライアント1に向けてパケットを送信する。
【0110】
次に、中継装置3aが上りのパケット(リクエストメッセージを含むパケット)に対して行う処理について説明する。ビット列抽出部4は、受信されたパケットのペイロードからサーバIDを抽出する。また、ビット列抽出部4は、このサーバIDであるビット列が他のビット列に書き換えられる位置を示す書き換え開始位置を特定する。この書き換え開始位置は、採用される書換方法によって異なる。
【0111】
Cookie情報書換部5aは、ビット列抽出部4によって抽出されたサーバIDと対応付けて記録された送信元サーバと書き換え前のビット列とを特定する。Cookie情報書換部5aは、受信されたCookie情報の書き換え開始位置以降のビット列を、他のビット列で書き換える。
【0112】
ヘッダ更新・パケット送信部6は、受信されたパケットの送信先アドレスを、Cookie書換部5aによって特定された送信元サーバのアドレスに書き換え、この書き換えに伴って影響を受けるTCPおよびIPヘッダのフィールドを書き換える。そして、ヘッダ更新・パケット送信部6は、サーバ2に向けてパケットを送信する。
【0113】
本発明の第一の原理によれば、サーバ2によって発行されたCookie情報の内容に関わらず、Cookie書換部P5aがサーバIDを上書きするため、サーバ2のコンテンツについて中継装置3aを考慮した設定が行われる必要がない。また、本発明の第一の原理によれば、サーバIDと書き換えられるビット列とが同じビット数であるため、パケットのサイズが変更されない。このため、サーバIDによって、Cookie情報に応じた振り分け先サーバが判断されるとともに、中継装置3aがエンドホストとしてTCP処理を行う必要がなくなる。
【0114】
〈第二の原理〉
本発明の第一の原理によれば、メッセージサイズ(パケットサイズ)が変更されずにCookie情報が書き換えられる。しかし、サーバによって発行されたCookie情報と異なるCookie情報がクライアントに届くため、クライアントにおいて問題が起こる場合がある。図3は、このような問題の例を示す図である。
【0115】
クライアント1は、過去に受信されたCookie情報、即ちローカルのCookie表に記録されたCookie情報と同一のNAME値を持つCookie情報を新たに得た場合、過去に受信されたCookie情報を新たに得られたCookie情報を用いて上書きする。このため、サーバ2から新たに発行されたCookie情報のNAME値(”nameA1”)が過去に発行されたCookie情報のNAME値(”nameA1”)と同一である場合、クライアント1において上書きが実行される必要がある。しかし、中継装置によってCookie情報の一部が書き換えられた結果、それぞれのCookie情報のNAME値が異なる値となった場合(”a(e%A1”,”a(e&A1”)、クライアント1において上書きが実行されない。このため、それぞれのCookie情報のパス(DOMAIN_NAME値及びPATH値)が同一である場合、二つのCookie情報がサーバ2における同一のコンテンツに対して送信され、サーバ2の処理において不都合が生じる可能性がある。
【0116】
従って、中継装置は、過去に受信されたCookie情報と同一のNAME値を持つCookie情報を同じサーバから受信した場合、過去にクライアントに転送した際のCookie情報のNAME値と同一のNAME値を持つCookie情報となるように書き換えを行う必要がある。
【0117】
図4は、第二の原理の概略を示す図である。上記問題を解決するため、第二の原理では、リクエストメッセージ(矢印Bにおけるリクエストメッセージ)に含まれるNAME値のうち中継装置3bによって書き換えられたビット列(”name”)と同一のビット列をNAME値に持つリプライメッセージ(矢印Cにおけるリプライメッセージ)が受信された場合、このリクエストメッセージがクライアント1から送信される際に有していたサーバIDと同一のサーバID(”a(e%”)を用いて書き換えが実行される。
【0118】
図5は、第二の原理に基づく中継装置3bの機能ブロック図である。第二の原理に基づく中継装置3bの構成について、第一の原理に基づく中継装置3aと異なる構成についてのみ説明する。
【0119】
中継装置3bは、Cookie情報書換部5aに換えてCookie情報書換部5bを備える。また、中継装置3bは、同一NAME判定部9を備える。
【0120】
同一NAME判定部9は、CPUやRAM等を用いて構成される。同一NAME判定部9は、リクエストメッセージに含まれるサーバIDと、このリクエストメッセージがサーバ2へ転送される際のCookie情報におけるNAME値とを対応付けて記録する。
【0121】
また、同一NAME判定部9は、リプライメッセージに含まれるCookie情報の一部のビット列(例:”name”)が、サーバIDと対応付けて記録されているか否かを判断する。記録されている場合、同一NAME判定部9は、上記のCookie情報の一部のビット列と対応付けて記録するサーバIDとともに同一判定報告をCookie情報書換部5bへ通知する。一方、記録されていない場合、同一NAME判定部9は、相違判定報告をCookie情報書換部5bへ通知する。
【0122】
Cookie情報書換部5bは、上りのパケット、即ちリクエストメッセージに対しては、Cookie情報書換部5aと同じ処理を行う。一方、Cookie情報書換部5bは、下りのパケット、即ちリプライメッセージに対しては、Cookie情報書換部5aとは異なる処理を実行する。以下、Cookie情報書換部5bのこの処理について説明する。
【0123】
Cookie情報書換部5bは、同一NAME判定部9から同一判定報告と共にサーバIDを通知された場合、このサーバIDを用いて、リプライメッセージに含まれるCookie情報の一部のビット列を上書きする。一方、Cookie情報書換部5bは、同一NAME判定部9から相違判定報告を通知された場合、自装置内で一意となるサーバIDを新たに作成し、このサーバIDを用いて、リプライメッセージに含まれるCookie情報の一部のビット列を上書きする。そして、Cookie情報書換部5bは、Cookie情報の元のビット列とサーバIDとを対応付けて記憶する。
【0124】
〈第三の原理〉
第一の原理に基づく中継装置3aは、サーバ2によって発行されたCookie情報の一部を書き換えるため、クライアント1がサーバ2の期待するように動作しない場合がある。例えば、クライアント1がローカルで保存しているCookie情報を、サーバ2から転送されたプログラムが読み込む場合にこの問題が生じる。この場合、このプログラムが読み込むCookie情報は、中継装置3aによって書き換えられたCookie情報である。一方、このプログラムは、サーバ2によって発行されたCookie情報を用いることを前提として作成されている。このため、このプログラムの動作が想定外のものとなる可能性がある。
【0125】
第三の原理では、このような問題を解決するため、サーバによって提供されるプログラムによって使用されるCookie情報を中継装置においてあらかじめ定義し、定義されたCookie情報については書き換えを実行しないように構成される。
【0126】
図6は、第三の原理に基づく中継装置3cの機能ブロック図である。第三の原理に基づく中継装置3cの構成について、第一の原理に基づく中継装置3aと異なる構成についてのみ説明する。
【0127】
中継装置3cは、Cookie情報書換部5aに換えてCookie情報書換部5cを備える。また、中継装置3cは、NAMEフィルタ部10,11を備える。
【0128】
NAMEフィルタ部10,11は、CPUやRAMや不揮発性記憶装置(ハードディスク,フラッシュメモリ等)等を用いて構成される。NAMEフィルタ部10,11は、ビット列の書き換えの対象とならないCookie情報を自身の不揮発性記憶装置に記憶する。NAMEフィルタ部10,11は、ビット列抽出部4によって抽出されたCookie情報が、ビット列の書き換えを実行しないCookie情報と定義されたものであるか否かを判断する。NAMEフィルタ部10,11は、Cookie情報のNAME値が、自身が記憶するNAME値に一致する場合に書換を実行しないCookie情報であると判断する。そして、NAMEフィルタ部10,11は、判断の結果をCookie情報書換部5cに通知する。
【0129】
Cookie情報書換部5cは、NAMEフィルタ部11からCookie情報の書き換えを実行すると通知された場合、自装置内で一意となるサーバIDを作成し、受信されたリプライメッセージの送信元サーバとこのサーバIDとを対応付けて記録する。また、この場合、Cookie情報書換部5cは、このサーバIDを用いてCookie情報の一部(ビット列)を書き換える。また、この場合、Cookie情報書換部5cは、書き換え前のビット列とこのサーバIDとを対応付けて記録する。
【0130】
Cookie情報書換部5cは、NAMEフィルタ部10からCookie情報の書き換えを実行すると通知された場合、受信されたリクエストメッセージに含まれるサーバIDを、このサーバIDと対応付けて記録された書き換え前のビット列を用いて書き換える。
【0131】
一方、Cookie情報書換部5cは、NAMEフィルタ部10,11からCookie情報の書き換えを実行しないと通知された場合、処理を実行しない。
【0132】
第三の原理によれば、あらかじめ書き換えを実行しないように定義されたCookie情報は、NAMEフィルタ部10,11によって検出されるため、結果的に、サーバ2によって発行されたCookie情報がそのままクライアント1に転送される。このため、このCookie情報を用いることを前提とされているプログラムは、想定通りの動作を行う事が可能となる。従って、Cookie情報を用いて動作するプログラムにおいて、サーバ2が想定するプログラムの動作と、Cookie情報を用いて動作する実際のプログラムの動作とを一致させることが可能となる。
【0133】
なお、書き換えが実行されないCookie情報のみを含むメッセージについては、このようなメッセージに対してのみ、第一の解決方法のような従来手法を適用することにより、Cookie情報の発行元が考慮された適切なサーバにリクエストメッセージを転送することが可能となる。
【0134】
〈第四の原理〉
クライアントのユーザがあるページの中のバナー広告をクリックした場合、Cookie情報によって、このクライアントのユーザが辿ってきたページをリンク先のサイトに通知することがある。このとき、バナー広告のあるサーバを中継装置3aが管理しており、リンク先のサーバが中継装置3aの管理外のネットワークに設置されている場合、第一の原理では以下に示す問題が発生する。即ち、中継装置3aが管理していない他のドメインに転送されるCookie情報(DOMAIN_NAME値が中継装置3aによって管理されていないドメイン名であるCookie情報)をクライアント1が受信すると、クライアント1は中継装置3aを経由しない他のサーバへ送信されるリクエストメッセージに、中継装置3aによって書き換えられたCookie情報を付加する。このため、他のサーバは、リクエストメッセージに含まれるCookie情報について正しく処理することができない。
【0135】
図7は、第四の原理に基づく中継装置3dの機能ブロック図である。第四の原理では、中継装置3dにおいて管理ドメインが定義される。そして、中継装置3dによって受信されたリプライメッセージに含まれるCookie情報のDOMAIN_NAME値が、定義された管理ドメインと異なる場合、このリプライメッセージはCookie情報の書き換えが実行されずにクライアント1へ転送される。
【0136】
以下、第四の原理に基づく中継装置3dの構成について、第一の原理に基づく中継装置3aと異なる構成についてのみ説明する。
【0137】
中継装置3dは、Cookie情報書換部5aに換えてCookie情報書換部5dを備える。また、中継装置3dは、ドメインフィルタ部12を備える。
【0138】
ドメインフィルタ部12は、CPUやRAMや不揮発性記憶装置(ハードディスク,フラッシュメモリ等)等を用いて構成される。ドメインフィルタ部12は、あらかじめ定義された管理ドメインを不揮発性記憶装置に記憶する。ドメインフィルタ部12は、受信されたリプライメッセージに含まれるCookie情報のドメイン名(DOMAIN_NAME値)が、自身が記憶する管理ドメインと一致するか否かを判断する。ドメインフィルタ部12は、この判断の結果をCookie情報書換部5dに通知する。
【0139】
Cookie情報書換部5dは、ドメインフィルタ部12から通知される内容に応じて動作する。管理ドメインとCookie情報のドメイン名とが一致すると通知された場合、Cookie情報書換部5dは、自装置内で一意となるサーバIDを作成し、受信されたリプライメッセージの送信元サーバとこのサーバIDとを対応付けて記録する。また、このとき、Cookie情報書換部5dは、このサーバIDを用いて、受信されたパケットのCookie情報の一部を書き換える。また、このとき、Cookie情報書換部5dは、書き換え前のビット列とこのサーバIDとをさらに対応付けて記録する。
【0140】
一方、Cookie情報書換部5dは、管理ドメインとCookie情報のドメイン名とが一致しないと通知された場合、処理を実行しない。
【0141】
第四の原理によれば、管理ドメイン以外のドメイン名を持つCookie情報を含んだリプライメッセージに対して、Cookie情報の書き換えが実行されない。このため、結果的にサーバ2によって発行されたCookie情報がそのままクライアント1に転送される。従って、クライアント1がリクエストメッセージにこのCookie情報を付加した場合、このリクエストメッセージが中継装置3dを介さずにサーバに送信された場合であっても、正しいCookie情報がこのサーバへ通知される。
【0142】
なお、書き換えが実行されないCookie情報のみを含むメッセージについては、このようなメッセージに対してのみ、第一の解決方法のような従来手法を適用することにより、Cookie情報の発行元が考慮された適切なサーバにリクエストメッセージを転送することが可能となる。
【0143】
〈第五の原理〉
第一の原理では、Cookie情報書換部5aは、サーバIDについてのエントリを記憶するが、このエントリの削除については特定されていない。しかし、サーバIDについてのエントリ数が有限である場合、エントリ数が満たされることにより、有効であるエントリが消去される可能性がある。
【0144】
第五の原理では、有効期限(DATE値)が経過しているCookie情報に関するエントリを優先的に削除(エントリ消去)することにより、この問題を解決する。
【0145】
図8は、第五の原理に基づく中継装置3eの機能ブロック図である。第五の原理に基づく中継装置3eの構成について、第位置の原理に基づく中継装置3aと異なる構成についてのみ説明する。
【0146】
中継装置3eは、Cookie情報書換部5aに換えてCookie情報書換部5eを備える。
【0147】
Cookie情報書換部5eは、基本的にCookie情報書換部5aと変わらない。ただし、Cookie情報書換部5eは、書き換え前のビット列とサーバIDとを対応付けて記録する際に、Cookie情報の有効期限をさらに対応付けて記録する。そして、Cookie情報書換部5eは、エントリを消去する場合、この有効期限が満了しているエントリを優先的に消去する。
【0148】
第五の原理によれば、各エントリは、対応するCookie情報の有効期限に応じて消去される。このため、有効なエントリが無効となったエントリよりも先に消去されることがなくなる。ここで、有効なエントリとは、対応するCookie情報がクライアント1aとサーバ2aとの間で使用されるため、このエントリに基づいて振り分け先となるサーバが決定される可能性のあるエントリを示す。一方、無効なエントリとは、対応するCookie情報が有効期限切れのためにクライアント1aとサーバ2aとの間で使用されず、このエントリに基づいて振り分け先となるサーバが決定される可能性のないエントリを示す。
【0149】
〈第六の原理〉
Cookie情報は、各メッセージのHTTPヘッダに書き込まれる。このため、あるTCPコネクション上のリプライメッセージが複数のパケットで構成される場合、HTTPヘッダ部分の終了が確認された時点で、以降のパケットにはCookie情報が含まれないことは明らかである。このため、以降のパケットは、Cookie情報書換部5a,5b,5c,5d,5eの処理対象とならない。
【0150】
しかし、第一から第五の原理によれば、全てのパケットをCookie情報書換部5a,5b,5c,5d,5eの処理対象としていた。従って、不要な処理が増大し、装置全体のパケット転送能力が低下していた。
【0151】
第六の原理では、HTTPヘッダの終了部分を判断し、以降のパケットについてはCookie情報書換部の処理対象とせずに次の処理を実行することによってこの問題を解決する。
【0152】
図9は、第六の原理に基づく中継装置3fの機能ブロック図である。第六の原理に基づく中継装置3fの構成について、第一の原理に基づく中継装置3aと異なる構成についてのみ説明する。
【0153】
中継装置3fは、ヘッダ終了チェック部13を備える。
【0154】
ヘッダ終了チェック部13は、CPUやRAM等を用いて構成される。ヘッダ終了チェック部13は、処理の対象としているパケットに係るコネクションにおいてHTTPヘッダを含むパケットについての処理が終了しているか否かを判断する。終了している場合、ヘッダ終了チェック部13は、このパケット及び以降のパケットについて、ビット列抽出部7及びCookie情報書換部5aをバイパスする。即ち、ヘッダ終了チェック部13は、このパケット及び以降のパケットを、ヘッダ更新・パケット送信部8へ直接渡す。また、ヘッダ終了チェック部13は、各トラヒック上のHTTPヘッダを含むパケットについての処理が全て終了したかどうかをチェックし、終了していた場合は記録する。
【0155】
〔実施形態の概要〕
次に、図を用いて本発明の中継装置の実施形態である負荷分散装置について説明する。なお、本実施形態の説明は例示であり、本発明の構成は以下の説明に限定されない。
【0156】
図10は、本発明の実施形態における負荷分散装置15を用いた負荷分散システム14の概要を示す図である。負荷分散システム14は、サーバグループ16,負荷分散装置15,クライアント1a,1b,1c,サーバ2d等を用いて構成される。
【0157】
クライアント1a,1b,1cは、パーソナルコンピュータやワークステーション等の情報処理装置を用いて構成される。クライアント1aはIPアドレスとして”20.0.0.1”を持つ。クライアント1a,1b,1cは、インターネットに接続されており、負荷分散装置15やサーバ2d等の装置と通信可能に構成される。なお、クライアントは、クライアント1a,1b,1cに限られる必要はなく、設置される数に限定はない。
【0158】
負荷分散装置15は、パーソナルコンピュータやワークステーション等の情報処理装置や専用のハードウェア等を用いて構成される。負荷分散装置15は、サーバグループ16について負荷分散処理を実行する。負荷分散装置15は、VIPとして”10.0.0.1”を持つ。図10における負荷分散装置15は、以下に説明する第一実施形態から第六実施形態における負荷分散装置15a,15b,15c,15d,15e,15fを含む。なお、クライアント1a,1b,1cと負荷分散装置15、負荷分散装置15とサーバ2a,2b,2c間のTCPコネクション作成処理については、どのような処理によって実行されても良いため、説明を省略する。また、負荷分散装置15では、サーバIDの書換方法として第二の書換方法が採用される。
【0159】
サーバグループ16は、複数台のサーバを用いて構成される。例えば、サーバ2a,2b,2c等を用いて構成される。サーバグループ16は、ドメイン名として”www.net.com”が設定されている。サーバ2a,2b,2cは、パーソナルコンピュータやワークステーション等の情報処理装置を用いて構成される。サーバ2a,2b,2cは、それぞれ異なるIPアドレスを持つ。例えば、サーバ2aは、”192.168.0.1”をIPアドレスとして持つ。また、サーバ2a,2b,2cは、アクセスURLが”www.net.com/contents/index.cgi”であるコンテンツを備える。なお、サーバは、サーバ2a,2b,2cに限られる必要はなく、設置される数に限定は無い。
【0160】
サーバ2dは、パーソナルコンピュータやワークステーション等の情報処理装置を用いて構成される。サーバ2dは、ドメイン名として”www.network.or.jp”が設定されている。また、サーバ2dは、”80.0.0.1”をIPアドレスとして持つ。
【0161】
第六の原理によれば、HTTPヘッダを含まない、即ちCookie情報を含まないパケットについては、Cookie情報書換部における処理が省略される。このため、装置全体としてのパケット転送の高速化が可能となる。
【0162】
〔第一実施形態〕
〈システム形態〉
図11は、本発明による負荷分散装置15の第一実施形態、即ち負荷分散装置15aのブロック図である。負荷分散装置15aは、ハードウェア的には、バスを介して接続されたCPU,主記憶(RAM),補助記憶装置(ハードディスク,フラッシュロム等)等を備えている。負荷分散装置15aは、補助記憶装置に記憶された各種のプログラム(OS,アプリケーション等)が主記憶にロードされCPUにより実行されることによって、ビット列抽出部17,21,振り分け先サーバ決定部18,ID・ビット列書換部19,ヘッダ更新・パケット送信部20,25,書換用テーブル記憶部22,ID生成部23,ビット列・ID書換部24等を含む装置として機能する。
【0163】
ビット列抽出部17は、CPUやRAM等を用いて構成される。ビット列抽出部17は、受信されたパケットのペイロードから、Cookie情報のNAMEフィールド,VALUEフィールド,DATEフィールド,PATHフィールド,DOMAIN_NAMEフィールドの値(各文字列)を抽出する。そして、ビット列抽出部17は、NAMEフィールド,VALUEフィールドからサーバIDを抽出する。また、ビット列抽出部17は、ID・ビット列書換部19における書き換え時の書き込み開始位置を特定する。即ち、ビット列抽出部17は、サーバIDの位置を特定する。
【0164】
振り分け先サーバ決定部18は、CPUやRAM等を用いて構成される。振り分け先サーバ決定部18は、受信されたパケットの中にCookie情報がある場合、ビット列抽出部17によって抽出されたサーバIDをキーとして、書換用テーブル22Aを検索し、受信されたパケット及びこのパケットに含まれるリクエストメッセージを含む他のパケットの振り分け先となるサーバを決める。また、この場合、振り分け先サーバ決定部18は、サーバIDに対応する書換前文字列を書換用テーブル22Aから読み出す。また、この場合、振り分け先サーバ決定部18は、処理の対象となったパケット及び読み出された書換前文字列を、ID・ビット列書換部19へ渡す。
【0165】
受信されたパケットの中にCookie情報がない場合、即ちビット列抽出部17によってCookie情報が検出されなかった場合、振り分け先サーバ決定部18は、他の振り分けルール(ラウンドロビン等)によって、このパケット及びこのパケットに含まれるリクエストメッセージを含む他のパケットの振り分け先となるサーバを決定する。この場合、振り分け先サーバ決定部18は、処理の対象となったパケットをヘッダ更新・パケット送信部20へ渡す。ただし、Cookie情報を含まないパケットが、既に振り分け先サーバを決定されたリクエストメッセージを含むパケットである場合、このパケットについてはこの振り分け先サーバに従って振り分け先となるサーバが決定される。
【0166】
ID・ビット列書換部19は、CPUやRAM等を用いて構成される。ID・ビット列書換部19は、ビット列抽出部17によって抽出されたサーバIDを、振り分け先サーバ決定部18によって書換用テーブル22Aから読み出された書換前文字列で上書きする。
【0167】
ヘッダ更新・パケット送信部20は、通信制御装置やCPUやRAM等を用いて構成される。ヘッダ更新・パケット送信部20は、クライアント側から自装置15aに入力された全てのパケットについてヘッダの更新を行う。ヘッダ更新・パケット送信部20は、ヘッダの更新において、送信先のIPアドレスを、振り分け先サーバ決定部18によって決定された送信先となるサーバのIPアドレスに変更する。また、ヘッダ更新・パケット送信部20は、ヘッダの更新において、TCP及びIPヘッダのチェクサムのように、送信先のIPアドレスの変更に伴って更新すべき値を更新する。ヘッダ更新・パケット送信部20は、ヘッダの更新を行った後、相手先となるサーバのIPアドレスごとに、別々のインタフェースによってパケットを送出する。
【0168】
ビット列抽出部21は、CPUやRAM等を用いて構成される。ビット列抽出部21は、受信されたパケットのペイロードから、Cookie情報のNAMEフィールドとVALUEフィールドとの値としてビット列(文字列)を抽出する。また、ビット列抽出部21は、パケットのペイロードにおいて、ビット列・ID書換部24によってサーバIDが書き込まれる位置、即ちサーバIDの書き込み開始位置を特定する。また、ビット列抽出部21は、受信されたパケットにCookie情報が含まれない場合、ビット列・ID書換部24をバイパスし、ヘッダ更新・パケット送信部25へパケットを渡す。
【0169】
書換用テーブル記憶部22は、RAMや不揮発性記憶装置等を用いて構成される。書換用テーブル記憶部22は、書換用テーブル22Aを記憶する。図12は、書換用テーブル22Aの例を示す図である。書換用テーブル22Aは、書き換えの記録を保持しておくテーブルである。即ち、ビット列・ID書換部24によって実行される書き換え(上書き)処理における書き換え前の文字列と書き換え後の文字列、即ちサーバIDとを対応付けて持つ。また、書換用テーブル22Aには、さらに書き換え後の文字列であるサーバIDに対応するサーバ(パケットの振り分け先のサーバ)のIPアドレスを対応付けて持つ。即ち、書換用テーブル22Aは、書き換え前の文字列と書き換え後の文字列(サーバID)とサーバのIPアドレスとを持つエントリが記録される。なお、負荷分散装置15aでは、第二の書換方法が採用される。このため、書き換え前の文字列の文字数とサーバIDの文字列の文字数とは異なる場合がある。
【0170】
ID生成部23は、CPUやRAM等を用いて構成される。ID生成部23は、
自装置15aによって既に発行されたサーバIDと重複しないサーバIDを生成する。サーバIDは、特定の長さのビット列であり、自装置15aが管理するサーバグループ16に含まれるサーバを一意に示す識別子である。ID生成部23は、生成されたサーバIDを、ビット列・ID書換部24に渡す。
【0171】
ビット列・ID書換部24は、CPUやRAM等を用いて構成される。ビット列・ID書換部24は、ビット列抽出部21によって抽出された文字列とID生成部23によって生成されたサーバIDと受信されたパケットの送信元となるサーバ2aのIPアドレスとを対応付けて書換用テーブル記憶部22へ記録する。即ち、ビット列・ID書換部24は、この三つの情報を持つエントリを、書換用テーブル22Aに登録する。また、ビット列・ID書換部24は、受信されたパケットに対し、ビット列抽出部21によって特定された書き込み開始位置をもとに、ID生成部23によって生成されたサーバIDを上書きする。
【0172】
ヘッダ更新・パケット送信部25は、通信制御装置やCPUやRAM等を用いて構成される。ヘッダ更新・パケット送信部25は、サーバグループ16側から自装置15aに入力された全てのパケットについてヘッダの更新を行う。ヘッダ更新・パケット送信部25は、ヘッダの更新において、送信元のIPアドレスを自装置15aの管理するVIPに変更する。また、ヘッダ更新・パケット送信部25は、ヘッダの更新において、TCP及びIPヘッダのチェクサムのように、送信元のIPアドレスの変更に伴って更新すべき値を更新する。ヘッダ更新・パケット送信部25は、ヘッダの更新を行った後、相手先となるクライアントのIPアドレスごとに、別々のインタフェースによってパケットを送出する。
【0173】
〈動作シーケンス〉
図13は、第一実施形態による負荷分散装置15aを用いた負荷分散システム14における動作シーケンスの例を示す図である。クライアント1aは、リクエストメッセージ(HTTPリクエストメッセージ)を作成し、VIP1宛にこのリクエストメッセージを送信する(seq1a)。このとき、リクエストメッセージの送信先アドレス及び送信先ポート番号、即ちリクエストメッセージを含むパケットのヘッダにおける送信先アドレス及び送信先ポート番号は、”10.0.0.1”,”80”である。また、リクエストメッセージの送信元アドレス及び送信元ポート番号は、”20.0.0.1”,”5000”である。
【0174】
負荷分散装置15aがクライアント1aからリクエストメッセージを受信すると、まずビット列抽出部17がCookie情報の抽出を行う。ここでは、リクエストメッセージにCookie情報が含まれないため、Cookie情報は抽出されない。
【0175】
振り分け先サーバ決定部18は、ビット列抽出部17によってCookie情報が抽出されないため、ラウンドロビン等の振り分けルールを用いて、振り分け先となるサーバを決定する。ここでは、振り分け先のサーバとして、IPアドレス”192.168.0.1”が設定されたサーバ2aが決定されたと仮定する。また、ビット列抽出部17によってCookie情報が抽出されないため、振り分け先サーバ決定部18は、振り分け先が決定されたリクエストメッセージ(振り分け先が決定されたリクエストメッセージを含むパケット)を、ヘッダ更新・パケット送信部20へ渡す。
【0176】
ヘッダ更新・パケット送信部20は、処理対象のパケットのヘッダにおける送信先アドレスをサーバ2aのIPアドレス”192.168.0.1”に変更する。そして、ヘッダ更新・パケット送信部20は、このパケットをサーバ2aに対して転送する。即ち、ヘッダ更新・パケット送信部20は、このパケットに含まれるリクエストメッセージをサーバ2aに転送する(seq2a)。
【0177】
サーバ2aは、リクエストメッセージを受信すると、このリクエストメッセージ対するコンテンツからリプライメッセージを作成する。このとき、サーバ2aは、リプライメッセージの中に、Cookie情報を追加する。ここで、サーバ2aは、Set−Cookieコマンドとして、”Set−Cookie:C1=CokieForClient1”を発行し、リプライメッセージに付加すると仮定する。そして、サーバ2aは、このリプレイメッセージをクライアント1a宛に送信する。即ち、サーバ2aは、このリプライメッセージを含むパケットをクライアント1a宛に送信する(seq3a)。このとき、このパケットの送信先アドレス及び送信先ポート番号は、”20.0.0.1”及び”5000”である。また、このとき、このパケットの送信元アドレス及び送信元ポート番号は”192.168.0.1”及び”80”である。
【0178】
負荷分散装置15aがサーバ2aからリプライメッセージを受信すると、ビット列抽出部21はCookie情報の抽出を行う。ビット列抽出部21は、”C1=CokieForClient1”という文字列を抽出する。また、ビット列抽出部21は、この文字列の先頭文字を書き換え開始位置として検出する。
【0179】
ID生成部23は、サーバIDを生成する。ビット列・ID書換部24は、ID生成部23から、新しいサーバIDとして”a(e%”を取得する。ビット列・ID書換部24は、このサーバIDと、ビット列抽出部21によって検出された書き換え開始位置以降の文字列とを置き換える。即ち、ビット列・ID書換部24は、Cookie情報を”a(e%=okieForClient1”と書き換える。また、ビット列・ID書換部24は、書換用テーブル22Aに、”C1=Co,a(e%,192.168.0.1”というエントリを記録する。
【0180】
ヘッダ更新・パケット送信部25は、パケットのヘッダにおける送信元アドレスをVIP1に変更し、クライアント1aに対して転送する(seq4a)。
【0181】
クライアント1aは、負荷分散装置15aからリプライメッセージを受信する。クライアント1aは、受信されたリプライメッセージに含まれるCookie情報”a(e%=okieForClient1”を、ローカルのCookie表に記録する。このとき、クライアント1aは、未記入のパラメータについては、path=/contents/、domain=www.net.comとして記録する。
【0182】
この後、クライアント1aは、domain=www.net.com,path=/contents/に対応するコンテンツへリクエストメッセージを送信する場合、ローカルのCookie表から、このパスに対応付けて記録されたCookie情報”a(e%=okieForClient1”を読み出す。そして、クライアント1aは、読み出されたCookie情報”a(e%=okieForClient1”を用いてリクエストメッセージを作成し、VIP1宛にこのリクエストメッセージを含むパケットを送信する(seq5a)。このとき、このパケットの送信先アドレス及び送信先ポート番号は”10.0.0.1”及び”80”である。また、このとき、このパケットの送信元アドレス及び送信元ポート番号は、”20.0.0.1”及び”5000”である。
【0183】
負荷分散装置15aがクライアント1aからこのリクエストメッセージを受信すると、まずビット列抽出部17がCookie情報の抽出を実行する。ビット列抽出部17は、Cookie情報”a(e%=okieForClient1”を抽出する。そして、ビット列抽出部17は、サーバIDが”a(e%”であると特定する。
【0184】
振り分け先サーバ決定部18は、書換用テーブル22Aにおいて、サーバIDが”a(e%”であるエントリを検索する。ここで、リプライメッセージの転送時に記録された”C1=Co,a(e%,192.168.0.1”というエントリが検索される。このため、振り分け先サーバ決定部18は、振り分け先となるサーバが、IPアドレス”192.168.0.1”が設定されたサーバ2aであることを特定する。また、振り分け先サーバ決定部18は、文字列”a(e%”の書き換えの際に使用される文字列が”C1=Co”であることを特定する。
【0185】
ID・ビット列書換部19は、リクエストメッセージに含まれるCookie情報に対して書き換えを行い、”C1=CokieForClient1”というCookie情報を生成する。即ち、ID・ビット列書換部19は、サーバ2aから発行されたCookie情報を復元する。
【0186】
ヘッダ更新・パケット送信部20は、パケットのヘッダにおける送信先アドレスを、サーバ2aのIPアドレスである”192.168.0.1”に変更する。そして、ヘッダ更新・パケット送信部20は、サーバ2aに対してリクエストメッセージを転送する(seq6a)。
【0187】
サーバ2aは、リクエストメッセージを受信すると、このリクエストメッセージに対応するコンテンツからリプライメッセージを作成する。このとき、リプライメッセージに”Set−Cookie:C2=CokieForClient2”というCookie情報を付加すると仮定する。即ち、サーバ2aは、受信されたリクエストメッセージに含まれるCookie情報と異なるNAME値を持つCookie情報を付加すると仮定する。そして、サーバ2aは、クライアント1a宛に、このリプライメッセージを含むパケットを送信する(seq7a)。このとき、このパケットの送信先アドレス及び送信先ポート番号は、”20.0.0.1”及び”5000”である。また、このとき、このパケットの送信元アドレス及び送信元ポート番号は、”192.168.0.1”及び”80”である。
【0188】
負荷分散装置15aがサーバ2aからリプライメッセージを受信すると、ビット列抽出部21がCookie情報の抽出を行う。そして、ビット列抽出部21は、”C2=CokieForClient2”という文字列をCookie情報として抽出する。また、ビット列抽出部21は、この文字列の先頭文字を書き換え開始位置として検出する。
【0189】
ビット列・ID書換部24は、ID生成部23から新しいサーバIDとして”bePe”を取得する。ビット列・ID書換部24は、このサーバIDと、ビット列抽出部21によって検出された書き換え開始位置以降の文字列”C2=Co”を置き換え、Cookie情報を”bePe=okieForClient2”と書き換える。また、ビット列・ID書換部24は、書換用テーブル22Aのエントリとして”C2=Co,bePe,192.168.0.1”を記録する。
【0190】
ヘッダ更新・パケット送信部25は、送信元アドレスをVIP1に変更し、クライアント1aに対してリプライメッセージを転送する(seq8a)。
【0191】
クライアント1aは、負荷分散装置15aからリプライメッセージを受信する。クライアント1aは、受信されたリプライメッセージに含まれるCookie情報”bePe=okieForClient2”を、ローカルのCookie表に記録する。このとき、クライアント1aは、未記入のパラメータについては、path=/contents/、domain=www.net.comとして記録する。
【0192】
〈作用・効果〉
本発明の第一実施形態によれば、ビット列・ID書換部24が、サーバ2aから発行されたCookie情報に対して、このCookie情報の発行元を示すサーバIDを上書きする。このとき、ビット列・ID書換部24は、サーバIDと同じ長さ(”=”を含まない状態で同じ長さ)のCookie情報の文字列に対してサーバIDを上書きする。そして、クライアント1aは、サーバIDが上書きされたCookie情報を記憶し、リクエストメッセージを送信する際に、サーバIDが上書きされたCookie情報を添付する。このため、サーバIDが上書きされたCookie情報のサイズが変更されず、結果としてこのCookie情報を含むメッセージやパケットのサイズが変更されない。従って、サーバ2aとクライアント1aとの間でTCPによるデータ到達の保障が実現され、負荷分散装置15aがTCPによるデータ到達の保障を実施する必要がない。この結果、負荷分散装置15aにおいて負荷分散処理以外の処理に負荷を要しないため、Cookie情報に応じた負荷分散処理によるパケット転送を高速に実現することが可能となる。
【0193】
〔第二実施形態〕
〈システム構成〉
図14は、本発明による負荷分散装置15の第二実施形態、即ち負荷分散装置15bのブロック図である。負荷分散装置15bについて、負荷分散装置15aと異なる構成についてのみ説明する。
【0194】
負荷分散装置15bは、NAMEビット列テーブル記憶部26,NAMEビット列記録部27,NAMEビット列比較部28をさらに備える。
【0195】
NAMEビット列テーブル記憶部26は、ハードディスクやフラッシュメモリ等の不揮発性記憶装置やRAM等を用いて構成される。NAMEビット列テーブル記憶部26は、NAMEビット列テーブル26Aを記憶する。図15は、NAMEビット列テーブル26Aの例を示す図である。NAMEビット列テーブル26Aは、サーバ2aに転送される時点のリクエストメッセージに含まれるCookie情報のNAME値と、クライアント1aから受信された時点のリクエストメッセージに含まれるCookie情報におけるサーバIDとを対応付けたエントリを持つ。また、NAMEビット列テーブル26Aにおけるエントリは、さらにクライアント1aのIPアドレスとクライアント1aのポート番号、即ちリクエストメッセージにおける送信元アドレスと送信元ポート番号とを対応付けて持つ。
【0196】
NAMEビット列記録部27は、CPUやRAM等を用いて構成される。NAMEビット列記録部27は、クライアント1aから受信されたリクエストメッセージに含まれるサーバIDと、このリクエストメッセージがサーバ2aに転送される時点でのNAME値とクライアント1aのIPアドレス及びポート番号とを対応付けたエントリをNAMEビット列テーブル26Aに記録する。
【0197】
NAMEビット列比較部28は、CPUやRAM等を用いて構成される。NAMEビット列比較部28は、受信されたリプライメッセージに含まれるCookie情報のNAME値をキーとして、NAMEビット列テーブル26Aを検索する。そして、NAMEビット列比較部28は、サーバ2aから発行されたCookie情報に対し、新たなサーバIDを用いて上書きを行うか否かを判断する。即ち、受信されたリプライメッセージに含まれるCookie情報のNAME値が、過去に自装置15bによって受信されたリクエストメッセージに含まれたCookie情報におけるNAME値と一致するか否かを判断する。
【0198】
NAME値が一致した場合、NAMEビット列比較部28は、NAME値に対応付けられたサーバIDを、NAMEビット列テーブル26Aから取得する。そして、NAMEビット列比較部28は、ビット列・ID書換部24bに対し、読み出されたサーバIDとともに同一判定報告を通知する。一方、一致するNAME値がNAMEビット列テーブル26Aに記録されていない場合、相違判定報告をビット列・ID書換部24bに通知する。
【0199】
ビット列・ID書換部24bは、NAMEビット列比較部28からサーバIDとともに同一判定報告を通知された場合、通知されたサーバIDを用いてCookie情報の上書きを実行する点で、ビット列・ID書換部24と異なる。なお、ビット列・ID書換部24bは、NAMEビット列比較部28から相違判定報告を通知された場合、ビット列・ID書換部24と同様の処理を実行する。
【0200】
〈動作シーケンス〉
図16は、第二実施形態による負荷分散装置15bを用いた負荷分散システム14における動作シーケンスの例を示す図である。以下、第二実施形態における動作シーケンスについて、第一実施形態と異なる動作についてのみ説明する。
【0201】
seq1b〜seq5bにおける処理は、第一実施形態におけるseq1a〜seq5aにおける処理と同様である。このため、説明を省略する。
【0202】
負荷分散装置15bがクライアント1aからリクエストメッセージを受信すると(seq5b)、まずビット列抽出部17が、受信されたリクエストメッセージに含まれるCookie情報を抽出する。そして、ビット列抽出部17は、Cookie情報 ”a(e%=okieForClient1”を抽出し、サーバIDが”a(e%”であると特定する。また、ビット列抽出部17は、書き換え開始位置を特定する。
【0203】
振り分け先サーバ決定部18は、書換用テーブル22AにおいてサーバIDが”a(e%”であるエントリを検索する。検索の結果、振り分け先サーバ決定部18は、”C1=Co,a(e%,192.168.0.1”というエントリを読み出す。即ち、振り分け先サーバ決定部18は、上書きする文字列が”C1=Co”、振り分け先となるサーバのIPアドレスが”192.168.0.1”であると特定する。
【0204】
NAMEビット列記録部27は、サーバID,NAME値,クライアントのIPアドレス,クライアントのポート番号夫々の値が”a(e%”,”C1”,”20.0.0.1”,”5000”であるエントリをNAMEビット列テーブル26Aに記録する。
【0205】
ID・ビット列書換部19は、リクエストメッセージに含まれるCookie情報に対して、振り分け先サーバ決定部18によって読み出された文字列”C1=Co”を用いて、文字列”a(e%”を上書きする。即ち、ID・ビット列書換部19は、リクエストメッセージにおいて、サーバ2aによって発行されたCookie情報”C1=CokieForClient1”を復元する。
【0206】
ヘッダ更新・パケット送信部20は、パケットのヘッダにおける送信先アドレスを、振り分け先サーバ決定部18によって読み出されたIPアドレス”192.168.0.1”に変更する。即ち、ヘッダ更新・パケット送信部20は、パケットの送信先をサーバ2aと設定する。そして、ヘッダ更新・パケット送信部20は、サーバ2aに対してリクエストメッセージを転送する(seq6b)。
【0207】
サーバ2aはリクエストメッセージを受信すると、このリクエストメッセージに対応するコンテンツからリプライメッセージを作成する。このとき、サーバ2aは、リプライメッセージにSet−Cookieコマンドとして”Set−Cookie:C1=CokieForClient2”を付加すると仮定する。即ち、サーバ2aは、受信されたリクエストメッセージと同じNAME値を持ち、異なるVALUE値を持つCookie情報を付加すると仮定する。そして、サーバ2aは、クライアント1a宛に、リプライメッセージを含むパケットを送信する(seq7b)。このとき、このパケットの送信先アドレス及び送信先ポート番号は、”20.0.0.1”及び”5000”である。また、このとき、このパケットの送信元アドレス及び送信元ポート番号は、”192.168.0.1”及び”80”である。
【0208】
負荷分散装置15bがサーバ2aからリプライメッセージを受信すると、ビット列抽出部21がCookie情報を抽出する。ビット列抽出部21は、Cookie情報として、”C1=CokieForClient2”という文字列を抽出する。
【0209】
NAMEビット列比較部28は、抽出されたCookie情報のNAME値”C1”をキーとして、NAMEビット列テーブル26Aを検索する。この結果、NAMEビット列比較部28は、NAME値”C1”に対応するサーバIDとして”a(e%”を読み出す。そして、NAMEビット列比較部28は、このサーバIDを示す文字列を、同一判定報告とともにビット列・ID書換部24bに通知する。
【0210】
ビット列・ID書換部24bは、NAMEビット列比較部28から、同一判定報告とともに、サーバID”a(e%”を通知される。ビット列・ID書換部24bは、このサーバID及び”=”から構成される5文字の文字列と、リプライメッセージに含まれるCookie情報の先頭から5文字とを書き換える。そして、ビット列・ID書換部24bは、リプライメッセージのCookie情報を”a(e%=kieForClient2”と書き換える。また、ビット列・ID書換部24bは、書換用テーブル22Aに、サーバID(書換後文字列),書換前文字列,及びサーバIPアドレスとして、”a(e%”,”C2=Co”,”192.168.0.1”をもつエントリを記録する。
【0211】
ヘッダ更新・パケット送信部25は、このリプライメッセージを含むパケットの送信元アドレスをVIP1に変更する。そして、ヘッダ更新・パケット送信部25は、クライアント1aに対してリプライメッセージを転送する。
【0212】
クライアント1aは、リプライメッセージを負荷分散装置15bから受信する。クライアント1aは、受信されたリプライメッセージに含まれるCookie情報 ”a(e%=kieForClient2”をローカルのCookie表に記録する。このとき、クライアント1aは、既に記録されているCookie情報 ”a(e%=okieForClient1”のエントリを上書きする。即ち、この二つのCookie情報のNAME値が一致しているため、クライアント1aは、最新のCookie情報を用いて、エントリを上書きする。このとき、クライアント1aは、未記入のパラメータについては、path=/contents/、domain=www.net.comとして記録する。
【0213】
〈作用・効果〉
第二実施形態によれば、NAMEビット列比較部28が、過去に自装置15bに受信されたリクエストメッセージに含まれたCookie情報におけるNAME値と同一のNAME値を持つリプライメッセージを検出する。NAMEビット列比較部28は、このNAME値に対応付けられたサーバIDをNAMEビット列テーブル26Aから読み出し、ビット列・ID書換部24bに通知する。そして、ビット列・ID書換部24bは、通知されたサーバIDを用いて、このリプライメッセージに含まれるCookie情報の書き換えを実行する。このため、同一のNAME値を持つCookie情報には同一のサーバIDが付与される。つまり、同一のNAME値を持つCookie情報は、同一のNAME値を持つCookie情報となるように、サーバIDが付加される。従って、サーバ2aによって発行された同一のNAME値を持つCookie情報は、負荷分散装置15bによってCookie情報の書き換えが実行されたとしても、同じNAME値のCookie情報としてクライアント1aに転送される。
【0214】
〈変形例〉
NAMEビット列テーブル26Aは、エントリの項目として、対応するCookie情報の有効期限を持つように構成されても良い。この場合、有効期限の切れたエントリは、NAMEビット列テーブル26Aから消去される。
【0215】
〔第三実施形態〕
〈システム構成〉
図17は、本発明による負荷分散装置15の第三実施形態、即ち負荷分散装置15cのブロック図である。負荷分散装置15cについて、負荷分散装置15aと異なる構成についてのみ説明する。
【0216】
負荷分散装置15cは、NAMEフィルタ部29,30をさらに備える。また、負荷分散装置15cは、ビット列・ID書換部24に換えてビット列・ID書換部24cを備える。また、負荷分散装置15cは、ID・ビット列書換部19に換えてID・ビット列書換部19cを備える。また、負荷分散装置15cは、振り分け先サーバ決定部18に換えて振り分け先サーバ決定部18cを備える。
【0217】
NAMEフィルタ部29,30は、CPUやRAMや不揮発性記憶装置等を用いて構成される。NAMEフィルタ部29,30は、自身が備える不揮発性記憶装置に、Cookie情報のNAME値を記憶する。NAMEフィルタ部29,30は、書き換えの対象外となるCookie情報を判断するために、NAME値を記憶する。NAMEフィルタ部29,30は、受信されたメッセージに含まれるCookie情報のNAME値が、自身が記憶するNAME値と一致するか否かを判断する。一致する場合、NAMEフィルタ部29,30は、このメッセージをビット列・ID書換部24cに渡す。
【0218】
一方、NAMEフィルタ部30は、自身が記憶するNAME値と同じNAME値を持つCookie情報を含んだリプライメッセージについては、第一の解決方法を適用する。即ち、NAMEフィルタ部30は、サーバIDを含む新たなCookie情報(挿入Cookie情報)をリプライメッセージに挿入するように、ビット列・ID書換部24に通知する。
【0219】
NAMEフィルタ部29は、自身が記憶するNAME値と同じNAME値を持つCookie情報を含んだリクエストメッセージについては、挿入Cookie情報からサーバIDを読み出すように、振り分け先サーバ決定部18cに通知する。
【0220】
ビット列・ID書換部24cは、NAMEフィルタ部30から挿入Cookie情報を挿入するように通知された場合、リプライメッセージに挿入Cookie情報を挿入する。
【0221】
振り分け先サーバ決定部18cは、NAMEフィルタ部29から挿入Cookie情報の読み出しを通知された場合、リクエストメッセージから挿入Cookie情報を読み出し、この挿入Cookie情報からサーバIDを抽出する。そして、振り分け先サーバ決定部18cは、このサーバIDを用いて振り分け先となるサーバを決定する。このとき、振り分け先サーバ決定部18cは、挿入Cookie情報削除命令を、ID・ビット列書換部19cに通知する。
【0222】
ID・ビット列書換部19cは、挿入Cookie情報削除命令を通知されると、リクエストメッセージから挿入Cookie情報を削除する。ここで、挿入Cookie情報は、NAME値やVALUE値をもって挿入Cookie情報であると判断される。
【0223】
〈動作シーケンス〉
図18は、第三実施形態による負荷分散装置15cを用いた負荷分散システム14における動作シーケンスの例を示す図である。以下、第三実施形態における動作シーケンスについて、第一実施形態と異なる動作についてのみ説明する。
【0224】
ここでは、サーバ2aがseq3c及びseq7cにおけるリプライメッセージに付加したCookie情報を、クライアント1aで実行されるプログラム(例:JavaScript)が利用すると仮定する。このため、負荷分散装置15cは、seq3c及びseq7cにおけるリプライメッセージ、即ち”C1”というNAME値を持つCookie情報を含んだリプライメッセージについては書き換えを実行しないように設定される。この設定は、負荷分散装置15cの管理者などによって実行される。
【0225】
seq1c〜seq3cにおける処理は、第一実施形態におけるseq1a〜seq3aにおける処理と同様である。このため、説明を省略する。
【0226】
負荷分散装置15cがサーバ2aからリプライメッセージを受信すると(seq3c)、ビット列抽出部21がCookie情報を抽出する。そして、ビット列抽出部21は、Cookie情報として”C1=CokieForClient1”という文字列を抽出する。
【0227】
NAMEフィルタ部30は、ビット列抽出部21によって抽出されたCookie情報が書き換え対象外のCookie情報であるか否かを確認する。ここで、NAME値”C1”は、書き換え対象外のNAME値として記憶されていると仮定する。即ち、NAMEフィルタ部30は、NAME値”C1”を記憶していると仮定する。このため、ビット列・ID書換部24cは、このリプライメッセージに対し、挿入Cookie情報を挿入する。
【0228】
ヘッダ更新・パケット送信部25は、パケットのヘッダにおける送信元アドレスをVIP1に変更する。そして、ヘッダ更新・パケット送信部25は、クライアント1aに対してこのリプライメッセージを転送する(seq4c)。
【0229】
クライアント1aは、負荷分散装置15cからリプライメッセージを受信する。クライアント1aは、受信されたリプライメッセージに含まれるCookie情報”C1=CokieForClient1”及び挿入Cookie情報をローカルのCookie表に記録する。このとき、クライアント1aは、いずれのCookie情報についても、未記入のパラメータについては、path=/contents/、domain=www.net.comとして記録する。
【0230】
クライアント1aは、例えばJavaScriptのようなプログラムを実行し、このプログラムで用いられるCookie情報をローカルのCookie表から読み出す。ここでは、Cookie情報”C1=CokieForClient1”が読み出され、プログラムで用いられると仮定する。このため、クライアント1aは、ローカルのCookie表から、seq4cにおいて受信されたリプライメッセージに含まれていたCookie情報”C1=CokieForClient1”を読み出す。
【0231】
次に、クライアント1aは、VIP1宛のリクエストメッセージを送信する際に、Cookie情報”C1=CokieForClient1”及び挿入Cookie情報を読み出し、リクエストメッセージを作成する。そして、クライアント1aは、このリクエストメッセージを含むパケットをVIP1宛に送信する(seq5c)。このとき、送信先アドレス及び送信先ポート番号は、”10.0.0.1”及び”80”である。また、このとき、送信元アドレス及び送信元ポート番号は、”20.0.0.1”及び”5000”である。
【0232】
負荷分散装置15cがクライアント1aからリクエストメッセージを受信すると、まずビット列抽出部17がCookie情報を抽出する。この結果、ビット列抽出部17は、Cookie情報”C1=CokieForClient1”及び挿入Cookie情報を抽出する。
【0233】
NAMEフィルタ部29は、ビット列抽出部17によって抽出されたリクエストメッセージに含まれるCookie情報のNAME値”C1”が、書き換え対象外として記憶されるNAME値と一致するか否かを判断する。ここで、NAME値”C1”は、書き換え対象外のNAME値として記憶されているため、振り分け先サーバ決定部18cは、挿入Cookie情報からサーバIDを読み出す。このとき、挿入Cookie情報は、例えばNAME値によって挿入Cookie情報であると判断される。振り分け先サーバ決定部18cは、読み出したサーバIDをもとに、振り分け先となるサーバを決定する。即ち、振り分け先サーバ決定部18cサーバ2aを振り分け先のサーバとして決定する。そして、振り分け先サーバ決定部18cは、挿入Cookie削除命令を、ID・ビット列書換部19cに通知する。ID・ビット列書換部19cは、挿入Cookie情報をリクエストメッセージから削除する。
【0234】
ヘッダ更新・パケット送信部20は、パケットのヘッダにおける送信先アドレスを、振り分け先のサーバであるサーバ2aのIPアドレス”192.168.0.1”に変更する。そして、ヘッダ更新・パケット送信部20は、サーバ2aに対してリクエストメッセージを転送する(seq6c)。
【0235】
サーバ2aは、リクエストメッセージを受信すると、このリクエストメッセージに対応するコンテンツからリプライメッセージを作成する。このとき、サーバ2aは、リプライメッセージに、Cookie情報を付加する。ここで、サーバ2aは、Set−Cookieコマンドとして、”Set−Cookie:C1=CokieForClient2”を発行し、リプライメッセージに付加すると仮定する。そして、サーバ2aは、このリプライメッセージをクライアント1a宛に送信する。即ち、サーバ2aは、このリプライメッセージを含むパケットをクライアント1a宛に送信する(seq7c)。
【0236】
以降、このリプライメッセージに関する負荷分散装置15c及びクライアント1aの動作は、seq3c及びseq4cにおけるリプライメッセージに関する動作と同様(ただし、クライアント1aのローカルのCookie表において、同一NAME値を持つCookie情報の上書きは実行される)である。このため、説明を省略する。
【0237】
〈作用・効果〉
第三実施形態によれば、あらかじめCookie情報の書き換えの対象外とされるCookie情報のNAME値がNAMEフィルタ部29,30に登録される。そして、NAMEフィルタ部29,30に登録されているNAME値を持つCookie情報については、ビット列・ID書換部24c,19c,振り分け先サーバ決定部18cにおいて、Cookie情報の書き換え等が実行されずに、従来技術である第一の解決方法を用いた処理が実行される。このため、NAME値があらかじめNAME値フィルタ部29,30に設定されることにより、このNAME値を持つCookie情報は、サーバ2aによって発行された状態でクライアント1aに通知される。第三実施形態による負荷分散装置15cは、クライアント1aにおいて実行されるプログラム等が、サーバ2aによって発行されるCookie情報を用いることを前提とされている場合などに有効である。
【0238】
〈変形例〉
Cookie情報の書き換えを実行しない場合に適用される方法は、第三実施形態における作用・効果が失われない範囲内であれば、第一の解決方法とは異なる方法であっても良い。
【0239】
〔第四実施形態〕
〈システム構成〉
図19は、本発明による負荷分散装置15の第四実施形態、即ち負荷分散装置15dのブロック図である。負荷分散装置15dについて、負荷分散装置15aと異なる構成についてのみ説明する。
【0240】
負荷分散装置15dは、ドメインフィルタ部31をさらに備える。
【0241】
ドメインフィルタ部31は、CPUやRAMや不揮発性記憶装置等を用いて構成される。ドメインフィルタ部31は、自身が備える不揮発性記憶装置に、書き換え対象となるCookie情報のDOMAIN_NAME値を記憶する。ドメインフィルタ部31は、自身が記憶するDOMAIN_NAME値を持つCookie情報については、Cookie情報の書き換えを実行するため、このCookie情報を含むパケットをビット列・ID書換部24に渡す。一方、ドメインフィルタ部31は、自身が記憶しないDOMAIN_NAME値を持つCookie情報については、Cookie情報の書き換えを実行しないため、このCookie情報を含むパケットを、ヘッダ更新・パケット送信部25へバイパスする。
【0242】
〈動作シーケンス〉
図20は、第四実施形態による負荷分散装置15dを用いた負荷分散システム14における動作シーケンスの例を示す図である。以下、第四実施形態における動作シーケンスについて、第一実施形態と異なる動作についてのみ説明する。
【0243】
ここでは、サーバ2aによって発行されたCookie情報が、サーバ2aと管理ドメインが異なるサーバ2dに対し、クライアント1aによって送信される状況を仮定する。このために、負荷分散装置15dは、自身15dが管理するドメイン名として”www.net.com”が設定される。この設定は、負荷分散装置15dの管理者などによって実行される。
【0244】
seq1d〜seq2dにおける処理は、第一実施形態におけるseq1a〜seq2aにおける処理と同様である。
【0245】
サーバ2aは、seq2dにおけるリクエストメッセージを受信すると、このリクエストメッセージに対応するコンテンツからリプライメッセージを作成する。このとき、サーバ2aは、リプライメッセージに、Cookie情報を付加する。ここで、サーバ2aは、Set−Cookieコマンドとして、”Set−Cookie:C1=CokieForClient1 domain=www.network.or.jp”を発行し、リプライメッセージに付加すると仮定する。そして、サーバ2aは、このリプライメッセージをクライアント1a宛に送信する。即ち、サーバ2aは、このリプライメッセージを含むパケットをクライアント1a宛に送信する(seq3d)。このとき、送信先アドレス及び送信先ポート番号は、”20.0.0.1”及び”5000”である。また、このとき、送信元アドレス及び送信元ポート番号は、”192.168.0.1”及び”80”である。
【0246】
負荷分散装置15dがサーバ2aからリプライメッセージを受信すると、ビット列抽出部21がCookie情報を抽出する。そして、ビット列抽出部21は、Cookie情報として”C1=CokieForClient1 domain=www.network.or.jp”という文字列を抽出する。
【0247】
ドメインフィルタ部31は、ビット列抽出部21によって抽出されたCookie情報のDOMAIN_NAME値がバイパス対象のDOMAIN_NAME値であるか否かを確認する。ここで、DOMAIN_NAME値”www.net.com”は、バイパス対象外のDOMAIN_NAME値として記憶されている。一方、ドメインフィルタ部31は、DOMAIN_NAME値”www.network.or.jp”を記憶していない。このため、このリプライメッセージについては、Cookie情報を書き換える処理がバイパスされる。従って、ドメインフィルタ部31は、このリプライメッセージをヘッダ更新・パケット送信部25へバイパスする。
【0248】
ヘッダ更新・パケット送信部25は、このパケットのヘッダにおける送信元アドレスをVIP1に変更する。そして、ヘッダ更新・パケット送信部25は、クライアント1aに対してこのリプライメッセージを転送する(seq4d)。
【0249】
クライアント1aは、負荷分散装置15dからリプライメッセージを受信する。クライアント1aは、受信されたリプライメッセージに含まれるCookie情報”C1=CokieForClient1 domain=www.network.or.jp”をローカルのCookie表に記録する。
【0250】
次に、クライアント1aは、サーバ2d宛のリクエストメッセージを送信する際に、Cookie情報”C1=CokieForClient1 domain=www.network.or.jp”を読み出し、リクエストメッセージを作成する。そして、クライアント1aは、このリクエストメッセージを含むパケットを、サーバ2d宛に送信する(seq5d)。このとき、送信先アドレス及び送信先ポート番号は”80.0.0.1”及び”80”である。また、このとき、送信元アドレス及び送信元ポート番号は、”20.0.0.1”及び”5000”である。
【0251】
サーバ2dは、クライアント1aからCookie情報”C1=CokieForClient1 domain=www.network.or.jp”が付加されたリクエストメッセージを受信する。
【0252】
〈作用・効果〉
第四実施形態によれば、あらかじめCookie情報の置き換えの対象外とされるCookie情報のDOMAIN_NAME値がドメインフィルタ部31に登録される。そして、DOMAIN_NAMEフィルタ部31は、登録されているDOMAIN_NAME値を持つCookie情報については、書き換えが実行されないように、このCookie情報を含むパケットをヘッダ更新・パケット送信部25へバイパスする。このため、DOMAIN_NAME値があらかじめドメインフィルタ部31に設定されることにより、このDOMAIN_NAME値を持つCookie情報は、サーバ2aによって発行された状態でクライアント1a,サーバ2dに通知される。第四実施形態による負荷分散装置15dは、サーバ2aによって発行されたCookie情報が、クライアント1aを経由して、負荷分散装置15dの管理外となるドメインに設置されたサーバ2dに通知される場合などに有効である。
【0253】
〔第五実施形態〕
〈システム構成〉
図21は、本発明による負荷分散装置15の第五実施形態、即ち負荷分散装置15eのブロック図である。負荷分散装置15eについて、負荷分散装置15aと異なる構成についてのみ説明する。
【0254】
負荷分散装置15eは、テーブルエントリ消去部32をさらに備える。また、負荷分散装置15eは、書換用テーブル記憶部22に換えて書換用テーブル記憶部22eを備える。また、負荷分散装置15eは、ビット列・ID書換部24に換えてビット列・ID書換部24eを備える。
【0255】
書換用テーブル記憶部22eは、書換用テーブル22に換えて書換用テーブル22Bを記憶する点で書換用テーブル記憶部22と異なる。図22は、書換用テーブル22Bの例を示す図である。書換用テーブル22Bは、エントリの項目として、LRU用ビット及び有効期限をさらに持つ点で、書換用テーブル22Aと異なる。
【0256】
LRU用ビットは、”0”又は”1”のいずれかの値を持ち、エントリが記録されたばかりの状態、即ち初期状態では”1”を持つ。また、書換用テーブル22Bにおいてあるエントリが消去された場合に、全てのエントリにおけるLRU用ビットは”0”の値に書き換えられる。LRU用ビットは、対応するエントリが、振り分け先サーバ決定部18又はビット列・ID書換部24eによってアクセス(読み込み)された場合、”1”に書き換えられる。このため、LRU用ビットが”0”であるエントリは、前回のエントリ消去から一度もアクセスされていないことがわかる。
【0257】
有効期限の値は、対応するエントリの有効期限を示す値であり、日,月,年,時,分,秒の値を持つ。有効期限の値は、GMT(Greenwich Mean Time)として記録されても良い。
【0258】
テーブルエントリ消去部32は、CPUやRAM等を用いて構成される。テーブルエントリ消去部32は、新たなサーバIDが発行されてCookie情報に対する上書きが実行される場合に、書換用テーブル22Bのエントリから有効期限の切れているエントリを検索する。テーブルエントリ消去部32は、有効期限の切れているエントリを検出した場合、このエントリに対して新たに書き込まれるエントリを上書きするようにビット列・ID書換部24eに指示する。
【0259】
ビット列・ID書換部24eは、テーブルエントリ消去部32から受ける指示に応じて、新たなエントリを上書きする対象となるエントリを選択する点で、ビット列・ID書換部24と異なる。即ち、ビット列・ID書換部24eは、エントリを書換用テーブル22Bへ記録する際に、テーブルエントリ消去部32によって上書き用のエントリが指定されている場合、指定されたエントリに上書きすることによって新たなエントリを記録する。また、ビット列・ID書換部24eは、テーブルエントリ消去部32によるエントリの指定が無い場合、LRU(Latest Recently Used)のアルゴリズムを用いて上書きするエントリを選択し、記録する。この場合、ビット列・ID書換部24eは、書換用テーブル22Bにおいて、LRU用ビットが”0”であるエントリを上書きするエントリとして1つ選択し、このエントリに対して新たなエントリを上書きする。
【0260】
〈動作シーケンス〉
図23は、第五実施形態による負荷分散装置15eを用いた負荷分散システム14における動作シーケンスの例を示す図である。以下、第五実施形態における動作シーケンスについて、第一実施形態と異なる動作についてのみ説明する。
【0261】
ここでは、seq3eにおけるリプライメッセージに付加されたCookie情報に有効期限が指定されており、この有効期限がseq7eにおけるリプライメッセージが負荷分散装置15eに受信された時点で切れるという状況を仮定する。
【0262】
seq1e〜seq2eにおける処理は、第一実施形態におけるseq1a〜seq2aにおける処理と同様である。このため、説明を省略する。
【0263】
サーバ2aは、seq2eにおけるリクエストメッセージを受信すると、このリクエストメッセージに対応するコンテンツからリプライメッセージを作成する。このとき、サーバ2は、リプライメッセージに、Cookie情報を付加する。ここで、サーバ2aは、Set−Cookieコマンドとして、”Set−Cookie:C1=CokieForClient1 expire=Sat,04−Apr−2002 09:30:30 GMT”を発行し、リプライメッセージに付加すると仮定する。そして、サーバ2aは、このリプライメッセージをクライアント1a宛に送信する。即ち、サーバ2aは、このリプライメッセージを含むパケットをクライアント1a宛に送信する(seq3e)。このとき、送信先アドレス及び送信先ポート番号は、”20.0.0.1”及び”5000”である。また、このとき、送信元アドレス及び送信元ポート番号は、”192.168.0.1”及び”80”である。
【0264】
負荷分散装置15eがサーバ2aからリプライメッセージを受信すると、ビット列抽出部21がCookie情報を抽出する。そして、ビット列抽出部21は、Cookie情報として”C1=CokieForClient1 expire=Sat, 04−Apr−2002 09:30:30 GMT”という文字列を抽出する。また、ビット列抽出部21は、この文字列の先頭文字を書き換え開始位置として検出する。
【0265】
テーブルエントリ消去部32は、有効期限の切れたエントリの有無を確認する。即ち、テーブルエントリ消去部32は、書換用テーブル22Bに記録された各エントリの有効期限を参照し、有効期限の切れたエントリを検索する。ここでは、有効期限の切れたエントリが無いと仮定する。このため、テーブルエントリ消去部32は、ビット列・ID書換部24eに対し通知を行わない。
【0266】
ビット列・ID書換部24eは、ID生成部23から新しいサーバID”a(e%”を取得する。ビット列・ID書換部24eは、このサーバIDと、ビット列抽出部21によって検出された書き換え開始位置以降の文字列とを置き換える。即ち、ビット列・ID書換部24eは、Cookie情報を”a(e%=okieForClient1 expire=Sat, 04−Apr−2002
09:30:30 GMT”と書き換える。
【0267】
また、ビット列・ID書換部24eは、書換用テーブル22Bに、”C1=Co,a(e%,192.168.0.1,1,04−Apr−2002 09:30:30”という新たなエントリを記録する。このとき、ビット列・ID書換部24eは、テーブルエントリ消去部32によって指定されたエントリがある場合、このエントリに対して新たなエントリを上書きする。また、ビット列・ID書換部24eは、テーブルエントリ消去部32から指定されたエントリが無い場合、LRUのアルゴリズムを用いて上書きされるエントリを選択し、記録する。
【0268】
ヘッダ更新・パケット送信部25は、パケットのヘッダにおける送信元アドレスをVIP1に変更し、クライアント1aに対してリプライメッセージを転送する(seq4e)。
【0269】
クライアント1aは、負荷分散装置15eからリプライメッセージを受信する。クライアント1aは、受信されたリプライメッセージに含まれるCookie情報”a(e%=okieForClient1 expire=Sat, 04−Apr−2002 09:30:30 GMT”を、ローカルのCookie表に記録する。このとき、クライアント1aは、未記入のパラメータについては、path=/contents/、domain=www.net.comとして記録する。
【0270】
この後、クライアント1aは、サーバ2aのコンテンツへリクエストメッセージを送信する場合、ローカルのCookie表から、サーバ2aからのリプライメッセージ受信時に記録されたCookie情報”a(e%=okieForClient1 expire=Sat, 04−Apr−2002 09:30:30 GMT”を読み出す。そして、クライアント1aは、読み出されたCookie情報を用いてリクエストメッセージを作成し、VIP1宛にこのリクエストメッセージを含むパケットを送信する(seq5e)。このとき、このパケットの送信先アドレス及び送信先ポート番号は、”10.0.0.1”及び”80”である。また、このとき、このパケットの送信元アドレス及び送信元ポート番号は、”20.0.0.1”及び”5000”である。
【0271】
負荷分散装置15eがクライアント1aからこのリクエストメッセージを受信すると、まずビット列抽出部17がCookie情報の抽出を実行する。ビット列抽出部17は、Cookie情報”a(e%=okieForClient1”を抽出する。そして、ビット列抽出部17は、サーバIDが”a(e%”であると特定する。
【0272】
振り分け先サーバ決定部18は、書換用テーブル22Bにおいて、サーバIDが”a(e%”であるエントリを検索する。ここで、リプライメッセージの転送時に記録された”C1=Co,a(e%,192.168.0.1,04−Apr−2002 09:30:30”というエントリが検索される。このため、振り分け先サーバ決定部18は、振り分け先となるサーバが、IPアドレス”192.168.0.1”が設定されたサーバ2aであることを特定する。また、振り分け先サーバ決定部18は、文字列”a(e%”の書き換えの際に使用される文字列が”C1=Co”であることを特定する。
【0273】
ID・ビット列書換部19は、リクエストメッセージに含まれるCookie情報に対して書き換えを行い、”C1=CokieForClient1”というCookie情報を復元する。
【0274】
ヘッダ更新・パケット送信部20は、パケットのヘッダにおける送信先アドレスを、サーバ2aのIPアドレスである”192.168.0.1”に変更する。そして、ヘッダ更新・パケット送信部20は、サーバ2aに対してリクエストメッセージを転送する(seq6e)。
【0275】
サーバ2aは、リクエストメッセージを受信すると、このリクエストメッセージに対応するコンテンツからリプライメッセージを作成する。このとき、リプライメッセージに”Set−Cookie:C2=CokieForClient2”というSet−Cookieコマンドを付加すると仮定する。即ち、サーバ2aは、受信されたリクエストメッセージと異なるNAME値を持つCookie情報を付加すると仮定する。そして、サーバ2aは、クライアント1a宛に、このリプライメッセージを含むパケットを送信する(seq7e)。このときのこのパケットの送信先アドレス及び送信先ポート番号は、”20.0.0.1”及び”5000”である。また、このとき、このパケットの送信元アドレス及び送信元ポート番号は、”192.168.0.1”及び”80”である。
【0276】
負荷分散装置15eがサーバ2aからリプライメッセージを受信すると、ビット列抽出部21がCookie情報の抽出を行う。そして、ビット列抽出部21は、”C2=CokieForClient2”という文字列をCookie情報として抽出する。
【0277】
テーブルエントリ消去部32は、書換用テーブル22Bを参照し、有効期限が切れているエントリを検索する。ここで、テーブルエントリ消去部32は、”C1=Co,a(e%,192.168.0.1、04−Apr−2002 09:30:30”のエントリの有効期限が切れていると判断する。従って、テーブルエントリ消去部32は、このエントリに対して新たなエントリを上書きすることをビット列・ID書換部24eに指示する。
【0278】
ビット列・ID書換部24eは、ID生成部23から新しいサーバIDとして”bePe”を取得する。ビット列・ID書換部24eは、このサーバIDと、ビット列抽出部21によって検出された書き換え開始位置以降の文字列”C2=Co”とを置き換え、Cookie情報を”bePe=okieForClient2”と置き換える。また、ビット列・ID書換部24eは、書換用テーブル22Bのエントリとして”C2=Co,bePe,192.168.0.1,有効期限なし”を記録する。
【0279】
ヘッダ更新・パケット送信部25は、送信元アドレスをVIP1に変更し、クライアント1aに対してリプライメッセージを転送する(seq8e)。
【0280】
クライアント1aは、負荷分散装置15eからリプライメッセージを受信する。クライアント1aは、受信したリプライメッセージに含まれるCookie情報”bePe=okieForClient2”を、ローカルのCookie表に記録する。このとき、クライアント1aは、未記入のパラメータについては、path=/contents/、domain=www.net.comとして記録する。
【0281】
〈作用・効果〉
第五実施形態によれば、書換用テーブル22Bに新たなエントリが上書きされる場合、消去される(上書きされる)エントリをテーブルエントリ消去部32が判断する。このとき、テーブルエントリ消去部32は、エントリの項目として記録される有効期限(対応するCookie情報の有効期限)が切れたエントリを、消去されるエントリとして選択する。このため、有効期限の切れていないエントリ(今後も参照される可能性のあるエントリ)が、有効期限の切れたエントリ(今後は参照される可能性の無いエントリ)よりも先に消去されることが防止される。
【0282】
〔第六実施形態〕
〈システム構成〉
図24は、本発明による負荷分散装置15の第六実施形態、即ち負荷分散装置15fのブロック図である。負荷分散装置15fについて、負荷分散装置15aと異なる構成についてのみ説明する。
【0283】
負荷分散装置15fは、ヘッダ終了チェック部33,ヘッダ終了テーブル記憶部34をさらに備える。
【0284】
ヘッダ終了チェック部33は、CPUやRAM等を用いて構成される。ヘッダ終了チェック部33は、各TCPコネクション上のトラヒックについて、HTTPのヘッダ部分を含むパケットが通過したかどうかを判断する。即ち、ヘッダ終了チェック部33は、各TCPコネクション上のトラヒックについて、HTTPのヘッダ部分を含むパケットについての処理が終了したか否かを判断する。そして、ヘッダ終了チェック部33は、HTTPヘッダ部分を含む全てのパケットが通過したことをヘッダ終了テーブル34Aに記録する。このとき、ヘッダ終了チェック部33は、HTTPヘッダ部分を含む全てのパケットが通過したリプライメッセージについての送信元アドレス(サーバIPアドレス),送信元ポート番号(サーバポート番号),送信先アドレス(クライアントIPアドレス),送信先ポート番号(クライアントポート番号)を持つエントリをヘッダ終了テーブル34Aに記録する。
【0285】
また、ヘッダ終了チェック部33は、HTTPヘッダ部分を含む全てのパケットが通過したリプライメッセージを含むパケットについては、ビット列抽出部21及びビット列・ID書換部24をバイパスするように処理する。即ち、ヘッダ終了チェック部33は、ヘッダ終了テーブル34Aに記録されたエントリと一致するヘッダ情報を有するパケットを、ヘッダ更新・パケット送信部25へバイパスする(渡す)。また、ヘッダ終了チェック部33は、リプライメッセージの転送が全て終了した時点で、このリプライメッセージに対応するエントリをヘッダ終了テーブル34Aから消去する。
【0286】
ヘッダ終了テーブル記憶部34は、フラッシュメモリやハードディスク等の不揮発性記憶装置やRAM等を用いて構成される。ヘッダ終了テーブル記憶部34は、ヘッダ終了テーブル34Aを記憶する。図25は、ヘッダ終了テーブル34Aの例を示す図である。ヘッダ終了テーブル34Aは、クライアントIPアドレス,クライアントポート番号,サーバIPアドレス,サーバポート番号を対応付けたエントリを持つ。このエントリは、HTTPヘッダ部分を含む全てのパケットが通過したリプライメッセージについてのエントリである。即ち、このエントリの各項目は、このリプライメッセージの送信先アドレス,送信先ポート番号,送信元アドレス,送信元ポート番号に相当する。
【0287】
〈動作シーケンス〉
図26は、第六実施形態による負荷分散装置15fを用いた負荷分散システム14にける動作シーケンスの例を示す図である。以下、第六実施形態における動作シーケンスについて、第一実施形態と異なる動作についてのみ説明する。
【0288】
ここでは、サーバ2aは、リプライメッセージを複数のパケット(第一パケット及び第二パケット)に分割して送信し、第一パケットにのみHTTPヘッダの情報が含まれると仮定する。
【0289】
seq1f〜seq2fにおける処理は、第一実施形態におけるseq1a〜seq2aにおける処理と同様である。このため、説明を省略する。
【0290】
サーバ2aは、seq2fにおけるリクエストメッセージを受信すると、このリクエストメッセージに対応するコンテンツからリプライメッセージを作成する。このとき、サーバ2aは、リプライメッセージに、Cookie情報を付加する。ここで、サーバ2aは、Set−Cookieコマンドとして、”Set−Cookie:C1=CokieForClient1”を発行し、リプライメッセージに付加すると仮定する。サーバ2aは、このリプライメッセージを、第一パケット及び第二パケットに分割する。そして、サーバ2aは、二つのパケットをクライアント1a宛に送信する。このとき、二つのパケットの送信先アドレス及び送信先ポート番号は、”20.0.0.1”及び”5000”である。また、このとき、二つのパケットの送信元アドレス及び送信元ポート番号は、”192.168.0.1”及び”80”である。
【0291】
負荷分散装置15fがサーバ2aからリプライメッセージを含むパケットを受信すると、ヘッダ終了チェック部33がこのパケットのヘッダ情報を参照する。このとき、リプライメッセージを含む第一パケットが第二パケットよりも先に負荷分散装置15fに受信されたと仮定する。このため、ヘッダ終了チェック部33は、受信された第一パケットのヘッダ情報、即ち送信先アドレス,送信先ポート番号,送信元アドレス,送信元ポート番号を読み出す。そして、ヘッダ終了チェック部33は、読み出された情報に該当するエントリをヘッダ終了テーブル34Aから検索する。この場合、このリプライメッセージについてのエントリはヘッダ終了テーブル34Aに記録されていないため、ヘッダ終了チェック部33は、検索対象となるエントリを検索しない。
【0292】
次に、ヘッダ終了チェック部33は、第一パケットにHTTPヘッダの終了部分が含まれるか否かを判断する。この場合、第一パケットにHTTPヘッダの全てが含まれているため、ヘッダ終了チェック部33は、HTTPヘッダの終了部分を第一パケットにおいて検出する。このため、ヘッダ終了チェック部33は、このリプライメッセージについてのエントリをヘッダ終了テーブル34Aに記録する。このエントリは、具体的には”20.0.0.1,5000,192,168.0.1,80”である。
【0293】
この後、第一パケットに対する負荷分散装置15fによる処理(seq5f)は、第一実施形態における処理と同様であるため、説明を省略する。
【0294】
負荷分散装置15fがサーバ2aから第二パケットを受信すると、ヘッダ終了チェック部33は、第二パケットのヘッダ情報を読み出す。そして、ヘッダ終了チェック部33は、読み出された情報に該当するエントリをヘッダ終了テーブル34Aから検索する。この場合、このリプライメッセージについてのエントリが既にヘッダ終了テーブル34Aに記録されている。このため、ヘッダ終了チェック部33は、第二パケットを、ヘッダ更新・パケット送信部25へバイパスする。
【0295】
ヘッダ更新・パケット送信部25は、パケットのヘッダにおける送信元アドレスをVIP1に変更し、クライアント1aに対して第二パケットを転送する(seq6f)。
【0296】
クライアント1aは、負荷分散装置15fからリプライメッセージを受信する。即ち、クライアント1aは、負荷分散装置15fから、リプライメッセージを含む第一パケット及び第二パケットを受信する。クライアント1aは、受信されたリプライメッセージに含まれるCookie情報”a(e%=okieForClient1”を、ローカルのCookie表に記録する。このとき、クライアント1aは、未記入のパラメータについては、path=/contents/、domain=www.net.comとして記録する。
【0297】
〈作用・効果〉
第六実施形態によれば、既にCookie情報に対する書き換え等の処理が終了しているリプライメッセージを含むパケットについては、Cookie情報に対する書き換え等の処理が省略される。このため、処理の高速化が図られる。
【0298】
〔その他〕
本発明は、以下のように特定することができる。
(付記1)第一のデータを含む通信データをサーバから受信する第一の受信手段と、
前記サーバを一意に識別するサーバ識別子を生成する生成手段と、
前記第一のデータの一部分である部分データであって、前記サーバ識別子と同じデータ量の部分データを、前記サーバ識別子に置き換えることにより第二のデータを生成する第一の置換手段と、
前記部分データと前記サーバ識別子と前記第一のデータを含む通信データの送信元であるサーバとを対応付けたエントリを記憶するサーバ識別子記憶手段と、
前記第二のデータを含む通信データをクライアントへ送信する第一の送信手段と、
前記第二のデータを含む通信データをクライアントから受信する第二の受信手段と、
前記通信データから前記第二のデータを読み出す読出手段と、
前記第二のデータに含まれる前記サーバ識別子を用いて、前記サーバ識別子記憶手段からサーバを特定する特定手段と、
前記第二のデータに含まれる前記サーバ識別子を、前記サーバ識別子記憶手段にこのサーバ識別子と対応付けて記憶される部分データに置き換えることにより第一のデータを復元する第二の置換手段と、
前記第二の置換手段によって復元された第一のデータを含む通信データを、前記特定手段によって特定されたサーバに対して送信する第二の送信手段と
を含む中継装置。
(付記2)送信された通信データのデータ量と受信された通信データのデータ量とを用いて相互に通信データの到着確認を実行する前記サーバと前記クライアントとの間に設置される
付記1に記載の中継装置。
(付記3)前記第二の置換手段の処理対象となる前記サーバ識別子と、この第二の置換手段によって生成された前記第一のデータに含まれこの第一のデータを識別するデータ識別子とを対応付けて記憶するデータ識別子記憶手段をさらに備え、
前記第一の置換手段は、前記データ識別子記憶手段によって記憶されるデータ識別子と、前記第一の受信手段によって受信された通信データに含まれる第一のデータに含まれるデータ識別子とが一致する場合に、このデータ識別子と対応付けて記憶されるサーバ識別子を用いて第二のデータを生成する
付記1又は2に記載の中継装置。
(付記4)前記データ識別子記憶手段は、前記第二のデータを含む通信データの送信元である前記クライアント及びこの通信データの送信先となるサーバをさらに対応付けて記憶し、
前記第一の置換手段は、さらに前記第一の受信手段によって受信された通信データの送信元となるサーバと前記データ識別子記憶手段に記憶されるサーバ、及び前記第一の受信手段によって受信された通信データの送信先となるクライアントと前記データ識別子記憶手段に記憶されるクライアントが一致する場合に、データ識別子と対応付けて記憶されるサーバ識別子を用いて第二のデータを生成する
付記3に記載の中継装置。
(付記5)前記サーバは複数のコンテンツを備え、
前記データ識別子記憶手段は、前記第二のデータを含む通信データの送信元である前記クライアント及びこの通信データの送信先となるコンテンツをさらに対応付けて記憶し、
前記第一の置換手段は、さらに前記第一の受信手段によって受信された通信データの送信元となるコンテンツと前記データ識別子記憶手段に記憶されるコンテンツ、及び前記第一の受信手段によって受信された通信データの送信先となるクライアントと前記データ識別子記憶手段に記憶されるクライアントが一致する場合に、データ識別子と対応付けて記憶されるサーバ識別子を用いて第二のデータを生成する
付記3に記載の中継装置。
(付記6)前記第一の置換手段による処理を行わない第一のデータを示すデータ識別子を記憶する識別子記憶手段と、
前記第一の受信手段によって受信された通信データに含まれる第一のデータを示すデータ識別子が前記識別子記憶手段に記憶されているか否かを判断し、記憶されている場合に、この第一のデータに対する置き換え処理を行わないように前記第一の置換手段を制御する置換制御手段と
をさらに備える付記1〜5のいずれかに記載の中継装置。
(付記7)前記第一の置換手段による処理を行わない第一のデータを示すデータ識別子を記憶する識別子記憶手段と、
前記第一の受信手段によって受信された通信データに含まれる第一のデータを示すデータ識別子が前記識別子記憶手段に記憶されているか否かを判断し、記憶されている場合に、この第一のデータに対する処理を行わないように前記第一の置換手段を制御する置換制御手段と
前記第一のデータを含み前記クライアントから受信される通信データに含まれる第一のデータを示すデータ識別子が前記識別子記憶手段に記憶されているか否かを判断し、記憶されている場合に、この第一のデータを第二のデータとみなして処理を行わないように前記第二の置換手段を制御する置換制御手段と
をさらに備える付記1〜5のいずれかに記載の中継装置。
(付記8)前記第一の置換手段による処理を行わない第一のデータに含まれ、この第一のデータが送信されるべきドメインを示すドメイン識別子を記憶するドメイン識別子記憶手段と、
前記第一の受信手段によって受信された通信データに含まれる第一のデータに含まれるドメイン識別子が前記ドメイン識別子記憶手段に記憶されているか否かを判断し、記憶されている場合に、この第一のデータに対する処理を行わないように前記第一の置換手段を制御する置換制御手段と
をさらに備える付記1〜5のいずれかに記載の中継装置。
(付記9)前記サーバ識別子記憶手段は、各エントリについて有効期限をさらに記憶し、
前記有効期限が満了したエントリを削除する削除手段をさらに備える
付記1〜8のいずれかに記載の中継装置。
(付記10)前記サーバから複数の分割データに分割されて送信される前記第一のデータを含む通信データについて前記第一の置換手段による処理が終了した場合、この通信データの他の分割データに対する前記第一の置換手段の処理を省略するように制御する省略制御手段をさらに備える付記1〜9のいずれかに記載の中継装置。
(付記11)前記省略制御手段は、
前記処理が終了した通信データについての情報を記憶する省略情報記憶手段と、
前記省略情報記憶手段に記憶された情報に該当する通信データの分割データについては、前記第一の置換手段による処理を省略するように制御する制御手段とを用いて構成される付記10に記載の中継装置。
【0299】
【発明の効果】
本発明によれば、パケットのサイズを変更することなくメッセージの中継を行うため、従来必要であったパケット再構築処理が不要になる。このため、パケット転送処理を高速化することができる。また、パケット再構築処理が不要になることにより、副次的な効果としてTCPの終端機能を削ることができるようになり、さらに高速化を図ることができる。
【図面の簡単な説明】
【図1】 第一の原理の概略を示す図である。
【図2】 第一の原理に基づく機能ブロック図である。
【図3】 第一の原理における問題点を示す図である。
【図4】 第二の原理の概略を示す図である。
【図5】 第二の原理に基づく機能ブロック図である。
【図6】 第三の原理に基づく機能ブロック図である。
【図7】 第四の原理に基づく機能ブロック図である。
【図8】 第五の原理に基づく機能ブロック図である。
【図9】 第六の原理に基づく機能ブロック図である。
【図10】 負荷分散システムの概略を示す図である。
【図11】 第一実施形態のブロック図である。
【図12】 書換用テーブルの例を示す図である。
【図13】 第一実施形態における動作シーケンスを示す図である。
【図14】 第二実施形態のブロック図である。
【図15】 NAMEビット列テーブルの例を示す図である。
【図16】 第二実施形態における動作シーケンスを示す図である。
【図17】 第三実施形態のブロック図である。
【図18】 第三実施形態における動作シーケンスを示す図である。
【図19】 第四実施形態のブロック図である。
【図20】 第四実施形態における動作シーケンスを示す図である。
【図21】 第五実施形態のブロック図である。
【図22】 書換用テーブルの例を示す図である。
【図23】 第五実施形態における動作シーケンスを示す図である。
【図24】 第六実施形態のブロック図である。
【図25】 ヘッダ修了テーブルの例を示す図である。
【図26】 第六実施形態における動作シーケンスを示す図である。
【図27】 Cookieが用いられた買い物処理の例を示す図である。
【図28】 Cookieが用いられた通信手順の概要を示す図である。
【図29】 Cookie表の例を示す図である。
【図30】 Cookieが用いられた通信手順の概要を示す図である。
【図31】 負荷分散システムの概要を示す図である。
【図32】 Cookie情報に基づいた振り分け処理の機能ブロック図である。
【図33】 Cookie情報に基づいた振り分け処理における問題点を示す図である。
【図34】 第一の解決方法を示す図である。
【図35】 第二の解決方法を示す図である。
【図36】 実際のネットワークの構成例を示す図である。
【図37】 第一の解決方法における問題点を示す図である。
【図38】 エンドホストとして動作する中継装置を示す図である。
【符号の説明】
1,1a,1b,1c クライアント
2,2a,2b,2c,2d サーバ
3,3a,3b,3c,3d,3e,3f 中継装置
4 ビット列抽出部
5a,5b,5c,5d,5e Cookie情報書換部
6 ヘッダ更新・パケット送信部
7 ビット列抽出部
8 ヘッダ更新・パケット送信部
9 同一NAME判定部
10,11 NAMEフィルタ
12 ドメインフィルタ
13 ヘッダ終了チェック部
14 負荷分散システム
15,15a,15b,15c,15d,15e,15f 負荷分散装置
16 サーバグループ
17,21 ビット列抽出部
18,18c 振り分け先サーバ決定部
19 ID・ビット列書換部
20,25 ヘッダ更新・パケット送信部
22,22e 書換用テーブル記憶部
22A,22B 書換用テーブル
23 ID生成部
24,24b,24e ビット列・ID書換部
26 NAMEビット列テーブル記憶部
26A NAMEビット列テーブル
27 NAMEビット列記録部
28 NAMEビット列比較部
29,30 NAMEフィルタ部
31 ドメインフィルタ部
32 テーブルエントリ消去部
33 ヘッダ終了チェック部
34 ヘッダ終了テーブル記憶部
34A ヘッダ終了テーブル
P1,P1a,P1b,P1c クライアント
P2,P2a,P2b,P2c サーバ
P3,P3a,P3b,P3c 負荷分散装置
P4,P4a,P4b サーバグループ
P5 負荷分散システム
P6,P10 Cookie検出部
P7 振り分け先サーバ決定部
P8,P8b,P8c サーバ・Cookie用テーブル
P9,P12 ヘッダ更新・パケット送信部
P11,P11b,P11c Cookie・サーバ記録部
P13 メッセージ構築部
P14,P14c Cookie生成部
P15 Cookie挿入部
P16 メッセージ分割部
P17 Cookie上書き部

Claims (5)

  1. 第一のデータを含む通信データをサーバから受信する第一の受信手段と、
    前記サーバを一意に識別するサーバ識別子を生成する生成手段と、
    前記第一のデータの一部分である部分データであって、前記サーバ識別子と同じデータ量の部分データを、前記サーバ識別子に置き換えることにより第二のデータを生成する第一の置換手段と、
    前記部分データと前記サーバ識別子と前記第一のデータを含む通信データの送信元であるサーバとを対応付けたエントリを記憶するサーバ識別子記憶手段と、
    前記第二のデータを含む通信データをクライアントへ送信する第一の送信手段と、
    前記第二のデータを含む通信データをクライアントから受信する第二の受信手段と、
    前記通信データから前記第二のデータを読み出す読出手段と、
    前記第二のデータに含まれる前記サーバ識別子を用いて、前記サーバ識別子記憶手段からサーバを特定する特定手段と、
    前記第二のデータに含まれる前記サーバ識別子を、前記サーバ識別子記憶手段にこのサーバ識別子と対応付けて記憶される部分データに置き換えることにより第一のデータを復元する第二の置換手段と、
    前記第二の置換手段によって復元された第一のデータを含む通信データを、前記特定手段によって特定されたサーバに対して送信する第二の送信手段と
    を含む中継装置。
  2. 前記第二の置換手段の処理対象となる前記サーバ識別子と、この第二の置換手段によって生成された前記第一のデータに含まれこの第一のデータを識別するデータ識別子とを対応付けて記憶するデータ識別子記憶手段をさらに備え、
    前記第一の置換手段は、前記データ識別子記憶手段によって記憶されるデータ識別子と、前記第一の受信手段によって受信された通信データに含まれる第一のデータに含まれるデータ識別子とが一致する場合に、このデータ識別子と対応付けて記憶されるサーバ識別子を用いて第二のデータを生成する
    請求項1に記載の中継装置。
  3. 前記第一の置換手段による処理を行わない第一のデータを示すデータ識別子を記憶する識別子記憶手段と、
    前記第一の受信手段によって受信された通信データに含まれる第一のデータを示すデータ識別子が前記識別子記憶手段に記憶されているか否かを判断し、記憶されている場合に、この第一のデータに対する置き換え処理を行わないように前記第一の置換手段を制御する置換制御手段と
    をさらに備える請求項1又は2に記載の中継装置。
  4. 前記第一の置換手段による処理を行わない第一のデータに含まれ、この第一のデータが送信されるべきドメインを示すドメイン識別子を記憶するドメイン識別子記憶手段と、
    前記第一の受信手段によって受信された通信データに含まれる第一のデータに含まれるドメイン識別子が前記ドメイン識別子記憶手段に記憶されているか否かを判断し、記憶されている場合に、この第一のデータに対する処理を行わないように前記第一の置換手段を制御する置換制御手段と
    をさらに備える請求項1〜3のいずれかに記載の中継装置。
  5. 前記サーバから複数の分割データに分割されて送信される前記第一のデータを含む通信データについて前記第一の置換手段による処理が終了した場合、この通信データの他の分割データに対する前記第一の置換手段の処理を省略するように制御する省略制御手段をさらに備える請求項1〜4のいずれかに記載の中継装置。
JP2002344026A 2002-11-27 2002-11-27 中継装置 Expired - Fee Related JP4208556B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002344026A JP4208556B2 (ja) 2002-11-27 2002-11-27 中継装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002344026A JP4208556B2 (ja) 2002-11-27 2002-11-27 中継装置

Publications (2)

Publication Number Publication Date
JP2004178286A JP2004178286A (ja) 2004-06-24
JP4208556B2 true JP4208556B2 (ja) 2009-01-14

Family

ID=32705660

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002344026A Expired - Fee Related JP4208556B2 (ja) 2002-11-27 2002-11-27 中継装置

Country Status (1)

Country Link
JP (1) JP4208556B2 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007219608A (ja) * 2006-02-14 2007-08-30 Fujitsu Ltd 負荷分散処理プログラム及び負荷分散装置
JP4961146B2 (ja) * 2006-02-20 2012-06-27 株式会社日立製作所 負荷分散方法およびシステム
CN101296176B (zh) * 2007-04-25 2010-12-22 阿里巴巴集团控股有限公司 一种基于群集的数据处理方法和装置
JP6131710B2 (ja) * 2013-05-16 2017-05-24 富士通株式会社 通信システム、負荷分散装置、および、負荷分散プログラム
JP2016100014A (ja) * 2015-11-17 2016-05-30 デジタル・アドバタイジング・コンソーシアム株式会社 情報処理装置、情報処理方法及びプログラム
JP6563807B2 (ja) * 2015-12-25 2019-08-21 株式会社インターファクトリー 情報処理システム、情報処理装置、処理制御方法、及び処理制御プログラム
JP6194387B1 (ja) * 2016-04-20 2017-09-06 ヤフー株式会社 転送装置、転送方法および転送プログラム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10164173A (ja) * 1996-11-29 1998-06-19 Nec Corp ユーザ情報管理装置
JP2001236320A (ja) * 2000-02-24 2001-08-31 Matsushita Electric Works Ltd Wwwの端末特定方法
US7177945B2 (en) * 2000-08-04 2007-02-13 Avaya Technology Corp. Non-intrusive multiplexed transaction persistency in secure commerce environments
WO2003009157A1 (en) * 2001-07-16 2003-01-30 Bea Systems, Inc. Method and apparatus for session replication and failover

Also Published As

Publication number Publication date
JP2004178286A (ja) 2004-06-24

Similar Documents

Publication Publication Date Title
US7676828B1 (en) Method and system for authenticating and authorizing requestors interacting with content servers
US6996817B2 (en) Method and system for upgrading and rolling back versions
US8661557B2 (en) Method and system for granting access to system and content
US7765275B2 (en) Caching of private data for a configurable time period
CA2345540C (en) Computer-readable recorded medium on which image file is recorded, device for producing the recorded medium, medium on which image file creating program is recorded, device for transmitting image file, device for processing image file, and medium on which image file processing program is recorded
US7373406B2 (en) Method and system for effectively communicating file properties and directory structures in a distributed file system
CN107729352A (zh) 页面资源加载方法及终端设备
EP3709595B1 (en) Secure route identification method and device
JP5795124B2 (ja) 通信ネットワーク内でユーザがブラウジングする間にユーザを監視する方法およびサーバ
JP2018530090A (ja) 可変ブラウザ識別子のセッションベースのマッチング
US9628549B1 (en) Method and system for controlling and accessing content servers
CN101378396A (zh) 网络钓鱼通知服务
EP0965927A2 (en) Client intermediation of server applications
JP4208556B2 (ja) 中継装置
JP4643718B2 (ja) セキュリティ強化プログラム及びセキュリティ強化装置
US20230195999A1 (en) Cross-domain storage for browsers
JP2009031852A (ja) 中継装置、中継方法およびプログラム
US8527632B2 (en) Secure transfer of data files
CN114785533B (zh) 通讯录数据的安全控制方法、装置、电子设备和存储介质
KR20020057977A (ko) 전자 상거래 시스템
JP4243039B2 (ja) 画像ファイル処理装置、画像ファイル処理プログラム及び当該プログラムを記録した媒体
EP2360893A1 (en) A method, a system and devices for locating a representation in a communications network
JP2003006023A (ja) 情報資源の更新方法
JP2005275449A (ja) ライセンス管理システム、クライアント装置、承認装置、ライセンス管理方法、及びプログラム
JP2002207675A (ja) データ配信システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051104

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20081014

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20081021

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111031

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111031

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121031

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121031

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131031

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees