(57)【要約】【課題】スケールアウト型のネットワークサーバシステムにおいて、分散処理を効率良く実行し、マルチプロトコルに容易に対応可能な信号処理技術を提供する。【解決手段】振分けサーバ２０は、パケットを受信して、そのパケットデータを記憶する既存の外部コネクション２２３があるか否かを判定する外部トランスポート層受信部２２２と、外部コネクション２２３と内部コネクション２２５とを関連付けたコネクション情報２２６を参照して、既存の外部コネクション２２３に関連付けられた内部コネクション２２５を取得し、当該既存の外部コネクション２２３に記憶されているパケットデータを当該内部コネクション２２５に引渡す振分け先決定部２２１と、内部コネクション２２５に引渡されたパケットデータを、当該内部コネクション２２５に関連付けられた転送先の処理サーバ３０に送信するトランスポート層転送部２２４と、をトランスポート層に備える。【選択図】図１
2014165743.tif 000002
【特許請求の範囲】
【請求項１】
受信したパケットの転送先の処理サーバを決定し、前記パケットを前記転送先の処理サーバに送信する１以上の振分けサーバおよび受信した前記パケットの応答情報を生成して返信する複数の前記処理サーバを有するネットワークサーバシステムにおける前記振分けサーバであって、
外部コネクションと内部コネクションとを関連付けたコネクション情報が記憶される記憶部と、
パケットを受信して、そのパケットデータを記憶する既存の外部コネクションがあるか否かを判定するトランスポート層の外部トランスポート層受信部と、
前記外部トランスポート層受信部によって前記既存の外部コネクションがあると判定された場合、前記コネクション情報を参照して、当該既存の外部コネクションに記憶されているパケットデータを当該既存の外部コネクションに関連付けられた内部コネクションに引渡すトランスポート層の振分け先決定部と、
前記内部コネクションに引渡された前記パケットデータを、当該内部コネクションに関連付けられた前記転送先の処理サーバに送信するトランスポート層のトランスポート層転送部と、
を備えることを特徴とする振分けサーバ。
【請求項２】
前記振分けサーバは、前記パケットデータの集合を示すパケットデータ群を解析し、転送先の決定に用いるキー情報を抽出するアプリケーション層のキー抽出部、および、前記キー情報から求められる変換値と前記転送先の処理サーバとを関連付けた転送先情報が記憶される記憶部をさらに備え、
前記外部トランスポート層受信部は、前記既存の外部コネクションがないと判定した場合、新たに外部コネクションを生成し、前記生成した外部コネクションのバッファに、受信した前記パケットのパケットデータを記憶し、
前記振分け先決定部は、前記バッファからパケットデータ群を取り出し、当該パケットデータ群を前記キー抽出部に引渡し、前記キー抽出部から前記キー情報を取得し、前記転送先情報を参照して、前記取得したキー情報から求められる変換値に関連付けられた転送先の処理サーバを決定し、前記生成した外部コネクションと当該転送先の処理サーバに関連付けられている内部コネクションとを関連付けて、当該内部コネクションに当該バッファのパケットデータ群を引渡し、
前記トランスポート層転送部は、当該パケットデータ群を当該転送先の処理サーバに転送する
ことを特徴とする請求項１に記載の振分けサーバ。
【請求項３】
受信したパケットの転送先の処理サーバを決定し、前記パケットを前記転送先の処理サーバに送信する１以上の振分けサーバおよび受信した前記パケットの応答情報を生成して返信する複数の前記処理サーバを有するネットワークサーバシステムにおける前記振分けサーバが、外部コネクションと内部コネクションとを関連付けたコネクション情報が記憶される記憶部を備え、
前記振分けサーバに、
パケットを受信して、そのパケットデータを記憶する既存の外部コネクションがあるか否かを判定するトランスポート層の外部トランスポート層受信手順と、
前記外部トランスポート層受信手順において前記既存の外部コネクションがあると判定された場合、前記コネクション情報を参照して、当該既存の外部コネクションに記憶されているパケットデータを当該既存の外部コネクションに関連付けられた内部コネクションに引渡すトランスポート層の振分け先決定手順と、
前記内部コネクションに引渡された前記パケットデータを、当該内部コネクションに関連付けられた前記転送先の処理サーバに送信するトランスポート層のトランスポート層転送手順と、
を実行させるためのプログラム。
【請求項４】
前記振分けサーバは、前記パケットデータの集合を示すパケットデータ群を解析し、転送先の決定に用いるキー情報を抽出するアプリケーション層のキー抽出部、および、前記キー情報から求められる変換値と前記転送先の処理サーバとを関連付けた転送先情報が記憶される記憶部をさらに備え、
前記振分けサーバに、
前記外部トランスポート層受信手順において前記既存の外部コネクションがないと判定した場合、新たに外部コネクションを生成し、前記生成した外部コネクションのバッファに、受信した前記パケットのパケットデータを記憶させ、
前記振分け先決定手順において、前記バッファからパケットデータ群を取り出し、当該パケットデータ群を前記キー抽出部に引渡し、前記キー抽出部から前記キー情報を取得し、前記転送先情報を参照して、前記取得したキー情報から求められる変換値に関連付けられた転送先の処理サーバを決定し、前記生成した外部コネクションと当該転送先の処理サーバに関連付けられている内部コネクションとを関連付けて、当該内部コネクションに当該バッファのパケットデータ群を引渡させ、
前記トランスポート層転送手順において、当該パケットデータ群を当該転送先の処理サーバに転送させる
ことを実行するための請求項３に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スケールアウト型のネットワークサーバシステムにおける分散処理を効率良く実行する技術に関する。
【背景技術】
【０００２】
近年、通信制御を実行するネットワークサーバシステムについて、Ｗｅｂサーバ等で従来使用されてきたスケールアウト型のシステムを採用するための検討が行われている（非特許文献１参照）。非特許文献１では、コンシステントハッシュ法を用いたスケールアウト型のサーバクラスタ構成法が開示されている。このサーバクラスタ構成法では、サーバクラスタをロードバランサ、振分けサーバ、処理サーバの３要素で構成することによって、サーバの動的な増減設によるシステム構成の柔軟化と、ネットワークサーバシステム（非特許文献１では、セッション制御サーバと記載されている。）としての高い可用性との双方を両立させる技術が開示されている。
【０００３】
ロードバランサは、任意の振分けサーバに対して、ラウンドロビン等の単純な法則に従ってパケットを振り分ける。振分けサーバは、ロードバランサから受信したパケットのセッションデータ（セッション管理等に用いられるデータ）がどの処理サーバに管理されているかを判別し、当該セッションデータの管理を担当する処理サーバにパケットを転送する。処理サーバは、受信したパケットに応じて信号処理を実行し、その処理結果を応答情報として返信する。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】入江道生、外４名、「スケールアウト型セッション制御サーバにおける動的構成変更に関する一検討」、信学技報、社団法人電子情報通信学会、２０１１年３月、ＮＳ２０１０−２３６、ｐ．４０７−４１０
【発明の概要】
【発明が解決しようとする課題】
【０００５】
非特許文献１では、スケールアウト型のサーバクラスタ構成法を、ネットワークサーバシステムの１つであるＳＩＰ（Session Initiation Protocol）サーバに適用した場合について開示している。しかしながら、ネットワークサーバシステムには、様々なサーバ（例えば、セッション制御サーバ、ＤＮＳ（Domain Name System）サーバ、認証サーバ等）が存在し、それらのプロトコルは多様である。その多様なプロトコル（マルチプロトコル）に対して、分散処理化に伴う処理オーバヘッドや処理遅延の増加を抑制しつつ、容易に対応可能な信号処理技術については開示されていない。
【０００６】
そこで、本発明は、スケールアウト型のネットワークサーバシステムにおいて、分散処理を効率良く実行し、マルチプロトコルに容易に対応可能な信号処理技術を提供することを課題とする。
【課題を解決するための手段】
【０００７】
本発明は、受信したパケットの転送先の処理サーバを決定し、前記パケットを前記転送先の処理サーバに送信する１以上の振分けサーバおよび受信した前記パケットの応答情報を生成して返信する複数の前記処理サーバを有するネットワークサーバシステムにおける前記振分けサーバであって、外部コネクションと内部コネクションとを関連付けたコネクション情報が記憶される記憶部と、パケットを受信して、そのパケットデータを記憶する既存の外部コネクションがあるか否かを判定するトランスポート層の外部トランスポート層受信部と、前記外部トランスポート層受信部によって前記既存の外部コネクションがあると判定された場合、前記コネクション情報を参照して、当該既存の外部コネクションに記憶されているパケットデータを当該既存の外部コネクションに関連付けられた内部コネクションに引渡すトランスポート層の振分け先決定部と、前記内部コネクションに引渡された前記パケットデータを、当該内部コネクションに関連付けられた前記転送先の処理サーバに送信するトランスポート層のトランスポート層転送部と、を備えることを特徴とする。
【０００８】
このような構成によれば、スケールアウト型のネットワークサーバシステムに備わる振分けサーバは、トランスポート層において、受信したパケットを、外部コネクションから転送先の処理サーバに関連付けられた内部コネクションに引渡すこと（すなわち、宛先アドレスやポートを修正すること）によって、転送先を設定し直して転送することができる。つまり、振分けサーバは、プロトコルの違いに依存せずに、転送処理を含む分散処理を効率良く実行することができるので、マルチプロトコルに容易に対応することができる。
【０００９】
また、本発明の前記振分けサーバは、前記パケットデータの集合を示すパケットデータ群を解析し、転送先の決定に用いるキー情報を抽出するアプリケーション層のキー抽出部、および、前記キー情報から求められる変換値と前記転送先の処理サーバとを関連付けた転送先情報が記憶される記憶部をさらに備え、前記外部トランスポート層受信部が、前記既存の外部コネクションがないと判定した場合、新たに外部コネクションを生成し、前記生成した外部コネクションのバッファに、受信した前記パケットのパケットデータを記憶し、前記振分け先決定部が、前記バッファからパケットデータ群を取り出し、当該パケットデータ群を前記キー抽出部に引渡し、前記キー抽出部から前記キー情報を取得し、前記転送先情報を参照して、前記取得したキー情報から求められる変換値に関連付けられた転送先の処理サーバを決定し、前記生成した外部コネクションと当該転送先の処理サーバに関連付けられている内部コネクションとを関連付けて、当該内部コネクションに当該バッファのパケットデータ群を引渡し、前記トランスポート層転送部が、当該パケットデータ群を当該転送先の処理サーバに転送することを特徴とする。
【００１０】
このような構成によれば、プロトコルの相違に対して処理の異なるアプリケーション層のキー抽出部は、キー情報を抽出する処理だけを実行する。つまり、アプリケーション層では、キー抽出部がキー情報を抽出するだけなので、プロトコルが異なったとしても、ブロトコル処理の処理オーバヘッドやＭＴＵ（Maximum Transmission Unit）超過問題は起きない。また、トランスポート層では、抽出されたキー情報に基づいて、パケットデータの転送処理が実行される。したがって、振分けサーバは、分散処理を効率良く実行し、マルチプロトコルに容易に対応することができる。
【００１１】
なお、プログラムに係る発明については、前記した振分けサーバと同様の技術的特徴を備えており、前記振分けサーバ装置と同様の効果を有しているので、記載を省略する。
【発明の効果】
【００１２】
本発明によれば、スケールアウト型のネットワークサーバシステムにおいて、分散処理を効率良く実行し、マルチプロトコルに容易に対応可能な信号処理技術を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】スケールアウト型のネットワークサーバシステムの構成例を示す図である。
【図２】振分けサーバの機能例を示す図である。
【図３】振分けサーバの処理フロー例を示す図である。
【図４】処理サーバの機能例を示す図である。
【図５】処理サーバの処理フロー例を示す図である。
【図６】振分けサーバおよび処理サーバの機能例をソフトウェア構造で示した図であり、（ａ）は振分けサーバの場合を表し、（ｂ）は処理サーバの場合を表す。
【図７】ネットワークサーバシステムの種別、セッションデータおよびキー情報の一例を示す図である。
【発明を実施するための形態】
【００１４】
本発明を実施するための形態（以降、「本実施形態」と称す。）について、適宜図面を参照しながら詳細に説明する。
【００１５】
はじめに、スケールアウト型のネットワークサーバシステムの構成例について、図１を用いて説明する。
スケールアウト型のネットワークサーバシステム８００は、クライアント装置４０からネットワーク５０を経由してサービス要求のパケットを受信し、そのサービス要求に対応する応答情報を生成し、ネットワーク５０を経由してその応答情報を返信するサービスを提供する機能を有する。
【００１６】
図１では、ネットワークサーバシステム８００は、１台のロードバランサ１０、複数台の振分けサーバ２０、複数台の処理サーバ３０を備えている。なお、振分けサーバ２０の台数および処理サーバ３０の台数は、受信するパケット数の多少に応じて、適宜変更されるものとし、振分けサーバ２０は１台であっても構わない。
【００１７】
ロードバランサ１０は、パケットをネットワーク５０を介して受信し、任意の振分けサーバ２０に対して、ラウンドロビン等の単純な法則に従って当該パケットを振り分ける。
【００１８】
振分けサーバ２０は、ロードバランサ１０から受信したパケットに関するセッションデータ（セッション状態や処理途中の結果等）がどの処理サーバ３０に管理されているかを判別し、当該セッションデータの管理を担当する処理サーバ３０を転送先として決定し、その転送先の処理サーバ３０にパケットを送信する。
【００１９】
例えば、振分けサーバ２０は、コンシステントハッシュ法を用いてセッションデータ等が管理されている場合、パケットに含まれるキー情報（例えば、ＳＩＰ（Session Initiation Protocol）ではＣａｌｌ−ＩＤヘッダに記載される情報）から生成されるハッシュ値と、各処理サーバ３０に割り当てられたＩＤ空間の値とを用いて、パケットの転送先の処理サーバ３０を決定する。そして、振分けサーバ２０は、決定した転送先の処理サーバ３０に、当該パケットを送信する。なお、振分けサーバ２０は、処理サーバ３０が増減設された場合、その増減設に合わせて処理サーバ３０に割り当てるＩＤ空間の値を更新する。
【００２０】
処理サーバ３０は、受信したパケットの信号処理に用いるセッションデータ等を記憶しているので、そのセッションデータ等を用いて当該パケットに対して信号処理を実行し、その処理結果を応答情報として返信する。
【００２１】
次に、振分けサーバ２０の機能例について、図２を用いて説明する。
振分けサーバ２０は、アプリケーション部２００、ＡＰＩ（Application Programming Interface）２１０、振分け処理部２２０、クラスタ構成管理部２３０を備える。
【００２２】
アプリケーション部２００は、アプリケーション層以上の階層の処理を実行する機能を有し、キー抽出部２０１を備える。キー抽出部２０１は、ＡＰＩ２１０を介して振分け処理部２２０からパケットデータ群を取得し、パケットデータ群を解析して、転送先の決定に用いるキー情報を抽出し、抽出したキー情報をＡＰＩ２１０の戻り値として振分け処理部２２０に返信する機能を有する。ここで、パケットデータ群とは、１つの送信データのサイズが大きいために、断片化されて複数のパケットで送信された場合を考慮して、元の送信データを復元可能なパケットデータの集合のことを意味している。つまり、本実施形態では、パケットデータ群と記載している場合には、１つ以上のパケットのパケットデータを指している。それに対して、パケットデータと記載している場合には、１つのパケットのパケットデータを意味している。
【００２３】
ＡＰＩ２１０は、振分け処理部２２０からパケットデータ群を引数で受け取り、キー抽出部２０１の抽出したキー情報を戻し値として返す機能を有している。当該ＡＰＩ２１０は、Java（登録商標）で表現した場合には、例えば、下記のように表される。
String getKey(Array<byte[]> packets);
【００２４】
振分け処理部２２０は、振分け先決定部２２１、外部トランスポート層受信部２２２、トランスポート層転送部２２４を備える。なお、クライアント装置４０からパケットを受信するのは外部トランスポート層受信部２２２であり、クラスタ内の処理サーバ３０にパケットを送信するのはトランスポート層転送部２２４である。
【００２５】
外部トランスポート層受信部２２２は、外部コネクション２２３を制御する機能を有する。具体的には、外部トランスポート層受信部２２２は、クライアント装置４０からパケットを受信し、新規の外部コネクション２２３へのパケットか否かを判定する機能を有する。新規である場合、外部トランスポート層受信部２２２は、新たに外部コネクション２２３を生成する。新規でない場合（つまり、既設の場合）、外部トランスポート層受信部２２２は、既設の外部コネクション２２３にパケットデータを記憶し、外部コネクション２２３を振分け先決定部２２１に引渡す。なお、引渡すとは、プログラムの引数のように扱うことを意味している。具体的には、外部トランスポート層受信部２２２は、外部コネクション２２３に記憶されているパケットデータを振分け先決定部２２１に引渡す。
【００２６】
ここで、外部コネクション２２３は、クライアント装置４０とのトランスポート層プロトコルレベルのコネクション状態を表している。また、内部コネクション２２５は、処理サーバ３０とのトランスポート層プロトコルレベルのコネクション状態を表している。外部トランスポート層受信部２２２およびトランスポート層転送部２２４は、例えば、ＴＣＰ（Transmission Control Protocol）の場合には、対向システムとの接続状態情報やアドレス／ポート情報等を管理している。それに対して、外部トランスポート層受信部２２２およびトランスポート層転送部２２４は、ＵＤＰ（User Datagram Protocol）の場合には、コネクションレスプロトコルであるため、対向システムとの接続状態情報は管理しない。
【００２７】
振分け先決定部２２１は、外部トランスポート層受信部２２２から外部コネクション２２３のパケットデータ群を取得したとき、その外部コネクション２２３のパケットデータ群をＡＰＩ２１０を介してキー抽出部２０１へ引き渡す機能を有する。そして、振分け先決定部２２１は、ＡＰＩ２１０を介してキー抽出部２０１から抽出されたキー情報を受信し、クラスタ構成管理部２３０によって管理されている転送先情報２３１（例えば、コンシステントハッシュ法におけるＩＤ空間に相当）を参照して、転送先の処理サーバ３０に関連付けられた内部コネクション２２５を決定する機能を有する。つまり、振分け先決定部２２１は、外部コネクション２２３と内部コネクション２２５との関連付け（すなわち、宛先アドレスやポートの修正）を行う機能を有している。また、振分け先決定部２２１は、関連付けが既に出来ている既設の外部コネクション２２３から内部コネクション２２５へパケットデータを引渡す機能を有する。
【００２８】
トランスポート層転送部２２４は、クラスタ内の処理サーバ３０に関連付けられた内部コネクション２２５を制御する機能を有する。また、トランスポート層転送部２２４は、内部コネクション２２５に引渡されたパケットデータを転送先の処理サーバ３０に送信する機能を有する。
【００２９】
クラスタ構成管理部２３０は、クラスタ内の処理サーバ３０の構成に増減設が発生した場合、増減設後（変更後）の構成に対応するように転送先情報２３１を更新する機能を有する。転送先情報２３１には、キー情報から求められる変換値とその変換値に関連付けられている処理サーバ３０との関係が記憶される。具体例として、コンシステントハッシュ法の場合であれば、転送先情報２３１はＩＤ空間に相当する。
【００３０】
ここで、振分けサーバ２０の処理フロー例について、図３を用いて説明する（適宜、図２参照）。図３中で、破線の矩形で表示した箇所は、アプリケーション部２００で処理する箇所であることを示している。
【００３１】
ステップＳ３０１では、外部トランスポート層受信部２２２は、パケットを受信する。
【００３２】
ステップＳ３０２では、外部トランスポート層受信部２２２は、受信したパケットが、既存の外部コネクション２２３へのパケットか否かを判定する。この判定には、例えば、パケットのヘッダに含まれる宛先アドレス、ポート番号、フラグメンテーション等の情報が用いられる。受信したパケットのパケットデータは、そのパケットのヘッダに含まれる前記情報に関連付けられた外部コネクション２２３に記憶される。なお、外部トランスポート層受信部２２２によって新しく生成される新規の外部コネクション２２３は、後記するステップＳ３０６において生成され、生成後は既存の外部コネクション２２３として扱われる。
【００３３】
既存の外部コネクション２２３へのパケットであると判定した場合（ステップＳ３０２でＹｅｓ）、処理はステップＳ３０３へ進み、既存の外部コネクション２２３へのパケットでないと判定した場合（ステップＳ３０２でＮｏ）、処理はステップＳ３０６へ進む。
【００３４】
ステップＳ３０３では、振分け先決定部２２１は、外部コネクション２２３が既に内部コネクション２２５に関連付けられているか否かを判定する。なお、振分け先決定部２２１は、外部コネクション２２３と内部コネクション２２５とを関連付けた情報を示すコネクション情報２２６を不図示の記憶部に記憶しており、コネクション情報２２６を参照して、ステップＳ３０３の判定を実行する。
内部コネクション２２５に関連付けられていると判定した場合（ステップＳ３０３でＹｅｓ）、処理はステップＳ３０４へ進み、内部コネクション２２５に関連付けられていないと判定した場合（ステップＳ３０３でＮｏ）、処理はステップＳ３０７へ進む。
【００３５】
ステップＳ３０４では、振分け先決定部２２１は、コネクション情報２２６を参照して、パケットデータを外部コネクション２２３から内部コネクション２２５に引渡す。
ステップＳ３０５では、トランスポート層転送部２２４は、内部コネクション２２５に引き渡されたパケットデータを、当該内部コネクション２２５に関連付けられている転送先の処理サーバ３０に送信する。
【００３６】
ステップＳ３０６では、外部トランスポート層受信部２２２は、新たに外部コネクション２２３を生成する。
ステップＳ３０７では、外部トランスポート層受信部２２２は、外部コネクション２２３の不図示のバッファにパケットデータ群を記憶する。
【００３７】
ステップＳ３０８では、アプリケーション部２００のキー抽出部２０１は、キー情報の抽出処理を実行する。
具体的には、まず、外部トランスポート層受信部２２２は、振分け先決定部２２１に外部コネクション２２３を引渡す。振分け先決定部２２１は、外部コネクション２２３を取得し、ＡＰＩ２１０を介して、アプリケーション部２００のキー抽出部２０１にパケットデータ群を引渡す。このとき、振分けサーバ２０においては、アプリケーション層のアプリケーション部２００とトランスポート層の振分け処理部２２０との境界にＡＰＩ２１０を規定して、そのＡＰＩ２１０によってパケットデータ群が引渡される。
【００３８】
次に、キー抽出部２０１は、受信したパケットデータ群を解析し、転送先の決定に用いるキー情報をＡＰＩ２１０を介して振分け先決定部２２１に返す処理を実行する。なお、キー抽出部２０１は、受信したパケットデータにキー情報が含まれていない場合、後続のパケットデータを受信するために戻り値としてｎｕｌｌを返す。このキー情報抽出処理において、アプリケーション層のアプリケーション部２００（キー抽出部２０１）は、クラスタの構成等を意識する必要はない。
【００３９】
ステップＳ３０９では、振分け先決定部２２１は、キー情報が抽出されたか否かを判定する。具体的には、振分け先決定部２２１は、アプリケーション部２００からＡＰＩ２１０の戻り値としてキー情報が返ってきたか否かを判定する。つまり、振分け先決定部２２１は、キー情報が返ってきたと判定した場合には、キー情報が抽出されたと判定する。
キー情報が抽出されたと判定した場合（ステップＳ３０９でＹｅｓ）、処理はステップＳ３１０へ進み、キー情報が抽出されていないと判定した場合（ステップＳ３０９でＮｏ）、処理は終了する。
【００４０】
ステップＳ３１０では、振分け先決定部２２１は、クラスタ構成管理部２３０によって管理されている転送先情報２３１を参照して、返ってきたキー情報から求められる変換値に関連付けられた転送先の処理サーバ３０を決定する（図３中では、「転送先を決定」）。例えば、コンシステントハッシュ法が用いられている場合、振分け先決定部２２１は、転送先情報２３１に相当するＩＤ空間を参照して、返ってきたキー情報のハッシュ値（前記変換値に相当）に対応する転送先の処理サーバ３０を決定する。
【００４１】
ステップＳ３１１では、振分け先決定部２２１は、転送先の処理サーバ３０に関連付けられている内部コネクション２２５を取得し、取得した内部コネクション２２５と外部コネクション２２３との関連付けを実行する。その関連付けされた関係は、振分け先決定部２２１によって、コネクション情報２２６に記憶される。
【００４２】
ステップＳ３１２では、振分け先決定部２２１は、コネクション情報２２６を参照して、パケットデータ群を外部コネクション２２３のバッファから内部コネクション２２５に引渡す。
ステップＳ３１３では、トランスポート層転送部２２４は、内部コネクション２２５に引き渡されたパケットデータ群を処理サーバ３０に送信する。
【００４３】
なお、振分けサーバ２０では、一度関連付けられた外部コネクションと内部コネクションとの間のパケットデータの引渡しは、コネクション情報２２６に基づいて実行されるため、後続のパケット処理にアプリケーション部２００が介在することはない。つまり、振分けサーバ２０は、転送先を決定するために必要なキー情報の抽出のみをアプリケーション層のアプリケーション部２００で実行する。また、パケットデータの転送は、振分け先決定部２２１によってトランスポート層の転送処理（宛先アドレスやポートの修正）として実行される。
【００４４】
したがって、本実施形態の振分けサーバ２０は、振分け処理すべてをアプリケーション層のアプリケーション部２００によって実行した場合に比較して、アプリケーション層プロトコル処理に伴う処理オーバヘッドや、ヘッダ追加に伴うＭＴＵ超過等は発生しない。また、ＳＩＰによるパケット送信がＵＤＰで実行される時において、処理サーバ３０からクライアント装置４０へ応答情報を送信する場合には、振分けサーバ２０を経由する必要がなく、応答時間を短縮することが可能になる。
【００４５】
次に、処理サーバ３０の機能例について、図４を用いて説明する。
処理サーバ３０は、アプリケーション部３００、第１のＡＰＩ３１０、第２のＡＰＩ３１１、プロトコル処理部３２０、分散データ管理部３３０を備える。
【００４６】
アプリケーション部３００は、アプリケーション層以上の階層の処理を実行する機能を有し、キー抽出部３０１および信号処理部３０２を備える。キー抽出部２０１は、第１のＡＰＩ３１０を介して、アプリケーション駆動部３２１からパケットデータ群を取得し、パケットデータ群に含まれているキー情報を抽出し、抽出したキー情報をアプリケーション駆動部３２１に返信する機能を有する。信号処理部３０２は、アプリケーション駆動部３２１および第２のＡＰＩ３１１を介して、内部コネクション３２３のパケットデータ群を取得して、アプリケーション層プロトコルによる信号処理を実行する機能を有する。
【００４７】
第１のＡＰＩ３１０は、プロトコル処理部３２０から内部コネクション３２３をキー抽出部３０１に引渡し、キー抽出部３０１の抽出したキー情報を戻し値として返す機能を有している。つまり、第１のＡＩＰ３１０は、前記したＡＰＩ２１０（図２参照）と同様の入出力形式を備えている。
また、第２のＡＰＩ３１１は、アプリケーション駆動部３２１から内部コネクション３２３を信号処理部３０２に引渡し、信号処理結果を応答情報として返す機能を有している。
【００４８】
プロトコル処理部３２０は、アプリケーション駆動部３２１および内部トランスポート層受信部３２２を備える。アプリケーション駆動部３２１は、内部コネクション３２３のバッファに記憶されたパケットデータ群を第１のＡＰＩ３１０を介してキー抽出部３０１に引渡し、キー情報を戻り値として受信する機能を有する。また、アプリケーション駆動部３２１は、戻り値のキー情報に関連付けられたセッションデータをデータ記憶部３３１から取得し、内部コネクション３２３と関連付ける機能を有する。そして、アプリケーション駆動部３２１は、内部コネクション３２３と当該セッションデータとを、第２のＡＰＩ３１１を介して、信号処理部３０２に引渡し、応答情報を受信する機能を有する。
【００４９】
内部トランスポート層受信部３２２は、振分けサーバ２０から送信されてくるパケットデータを受信し、新規のコネクション３２３へのパケットか否かを判定する機能を有する。次に、内部トランスポート層受信部３２２は、新規であると判定した場合、新たに内部コネクション３２３を生成する。そして、内部トランスポート層受信部３２２は、受信したパケットデータを内部コネクション３２３の不図示のバッファに記憶し、その内部コネクション３２３をアプリケーション駆動部３２１に引渡す機能を有する。
【００５０】
分散データ管理部３３０は、キー情報に関連付けられたセッションデータが記憶されるデータ記憶部３３１の情報を更新する機能を有する。データ記憶部３３１には、セッションの状態や処理途中の結果等を示すセッションデータ、内部コネクション３２３およびキー情報が関連付けて記憶されている。なお、図４中に示すデータＡ、データＢは、セッションデータを表している。データ記憶部３３１に記憶されている各データは、アプリケーション駆動部３２１によって、内部コネクション３２３に関連付けられる。
【００５１】
ここで、処理サーバ３０の処理フロー例について、図５を用いて説明する（適宜、図４参照）。図５中で、破線の矩形で表示した箇所は、アプリケーション部３００で処理する箇所であることを示している。
【００５２】
ステップＳ５０１では、内部トランスポート層受信部３２２は、振分けサーバ２０からパケットを受信する。
【００５３】
ステップＳ５０２では、内部トランスポート層受信部３２２は、既存の内部コネクション３２３へのパケットか否かを判定する。
既存の内部コネクション３２３へのパケットであると判定した場合（ステップＳ５０２でＹｅｓ）、処理はステップＳ５０４へ進み、既存の内部コネクション３２３へのパケットでないと判定した場合（ステップＳ５０２でＮｏ）、処理はステップＳ５０３へ進む。
【００５４】
ステップＳ５０３では、内部トランスポート層受信部３２２は、新たに内部コネクション３２３を生成する。
ステップＳ５０４では、内部トランスポート層受信部３２２は、内部コネクション３２３の不図示のバッファにパケットデータ群を記憶する。そして、内部トランスポート層受信部３２２は、内部コネクション３２３をアプリケーション駆動部３２１に引渡す。
【００５５】
ステップＳ５０５では、アプリケーション駆動部３２１は、分散データ管理部３３０によって管理されているデータ記憶部３３１を参照して、内部コネクション３２３にセッションデータが関連付けられているか否かを判定する。
セッションデータが関連付けられていると判定した場合（ステップＳ５０５でＹｅｓ）、処理はステップＳ５０９へ進み、セッションデータが関連付けられていないと判定した場合（ステップＳ５０５でＮｏ）、処理はステップＳ５０６へ進む。
【００５６】
ステップＳ５０６では、キー抽出部３０１は、キー情報の抽出処理を実行する。具体的には、まず、アプリケーション駆動部３２１が、キー抽出部３０１に、第１のＡＰＩ３１０を介して、パケットデータ群を引渡す。そして、キー抽出部３０１が、キー情報の抽出処理を実行し、キー情報を抽出した場合、戻り値としてキー情報を、第１のＡＰＩ３１０を介してアプリケーション駆動部３２１に戻す。
【００５７】
ステップＳ５０７では、アプリケーション駆動部３２１は、キー情報が抽出されたか否かを判定する。
キー情報が抽出されたと判定した場合（ステップＳ５０７でＹｅｓ）、処理はステップＳ５０８へ進み、キー情報が抽出されていないと判定した場合（ステップＳ５０７でＮｏ）、処理はステップＳ５１０へ進む。
【００５８】
ステップＳ５０８では、アプリケーション駆動部３２１は、データ記憶部３３１を参照して、キー情報に関連付けられたセションデータを取得し、セッションデータが無い場合はセッションデータを新規に作成する。
【００５９】
ステップＳ５０９では、アプリケーション駆動部３２１は、内部コネクション３２３と前記ステップＳ５０８で取得したセッションデータとを第２のＡＰＩ３１１を介して、信号処理部３０２に引渡す。
【００６０】
ステップＳ５１０では、アプリケーション駆動部３２１は、内部コネクション３２３を第２のＡＰＩ３１１を介して、信号処理部３０２に引渡す。
【００６１】
ステップＳ５１１では、信号処理部３０２は、信号処理を実行する。そして、信号処理部３０２は、信号処理によって、応答情報を生成する。
【００６２】
なお、内部コネクション３２３は、対向システム（例えば、クライアント装置４０）に対して応答情報のパケットを送信する機能（例えば、送信先のアドレスやポート番号等を用いて送信する機能）を有している。アプリケーション層のアプリケーション部３００の信号処理部３０２は、第２のＡＰＩ３１１を介して内部コネクション３２３やセッションデータを取得して、信号処理を実行し、その結果をアプリケーション駆動部３２１に引渡すだけでよい。つまり、アプリケーション層のアプリケーション部３００は、転送処理やクラスタ構造に係わる必要はない。そして、応答情報は、ＴＣＰの場合には、確立されたコネクションの経路通りに振分けサーバ２０を経由して、対向システムに送信される。また、応答情報は、コネクションレスのＵＤＰの場合には、振分けサーバ２０を迂回してロードバランサ１０を介して対向システムに送信される。したがって、ＵＤＰの場合には、応答時間が短縮される可能性がある。
【００６３】
ここで、振分けサーバ２０および処理サーバ３０の機能例をソフトウェア構造で表した場合について、図６を用いて説明する（適宜、図２，４参照）。
【００６４】
図６（ａ）は、図２に示す振分けサーバ２０の機能例を、ソフトウェア構造で表現した場合を示している。振分けサーバ２０は、アプリケーション層プロトコル処理部６００、ＡＰＩ６１０、トランスポート層プロトコル処理部６２０およびクラスタ構成管理部６３０で構成される。
【００６５】
アプリケーション層プロトコル処理部６００は、図２に示すアプリケーション部２００と同様の機能を有しており、キー情報の抽出処理を実行する。
ＡＰＩ６１０は、図２に示すＡＰＩ２１０と同様の機能を有し、パケットデータ群をトランスポート層プロトコル処理部６２０からアプリケーション層プロトコル処理部６００に引渡し、アプリケーション層プロトコル処理部６００が抽出したキー情報をトランスポート層プロトコル処理部６２０に戻す。
【００６６】
トランスポート層プロトコル処理部６２０は、図２に示す振分け処理部２２０と同様の機能を有し、転送先を決定し、トランスポート層の転送処理（宛先アドレスやポートの修正）を実行して、転送先の処理サーバ３０にパケットを送信する。
クラスタ構成管理部６３０は、図２に示すクラスタ構成管理部２３０と同様の機能を有し、クラスタ内の処理サーバ３０の構成に増減設が発生した場合、増減設後（変更後）の構成に対応するように、キー情報から求められる変換値とその変換値に関連付けられている転送先の処理サーバ３０との関係を更新する。
【００６７】
このような構成を採ることにより、アプリケーション層プロトコル処理部６００は、ＡＰＩ６１０によってトランスポート層プロトコル処理部６２０およびクラスタ構成管理部６３０と分割されるので、アプリケーション層以上の処理（キー抽出処理）だけを実行すればよい。したがって、アプリケーション層プロトコル処理部６００は、振分けサーバ２０の振分け処理すべてをアプリケーション層の処理で実行した場合に比較して、様々なプロトコル（マルチプロトコル）への対応が簡単になる。
【００６８】
同様に、図６（ｂ）は、図４に示す処理サーバ３０の機能例を、ソフトウェア構造で表現した場合を示している。処理サーバ３０は、アプリケーション層プロトコル処理部７００、ＡＰＩ７１０、トランスポート層プロトコル処理部７２０および分散データ管理部７３０で構成される。
【００６９】
アプリケーション層プロトコル処理部７００は、図４に示すアプリケーション部３００と同様の機能を有しており、キー情報の抽出処理や応答情報を生成するための信号処理を実行する。
ＡＰＩ７１０は、図４に示す第１のＡＰＩ３１０および第２のＡＰＩ３１１と同様の機能を表したものである。ＡＰＩ７１０は、パケットデータ群やセッションデータをトランスポート層プロトコル処理部７２０からアプリケーション層プロトコル処理部７００に引渡し、キー情報や応答情報をトランスポート層プロトコル処理部７２０に戻す。
【００７０】
トランスポート層プロトコル処理部７２０は、図４に示すプロトコル処理部３２０と同様の機能を有し、アプリケーション層プロトコル処理部７００から取得した応答情報を対向システムに返信する。
分散データ管理部７３０は、図４に示す分散データ管理部３３０と同様の機能を有し、クラスタ内の処理サーバ３０の構成に増減設が発生した場合、増減設後（変更後）の構成に対応するようにセッションデータのデータを更新する。
【００７１】
このような構成を採ることにより、アプリケーション層プロトコル処理部７００は、ＡＰＩ７１０によってトランスポート層プロトコル処理部７２０および分散データ管理部７３０と分割されるので、アプリケーション層以上の処理（キー抽出処理および信号処理）だけを実行すればよい。したがって、アプリケーション層プロトコル処理部７００は、振分けサーバ２０の振分け処理すべてをアプリケーション層の処理で実行した場合に比較して、様々なプロトコル（マルチプロトコル）への対応が簡単になる。
【００７２】
ここで、ネットワークサーバシステム８００の扱うプロトコルの種類が異なることによって、セッションデータおよびキー情報が異なることを示す一例について、図７を用いて説明する。
図７に示すように、ネットワークサーバシステム８００の種別が「ＳＩＰ（プロキシ）サーバ」の場合、セッションデータが「ＳＩＰセッション状態」であり、キー情報が「Ｃａｌｌ−ＩＤヘッダの値」となる。
また、ネットワークサーバシステム８００の種別が「ＳＩＰ（Ｂ２ＢＵＡ）サーバ」の場合、セッションデータが「Ｂ２ＢＵＡセッション状態」であり、キー情報が「ＲｏｕｔｅヘッダやＶｉａヘッダにパラメータ設定されたセッションＩＤ」となる。ここで、Ｂ２ＢＵＡとは、Back-To-Back User Agentの略である。
【００７３】
また、ネットワークサーバシステム８００の種別が「Ｗｅｂアプリケーションサーバ」の場合、セッションデータが「ＨＴＴＰセッション状態」であり、キー情報が「Ｃｏｏｋｉｅに設定されるセッションＩＤ」となる。ここで、ＨＴＴＰは、Hypertext Transfer Protocolの略である。
また、ネットワークサーバシステム８００の種別が「ＸＣＡＰサーバ」の場合、セッションデータが「ＸＭＬドキュメント」であり、キー情報が「ＨＴＴＰのリクエスト行に設定されるドキュメントセレクタ」となる。ここで、ＸＣＡＰおよびＸＭＬとは、それぞれXML Configuration Access ProtocolおよびExtensible Markup Languageの略である。
【００７４】
図７に示すように、ネットワークサーバシステム８００の種別が異なると、セッションデータもキー情報も異なる。しかし、アプリケーション層プロトコル処理部６００（７００）は、キー情報（キー情報および応答情報）だけに対応するソフトウェアを作成すれば良いので、マルチプロトコルにも容易に対応することができる。
【００７５】
以上、本実施形態のスケールアウト型のネットワークサーバシステム８００の振分けサーバ２０では、トランスポート層において、まず、外部トランスポート層受信部２２２が、パケットを受信して、そのパケットデータを記憶する既存の外部コネクション２２３があるか否かを判定する。次に、振分け先決定部２２１が、外部コネクション２２３と内部コネクション２２５とを関連付けたコネクション情報２２６を参照して、既存の外部コネクション２２３に関連付けられた内部コネクション２２５を取得し、当該既存の外部コネクション２２３に記憶されているパケットデータを当該内部コネクション２２５に引渡す。そして、トランスポート層転送部２２４が、内部コネクション２２５に引渡されたパケットデータを、当該内部コネクション２２５に関連付けられた転送先の処理サーバ３０に送信する。
【００７６】
また、振分けサーバ２０は、パケットデータの集合を示すパケットデータ群を解析し、転送先の決定に用いるキー情報を抽出するアプリケーション層のキー抽出部２０１、および、キー情報から求められる変換値と転送先の処理サーバとを関連付けた転送先情報２３１を備えている。そして、外部トランスポート層受信部２２２が、既存の外部コネクション２２３がないと判定した場合、新たに外部コネクション２２３を生成し、生成した外部コネクション２２３のバッファに、受信したパケットのパケットデータを記憶する。次に、振分け先決定部２２１が、バッファからパケットデータ群を取り出し、当該パケットデータ群をキー抽出部２０１に引渡し、キー抽出部２０１からキー情報を取得し、転送先情報２３１を参照して、取得したキー情報から求められる変換値に関連付けられた転送先の処理サーバ３０を決定し、生成した外部コネクション２２３と当該転送先の処理サーバ３０に関連付けられている内部コネクション２２５とを関連付けて、当該内部コネクション２２５に当該バッファのパケットデータ群を引渡す。そして、トランスポート層転送部２２４が、当該パケットデータ群を当該転送先の処理サーバ３０に転送する。
したがって、スケールアウト型のネットワークサーバシステム８００において、分散処理を効率良く実行し、マルチプロトコルに容易に対応可能な信号処理技術を提供することができる。
【符号の説明】
【００７７】
１０  ロードバランサ
２０  振分けサーバ
３０  処理サーバ
４０  クライアント装置
２００  アプリケーション部
２０１  キー抽出部
２１０  ＡＰＩ
２２０  振分け処理部
２２１  振分け先決定部
２２２  外部トランスポート層受信部
２２３  外部コネクション
２２４  トランスポート層転送部
２２５  内部コネクジョン
２２６  コネクション情報
２３０  クラスタ構成管理部
２３１  転送先情報
３００  アプリケーション部
３０１  キー抽出部
３０２  信号処理部
３１０  第１のＡＰＩ
３１１  第２のＡＰＩ
３２０  プロトコル処理部
３２１  アプリケーション駆動部
３２２  内部トランスポート層受信部
３２３  内部コネクション
３３０  分散データ管理部
３３１  データ記憶部
６００，７００  アプリケーション層プロトコル処理部
６１０，７１０  ＡＰＩ
６２０，７２０  トランスポート層プロトコル処理部
６３０  クラスタ構成管理部
７３０  分散データ管理部
８００  ネットワークサーバシステム
【図１】
2014165743.tif 000003
【図２】
2014165743.tif 000004
【図３】
2014165743.tif 000005
【図４】
2014165743.tif 000006
【図５】
2014165743.tif 000007
【図６】
2014165743.tif 000008
【図７】
2014165743.tif 000009