(58)【調査した分野】(Int.Cl.,DB名)
マッチ条件と前記マッチ条件に対応する受信信号がディスパッチされる対象プロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するプロセスに、受信した信号をディスパッチするディスパッチャをさらに備える、ことを特徴とする請求項1記載の通信装置。
前記イベントバッファリングにおいて、前記ロールバック制御部は、前記第1のプロセスが前記イベントを処理している間に受信され、前記第1のプロセスにディスパッチされるべき1つ以上のパケットのすべてを、前記ディスパッチャが前記バッファに提供するように制御し、前記1つ以上のパケットは前記1つ以上のイベントに対応し、前記バッファは、前記ディスパッチャから前記バッファに提供される前記1つ以上のパケットを格納し、
前記ロールバック制御部は、前記第1のプロセスによる前記イベントの処理が完了すると、前記ディスパッチャが、前記ディスパッチルールにおいて前記対象プロセスとして定義されている前記第1のプロセスを、前記第1のプロセスから稼働中のプロセスに切り替えた前記第2のプロセスに変更するよう制御する、ことを特徴とする請求項2記載の通信装置。
前記第1と第2のプロセスはスイッチプロセスであり、前記スイッチプロセスは、前記ディスパッチャにより自身にディスパッチされたパケットを受信すると、前記パケットのヘッダフィールド情報をフローの処理について前記スイッチプロセスのフローエントリと照合し、照合結果に基づき前記パケットを処理し、
前記スイッチプロセスのフローエントリは、受信したパケットのヘッダフィールド情報と照合されるマッチフィールドと、マッチするパケットの処理を定義するアクションフィールドとを含む、ことを特徴とする請求項2記載の通信装置。
前記第1と第2のプロセスはコントローラプロセスであり、前記コントローラプロセスは、スイッチからのメッセージを受信すると、フローの経路上の各スイッチに適用される前記フローを処理するためのフローエントリを生成し、前記フローエントリは、前記スイッチが受信したパケットのヘッダフィールド情報と照合されるマッチフィールドと、マッチするパケットの前記スイッチによる処理を定義するアクションフィールドと、を含み、
前記生成されたルールを前記フローの経路上の各スイッチに送信する、ことを特徴とする請求項1乃至3のいずれか1項に記載の通信装置。
前記バッファリングの開始時に、前記ロールバック制御部は、前記第1のスイッチプロセスが前記イベントを処理している間に受信され、前記第1のスイッチプロセスにディスパッチされるべき1つ以上のパケットのすべてを、前記ディスパッチャが前記バッファに提供するように制御し、前記バッファは、前記ディスパッチャから前記バッファに提供される前記1つ以上のパケットすべてを格納し、
前記ロールバック制御部は、前記第1のスイッチプロセスによる前記イベントの処理が完了すると、前記ディスパッチャが、前記ディスパッチルールにおいて対象スイッチプロセスとして定義されている前記第1のスイッチプロセスを、前記第1のスイッチプロセスから稼働中のスイッチプロセスに切り替えられた前記第2のスイッチプロセスに変更するよう制御する、ことを特徴とする請求項7記載のスイッチ装置。
前記第1および第2のスイッチプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第1および第2のスイッチプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも1つのプロセスのために配置された少なくとも1つの環境のそれぞれから隔離される、ことを特徴とする請求項7又は8記載のスイッチ装置。
前記バッファリングの開始時に、前記ロールバック制御部は、前記第1のコントローラプロセスが前記イベントを処理している間に受信され、前記第1のコントローラプロセスにディスパッチされるべき1つ以上のパケットのすべてを、前記ディスパッチャが前記バッファに提供するように制御し、前記バッファは、前記ディスパッチャから前記バッファに提供される前記1つ以上のパケットすべてを格納し、
前記ロールバック制御部は、前記第1のコントローラプロセスによる前記イベントの処理が完了すると、前記ディスパッチャが、前記ディスパッチルールにおいて対象プロセスとして定義されている前記第1のコントローラプロセスを、前記第1のコントローラプロセスから稼働中のコントローラプロセスに切り替えられた前記第2のコントローラプロセスに変更するよう制御する、ことを特徴とする請求項10記載のコントローラ装置。
前記第1および第2のコントローラプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第1および第2のコントローラプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも1つのプロセスのために配置された少なくとも1つの環境のそれぞれから隔離される、ことを特徴とする請求項10又は11記載のコントローラ装置。
前記バッファリングの開始時に、前記ロールバック制御部は、前記第1のスイッチプロセスが前記イベントを処理している間に受信され、前記第1のスイッチプロセスにディスパッチされるべき1つ以上のパケットのすべてを、前記ディスパッチャが前記バッファに提供するように制御し、前記バッファは、前記ディスパッチャから前記バッファに提供される前記1つ以上のパケットすべてを格納し、
前記ロールバック制御部は、前記第1のスイッチプロセスによる前記イベントの処理が完了すると、前記ディスパッチャが、前記ディスパッチルールにおいて前記対象スイッチプロセスとして定義されている前記第1のスイッチプロセスを、前記第1のスイッチプロセスから稼働中のスイッチプロセスに切り替えられた前記第2のスイッチプロセスに変更するよう制御する、ことを特徴とする請求項13記載の通信システム。
前記スイッチにおける前記第1および第2のスイッチプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第1および第2のプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも1つのプロセスのために配置された少なくとも1つの環境のそれぞれから隔離される、ことを特徴とする請求項13又は14記載の通信システム。
前記バッファリングの開始時に、前記コントローラの前記ロールバック制御部は、前記第1のコントローラプロセスが前記イベントを処理している間に受信され、前記第1のコントローラプロセスにディスパッチされるべき1つ以上のパケットのすべてを、前記コントローラの前記ディスパッチャが前記コントローラの前記バッファに提供するように制御し、前記コントローラの前記バッファは、前記ディスパッチャから前記バッファに提供される前記1つ以上のパケットすべてを格納し、
前記コントローラの前記ロールバック制御部は、前記第1のコントローラプロセスによる前記イベントの処理が完了すると、前記コントローラの前記ディスパッチャが、前記ディスパッチルールにおいて前記対象コントローラプロセスとして定義されている前記第1のコントローラプロセスを、前記第1のコントローラプロセスから稼働中のコントローラプロセスに切り替えられた前記第2のコントローラプロセスに変更するよう制御する、ことを特徴とする請求項16に記載の通信システム。
前記第1および第2のコントローラプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第1および第2のコントローラプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも1つのプロセスのために配置された少なくとも1つの環境のそれぞれから隔離される、ことを特徴とする請求項16又は17記載の通信システム。
各コントローラプロセスおよび各スイッチプロセスは、テナントに関連するネットワークを構成し、前記コントローラの前記ディスパッチャは、前記スイッチから受信した前記パケットをテナントに関連付けられたコントローラプロセスにディスパッチする、ことを特徴とする請求項16乃至18のいずれか1項に記載の通信システム。
マッチ条件と前記マッチ条件に対応する受信信号がディスパッチされる対象プロセスとの間の対応関係を定義するディスパッチルールに基づいて、ディスパッチャにより、対応するプロセスに対して受信した信号をディスパッチする、ことを特徴とする請求項20記載のロールバック方法。
前記イベントバッファリングにおいて、前記ディスパッチャは、前記第1のプロセスが前記イベントを処理している間に受信され、前記第1のプロセスにディスパッチされるべき1つ以上のパケットのすべてを前記バッファに提供し、前記1つ以上のパケットは前記1つ以上のイベントに対応し、前記バッファは、前記バッファに提供される前記1つ以上のパケットを格納し、
前記第1のプロセスによる前記イベントの処理が完了すると、前記ディスパッチルールにおけるパケットの宛先を、前記第1のプロセスから稼働中のプロセスに切り替えられた前記第2のプロセスに変更する、ことを特徴とする請求項21記載のロールバック方法。
前記第1および第2のプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第1および第2のプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも1つのプロセスのために配置された少なくとも1つの環境のそれぞれから隔離される、ことを特徴とする請求項21又は22記載のロールバック方法。
前記第1のプロセスによる前記イベントの処理が完了すると、前記ディスパッチルールにおいて前記対象プロセスとして定義されている前記第1のプロセスを、前記第1のプロセスから稼働中のプロセスに切り替えた前記第2のプロセスに変更する、ことを特徴とする請求項24記載のプログラム。
前記第1および第2のプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第1および第2のプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも1つのプロセスのために配置された少なくとも1つの環境のそれぞれから隔離される、ことを特徴とする請求項24又は25記載のプログラム。
【発明の概要】
【発明が解決しようとする課題】
【0010】
上記特許文献1−3及び非特許文献1−3の全開示内容は、引用をもって本明細書に組み込み記載されているものとする。
【0011】
以下の分析は、本発明の発明者によってなされたものである。
【0012】
SDNでは、スイッチプロセスやコントローラプロセスなどの処理が持続的に実行される。
【0013】
プロセスがマルウェアなどによって侵害されると、その損害は時間が経過しても残る。非特許文献1や2のような関連技術では、異常が生じた要素またはプロセスの回復を可能にする仕組みが何も提供されていない。したがって、ある要素や、スイッチ、コントローラなどのネットワークノードが侵害されると、損害がネットワーク全体にさらに広がる可能性がある。
【0014】
スイッチプロセス又はコントローラプロセスを、以前に保存したバージョンに後進復帰するロールバックを使用して、プロセスを元の状態に戻すことができる。しかし、実施形態で後述するように、プロセスのロールバックにおいてイベント損失および/またはイベントの順序の逆転など、不一致が生じることがある。
【0015】
非特許文献3には、アプリケーションを制御するための無欠陥の集中コントローラの抽象化を提供する、Ravanaと称される耐障害性(フォールトトレラント:fault−tolerant)のSDNコントローラプラットフォームが開示されている。物理的に分離されたコントローラ間のフェールオーバーを前提とするRavanaは、不一致を防ぐために以下の仕組みを展開する。
− スイッチイベントのバッファリングと再送信(スイッチイベントは失われない)
− ログにおけるイベントIDとフィルタリング(イベントは2回以上処理されない)
− マスタは、イベントを共有ログにシリアル化する(複製はイベントを同じ順序で処理する)
− イベントログの2段階レプリケーションと決定論的再実行(複製は同じ内部状態を構築する)
− スイッチからのRPC(Remote Procedure Call(遠隔手続き呼出))確認応答(コントローラコマンドは失われない)
− スイッチにおいてのコマンドIDとフィルタリング(コマンドは繰り返し実行されない)
Ravanaは、トランザクションが全ての複製において全体的に順序付けされ、システム全体で厳密に一度だけ実行されることを保証する。また、Ravanaは、ロールバックやコマンドの繰り返し実行に頼らずに、スイッチの状態を正しく処理できる。
【0016】
しかし、上記のRavanaの仕組みは複雑すぎる。
【0017】
本発明者らは、プロセスを元の状態に戻すためのロールバックにおける問題に対する解決策を考案した。
【0018】
従って、本発明は、安全なネットワーキングを確保するための、プロセスのロールバックにおける不一致の発生を防止することが可能なシステム、装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0019】
本発明の第1の視点によれば、現在稼働中の第1のプロセスを第2のプロセスにロールバックするために前記第2のプロセスを作成するロールバック制御部と、
前記第1のプロセスおよび前記第2のプロセスによって共有される1つ以上の状態を記憶し、前記第2のプロセスが、前記記憶されている1つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するように構成されたタイミング制御部と、
を備え、
前記ロールバック制御部は、前記第1のプロセスが前記ロールバック中にイベントを処理している場合、前記第1のプロセス宛に送信された1つ以上の受信イベントのすべてを格納するような前記バッファの設定でイベントバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第1のプロセスによる前記イベントの処理が完了すると、前記第1のプロセスから前記第2のプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記イベントバッファリングの開始から前記バッファに格納された前記1つ以上のイベントのすべてを、前記第1のプロセスから切り換えられた前記第2のプロセスに送信し、前記イベントバッファリングを終了するように制御する、通信装置が提供される。
【0020】
本発明の第2の視点によれば、フローベースのパケット転送用に適合されたスイッチ装置であって、
現在稼働中の第1のスイッチプロセスを第2のスイッチプロセスにロールバックするために前記第2のスイッチプロセスを作成するロールバック制御部と、
前記第1のスイッチプロセスおよび前記第2のスイッチプロセスによって共有される1つ以上の状態を記憶し、前記第2のスイッチプロセスが、前記記憶されている1つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
ネットワークに接続されるように適合されたネットワークインターフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされるスイッチプロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するスイッチプロセスに、パケット又はメッセージをディスパッチするディスパッチャと、
を備え、
前記第2のスイッチプロセスを作成した後に、前記ロールバック制御部は、前記第1のスイッチプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第1のスイッチプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第1のスイッチプロセスにディスパッチされるべき1つ以上のパケットのすべてを格納するような前記バッファの設定でバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第1のスイッチプロセスによる前記イベントの処理が完了すると、前記第1のスイッチプロセスから前記第2のスイッチプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記1つ以上のパケットのすべてを、前記第1のスイッチプロセスから切り換えられた前記第2のスイッチプロセスに送信し、前記バッファリングを終了するように制御する、スイッチ装置が提供される。
【0021】
本発明の第3の視点によれば、1つ以上のスイッチを制御するコントローラ装置であって、
現在稼働中の第1のコントローラプロセスを第2のコントローラプロセスにロールバックするために前記第2のコントローラプロセスを作成するロールバック制御部と、
前記第1のコントローラプロセスおよび前記第2のコントローラプロセスによって共有される状態を記憶し、前記第2のコントローラプロセスが、前記記憶されている1つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
前記スイッチに接続されるように適合されたネットワークインターフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされるコントローラプロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するコントローラプロセスに、受信したパケット又はメッセージをディスパッチするディスパッチャと、
を備え、
前記第2のコントローラプロセスを作成した後に、前記ロールバック制御部は、前記第1のコントローラプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第1のコントローラプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第1のコントローラプロセスにディスパッチされるべき1つ以上のパケットのすべてを格納するような前記バッファの設定でバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第1のコントローラプロセスによる前記イベントの処理が完了すると、前記第1のコントローラプロセスから前記第2のコントローラプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記1つ以上のパケットのすべてを、前記第1のコントローラプロセスから切り換えられた前記第2のコントローラプロセスに送信し、前記バッファリングを終了するように制御する、コントローラ装置が提供される。
【0022】
本発明の第4の視点によれば、
フローベースのパケット転送にそれぞれ適合された1つ以上のスイッチと、
前記1つ以上のスイッチを制御するコントローラと、
を備え、
前記スイッチは、
現在稼働中の第1のスイッチプロセスを第2のスイッチプロセスにロールバックするために前記第2のプロセスを作成するロールバック制御部と、
前記第1のスイッチプロセスおよび前記第2のスイッチプロセスによって共有される状態を記憶し、前記第2のスイッチプロセスが、前記記憶されている1つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
ネットワークに接続されるように適合されたネットワークインターフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされるスイッチプロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するスイッチプロセスに、受信したパケット又はメッセージをディスパッチするディスパッチャと、
を備え、
前記第2のスイッチプロセスを作成した後に、前記ロールバック制御部は、前記第1のスイッチプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第1のスイッチプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第1のスイッチプロセスにディスパッチされるべき1つ以上のパケットのすべてを格納するような前記バッファの設定でバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第1のスイッチプロセスによる前記イベントの処理が完了すると、前記第1のスイッチプロセスから前記第2のスイッチプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記1つ以上のパケットのすべてを、前記第1のスイッチプロセスから切り換えられた前記第2のスイッチプロセスに送信し、前記バッファリングを終了するように制御する、通信システムが提供される。
【0023】
本発明の第5の視点によれば、
現在稼働中の第1のプロセスを第2のプロセスにロールバックするために前記第2のプロセスを作成し、
前記第1のプロセスおよび前記第2のプロセスが記憶部に記憶されている状態を共有し、前記第2のプロセスは、前記記憶部に記憶されている前記1つ以上の状態を引き継ぐことが可能であり、
前記第1のプロセスがイベントを処理している場合、前記第2のプロセスが作成された後、前記ロールバック中に受信された、前記第1のプロセス宛の1つ以上のイベントのすべてをバッファに格納するようにイベントバッファリングを開始し、
前記第1のプロセスによる前記イベントの処理が完了すると、前記第1のプロセスから前記第2のプロセスへ稼働中のプロセスの切り替えを行い、
前記イベントバッファリングの開始から前記バッファに格納された前記1つ以上のイベントのすべてを、前記第1のプロセスから切り換えられた前記第2のプロセスに送信し、前記イベントバッファリングを終了する、ロールバック方法が提供される。
【0024】
本発明の第6の視点によれば、
現在稼働中の第1のプロセスを第2のプロセスにロールバックするために前記第2のプロセスを作成し、
前記第1のプロセスおよび前記第2のプロセスが記憶部に記憶されている状態を共有し、前記第2のプロセスは、前記記憶部に記憶されている前記1つ以上の状態を引き継ぐことが可能であり、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされる対象プロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するプロセスに対して受信したパケットをディスパッチし、
前記第2のプロセスが作成された後、前記第1のプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第1のプロセスが前記イベントを処理している間に受信された、前記第1のプロセスにディスパッチされるべき1つ以上のパケットのすべてをバッファに格納するようにバッファリングを開始し、
前記第1のプロセスによる前記イベントの処理が完了すると、前記第1のプロセスから前記第2のプロセスへ稼働中のプロセスの切り替えを行い、
前記バッファリングの開始から前記バッファに格納された前記1つ以上のパケットのすべてを、前記第1のプロセスから切り換えられた前記第2のプロセスに送信し、前記バッファリングを終了すること、を含む処理をコンピュータに実行させるプログラムが提供される。本発明の第7の視点によれば、本発明の第6の視点によるプログラムが記憶されている、ROM(Read Only Memory)、又はRAM(Random Access Memory)、又はEEPROM(Electrically and Erasable Programmable Read Only Memory)、ハードディスクドライブ(HDD)、CD(Compact Disk)又はDVD(Digital Versatile Disk)などの半導体記憶装置のようなコンピュータが読み取り可能な記録媒体または非一時的な記録媒体が提供される。
【0025】
本発明によれば、安全なネットワーキングを確保するための、プロセスのロールバックにおける不一致の発生を防止することが可能になる。
本発明のさらに他の特徴及び利点は、本発明を実施することが企図されている最良の形態の単なる例示により、本発明の実施形態のみを図示及び説明した添付の図面と併せて以下の詳細な説明から当業者には容易に明らかになるであろう。理解されるように、本発明は、他の異なる実施形態が可能であり、そのいくつかの詳細は、本発明から逸脱することなく、様々な明白な点において変更可能である。従って、図面及び説明は、本質的に例示的であるとみなされるべきであり、限定的ではないとみなされるべきである。
【発明を実施するための形態】
【0027】
以下、本発明の実施形態について説明する。
【0028】
[第1の実施形態]
図1は、第1の実施形態による通信装置(ネットワークノード)を示す図である。
図1を参照すると、通信装置10は、記憶部13と、ロールバック制御部15と、バッファ16と、タイミング制御部14と、ネットワークインターフェースカード(NIC)(ネットワークインターフェースコントローラ)17とを備えている。
【0029】
ロールバック制御部15は、ロールバックされる第1のプロセス11を、以前に保存されたプロセスイメージではなく、新規に作成された第2のプロセス12にロールバックする制御を実行するように構成されている。第2のプロセス12の機能および動作は、第1のプロセス11の機能および動作と同じである。
【0030】
本発明の実施形態において、プロセスのロールバックは、ロールバックされる第1のプロセス11から、新規に作成された第2のプロセス12への、稼働中のプロセスの切り替えとして実施されてもよい。
【0031】
ロールバック制御部15は、第1のプロセス11から第2のプロセス12に、稼働中のプロセスを切り替えた後、第1のプロセス11を終了させる制御を行う。第1のプロセス11を、以下では、「旧プロセス11」と表示または称することができる。第1のプロセス11をロールバックするために新たに作成された第2のプロセス12を、以下では「新プロセス12」と表示し、称することができる。
【0032】
旧プロセス11と新プロセス12とは、記憶部13を共有する。具体的には、旧プロセス11から新プロセス12に稼働中のプロセスを切り替えるまで、旧プロセス11が記憶部13のネットワーク状態などの状態を読み込み、更新(書き込み)し、新プロセス12の作成から、旧プロセス11から新プロセス12への稼働中プロセスの切り替えまでの期間は、新プロセス12は、記憶部13に記憶された状態の読み取りアクセス権のみを有するようにしてもよい。新プロセス12の作成から、旧プロセス11から新プロセス12への切り替えまでの期間中、記憶部13に格納された状態は、新プロセス12と旧プロセス11とで共有することができる。
【0033】
このように、記憶部13は、旧プロセス11により記憶部13に格納された状態を新プロセス12に引き継がせるための状態共有メカニズムとして機能する。即ち、旧プロセス11から新プロセス12に稼働中のプロセスを切り替える前に、新プロセス12は記憶部13に格納されている状態の最新の更新情報を取得することが可能である。旧プロセス11から新プロセス12に稼働中のプロセスを切り替えた後、新プロセス12は、記憶部13内のネットワーク状態などの状態を読み出し、書き込む(更新)ことができる。
【0034】
タイミング制御部14は、ロールバック制御部15によるロールバック動作のタイミングを制御するように構成されている。タイミング制御部14は、例えば、トランザクションをアトミックにするために、旧プロセス11によるイベント処理の完了を待つように制御する。旧プロセス11から新プロセス12への稼働中のプロセスの切り替えは、旧プロセス11によるイベント処理が完了する時点までタイミング制御部14により延期される。
【0035】
バッファ16は、ロールバック制御部15により有効/無効に制御されるイベントバッファリングの機能を有する。バッファ16は、ロールバックされる旧プロセス11がイベントを処理中の場合、NIC17によって受信され、旧プロセス11を宛先とする、少なくとも1つのイベント(パケット)を格納できる。
【0036】
より具体的には、新プロセスの作成後、旧プロセス11が受信したパケットに関連するイベントを処理中の場合、ロールバック制御部15は、旧プロセス11が上記イベントを処理している間に受信した、旧プロセス11宛ての、1つ以上のパケットの全てをバッファ16に格納するような設定でイベントバッファリングを開始する。バッファ16は、着信イベント(パケット)をFIFO(First−In First−Out(先入れ先出し))方式で格納し、イベントの着信順序を保持するように構成されてもよい。
【0037】
上述の通り開始されたイベントバッファリングは、以下のように終了できる。
旧プロセス11によるイベントの処理が完了すると、タイミング制御部14の制御の下、ロールバック制御部15は、旧プロセス11から新プロセス12へ稼働中のプロセスの切り替えを行い、ロールバック制御部15は、イベントバッファリングの開始時から記憶部13に記憶されている1つ以上のイベントの全てを、旧プロセス11から切り替えられた新プロセス12に送信するように制御し、ロールバック制御部15はバッファ16を制御してイベントバッファリングを停止させる。その後、NIC17が受信した、旧プロセス11宛のイベントは、バッファ16に格納されずに、現在稼働中の新プロセス12に転送される。
【0038】
通信装置10は、
図16を参照して説明したSDNアーキテクチャにおいて、SDNコントローラ又はネットワーク要素(スイッチ、ロードバランサ、またはファイアウォール)として構成することができるが、これに限定されない。
【0039】
図1に示す構成は、プロセスのロールバックにおける不一致の発生を防止する。ロールバックにおける不一致は、例えば、ノード間の不一致、または後述のようにノード内の状態と実際の状態との間の不一致を含む。
【0040】
旧プロセス11によるイベント処理(例えば、Packet−Inメッセージ)の実行中に、旧プロセス11が新プロセス12にロールバックされた場合、旧プロセス11によるイベント処理は完了せず、そのイベントは失われる。
【0041】
また、ロールバック中に、プロセスが当該プロセス宛のイベントを受信できない場合、イベント損失が発生することもある。
【0042】
本発明の実施形態によるイベントバッファリングの仕組みは、イベントの順序を保持し、イベント損失の発生を防止して、ロールバック動作においてイベントの一致を保証する働きをする。
【0043】
ロールバックの別のタイプの不一致として、状態の不一致が生じる可能性がある。例えば、ネットワーク状態などの状態が、ロールバック動作中に旧プロセス11により行われた更新を反映していない、最後に保存された状態にロールバックされると、新プロセス12は、更新を反映していない最後に保存された状態に基づいて処理を実行することになり、誤った処理や誤動作の原因となる。
【0044】
本発明の実施形態によれば、状態共有メカニズムは、これらの欠点の回避に寄与することができる。ロールバック中に、新プロセス12が、旧プロセス11により更新された、記憶部13内の最新の状態を引き継ぐことを可能にする状態共有メカニズムは、旧プロセス11の状態と新プロセス12の状態との間の不一致の発生を防止する役割を果たす。
【0045】
旧プロセス11から新プロセス12に切り替えた後、記憶部13を用いて旧プロセス11から状態(ネットワーク状態)を引き継ぐ新プロセス12は、状態を遅らせて又は徐々に更新してもよい。旧プロセス11から新プロセス12に切り替える前に、旧プロセス11により記憶部13に記憶され、引き継がれた状態に異常が生じていた場合、その状態は、新プロセス12によって徐々に復元されてもよい。例えば、新しいフローへの応答として、クリーンな新しい状態が生成された場合、新プロセス12は、異常の生じた状態をこの新しいネットワーク状態(クリーン)で更新してもよい。新プロセス12は、旧プロセス11から引き継いだ状態を、新プロセス12がその状態を使用する前に更新してもよい。新プロセス12は、旧プロセス11から引き継いだ状態を確率的に更新してもよい。乱数(整数)を生成することによって、新プロセス12は、乱数が所定の範囲内にあるとき、又は乱数が所定の整数に一致するときに旧プロセス11から引き継いだ状態を更新してもよい。新プロセス12は、アイドル状態において、旧プロセス11から引き継いだ状態を更新してもよい。
図1において、通信装置10は、不図示のメモリに格納されたコンピュータプログラムの指示をフェッチし実行することにより処理を行うプロセッサを備えていてもよい。旧プロセス11及び新プロセス12はそれぞれ、そのプロセッサ上で動作するプロセスであってもよい。ロールバック制御部15及びタイミング制御部14は、プロセッサによって実行されるコンピュータプログラムによって実現されてもよい。通信装置10は、サーバ仮想化環境を提供するハイパーバイザなどの仮想化メカニズムを備えたサーバとして実現されてもよく、旧プロセス11及び新プロセス12は、仮想マシン(VM)上で動作するように構成されてもよい。
【0046】
図2は、
図1のロールバック動作を模式的に示す図である。記憶部13の状態(ネットワーク状態など)は、上述の通り旧プロセス11と新プロセス12とで共有される。旧プロセス11によって更新された最新のネットワーク状態は、新プロセス12の作成後、新プロセス12によって引き継がれる。旧プロセス11のプロセスイメージは、新プロセス12のプロセスイメージへのプロセス切り替えにより、ロールバックされる。仮想メモリにプロセスとして割り当てられたプロセスイメージは、例えば、以下を含んでもよい。
− プログラムコード(実行される指示)
− プログラムデータ
− スタック(ユーザスタックとカーネルスタック)
− プロセス制御ブロック(プロセスを管理するためにオペレーティングシステムが必要とする情報)。
旧プロセス11及び新プロセス12は、冗長構成と見なしてもよく、旧プロセス11がアクティブなプロセス、新プロセス12が待機プロセスであるシステムを、新プロセス12がアクティブなプロセス、旧プロセス11が待機プロセスになるシステムに切り替える。
【0047】
図3Aは、
図1のロールバック制御部の動作を示す図である。
図3Bは、
図3Aのステップを時間順に模式的に示す。
【0048】
ロールバック制御部15は、新プロセス12を作成する(S101)(
図3BのタイミングT0)。
【0049】
旧プロセス11と新プロセス12とで、ネットワーク状態などの状態を共有する(S102)。旧プロセス11が1つ以上の状態を作成または更新する場合、旧プロセス11は上記1つ以上の状態を記憶部13に格納し、新プロセス12は上記1つ以上の状態を読み出すことができる。
【0050】
旧プロセス11が、稼働中のプロセスとしてイベント処理を実行中である場合、ロールバック制御部15はイベントバッファリングを開始する(S103)(
図3BのタイミングT1)。タイミングT1は、タイミングT0と同じでもよい。旧プロセス11宛の、1つ以上の受信パケットは、バッファ16にバッファリングされる。
【0051】
ロールバック制御部15は、タイミング制御部14からの指示に従って、旧プロセス11によるイベント処理の完了を待つ(S104)。
【0052】
旧プロセス11がイベント処理を完了すると、ロールバック制御部15は、旧プロセス11から新プロセス12に切り替える(S105)(
図3BのタイミングT3)。
【0053】
ロールバック制御部15は、イベントバッファリングを終了し、受信したイベントを新プロセス12に送る(S106)。
【0054】
図15は、
図1を参照して説明したコンピュータ装置の機能を実現するコンピュータシステムを示す図である。サーバシステムなどのコンピュータシステム300は、プロセッサ301と、プログラムを記憶するランダムアクセスメモリ、ハードディスクドライブ(HDD)、SSD(Solid State Drive)、CD(Compact Disk)、DVD(Digital Versatile Disk)、又はEEPROM(Electrically Erasable and Programmable Read Only Memory)の少なくとも1つを含むストレージ302と、通信インターフェース303とを含む。
図1のバッファ16と記憶部13は、ストレージ302により実現されてもよい。プロセッサ301は、コンピュータシステム300を
図1の通信装置10として機能させるために、ロールバック制御部15と、タイミング制御部14と、旧プロセス11と、新プロセス12との機能を実現する、ストレージ302に格納されたプログラムを実行する。
【0055】
[第2の実施形態]
図4は、第2の実施形態による、SDNアーキテクチャにおけるコントローラの構成を示す図である。第2の実施形態では、
図1の通信装置10をSDNコントローラに適用する。
図4を参照すると、SDNコントローラ100は、サーバコンピュータなどのコンピュータシステム上に構成されてもよく、旧コントローラプロセス101(第1のコントローラプロセス)と、新コントローラプロセス102(第2のコントローラプロセス)と、旧コントローラプロセス101と新コントローラプロセス102とが共有するネットワーク状態などの状態を記憶する記憶部103とを含む。
図4において、旧コントローラプロセス101、新コントローラプロセス102、記憶部103、バッファ106は、それぞれ、
図1の旧プロセス11、新プロセス12、記憶部13、バッファ16に対応してもよい。タイミング制御部104、ハイパーバイザ105、NIC107は、それぞれ、タイミング制御部14、ロールバック制御部15、NIC17に対応してもよい。記憶部103に記憶され、旧コントローラプロセス101と新コントローラプロセス102とが共有する状態は、ネットワークトポロジと、フローエントリと、ホスト位置情報とを含むが、これに限定されない。
【0056】
SDNコントローラ100はさらに、仮想マシン(VM)にハードウェア仮想化を提供するためのサーバ仮想化インフラストラクチャを実現するハイパーバイザ105(仮想マシンモニタ)を含む。ハイパーバイザ105は、コンピュータソフトウェア、ファームウェア又はハードウェアを含み、ハードウェア資源を制御するように構成されている。これに限定されるものではないが、ハイパーバイザ105は、このようなサーバ仮想化への適用において、仮想化ハードウェア資源と、ゲストOSと、アプリケーションとを含む仮想マシン(VM)を制御してもよく、仮想化ハードウェア資源は、例えば、仮想CPU(Central Processing Unit)と、仮想化ストレージと、仮想化ネットワークとを含む。
【0057】
旧コントローラプロセス101及び新コントローラプロセス102は、それぞれハイパーバイザ105によって作成された仮想マシン(VM)上で実行される。ハイパーバイザ105は、少なくとも1つの仮想CPU(Central Processing Unit)と、仮想ストレージと、仮想ネットワークとを仮想マシンに割り当てる。
【0058】
仮想マシン上で動作するように構成されたコントローラプロセスは、仮想SDNコントローラとして機能してもよい。コントローラプロセスは、例えば、スイッチ200(OpenFlow Switch:OFS)からPacket−Inメッセージを受信すると、関連するパケットの経路を計算し、経路上の各スイッチ200に対してフローエントリを生成し、Flow−Modメッセージを用いて経路上の各スイッチ200について生成されたフローエントリを設定する。
【0059】
SDNコントローラ100はさらに、ディスパッチルールテーブル110に格納されたディスパッチルールに基づいて、スイッチ200から受信したパケット又はオープンフローメッセージを対象のコントローラプロセスにディスパッチするディスパッチャ108を含む。コントローラプロセスは、ネットワーク制御モジュールのネットワーク制御プロキシとして機能してもよい。この場合、対象のコントローラプロセスを選択するディスパッチャ108は、ネットワーク制御のプロキシとして機能する。
【0060】
ディスパッチルールテーブル110のディスパッチルールは、受信パケットのマッチ条件(フロー情報の項目)と、当該マッチ条件に対応する受信パケット又はメッセージのディスパッチ先の対象コントローラプロセスとの対応関係(マッピング)を定義する。ディスパッチャ108は、受信したパケットのヘッダフィールド情報と、ディスパッチルールのマッチ条件(フロー情報の項目)を比較し、受信パケットのヘッダフィールド情報が一致するマッチ条件に関連付けられた対象コントローラプロセスに受信パケットをディスパッチする。ディスパッチルールにおいて、対象コントローラプロセスにマッピングされるマッチ条件は、以下を含んでもよい。
宛先または送信元IP(Internet Protocol)アドレス
宛先または送信元MAC(Media Access Control)アドレス
TCP(Transmission Control Protocol)/UDP(User Datagram Protocol)宛先または送信元ポート番号、又は
上記の内、少なくとも2つの組み合わせ、又は
パケットを受信したコントローラ100の物理ポート番号
【0061】
コントローラプロセスは仮想マシン(VM)上で動作するため、仮想マシン(VM)に仮想的に割り当てられた仮想IPアドレス又は仮想MACアドレスが使用される。ディスパッチャ108は、ディスパッチルールテーブルにおいて、受信したパケットのヘッダフィールド情報を検索し、マッチ条件が受信パケットのヘッダフィールド情報と一致するディスパッチルールが見つかった場合、ディスパッチャ108は、受信パケットを対応する対象コントローラプロセスに転送する。マッチ条件が受信パケットのヘッダフィールド情報と一致するディスパッチルールが見つからない場合、ディスパッチャ108は、受信パケットを破棄するか、あるいは、例えば、不図示の維持管理端末により、受信パケットのために新しいディスパッチルールを作成するようにしてもよい。
【0062】
ディスパッチャ108は、複数の入力ポート(不図示)および複数の出力ポート(不図示)を含んでもよく、受信したパケットのマッチ条件と当該マッチ条件に対応する受信パケットのディスパッチ先であるコントローラプロセスとの対応関係を定義するディスパッチルールに基づき、自身の入力ポートで受信したパケットを自身の対象出力ポートに転送する。ディスパッチャ108は、コントローラを有するハードウェアスイッチによって構成されてもよいし、ソフトウェアによって実現される仮想スイッチによって構成されてもよい。なお、
図4において、ディスパッチャ108は、ハイパーバイザ105の前段に配置されているが、ディスパッチャ108が、ハイパーバイザ105に制御される仮想スイッチとして構成され、ハイパーバイザ105と、仮想マシン上で動作するコントローラプロセスとの間に配置される別の構成もあり得る。ディスパッチャ108は、ソケット(Unix(登録商標)ソケット、ネットワークソケット)、PIPE、共有メモリなどのプロセス間通信を用いて、パケット又はメッセージを中継してもよい。
【0063】
SDNコントローラ100は、ディスパッチャ108に接続されたバッファ106をさらに含む。バッファ106は、旧コントローラプロセス101がロールバック中にイベントの処理を実行している場合、スイッチ200から受信され、旧コントローラプロセス101にディスパッチされる少なくとも1つのイベント(例えば、少なくとも1つのオープンフローメッセージ)を格納する。旧コントローラプロセス101が処理中の処理を完了すると、これまでバッファ106にバッファリングされていた上記少なくとも1つのイベントが取り出され、ディスパッチャ108により新コントローラプロセス102にディスパッチされる。バッファ106は、FIFO(First−In First−Out)メモリを含んでもよい。
図4では、バッファ106はディスパッチャ108に接続されているが、バッファ106は、パケットがイベントバッファリングモードでディスパッチされる前に上記パケットを格納するようにディスパッチャ108内に構成されてもよい。
【0064】
SDNコントローラ100は、タイミング制御部104と、管理制御部109とをさらに備える。タイミング制御部104は、旧コントローラプロセス101がロールバック中にイベントの処理を実行している場合、スイッチ200から受信したイベントをバッファ106にバッファリングするタイミングを制御し、ロールバック時に旧コントローラプロセス101から新コントローラプロセス102に切り替えるタイミングも制御する。
【0065】
管理制御部109は、ハイパーバイザ105を介してコントローラプロセスを管理する。管理制御部109は、タイミング制御部104と、ハイパーバイザ105と、ディスパッチャ108とに接続されている。管理制御部109は、仮想マシンとコントローラプロセスに対して、例えば、リソース予約や解放などのリソース管理、インスタンシエーション、起動、終了などのライフサイクル管理、スケールアップ/スケールダウン又はスケールイン/スケールアウトなどのパフォーマンス管理を行う。また、管理制御部109は、スイッチ200内の管理制御部に接続されている。
【0066】
スイッチ200との間でメッセージを送受信するために、少なくとも1つのスイッチと通信するNIC107が提供される。
【0067】
また、バッファ112を有するノースバウンドAPI(Application Programming Interface)ディスパッチャ111が提供される。ノースバウンドアプリケーション(
図16の2)は、ノースバウンドAPIを介してノード間のトポロジを操作することができる。ノースバウンドAPIは、スイッチに接続されたホスト情報を参照するためのAPIと、フローエントリの直接操作のためのAPIと、スイッチデバイス情報を参照するためのAPIなどを含んでもよいが、これに限定されるものではない。ノースバウンドAPIディスパッチャ111は、ノースバウンドAPI要求を、不図示のノースバウンドAPIを含むコントローラプロセスにディスパッチする。ノースバウンドAPIは、コントローラプロセスとノースバウンドAPIディスパッチャ111との間に配置されてもよい。ノースバウンドAPIディスパッチャ111は、SDNアプリケーションなどSDNコントローラモジュールへのプロキシとして機能してもよい。
【0068】
バッファ112は、旧コントローラプロセス101がロールバック中にイベント処理を実行している場合、FIFO方式で旧コントローラプロセス101にディスパッチされる、少なくとも1つのノースバウンドAPI要求を一時的に格納する。旧コントローラプロセス101が処理を完了すると、バッファ112にバッファリングされていた上記少なくとも1つのノースバウンドAPI要求は、ノースバウンドAPIディスパッチャ111により取り出され、新コントローラプロセス102へ転送される。
【0069】
ハイパーバイザ105は、ロールバックを制御する。
図1のロールバック制御部15は、ハイパーバイザ105内のコントローラとして実現されてもよい。ロールバックにおいて、ハイパーバイザ105が新コントローラプロセス102を作成し起動する。記憶部103内の状態は、旧コントローラプロセス101と新コントローラプロセス102とで共有される。状態には、例えば、フローエントリと、ネットワークトポロジと、ホスト位置情報とが含まれるが、これに限定されない。
【0070】
旧コントローラプロセス101がロールバック中にイベントを処理している場合、ディスパッチャ108は、スイッチから受信し、旧コントローラプロセス101宛に送信されたPacket−Inメッセージ又はFlow−Removedメッセージ(スイッチ内のフローエントリのライフサイクルが期限切れしたことをコントローラに通知するためのメッセージ)などのオープンフローメッセージ(イベント)の少なくとも1つの着信パケットをディスパッチせず、上記少なくとも1つの着信パケットを一時的にバッファ106に格納する。この場合、ノースバウンドアプリケーションから旧コントローラプロセス101宛の少なくとも1つの着信ノースバウンドAPI要求も、一時的にバッファ112に格納される。
【0071】
タイミング制御部104の制御の下、旧コントローラプロセス101がイベントの処理を終了すると、ハイパーバイザ105は旧コントローラプロセス101を終了する。
【0072】
ディスパッチャ108は、バッファ106に格納されている上記少なくとも1つのオープンフローメッセージ(イベント)を新コントローラプロセス102に転送する。また、バッファ112に格納された上記少なくとも1つのノースバウンドAPI要求も、新コントローラプロセス102に転送される。
【0073】
ディスパッチャ108は、パケットのマッチ条件と当該マッチ条件に対応する受信パケットのディスパッチ先であるコントローラプロセスとの対応関係を定義する、ディスパッチルールテーブル110内のディスパッチルールの内容を更新する。ディスパッチャ108は、ディスパッチルールテーブル110において対象コントローラプロセスとして定義されていた旧コントローラプロセス101を新コントローラプロセス102に変更する。
【0074】
ハイパーバイザ105は、以下のタイミングでコントローラプロセスのロールバックを実行してもよい。
− コントローラプロセスがスイッチからの要求を処理した後
− 1つの操作を処理した後
− 定期的に、又は
− ロールバックの契機となる所定のイベントの発生に応答して。ロールバックの契機となるイベントの例は、完全性チェックを用いたコントローラプロセスの異常の検出などである。
【0075】
図5は、第2の実施形態によるスイッチの構成を示す図である。
図5のスイッチ200は、スイッチ200(オープンフロースイッチ)に対応する。
図5を参照すると、スイッチ200は、サーバコンピュータ上に構成され、旧スイッチプロセス201(第1のスイッチプロセス)と、新スイッチプロセス202(第2のスイッチプロセス)と、旧スイッチプロセス201と新スイッチプロセス202とで共有される状態を記憶する記憶部203とを含む。
図5において、旧スイッチプロセス201、新スイッチプロセス202、記憶部203、バッファ206は、それぞれ、
図1の旧プロセス11、新プロセス12、記憶部13、バッファ16に対応してもよい。タイミング制御部204、ハイパーバイザ205、NIC/パケット転送エンジン207のNICは、それぞれ、タイミング制御部14、ロールバック制御部15、NIC17に対応してもよい。記憶部203に記憶され、旧スイッチプロセス201と新スイッチプロセス202とで共有される状態は、フローエントリを含む。
【0076】
スイッチ200は、ハイパーバイザ205(仮想マシンモニタ)を含む。旧スイッチプロセス201と新スイッチプロセス202は、ハイパーバイザ205によって作成された仮想マシン(VM)上でそれぞれ実行されてもよい。ハイパーバイザ205は、少なくとも1つの仮想CPU(Central Processing Unit)と、仮想ストレージと、仮想ネットワークとを仮想マシンに割り当ててもよい。仮想マシン上で動作するスイッチプロセスは、上述のオープンフロースイッチとして機能する。
【0077】
スイッチ200は、(別のスイッチ又はネットワークノードからの)パケット、又は(NIC/パケット転送エンジン207からの)オープンフローメッセージをディスパッチするディスパッチャ208をさらに含む。さらに、ディスパッチャ208は、ディスパッチルールテーブル210に格納されたディスパッチルールに基づき、コントローラから受信したPacket−OutメッセージやFlow−Modメッセージなどのオープンフローメッセージを対象スイッチプロセスにディスパッチする。ディスパッチルールテーブル210のディスパッチルールは、マッチ条件(フロー情報の項目)と、上記マッチ条件(フロー情報の項目)に対応する受信パケット又はメッセージのディスパッチ先である対象スイッチプロセスとの対応関係(マッピング)を定義する。ディスパッチャ208は、受信したパケットのヘッダフィールド情報と、ディスパッチルールのマッチ条件(フロー情報の項目)を比較し、受信パケットのヘッダフィールド情報が一致するマッチ条件に関連付けられた対象スイッチプロセスに受信パケットをディスパッチする。ディスパッチルールにおいて、対象スイッチプロセスにマッピングされるマッチ条件は、以下を含んでもよい。
宛先または送信元IP(Internet Protocol)アドレス
宛先または送信元MAC(Media Access Control)アドレス
TCP(Transmission Control Protocol )/UDP(User Datagram Protocol)宛先または送信元ポート番号、又は
上記の内、少なくとも2つの組み合わせ、又は
パケットを受信したスイッチ200の物理ポート番号
【0078】
スイッチプロセスは仮想マシン(VM)上で動作するため、仮想マシン(VM)に仮想的に割り当てられた仮想IPアドレス又は仮想MACアドレスが使用される。ディスパッチャ208は、ディスパッチルールテーブル210において、受信したパケットのヘッダフィールド情報を検索し、マッチ条件が受信パケットのヘッダフィールド情報と一致するディスパッチルールが見つかった場合、ディスパッチャ208は、受信パケットを、ディスパッチルールにおいて定義されている、対応する対象スイッチプロセスに転送する。なお、
図5において、ディスパッチャ208は、ハイパーバイザ205の前段に配置されているが、ハイパーバイザ205が、ディスパッチャ208を仮想スイッチなどの仮想ハードウェア資源として提供する構成も採用可能である。ディスパッチャ208は、ソケット(Unix(登録商標)ソケット、ネットワークソケット)、PIPE、共有メモリなどのプロセス間通信を用いて、パケット又はメッセージを中継してもよい。
【0079】
ディスパッチャ208は、コントローラを有するハードウェアスイッチによって構成されてもよいし、ソフトウェアによって実現される仮想スイッチによって構成されてもよい。なお、
図5において、ディスパッチャ208は、NIC/パケット転送エンジン207とハイパーバイザ205の間に配置されているが、ディスパッチャ208が、ハイパーバイザ205に制御される仮想スイッチとして構成され、ハイパーバイザ205とコントローラプロセスとの間に配置される別の構成もあり得る。
【0080】
スイッチ200は、ディスパッチャ208に接続されたバッファ206をさらに含む。バッファ206は、旧スイッチプロセス201がロールバック中にイベントの処理を実行している場合、スイッチから受信され、旧スイッチプロセス201にディスパッチされる少なくとも1つのイベント(例えばオープンフローメッセージ)を、FIFO方式でイベント順序を保持するように格納する。旧スイッチプロセス201が処理中の処理を完了すると、これまでバッファ206にバッファリングされていた上記少なくとも1つのイベントが取り出され、ディスパッチャ208により新スイッチプロセス202にディスパッチされる。
【0081】
スイッチ200は、タイミング制御部204と、管理制御部209とをさらに備える。タイミング制御部204は、旧スイッチプロセス201がロールバック中にイベントの処理を実行している場合、スイッチから受信したイベント(パケット)をバッファ206にバッファリングするタイミングを制御し、ロールバック時に旧スイッチプロセス201から新スイッチプロセス202に切り替えるタイミングも制御する。
【0082】
管理制御部209は、ハイパーバイザ205を介してコントローラプロセスを管理する。管理制御部209は、タイミング制御部204と、ハイパーバイザ205と、ディスパッチャ208とに接続されている。管理制御部209は、仮想マシンとコントローラプロセスに対して、例えば、リソース予約や解放などのリソース管理、インスタンシエーション、起動、終了などのライフサイクル管理、スケールアップ/スケールダウン又はスケールイン/スケールアウトなどのパフォーマンス管理を行う。また、管理制御部209は、スイッチ内の管理制御部に接続されている。
【0083】
図5において、NIC/パケット転送エンジン207は、他のスイッチやSDNコントローラとのメッセージ及びパケットの送受信のため、他のスイッチ及びSDNコントローラと通信する。パケット転送エンジンは、フローエントリに基づくパケットのパケット転送処理に指定されたエンジンである。NICは、複数の単一ポートNICとして、又はマルチポートNICとして構成することができる。
【0084】
図1のロールバック制御部15は、コントローラとしてハイパーバイザ205に実装されてもよい。ハイパーバイザ205はロールバックを以下のように制御する。
【0085】
ロールバック処理において、ハイパーバイザ205が新スイッチプロセス202を作成し開始(起動)する。記憶部203内の状態は、旧スイッチプロセス201と新スイッチプロセス202とで共有される。状態には、例えば、フローエントリが含まれるが、これに限定されない。
【0086】
旧スイッチプロセス201がロールバック中にイベントを処理している場合、ディスパッチャ208は、別のスイッチ又はSDNコントローラから受信し、旧スイッチプロセス201宛に送信された少なくとも1つの着信オープンフローメッセージ(イベント)を転送せず、上記少なくとも1つの着信オープンフローメッセージ(イベント)を一時的にバッファ206に格納する。バッファ206には、別のスイッチから転送されたパケットと、SDNコントローラから送信されたFlow−Modメッセージなどのオープンフローメッセージとが、旧スイッチプロセスによるイベント処理が完了するまで一時的に格納される。
【0087】
旧スイッチプロセス201がイベントの処理を終了すると、タイミング制御部204の制御の下、ハイパーバイザ205は旧スイッチプロセス201を終了する。
【0088】
ディスパッチャ208は、バッファ206に格納されている上記少なくとも1つのオープンフローメッセージ(イベント)を新スイッチプロセス202に転送する。
【0089】
ディスパッチャ208は、
図10に示す通り、ディスパッチルールテーブル210内のディスパッチルールの内容を更新する。ディスパッチャ208は、ディスパッチルールテーブル210内のディスパッチルールを、宛先IPアドレスX→旧スイッチプロセス201から、宛先IPアドレスX→新スイッチプロセス202に変更する。パケットヘッダの宛先IPアドレスフィールドがXであるパケットが受信されると、当該パケットは新スイッチプロセス202にディスパッチされる。
図10を参照すると、スイッチプロセス201は、ディスパッチャ208により自身にディスパッチされたパケットを受信すると、パケットのヘッダフィールド情報を、スイッチプロセス201のフローテーブル203のフローエントリと照合する。スイッチプロセス201のフローテーブル203のフローエントリは、受信したパケットのヘッダフィールド情報と照合されるマッチフィールドと、マッチするパケットの処理を定義するアクションフィールドとを含む。
図10のフローエントリは、受信パケットのヘッダの宛先IPアドレスがXである場合、スイッチプロセス201はアクション1を実行するというルールを定義する。ディスパッチルールテーブル210のディスパッチルールにおけるマッチ条件は、受信パケットのヘッダの宛先IPアドレスに限定されないことは勿論である。ディスパッチルールにおけるマッチ条件は、宛先/送信元IPアドレス、宛先/送信元MACアドレス、TCP/UDP宛先または送信元ポート番号、または上記のうち少なくとも2つの項目の組み合わせを含むように構成されてもよい。フローテーブル203のフローエントリのマッチフィールドについても同様である。ディスパッチルールのマッチ条件は、パケットを受信したスイッチ200のポート番号を含んでもよい。ディスパッチャ208がNIC/パケット転送エンジン207によって引き渡されたPacket−Inメッセージを受信した場合、Packet−Inメッセージは最初のパケットを含むため、ディスパッチャ208は、最初のパケットのヘッダフィールド情報を参照してPacket−Inメッセージを対象スイッチプロセスにディスパッチし、対象スイッチプロセスは、Packet−Inメッセージをコントローラに転送する。
【0090】
ハイパーバイザ205は、以下のタイミングでコントローラプロセスのロールバックを実行してもよい。
− スイッチプロセスがSDNコントローラからのメッセージを処理した後
− 1つの操作を処理した後
− 定期的に、又は
− ロールバックの契機となる所定のイベントの発生に応答して。ロールバックの契機となるイベントの例は、完全性チェックを用いたスイッチプロセスの異常の検出などである。ハイパーバイザ205は、スイッチプロセスが1つ又はN個のフローを処理するたびに(Nは2以上の所定の整数)、又は、ロールバックの契機となる所定のイベントの発生に応じて、スイッチプロセスのロールバックを実行してもよい。
図5のハイパーバイザ205の制御の下、仮想マシン上で動作するスイッチプロセスと、
図4のハイパーバイザ105の制御の下、仮想マシン上で動作するコントローラプロセスは、ハイパーバイザ205及びハイパーバイザ105が統一ハイパーバイザとして実装された同じサーバコンピュータ上に設けられてもよい。
【0091】
図6は、
図4のコントローラにおけるロールバックを示す図である。イベントの結果をアトミックにするために、ロールバック(旧コントローラプロセス101から新コントローラプロセス102への切り替え)は、旧コントローラプロセス101がイベント処理を終了したときに実行される。また、旧プロセス11は、旧プロセス11がイベント処理を完了した後に終了する。
図6の例では、オープンフローメッセージ(イベント1)が、旧コントローラプロセス101にディスパッチされ、旧コントローラプロセス11は、オープンフローメッセージのイベント処理の完了と共に応答(2)を返す。イベント処理が完了すると、新しいイベント(3)が新コントローラプロセス12にディスパッチされる。
【0092】
図7は、本実施形態によるロールバックにおけるイベントバッファリングを示す図である。ロールバック中のイベント損失を防止するために、イベントバッファリングのためのバッファ106が設けられている。イベントバッファリングは、イベントが旧プロセス11により処理されている間に実行される。
【0093】
図7の例では、イベント1が旧プロセス11により処理されている間に受信されたイベント2がバッファ106にバッファリングされる。イベント1の処理が完了した後、即ち、旧プロセス11によるイベント1の処理の応答が出力されると、バッファリングされたイベント2は新プロセス12に送られる。このようにして、イベントの損失を防ぐことができる。バッファ106は、FIFO型バッファとして構成されてもよい。
図7のイベントバッファリングの仕組みを、
図5を参照して説明したスイッチ200に適用できるのは勿論である。
【0094】
図8は、
図4のSDNコントローラ100のハイパーバイザ105に実装されたロールバック制御部1050の一例を示す図である。
図8を参照すると、ロールバック制御部1050は、新プロセス作成部1051と、プロセス制御部1052と、旧プロセス終了部1053と、イベントバッファリング開始部1054と、イベントバッファリング停止部1055とを備える。
図5のスイッチ200のハイパーバイザ205は、
図8に示す構成と同じように構成されたロールバック制御部を含んでもよい。
【0095】
図9は、
図8のハイパーバイザ105に実装されたロールバック制御部の動作を説明するための図である。
図9を参照すると、ロールバックが開始されたとき、新プロセス作成部1051は、新コントローラプロセス102を作成する(S201)。ハイパーバイザ105は、システム完全性の測定に基づいて、旧コントローラプロセス101の異常の検出時にロールバックを開始するように構成されてもよい。あるいは、ハイパーバイザ105は、SDNコントローラに接続された維持管理端末(不図示)から発行されたコマンドに基づいてロールバックを開始するように構成されてもよい。これに限定されないが、旧コントローラプロセス101が現在稼働中のプロセスである一方、新プロセス作成部1051は、待機プロセスとして新コントローラプロセス102を作成してもよい。
即ち、旧コントローラプロセス101がアクティブ状態(実行状態)にある間、新コントローラプロセス102は、処理遷移図において待機状態に保たれてもよい。
【0096】
旧コントローラプロセス101と新コントローラプロセス102は、ネットワークトポロジ、スイッチのフローエントリ、ホスト位置情報(スイッチのポートに接続されたホストに関する情報)などの状態が格納されている記憶部103を共有する(S202)。新コントローラプロセス102は、稼働中のプロセスを新コントローラプロセス102へ切り替える前に、即ち、新コントローラプロセス102の状態が処理状態遷移図のアクティブ状態(実行状態)に遷移する前に、記憶部103に記憶された最新の状態を引き継ぐことが可能である。
【0097】
旧コントローラプロセス101がイベント処理を行っていない場合(S203の「No」分岐)、旧プロセス終了部1053は旧プロセスを終了し、新コントローラプロセス102が稼働中のプロセスとなる。
【0098】
旧コントローラプロセス101がイベント処理中であると判断された場合(S203、「Yes」分岐)、イベントバッファリング開始部1054は、イベントバッファリングを開始する(S205)。
【0099】
タイミング制御部104の制御の下、旧コントローラプロセス101によるイベント処理の完了を待つ(S206−S207)。
【0100】
旧コントローラプロセス101によるイベント処理が完了すると、旧プロセス終了部1053は旧プロセスを終了し、新コントローラプロセス102が稼働中のプロセスとなる(S208)。
【0101】
イベントバッファリング停止部1055は、ディスパッチャ108に、イベントバッファリングの開始から受信し、バッファ106に格納されていた旧コントローラプロセス101宛ての少なくとも1つのイベントを新コントローラプロセス102へ送信させる制御を行い、その後イベントバッファリングを停止する(S209)。
【0102】
ディスパッチャ108は、ディスパッチルールのマッチ条件に関連する対象コントローラプロセスフィールドを、旧コントローラプロセス101から新コントローラプロセス102に変更する(S210)。これ以降、受信したイベントはディスパッチャ108によって新コントローラプロセス102にディスパッチされる。
【0103】
図5のスイッチ200のハイパーバイザ205は、
図9に示す方法と同じ方法で動作するように構成されてもよい。
【0104】
[第3の実施形態]
図11は、第3の実施形態によるSDNコントローラ100を示す図である。
図11において、ハイパーバイザ105は、隔離された環境121及び122を制御および管理し(隔離された環境121及び122の作成など)、隔離された環境121及び122で実行されるコントローラプロセスを管理する(旧コントローラプロセス101及び新コントローラプロセス102の作成および終了)。ディスパッチャ108は、ハイパーバイザ105と隔離された環境との間に配置される。
図11では、これに限定されるものではないが、テナント毎にコントローラプロセスが割り当てられているものとする。即ち、例えば、テナントAとキャリア(通信事業者)との契約に基づいて、少なくとも1つのコントローラプロセスAがテナントAに割り当てられる。ディスパッチャ108は、テナントのためにネットワークチャネル制御への制御プロキシの役割を果たすオープンフローチャネルプロキシとして機能する。
【0105】
ディスパッチャ108は、テナントネットワークと対象コントローラプロセスとの対応関係を定義するディスパッチルールテーブルに基づき、テナントAネットワークに属するスイッチから、テナントAに割り当てられたコントローラプロセスにオープンフローメッセージをディスパッチする。コントローラプロセスが隔離された環境で実行される以外のSDNコントローラの特徴は、第2の実施形態のSDNコントローラと同様である。
【0106】
図12は、第3の実施形態におけるスイッチを示す図である。ハイパーバイザ205は、隔離された環境221及び222を提供し、隔離された環境221及び222においてそれぞれ実行されるスイッチプロセス(旧スイッチプロセス201、新スイッチプロセス202)を作成/終了する制御を行ってもよい。スイッチプロセスは、
図5に示すように、テナントごとに割り当てられてもよい。即ち、テナントAとキャリアとの契約に基づいて、少なくとも1つのスイッチプロセスが、テナントAなどのテナントネットワークに割り当てられる。
【0107】
ディスパッチャ208は、ハイパーバイザ205を介して、フロー(NIC/パケット転送エンジン207の1つから受信したパケット)を対応するスイッチプロセス201にディスパッチする。また、ディスパッチャ208は、スイッチプロセス201から受信したパケットを、対応するNIC/パケット転送エンジン207にディスパッチして、上記パケットをネットワークに出力する。スイッチプロセスが隔離された環境で実行される以外のスイッチの特徴は、第2の実施形態におけるスイッチと同様である。
【0108】
隔離技術は、隔離された環境でプロセスが実行される技術である。隔離技術では、システム全体に影響を与えないようにマルウェアを動作させる封じ込め環境を提供する。
【0109】
図13は、
図11に示すSDNコントローラを使用するテナントベースのネットワークを示す図である。なお、
図13では、説明の便宜上、3つのスイッチプロセス200A−200Cが設けられているが、スイッチプロセスの数は勿論3つに限定されず、1以上の任意の整数でよい。
【0110】
図13を参照すると、例えば、マルウェア124による被害が隔離された環境121Cに封じ込められているとする。即ち、コントローラプロセス101Cがマルウェア124により侵害されたとしても、マルウェア124は隔離された環境121C及びテナントCのネットワークに封じ込められており、他のフロー又はテナントネットワークAおよびBに影響を及ぼすことはできない。この場合、コントローラプロセス101Cは、上記実施形態で説明した動作に応じて、新コントローラプロセス102Cにロールバックされる。
【0111】
以下、本実施形態による隔離された環境について説明する。
【0112】
本実施形態では、これに限定されないが、ハイパーバイザ105がメモリアイソレーションを提供する。隔離された環境121Aのコントローラプロセス101Aに割り当てられたメモリ領域(隔離された領域)は、他の隔離された環境121B及び121Cの他のコントローラプロセス101B及び101Cに割り当てられた他のメモリ領域(隔離された領域)から隔離されており、コントローラプロセスおよびOSによって共有される共有領域を除いて、OS/ハイパーバイザ又はデバイスドライバ(不図示)に割り当てられたメモリ領域からも隔離されている。
【0113】
図14Aは、ハイパーバイザ又はハードウェアベースのメモリ保護の例を示す図である。
図14Aに示すように、プロセス411、412にそれぞれ割り当てられた隔離された領域421及び422は、メモリ420内の別々のメモリ領域である。OS(ハイパーバイザ)に割り当てられたOS/ハイパーバイザ領域423は、プロセス411及び412に割り当てられた隔離された領域421及び422とは別であり、したがって、OS(ハイパーバイザ)は、プロセス411、412から保護されている。プロセス411及び412によってアドレス指定されるメモリ空間は別々であるので、プロセス411及び412のそれぞれは、他のプロセスの隔離された領域へのメモリアクセスを有することができない。
【0114】
これに限定されないが、ハイパーバイザやハードウェアベースのMMU(Memory Management Unit)は、プロセスのメモリ空間のベースアドレスが設定されたリロケーションレジスタ(不図示)を用いて、各プロセスの論理(仮想)アドレスから物理アドレスへのアドレス変換を行ってもよい。リロケーションレジスタのベースアドレスと論理アドレスを加算して物理アドレスが生成される。また、MMUは、生成された物理アドレスが、プロセスのベースアドレスとリミットアドレスによって定義された範囲内にあるか否かチェックする。これはメモリ保護の仕組みとして機能する。MMUは、故障処理によるメモリアクセス違反の発生を検出すると(例えば、プロセスがアクセス権を持たないメモリ空間へのアクセス、又は、ベースアドレスにより定義された範囲やプロセスに割り当てられた制限外のアクセスを検出した場合)、故障処理は、例外処理によりアドレス指定エラーを通知されるか、アドレス指定エラーの通知で中断される。
【0115】
MMUベースのメモリ保護は、
図14Bに示すページテーブルによって実現されてもよい。なお、MMUは、ページベースのMMUに限定されず、例えば、セグメントベースのメモリ保護が採用されてもよい。ページは固定長の連続ブロックである(例えば、4KB(Kilo Bytes))。プロセスから発行される論理アドレス(仮想アドレス)430は、ページ番号フィールド(n−mビット)及びオフセットフィールド(mビット)を含む。この場合、ページサイズは2^mであり、^はべき乗演算子を表し、プロセスのメモリアドレス空間は2^nである。論理アドレス430のページ番号X(上位n−mビット)が抽出され、インデックス(ページエントリ)としてページテーブル431に供給される。ページテーブル431のX番目のエントリに格納されている値Z(pビット)が、ページテーブル431から読み出される。即ち、ページテーブル431は、XからZへのページ変換を行う。一般的に、Zのビット長pはXのビット長pよりも長い。Zは、上位ビットとして、論理アドレス430の下位mビットYと組み合わされ、メモリ(マシンメモリ)433に供給する物理アドレス432が生成される。この場合、メモリ433のZページのオフセットアドレスYがアクセスされる。
【0116】
図11乃至
図13を参照すると、ハイパーバイザ105又は205は、それぞれのメモリ領域に、各スイッチプロセスのページテーブルを保持するように構成されてもよく、これにより、プロセスがページ変換を改ざんすることが防止される。スイッチプロセス及びOS/ハイパーバイザによって共有される共有メモリ領域に対して、OS/ハイパーバイザのみが共有領域への書き込み操作を実行することができるように、アクセス制御情報に基づいて、スイッチプロセスから共有領域への読み取り/書き込みアクセスを制御するアクセスコントローラが設けられてもよい。
【0117】
ハイパーバイザ105及び205は、コンピュータソフトウェア、ファームウェア又はハードウェアを含み、ハードウェア資源を制御するように構成されてもよい。これに限定されるものではないが、ハイパーバイザ105及び205は、サーバ仮想化への適用において、仮想化ハードウェア資源と、ゲストOSと、アプリケーションとを含む仮想マシン(VM)を制御してもよく、仮想化ハードウェア資源は、例えば、仮想CPU(Central Processing Unit)と、仮想化ストレージと、仮想化ネットワークとを含む。
【0118】
上述した実施形態では、仮想マシン上で動作するプロセスをハイパーバイザが制御する構成について説明したが、実施形態の概念は、ハイパーバイザやサーバ仮想化を使用しないプロセッサ上で動作するプロセスに適用してもよい。また、上記実施形態では、隔離された環境で仮想マシン上のプロセスの実行をハイパーバイザによって制御する構成について説明したが、実施形態の概念は、ハイパーバイザを使用しないメモリアイソレーションなどにより、隔離された環境をプロセスへ提供できるように構成されたプロセッサ上で動作するプロセスに適用してもよい。
【0119】
また、上記実施形態では、スイッチやコントローラへの適用例について説明したが、本発明の適用はオープンフローネットワークに限定されないことは勿論である。
【0120】
上記の特許文献1−3および非特許文献1−3の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲内において種々の開示要素(各補足の各要素、各例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし選択が可能である。即ち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。