(57)【特許請求の範囲】
【請求項１】
複数のクライアントホストと、クライアントホストのリクエストを処理する複数の処理サーバと、複数のSDN（Software Defined Networking）スイッチと、SDNコントローラホストと、利用可能な処理サーバを管理する負荷分散データベースとを備える並列負荷分散システムであって、
前記SDNスイッチは、
クライアントホストが発行するリクエストに対して、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加されたパケットを受信するパケット受信部と、
前記同一の識別情報が付加されたパケットのうちリクエストの最初のパケットをパケットインによって前記SDNコントローラホストに転送するスイッチ制御情報通信部と、
を有し、
前記SDNコントローラホストは、
前記SDNスイッチからパケットインにより転送されたパケットを受信するスイッチ制御情報通信部と、
前記SDNスイッチから受信したパケットの識別情報に基づいて、前記負荷分散データベースを参照して、異なる前記SDNスイッチから受信した同一の識別情報が付加された複数のパケットのリクエストに対して同一処理サーバを割り当て、前記クライアントホストと前記割り当てられた処理サーバとの間のパケット転送のためのフロールールを前記SDNスイッチに対して登録する負荷分散ホスト割当て機能部と、
を有する並列負荷分散システム。
【請求項２】
複数のクライアントホストと、クライアントホストのリクエストを処理する複数の処理サーバと、複数のSDN（Software Defined Networking）スイッチと、複数のSDNコントローラホストと、利用可能な処理サーバを管理する負荷分散データベースとを備える並列負荷分散システムであって、
前記SDNスイッチは、
クライアントホストが発行するリクエストに対して、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加されたパケットを受信するパケット受信部と、
前記同一の識別情報が付加されたパケットのうちリクエストの最初のパケットをパケットインによって前記SDNコントローラホストに転送するスイッチ制御情報通信部と、
を有し、
前記SDNコントローラホストは、
前記SDNスイッチからパケットインにより転送されたパケットを受信するスイッチ制御情報通信部と、
前記SDNスイッチから受信したパケットの識別情報に基づいて、前記負荷分散データベースを参照して処理サーバを割り当て、前記クライアントホストと前記割り当てられた処理サーバとの間のパケット転送のためのフロールールを前記SDNスイッチに対して登録する負荷分散ホスト割当て機能部と、
を有し、
前記負荷分散データベースは、
複数の前記SDNコントローラホストから同一の識別情報を持つ処理サーバの割り当て要求を受信した場合、排他制御を行うことにより、同一の識別情報を持つ処理サーバの割り当て要求に対して同一の処理サーバを割り当てるデータベース操作部を有する、
並列負荷分散システム。
【請求項３】
前記SDNスイッチは、
前記同一の識別情報が付加されたパケットのうちリクエストの２回目以降のパケットに対して、前記SDNコントローラホストにより登録されたフロールールに従って転送処理を実施するパケット処理部を更に有する、請求項１又は２に記載の並列負荷分散システム。
【請求項４】
前記識別情報は、前記SDNスイッチのデータプレーン内でマッチ条件が指定可能な識別情報であり、
前記SDNスイッチの前記パケット処理部は、前記２回目以降のパケットに対してデータプレーン内で転送処理を実施する、請求項３に記載の並列負荷分散システム。
【請求項５】
複数のクライアントホストと、クライアントホストのリクエストを処理する複数の処理サーバと、複数のSDN（Software Defined Networking）スイッチと、SDNコントローラホストと、利用可能な処理サーバを管理する負荷分散データベースとを備える並列負荷分散システムにおける並列負荷分散方法であって、
クライアントホストが、同一処理サーバ上での処理を行うリクエストに同一の識別情報を付加したパケットをSDNスイッチに送信するステップと、
前記SDNスイッチが、前記クライアントホストから、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加された前記パケットを受信するステップと、
前記SDNスイッチが、前記同一の識別情報が付加されたパケットのうちリクエストの最初のパケットをパケットインによってSDNコントローラホストに転送するステップと、
前記SDNコントローラホストが、前記SDNスイッチからパケットインにより転送されたパケットを受信するステップと、
前記SDNコントローラホストが、前記SDNスイッチから受信したパケットの識別情報に基づいて、前記負荷分散データベースを参照して、異なる前記SDNスイッチから受信した同一の識別情報が付加された複数のパケットのリクエストに対して同一処理サーバを割り当てるステップと、
前記SDNコントローラホストが、前記クライアントホストと前記割り当てられた処理サーバとの間のパケット転送のためのフロールールを前記SDNスイッチに対して登録するステップと、
を有する並列負荷分散方法。
【請求項６】
複数のクライアントホストと、クライアントホストのリクエストを処理する複数の処理サーバと、複数のSDN（Software Defined Networking）スイッチと、複数のSDNコントローラホストと、利用可能な処理サーバを管理する負荷分散データベースとを備える並列負荷分散システムにおける並列負荷分散方法であって、
クライアントホストが、同一処理サーバ上での処理を行うリクエストに同一の識別情報を付加したパケットをSDNスイッチに送信するステップと、
前記SDNスイッチが、前記クライアントホストから、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加された前記パケットを受信するステップと、
前記SDNスイッチが、前記同一の識別情報が付加されたパケットのうちリクエストの最初のパケットをパケットインによってSDNコントローラホストに転送するステップと、
前記SDNコントローラホストが、前記SDNスイッチからパケットインにより転送されたパケットを受信するステップと、
前記SDNコントローラホストが、前記SDNスイッチから受信したパケットの識別情報に基づいて、前記負荷分散データベースを参照して処理サーバを割り当てるステップと、
前記SDNコントローラホストが、前記クライアントホストと前記割り当てられた処理サーバとの間のパケット転送のためのフロールールを前記SDNスイッチに対して登録するステップと、
前記負荷分散データベースが、複数のSDNコントローラホストから同一の識別情報を持つ処理サーバの割り当て要求を受信した場合、排他制御を行うことにより、同一の識別情報を持つ処理サーバの割り当て要求に対して同一の処理サーバを割り当てるステップと
を有する、
並列負荷分散方法。
【請求項７】
複数のクライアントホストと、クライアントホストのリクエストを処理する複数の処理サーバと、複数のSDN（Software Defined Networking）スイッチと、SDNコントローラホストと、利用可能な処理サーバを管理する負荷分散データベースとを備える並列負荷分散システムに設けられた前記SDNコントローラホストであって、
クライアントホストが発行するリクエストに対して、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加されたパケットのうち、リクエストの最初のパケットを、前記SDNスイッチからパケットインによる転送によって受信するスイッチ制御情報通信部と、
前記SDNスイッチから受信したパケットの識別情報に基づいて、前記負荷分散データベースを参照して、異なる前記SDNスイッチから受信した同一の識別情報が付加された複数のパケットのリクエストに対して同一処理サーバを割り当て、前記クライアントホストと前記割り当てられた処理サーバとの間のパケット転送のためのフロールールを前記SDNスイッチに対して登録する負荷分散ホスト割当て機能部と、
を有するSDNコントローラホスト。
【請求項８】
コンピュータを、請求項７に記載のSDNコントローラホストの各部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列負荷分散システム、並列負荷分散方法、SDN（Software Defined Networking）コントローラホスト及びプログラムに関し、特に、分散的に配置されたSDNスイッチ間での協調的な動作を制御するための技術に関する。
【背景技術】
【０００２】
非常に負荷が高い計算機処理を高速に実行するには複数の計算機（処理サーバ）をネットワークで接続し並列分散的に処理する負荷分散処理方式が用いられる。また、ユーザアクセス数が膨大であるWebサービスに見られるような小さい処理が非常に多く発生するような場合にも、同様のネットワーク接続された複数の処理サーバにおいて、それぞれの処理を負荷分散する方式が用いられる。特に、最近ではIP（Internet Protocol）を基本にしたインターネットによって複数台の処理サーバが接続され、負荷分散処理がなされる場合が多い。
【０００３】
このような負荷分散処理方式では、処理要求（リクエスト）を発行するクライアントホストと処理を行う処理サーバ群の間にリクエストの処理振分けを行う負荷分散装置（ロードバランサ）を設置することで、動的に負荷分散を行うことが多い。ロードバランサではリクエストとそれに対するレスポンスデータの転送速度を高く保ちつつ処理振分け機能を提供することが求められる。
【０００４】
この速度性能要件を満たす一つの実現手段として、SDNスイッチを用いたロードバランス方式がある。SDNスイッチはネットワーク上から届くパケットの処理部（データプレーン）とそのための制御部（コントローラ）を分離する構造になっている。
【０００５】
データプレーンではユーザが定義したマッチ条件とそれに対する処理（アクション）をスイッチ内のテーブル（フローテーブル）に登録することによって高速な転送処理やパケットヘッダの書き換え処理が可能である。また、データプレーンとコントローラとの間のパケット転送の機能（パケットイン・パケットアウト）があるためデータプレーン内では実行不可能な処理であっても、コントローラへパケット転送して、任意の処理を施して再度データプレーンに転送することが可能になっている。SDNスイッチを用いたロードバランスは、コントローラ内で処理割り当て処理に基づいてデータプレーン内の転送およびヘッダ書き換え機能を用いることで実現可能である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−２８８７１１号公報，「ゲートウェイ装置、設定コントローラ、ゲートウェイ装置の負荷分散方法及びプログラム」
【非特許文献】
【０００７】
【非特許文献１】北村 匡彦, 君山 博之, 澤邉 知子, 藤井 竜也, 小島 一成, 丸山 充, "SDNスイッチを使った動的分散処理方式の提案," 信学技報, vol. 115, no. 496, CQ2015-134, pp. 147-151, 2016年3月.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
高負荷の計算処理や膨大な処理リクエストに対する負荷分散において、ロードバランサが単一である場合、リクエストとそれに対するレスポンスデータの転送帯域がロードバランサの物理接続のネットワーク速度によって制限されてしまう。つまり、ネットワークの転送速度がボトルネックとなって処理サーバの計算リソースを使い切ることができない状況が発生する。そこで、ロードバランサ自体も複数台に分散配置することで上記の問題が解決できる。しかし、処理内容によっては異なるクライアントホストから発行される複数のリクエストに対して、同一の処理サーバで処理することが必要である。例えば、異なるクライアントホスト同士が持つ映像データを合成処理する場合などは、同一の処理サーバ上でなければ合成処理することができない。
【０００９】
特許文献１ではネットワークからのリクエスト要求のトラヒック量の増減に合わせて処理ノードを追加、削減することを目的にネットワークの入力端、出力端に配置されたスイッチ（分配ルータ）で動的に負荷分散を実施する方式について述べられている。しかし、特許文献１の方式では入力端の分配ルータが単一であるため、分配ルータに入力できるトラヒック量は接続された物理接続の上限値を超えることはできない。特許文献１では主に単一の分配ルータでの負荷分散について述べられており、複数の分配ルータを用いる場合についての同期手段については述べられていない。
【００１０】
非特許文献１では多段のSDNスイッチおよびSDNコントローラホストを用いた動的な負荷分散方式について述べられている。ただし、非特許文献１では同種のクライアントからのリクエストがすべて単一のSDNスイッチに到着するため、異なるSDNスイッチ間、もしくは、異なるSDNコントローラホスト間の同期・協調動作については述べられていない。
【００１１】
本発明は、非同期に発生して異なるSDNスイッチに到着する同一処理サーバ上で処理する必要がある複数のリクエストを所望の処理サーバに割り当てることを目的とする。
【課題を解決するための手段】
【００１２】
本発明の一形態に係る並列負荷分散システムは、
複数のクライアントホストと、クライアントホストのリクエストを処理する複数の処理サーバと、複数のSDN（Software Defined Networking）スイッチと、SDNコントローラホストと、利用可能な処理サーバを管理する負荷分散データベースとを備える並列負荷分散システムであって、
前記SDNスイッチは、
クライアントホストが発行するリクエストに対して、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加されたパケットを受信するパケット受信部と、
前記同一の識別情報が付加されたパケットのうちリクエストの最初のパケットをパケットインによって前記SDNコントローラホストに転送するスイッチ制御情報通信部と、
を有し、
前記SDNコントローラホストは、
前記SDNスイッチからパケットインにより転送されたパケットを受信するスイッチ制御情報通信部と、
前記SDNスイッチから受信したパケットの識別情報に基づいて、前記負荷分散データベースを参照して、異なる前記SDNスイッチから受信した同一の識別情報が付加された複数のパケットのリクエストに対して同一処理サーバを割り当て、前記クライアントホストと前記割り当てられた処理サーバとの間のパケット転送のためのフロールールを前記SDNスイッチに対して登録する負荷分散ホスト割当て機能部と、
を有することを特徴とする。
また、本発明の一形態に係る並列負荷分散システムは、
複数のクライアントホストと、クライアントホストのリクエストを処理する複数の処理サーバと、複数のSDN（Software Defined Networking）スイッチと、複数のSDNコントローラホストと、利用可能な処理サーバを管理する負荷分散データベースとを備える並列負荷分散システムであって、
前記SDNスイッチは、
クライアントホストが発行するリクエストに対して、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加されたパケットを受信するパケット受信部と、
前記同一の識別情報が付加されたパケットのうちリクエストの最初のパケットをパケットインによって前記SDNコントローラホストに転送するスイッチ制御情報通信部と、
を有し、
前記SDNコントローラホストは、
前記SDNスイッチからパケットインにより転送されたパケットを受信するスイッチ制御情報通信部と、
前記SDNスイッチから受信したパケットの識別情報に基づいて、前記負荷分散データベースを参照して処理サーバを割り当て、前記クライアントホストと前記割り当てられた処理サーバとの間のパケット転送のためのフロールールを前記SDNスイッチに対して登録する負荷分散ホスト割当て機能部と、
を有し、
前記負荷分散データベースは、
複数の前記SDNコントローラホストから同一の識別情報を持つ処理サーバの割り当て要求を受信した場合、排他制御を行うことにより、同一の識別情報を持つ処理サーバの割り当て要求に対して同一の処理サーバを割り当てるデータベース操作部を有することを特徴とする。
【００１３】
本発明の一形態に係る並列負荷分散方法は、
複数のクライアントホストと、クライアントホストのリクエストを処理する複数の処理サーバと、複数のSDN（Software Defined Networking）スイッチと、SDNコントローラホストと、利用可能な処理サーバを管理する負荷分散データベースとを備える並列負荷分散システムにおける並列負荷分散方法であって、
クライアントホストが、同一処理サーバ上での処理を行うリクエストに同一の識別情報を付加したパケットをSDNスイッチに送信するステップと、
前記SDNスイッチが、前記クライアントホストから、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加された前記パケットを受信するステップと、
前記SDNスイッチが、前記同一の識別情報が付加されたパケットのうちリクエストの最初のパケットをパケットインによってSDNコントローラホストに転送するステップと、
前記SDNコントローラホストが、前記SDNスイッチからパケットインにより転送されたパケットを受信するステップと、
前記SDNコントローラホストが、前記SDNスイッチから受信したパケットの識別情報に基づいて、前記負荷分散データベースを参照して、異なる前記SDNスイッチから受信した同一の識別情報が付加された複数のパケットのリクエストに対して同一処理サーバを割り当てるステップと、
前記SDNコントローラホストが、前記クライアントホストと前記割り当てられた処理サーバとの間のパケット転送のためのフロールールを前記SDNスイッチに対して登録するステップと、
を有することを特徴とする。
また、本発明の一形態に係る並列負荷分散方法は、
複数のクライアントホストと、クライアントホストのリクエストを処理する複数の処理サーバと、複数のSDN（Software Defined Networking）スイッチと、複数のSDNコントローラホストと、利用可能な処理サーバを管理する負荷分散データベースとを備える並列負荷分散システムにおける並列負荷分散方法であって、
クライアントホストが、同一処理サーバ上での処理を行うリクエストに同一の識別情報を付加したパケットをSDNスイッチに送信するステップと、
前記SDNスイッチが、前記クライアントホストから、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加された前記パケットを受信するステップと、
前記SDNスイッチが、前記同一の識別情報が付加されたパケットのうちリクエストの最初のパケットをパケットインによってSDNコントローラホストに転送するステップと、
前記SDNコントローラホストが、前記SDNスイッチからパケットインにより転送されたパケットを受信するステップと、
前記SDNコントローラホストが、前記SDNスイッチから受信したパケットの識別情報に基づいて、前記負荷分散データベースを参照して処理サーバを割り当てるステップと、
前記SDNコントローラホストが、前記クライアントホストと前記割り当てられた処理サーバとの間のパケット転送のためのフロールールを前記SDNスイッチに対して登録するステップと、
前記負荷分散データベースが、複数のSDNコントローラホストから同一の識別情報を持つ処理サーバの割り当て要求を受信した場合、排他制御を行うことにより、同一の識別情報を持つ処理サーバの割り当て要求に対して同一の処理サーバを割り当てるステップと
を有することを特徴とする。
【００１４】
本発明の一形態に係るSDNコントローラホストは、
複数のクライアントホストと、クライアントホストのリクエストを処理する複数の処理サーバと、複数のSDN（Software Defined Networking）スイッチと、SDNコントローラホストと、利用可能な処理サーバを管理する負荷分散データベースとを備える並列負荷分散システムに設けられた前記SDNコントローラホストであって、
クライアントホストが発行するリクエストに対して、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加されたパケットのうち、リクエストの最初のパケットを、前記SDNスイッチからパケットインによる転送によって受信するスイッチ制御情報通信部と、
前記SDNスイッチから受信したパケットの識別情報に基づいて、前記負荷分散データベースを参照して、異なる前記SDNスイッチから受信した同一の識別情報が付加された複数のパケットのリクエストに対して同一処理サーバを割り当て、前記クライアントホストと前記割り当てられた処理サーバとの間のパケット転送のためのフロールールを前記SDNスイッチに対して登録する負荷分散ホスト割当て機能部と、
を有することを特徴とする。
【００１５】
本発明の一形態に係るプログラムは、
コンピュータを、上記のSDNコントローラホストの各部として機能させることを特徴とする。
【発明の効果】
【００１６】
本発明によれば、非同期に発生して異なるSDNスイッチに到着する同一処理サーバ上で処理する必要がある複数のリクエストを所望の処理サーバに割り当てることが可能になる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施形態に係る並列負荷分散システムの概要を示す図
【図２】本発明の実施形態に係る並列負荷分散システムにおける各機能部を示す図
【図３】処理サーバデータベース保持部が有する処理サーバデータベースと操作関数とを示す図
【図４】負荷分散割当てデータベース保持部が有する負荷分散割当てデータベースと操作関数とを示す図
【図５】負荷分散ホスト割当て機能部が実施する負荷分散ホスト割当て処理のフローチャート
【図６】負荷分散ホスト割当て機能部が実施する負荷分散ホスト割当て処理のシーケンス図（同時にsetAssingedHost処理が発生しなかった場合）
【図７】負荷分散ホスト割当て機能部が実施する負荷分散ホスト割当て処理のシーケンス図（同時にsetAssingedHost処理が発生した場合）
【図８】分散配置されたSDNスイッチによるロードバランスの並列動作の例を示す図
【図９】本発明の実施形態に係るクライアントホスト、SDNスイッチ、SDNコントローラホスト、負荷分散データベース又は負荷分散制御ホストのハードウェア構成例を示す図
【発明を実施するための形態】
【００１８】
以下、図面を参照して本発明の実施形態について説明する。
【００１９】
本発明の実施形態では、ロードバランサとして分散的に配置された複数台のSDNスイッチに対して、同一サーバ上で処理する必要がある非同期に発生する複数のリクエストを所望の処理サーバに負荷分散割り当てを行い、リクエストおよびレスポンスデータの転送を行う手法について説明する。このとき、複数のリクエストが大量かつ非同期に複数のSDNスイッチに到着する可能性があるため、SDNスイッチ間で分散協調して処理サーバに負荷分散割り当ておよび転送処理を行う必要がある。
【００２０】
＜並列負荷分散システムの概要＞
図１に、本発明の実施形態に係る並列負荷分散システムの概要を示す。並列負荷分散システムは、複数のクライアントホスト１００−１〜１００−６（以下、クライアントホスト１００と省略されることがある）と、クライアントホストのリクエストを処理する複数の処理サーバ４００−１〜４００−６（以下、処理サーバ４００と省略されることがある）と、複数のSDNスイッチ３００−１〜３００−６（以下、SDNスイッチ３００と省略されることがある）とを備える。また、並列負荷分散システムは、１つ以上のSDNコントローラホスト６００−１、６００−２（以下、SDNコントローラホスト６００と省略されることがある）と、利用可能な処理サーバを管理する負荷分散データベース７００と、負荷分散制御ホスト８００とを更に備える。
【００２１】
複数のクライアントホスト１００−１〜１００−６がL2（Layer 2）ネットワークスイッチ２００−１、２００−３を介して複数のSDNスイッチ３００−１〜３００−６に接続されている。同一のL2ネットワークスイッチ２００−１、２００−３に接続された装置同士はお互いに通信可能である。また、SDNスイッチ３００は別のL2ネットワークスイッチ２００−２、２００−４を介して複数の処理サーバ４００−１〜４００−６に接続されている。複数の処理サーバ４００は処理結果を一時的もしくは長期的に保存するためのローカルストレージホスト５００−１、５００−２に接続されている。
【００２２】
L2ネットワークスイッチ２００−２は別の場所に構成された同機能のL2ネットワークスイッチ２００−４にL2/L3（Layer 2/Layer 3）ネットワークを介して接続されている。よって、これらのL2ネットワークスイッチ２００−２、２００−４に接続された複数のSDNスイッチ３００と複数の処理サーバ４００間は互いに通信が可能である。
【００２３】
SDNスイッチ３００−１、３００−２、３００−３はSDNコントローラホスト６００−１に制御用ネットワークを介して接続されている。同様にSDNスイッチ３００−４、３００−５、３００−６はSDNコントローラホスト６００−２に制御用ネットワークを介して接続されている。また、すべてのSDNコントローラホスト６００および負荷分散制御ホスト８００は制御用ネットワークを介して負荷分散データベース７００に接続されている。
【００２４】
クライアントホスト１００は処理リクエストを接続可能な任意のSDNスイッチ３００に対して送信し、リクエストを受信したSDNスイッチ３００はSDNコントローラホスト６００からの制御に基づいて割り当てられた処理サーバ４００にリクエストを転送する。また、処理サーバ４００からのレスポンスはそのリクエストを発行したクライアントホスト１００に転送する。
【００２５】
同一サーバ上で処理する必要がある非同期に発生する複数のリクエストを所望の処理サーバに負荷分散割り当てを行うため、並列負荷分散システムにおいて以下の（１）〜（５）を実施する。
【００２６】
（１）クライアントホスト１００が発行するリクエストに識別情報を定義する
同一処理サーバ上での処理を行うリクエストには同一の識別情報を持たせる。識別情報はSDNスイッチ３００のデータプレーン内でマッチ条件が指定可能であることが好ましい。例えば、リクエストがTCP（Transmission Control Protocol）の場合には宛先ポート番号を識別情報として用いることが可能である。なお、リクエストの識別情報は宛先ポート番号に限定されず、同一処理サーバ上での処理が必要となることが識別できれば如何なる識別情報が用いられてもよい。クライアントホスト１００は、発行するリクエストに対して識別情報を付加して任意のSDNスイッチ３００に送信する。すなわち、クライアントホスト１００が、同一処理サーバ上での処理を行うリクエストに同一の識別情報を付加したパケットをSDNスイッチ３００に送信し、SDNスイッチ３００は、クライアントホスト１００から、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加されたパケットを受信する。
【００２７】
（２）SDNスイッチ３００が最初のパケットだけパケットインさせて識別情報を判断する
リクエストを受信したSDNスイッチ３００は、同一の識別情報が付加されたパケットのうちリクエストの最初のパケットをパケットインによってSDNコントローラホスト６００に転送する。
【００２８】
（３）高速データベースによって識別情報に対する処理サーバを割り当て
SDNコントローラホスト６００内では、高速データベースを用いて到着した識別情報に対する処理サーバ４００を割り当て、管理を行う。すなわち、SDNコントローラホスト６００は、SDNスイッチ３００からパケットインにより転送されたパケットを受信し、SDNスイッチ３００から受信したパケットの識別情報に基づいて、負荷分散データベース７００を参照して処理サーバ４００を割り当てる。
【００２９】
（４）パケット転送のためのフロールールをSDNスイッチのフローテーブルに書き込む
SDNコントローラホスト６００は、割り当て処理が完了した後、パケットイン実施のSDNスイッチ３００に対して転送処理のフロールールを投入する。すなわち、SDNコントローラホスト６００は、クライアントホスト１００と割り当てられた処理サーバ４００との間のパケット転送のためのフロールールをSDNスイッチ３００に対して登録する。これにより、SDNスイッチ３００は、同一の識別情報が付加されたパケットのうちリクエストの２回目以降のパケットに対して、SDNコントローラホスト６００により登録されたフロールールに従って転送処理を実施することが可能になる。上記のように、識別情報がSDNスイッチ３００のデータプレーン内でマッチ条件が指定可能な識別情報である場合には、SDNスイッチ３００は、２回目以降のパケットに対してデータプレーン内で転送処理が完了するため高速に転送処理が実施される。
【００３０】
（５）同一の識別情報を受信したSDNスイッチ３００にも同様のフロールールをフローテーブルに書き込む
別のSDNスイッチ３００に同一識別情報を持ったリクエストが届いた場合、先と同様に最初のパケットをパケットインによってSDNコントローラホスト６００に転送し、高速データベースを用いて負荷分散データベース７００を参照して処理サーバ４００を割り当て、フロールールを登録する。これにより、処理サーバ４００へのリクエストの負荷分散割り当てが可能となる。
【００３１】
なお、これらのリクエストとそれに伴うパケットインは非同期に発生するため、高速データベース上での排他制御を保証した負荷分散割り当て処理が必要である。具体的には、負荷分散データベース７００において複数のSDNコントローラホスト６００から同一の識別情報を持つ処理サーバの割り当て要求を受信した場合、排他制御を行うことにより、同一の識別情報を持つ処理サーバの割り当て要求に対して同一の処理サーバ４００を割り当てる。
【００３２】
＜並列負荷分散システムの機能部の概要＞
図２に、本発明の実施形態に係る並列負荷分散システムにおける各機能部を示す。SDNスイッチ３００は、複数のパケット送受信部３０１−１〜３０１−Ｎ（以下、パケット送受信部３０１と省略されることがある）と、パケット処理部３０３と、フローテーブル保持部３０５と、フローテーブル操作部３０７と、スイッチ制御情報通信部３０９とを有する。
【００３３】
SDNスイッチ３００のパケット送受信部３０１は外部ネットワークと接続された物理インタフェースであり、クライアントホスト１００や処理サーバ４００等からのパケットの送信受信を行う。本実施形態では、パケット送受信部３０１は、クライアントホスト１００が発行するリクエストに対して、同一処理サーバ上での処理を行うリクエストに同一の識別情報が付加されたパケットを受信する。
【００３４】
パケット処理部３０３はパケット受信の度に、フローテーブル操作部３０７を介してフローテーブル保持部３０５に登録されているフロールールを参照し、マッチ条件が存在すればそのアクションを実行する。アクションがパケットイン処理である場合、スイッチ制御情報通信部３０９を介してSDNコントローラホスト６００にパケットを転送する。本実施形態では、スイッチ制御情報通信部３０９は、同一の識別情報が付加されたパケットのうちリクエストの最初のパケットをパケットインによってSDNコントローラホスト６００に転送する。なお、２回目以降のパケットに対しては、後述するようにSDNコントローラホスト６００によりフロールールが登録されるため、パケット処理部３０３は、フローテーブル保持部３０５に登録されているフロールールを参照して転送処理を実施することができる。逆にSDNコントローラホスト６００からパケットアウト処理要求があった場合は、SDNコントローラホスト６００から該当パケットを受信し指定されたパケット送受信部３０１からパケットを出力する。
【００３５】
SDNコントローラホスト６００は、スイッチ制御情報通信部６０１と、負荷分散データベース接続部６０３と、負荷分散ホスト割当て機能部６０５とを有する。SDNコントローラホスト６００はSDNスイッチ３００とはスイッチ制御情報通信部６０１を介して接続されており、また、負荷分散データベース７００とは負荷分散データベース接続部６０３を介して接続されている。
【００３６】
SDNコントローラホスト６００では、SDNスイッチ３００からパケットイン要求があった場合にスイッチ制御情報通信部６０１を介して該当パケットを受信し、負荷分散ホスト割当て機能部６０５に通知する。本実施形態では、スイッチ制御情報通信部６０１は、SDNスイッチ３００からパケットインにより転送されたリクエストの最初のパケットを受信する。負荷分散ホスト割当て機能部６０５ではパケットインされたパケットの識別情報に基づいて、負荷分散データベース７００を参照して処理サーバ４００を割り当てる。その後、クライアントホスト１００と割り当てられた処理サーバ４００との間のパケット転送のためのフロールールをSDNスイッチ３００に対して登録要求を行う。また同時にパケットインされているパケットに対しても同様の転送ルールを適用した後、パケットアウト要求によってSDNスイッチ３００に転送する。
【００３７】
負荷分散データベース７００は、負荷分散データベース接続部７０１と、データベース操作部７０３と、処理サーバデータベース保持部７０５と、負荷分散割当てデータベース保持部７０７とを有する。負荷分散データベース７００はSDNコントローラホスト６００および負荷分散制御ホスト８００とは負荷分散データベース接続部７０１を介して接続されている。
【００３８】
また、負荷分散制御ホスト８００は、負荷分散ホスト追加部８０１と、負荷分散データベース接続部８０３とを有する。負荷分散制御ホスト８００は負荷分散データベース７００とは負荷分散データベース接続部８０３を介して接続されている。
【００３９】
負荷分散データベース７００ではSDNコントローラホスト６００からの処理サーバ割り当てのためのデータベース参照要求があった場合に、後述する要求内容に従いデータベース操作部７０３が処理サーバデータベース保持部７０５および負荷分散割当てデータベース保持部７０７を参照してデータベース処理を行う。データベース操作部７０３は、複数のSDNコントローラホスト６００から同一の識別情報を持つ処理サーバの割り当て要求を受信した場合、排他制御を行うことにより、同一の識別情報を持つ処理サーバの割り当て要求に対して同一の処理サーバ４００を割り当てる。また、負荷分散制御ホスト８００の負荷分散ホスト追加部８０１から処理サーバの追加要求があった場合に、処理サーバデータベース保持部７０５のデータベース更新を実施する。
【００４０】
図３に、処理サーバデータベース保持部７０５が有する処理サーバデータベースと操作関数とを示す。処理サーバデータベース保持部７０５に保持される処理サーバデータベースはFIFO（First In First Out）型リスト形式のテーブルである。データベース操作部７０３が処理サーバデータベース保持部７０５に対して実施するデータベース操作として下記の３つの関数が定義される。
【００４１】
（１）
関数名：addHost
引数：処理サーバ情報（host）
戻り値：True（引数で指定したhostが登録できた場合）又はFalse（引数で指定したhostが登録できなかった場合）
目的・内容：処理サーバの候補を登録する。登録する位置はリストの最後尾である。
【００４２】
（２）
関数名：getHost
引数：なし
戻り値：処理サーバ情報（リストの先頭に処理サーバ情報が存在する場合）又はNone（リストの先頭に処理サーバ情報が存在しない場合）
目的・内容：リストの先頭から利用可能な処理サーバを取得する。
【００４３】
（３）
関数名：returnHost
引数：処理サーバ情報（host）
戻り値：True（host情報が登録できた場合）又はFalse（host情報が登録できなかった場合）
目的・内容：getHostによって処理サーバを取得した後に、それが不要であった場合に再度、処理サーバデータベースに処理サーバ情報を返却する。
【００４４】
上記の（１）〜（３）の処理はすべてアトミックに実施される。すなわち、ある特定の時間に１つの関数の処理のみが実施され、各処理中に別の処理要求がきた場合、後者の処理はブロックされる。
【００４５】
図３に示す処理サーバデータベースは、処理サーバデータベースが空の状態から始めて下記の処理が実施された後の状態を示している。"="は変数への値の代入を意味する。
1. addHost("192.168.100.1:8080")
2. addHost("192.168.100.2:8080")
3. addHost("192.168.100.3:8080")
4. addHost("192.168.100.4:8080")
5. addHost("192.168.100.5:8080")
6. addHost("192.168.100.6:8080")
7. addHost("192.168.100.7:8080")
8. addHost("192.168.100.8:8080")
9. host=getHost()
10. host=getHost()
11. host=getHost()
12. returnHost(host)
図４に、負荷分散割当てデータベース保持部７０７が有する負荷分散割当てデータベースと操作関数とを示す。負荷分散割当てデータベース保持部７０７に保持される負荷分散割当データベースはハッシュリスト（連想記憶またはKey-Value-Storeに同じ）形式である。ハッシュのkeyはリクエストの識別情報である。本実施形態ではTCPの宛先ポート番号をリクエストの識別情報として用いる。ハッシュのvalueはkeyで示す識別情報に対して割り当てられた処理サーバ情報である。
【００４６】
データベース操作部７０３が負荷分散割当てデータベース保持部７０７に対して実施するデータベース操作関数として下記の２つが定義される。
【００４７】
（１）
関数名：getAssingnedHost
引数：リクエストの識別情報（key）
戻り値：処理サーバ情報（host）（引数で指定したkeyに対する処理サーバ情報が登録されている場合）又はNone（引数で指定したkeyに対する処理サーバ情報が登録されていない場合）
目的・内容：負荷分散割当データベース内にkeyの示す内容を取得する。
【００４８】
（２）
関数名：setAssingnedHost
引数：リクエストの識別情報（key）, 割り当てられた処理サーバ情報（value）
戻り値：True（引数で指定したkeyに対する処理サーバ情報が登録できた場合）又はFalse（引数で指定したkeyに対する処理サーバ情報が登録できなかった場合）
目的・内容：負荷分散割当データベース内にkeyの示す内容を登録する。すでに同じkeyに対するvalueが登録されている場合、処理は失敗しFalseを返す。
【００４９】
図４に示す負荷分散割当データベースは、空の状態から以下の操作を行った場合に得られるものである。
1. setAssingnedHost(9002, "192.168.100.2:8080")
2. setAssingnedHost(9001, "192.168.100.1:8080")
また、この状態で操作関数を実行した場合下記の結果が得られる。下記の結果では、「：」の左側が操作関数であり、「：」の右側が戻り値である。
1. getAssingnedHost(9001)："192.168.100.1:8080"
2. getAssingnedHost(9003)：None
3. setAssingnedHost(9001, "192.168.100.3:8080")：False
4. setAssingnedHost(9003, "192.168.100.3:8080")：True
図５に、負荷分散ホスト割当て機能部６０５が実施する負荷分散ホスト割当て処理のフローチャートを示す。負荷分散ホスト割当て機能部６０５はパケットインされたパケットからリクエストの識別情報を抽出しそれに基づいて処理サーバ（nextHost）を決定する。
【００５０】
具体的には、負荷分散ホスト割当て機能部６０５はリクエストの識別情報として宛先ポート番号（target_port）を抽出する（Ｓ１０１）。key=target_port, nextHost=getAssingnedHost(key)により、keyに対する処理サーバ情報が登録されているかを判断する（Ｓ１０３）。keyに対する処理サーバ情報（nextHost）が登録されている場合（Ｓ１０５：Ｎｏ）、処理サーバ情報（nextHost）を返す（Ｓ１１５）。keyに対する処理サーバ情報が登録されていない場合（Ｓ１０５：Ｙｅｓ）、負荷分散ホスト割当て機能部６０５はnextHost=getHost()により処理サーバ情報を取得し、key=target_port、value=nextHostとして、setAssingnedHost(key, value)により処理サーバ情報を登録する（Ｓ１０７）。setAssingnedHost(key, value)の戻り値をretとして、ret==Trueである場合、すなわち、処理サーバ情報が登録できた場合（Ｓ１０９：Ｙｅｓ）、処理サーバ情報（nextHost）を返す（Ｓ１１５）。ret==Falseである場合、すなわち、処理サーバ情報が登録でなかった場合（Ｓ１０９：Ｎｏ）、returnHost(nextHost)により処理サーバ情報を返却する（Ｓ１１１）。また、nextHost=getAssingnedHost(key)によりkeyに対する処理サーバ情報（nextHost）を取得し（Ｓ１１３）、処理サーバ情報（nextHost）を返す（Ｓ１１５）。
【００５１】
ここで、異なるSDNコントローラホストの負荷分散ホスト割当て機能部６０５は非同期に処理要求を実施するため、同じ識別情報を持つリクエストに対して同時にsetAssingnedHost操作をした場合の排他制御を行っている。
【００５２】
図６に、負荷分散ホスト割当て機能部６０５が実施する負荷分散ホスト割当て処理のシーケンス図を示す。図６は同じ識別情報を持つリクエストに対する同時setAssingnedHost処理が発生しなかった場合のシーケンス図である。はじめにSDNコントローラホスト６００−１の負荷分散ホスト割当て機能部６０５に対して、リクエスト識別情報（TCP宛先ポート番号：target_port）が9001であるパケットがパケットインされる（Ｓ２０１）。その後getAssingedHost操作によって既に負荷分散割当てデータベースに同リクエストの処理サーバが登録されているかを確認する（Ｓ２０３、Ｓ２０３'）。登録がなかった場合、戻り値Noneが戻される（Ｓ２０５、Ｓ２０５'）。この場合、getHost操作を用いて処理サーバデータベース保持部７０５の処理サーバデータベースから割当てるべき処理サーバを取得する（Ｓ２０７、Ｓ２０７'）。処理サーバ（"192.168.100.3:8080"）が取得された場合（Ｓ２０９、Ｓ２０９'）、setAssingedHostを用いて負荷分散割当てデータベース保持部７０７の負荷分散割当てデータベースに登録を行う（Ｓ２１１、Ｓ２１１'）。登録が成功した場合、戻り値Trueが戻される（Ｓ２１３、Ｓ２１３'）。処理サーバ（"192.168.100.3:8080"）の情報は、リクエストを発行したSDNスイッチのフローテーブルに書き込まれる（Ｓ２１５）。
【００５３】
次にSDNコントローラホスト６００−２の負荷分散ホスト割当て機能部６０５に同リクエスト識別情報を持つパケットがパケットインされる場合（Ｓ２１７）、先ほどと同様にgetAssingnedHostを用いて既に登録されている該当処理サーバ情報を取得する（Ｓ２１９、Ｓ２１９'）。この場合、同リクエスト識別情報に対して同じ処理サーバ（"192.168.100.3:8080"）が取得される（Ｓ２２１、Ｓ２２１'）。処理サーバ（"192.168.100.3:8080"）の情報は、リクエストを発行したSDNスイッチのフローテーブルに書き込まれる（Ｓ２２３）。
【００５４】
図７に、負荷分散ホスト割当て機能部６０５が実施する負荷分散ホスト割当て処理のシーケンス図を示す。図７は同じ識別情報を持つリクエストに対する同時setAssingnedHost処理が発生した場合のシーケンス図である。先と同様に、はじめにSDNコントローラホスト６００−１の負荷分散ホスト割当て機能部６０５に対して、リクエスト識別情報（TCP宛先ポート番号：target_port）が9001であるパケットがパケットインされる（Ｓ３０１）。その後getAssingedHost操作によって既に負荷分散割当てデータベースに同リクエストの処理サーバが登録されているかを確認する（Ｓ３０３、Ｓ３０３'）。登録がなかった場合、戻り値Noneが戻される（Ｓ３０５、Ｓ３０５'）。この場合、getHost操作を用いて処理サーバデータベース保持部７０５の処理サーバデータベースから割当てるべき処理サーバを取得する（Ｓ３０７、Ｓ３０７'）。処理サーバ（"192.168.100.3:8080"）が取得された場合（Ｓ３０９、Ｓ３０９'）、setAssingedHostを用いて負荷分散割当てデータベース保持部７０７の負荷分散割当てデータベースに登録を行う（Ｓ３２７、Ｓ３２７'）。しかし、このgetAssingnedHost操作とsetAssingedHost操作の間にSDNコントローラホスト６００−２の負荷分散ホスト割当て機能部６０５が同様の操作を行ったとする。
【００５５】
すなわち、SDNコントローラホスト６００−２についても以下の操作が行われる。SDNコントローラホスト６００−２の負荷分散ホスト割当て機能部６０５に対して、リクエスト識別情報（TCP宛先ポート番号：target_port）が9001であるパケットがパケットインされる（Ｓ３１１）。その後getAssingedHost操作によって既に負荷分散割当てデータベースに同リクエストの処理サーバが登録されているかを確認する（Ｓ３１３、Ｓ３１３'）。登録がなかった場合、戻り値Noneが戻される（Ｓ３１５、Ｓ３１５'）。この場合、getHost操作を用いて処理サーバデータベース保持部７０５の処理サーバデータベースから割当てるべき処理サーバを取得する（Ｓ３１７、Ｓ３１７'）。処理サーバ（"192.168.100.4:8080"）が取得された場合（Ｓ３１９、Ｓ３１９'）、setAssingedHostを用いて負荷分散割当てデータベース保持部７０７の負荷分散割当てデータベースに登録を行う（Ｓ３２１、Ｓ３２１'）。登録が成功した場合、戻り値Trueが戻される（Ｓ３２３、Ｓ３２３'）。処理サーバ（"192.168.100.4:8080"）の情報は、リクエストを発行したSDNスイッチのフローテーブルに書き込まれる（Ｓ３２５）。
【００５６】
この状態で、SDNコントローラホスト６００−１の負荷分散ホスト割当て機能部６０５が行うsetAssingedHost操作の戻り値はFalseになる（Ｓ３２９、Ｓ３２９'）。この場合、SDNコントローラホスト６００−１の負荷分散ホスト割当て機能部６０５は再度getAssingnedHost操作によって登録されている処理サーバを取得する（Ｓ３３１、Ｓ３３１'）。処理サーバ（"192.168.100.4:8080"）が取得された場合（Ｓ３３３、Ｓ３３３'）、自らgetHost操作によって取得した処理サーバ情報をreturnHost操作によって処理サーバデータベースに戻した後（Ｓ３３５、Ｓ３３５'、Ｓ３３７、Ｓ３３７'）、割当て操作を終了する。処理サーバ（"192.168.100.4:8080"）の情報は、リクエストを発行したSDNスイッチのフローテーブルに書き込まれる（Ｓ３３９）。
【００５７】
図８に、分散配置されたSDNスイッチによるロードバランスの並列動作の例を示す。図８には、上記の並列負荷分散システムを用いて並列的にロードバランスを実行している状態が示されている。クライアントホスト１００−１および１００−２は同一の処理サーバで処理されるデータを有しており、同じリクエスト識別情報を付加してそれぞれSDNスイッチ３００−１および３００−２に送信している。本発明によってSDNスイッチ３００−１および３００−２はそれぞれのリクエストを処理サーバ４００−１に転送する。同様にクライアントホスト１００−３および１００−５も同一の識別情報を付加してリクエストをSDNスイッチ３００−３および３００−５に送信している。この場合、処理サーバ４００−５が割り当てられそれぞれのリクエストが処理サーバ４００−５に転送される。このようにクライアントホスト１００は任意のSDNスイッチ３００に対して処理リクエストを非同期に送信することが可能であり、同一の識別情報を持つリクエストは同一の処理サーバ４００に転送される。SDNスイッチ３００は任意の台数設置可能であり、設置台数を増やすことで転送帯域を広げることが可能である。
【００５８】
＜ハードウェア構成例＞
図９に、本発明の実施形態に係るクライアントホスト１００、SDNスイッチ３００、SDNコントローラホスト６００、負荷分散データベース７００又は負荷分散制御ホスト８００のハードウェア構成例を示す。これらの各装置は、ＣＰＵ（Central Processing Unit）１５１等のプロセッサ、ＲＡＭ（Random Access Memory）やＲＯＭ（Read Only Memory）等のメモリ装置１５２、ハードディスク等の記憶装置１５３等から構成されたコンピュータでもよい。例えば、各装置の機能および処理は、記憶装置１５３又はメモリ装置１５２に格納されているデータやプログラムをＣＰＵ１５１が実行することによって実現される。また、各装置に必要な情報は、入出力インタフェース装置１５４から入力され、各装置において求められた結果は、入出力インタフェース装置１５４から出力されてもよい。
【００５９】
＜本発明の実施形態の効果＞
以上のように、本発明の実施形態によれば、非同期に発生して異なるSDNスイッチに到着する同一処理サーバ上で処理する必要がある複数のリクエストを所望の処理サーバに割り当てることが可能になる。
【００６０】
また、異なる複数のSDNスイッチを用いたロードバランスが可能になり、ロードバランサの物理接続の可用帯域を容易に拡張することができる。リクエストに対する負荷分散処理サーバの割り当てが完了した後のそれぞれのSDNスイッチでの転送処理は独立に実施されるため、ロードバランスの可用帯域は各SDNスイッチの可用帯域の総和になる。また、１台のSDNコントローラホストは複数台のSDNスイッチを制御することができるため、既存のコントローラにSDNスイッチを追加・削除する際の設定変更等は不要である。
【００６１】
＜補足＞
説明の便宜上、本発明の実施形態に係る並列負荷分散システムの各装置は機能的なブロック図を用いて説明しているが、本発明の実施形態に係る並列負荷分散システムの各装置は、ハードウェア、ソフトウェア又はそれらの組み合わせで実現されてもよい。例えば、本発明の実施形態は、コンピュータに対して本発明の実施形態に係る並列負荷分散システムの各装置の各機能を実現させるプログラム、コンピュータに対して本発明の実施形態に係る方法の各手順を実行させるプログラム等により、実現されてもよい。また、各機能部が必要に応じて組み合わせて使用されてもよい。また、本発明の実施形態に係る方法は、実施形態に示す順序と異なる順序で実施されてもよい。
【００６２】
以上、非同期に発生して異なるSDNスイッチに到着する同一処理サーバ上で処理する必要がある複数のリクエストを所望の処理サーバに割り当てるための手法について説明したが、本発明は、上記の実施形態に限定されることなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変更・応用が可能である。
【符号の説明】
【００６３】
１００−１〜１００−６  クライアントホスト
２００−１〜２００−４  L2ネットワークスイッチ
３００−１〜３００−６  SDNスイッチ
３０１−１〜３０１−Ｎ  パケット送受信部
３０３                  パケット処理部
３０５                  フローテーブル保持部
３０７                  フローテーブル操作部
３０９                  スイッチ制御情報通信部
４００−１〜４００−６  処理サーバ
５００−１〜５００−２  ローカルストレージホスト
６００−１〜６００−２  SDNコントローラホスト
６０１                  スイッチ制御情報通信部
６０３                  負荷分散データベース接続部
６０５                  負荷分散ホスト割当て機能部
７００                  負荷分散データベース
７０１                  負荷分散データベース接続部
７０３                  データベース操作部
７０５                  処理サーバデータベース保持部
７０７                  負荷分散割当てデータベース保持部
８００                  負荷分散制御ホスト
８０１                  負荷分散ホスト追加部
８０３                  負荷分散データベース接続部
【図１】
0006546566.tif 000002
【図２】
0006546566.tif 000003
【図３】
0006546566.tif 000004
【図４】
0006546566.tif 000005
【図５】
0006546566.tif 000006
【図６】
0006546566.tif 000007
【図７】
0006546566.tif 000008
【図８】
0006546566.tif 000009
【図９】
0006546566.tif 000010