以下、本発明の詳細な説明において、本発明のさまざまな詳細、例示及び実施形態を説明する。ただし、本発明は、以下に説明される実施形態に限定されるものではなく、以下の特定の詳細及び例示を用いることなく実施されてもよいことは、当業者には明らかであろう。
本発明のいくつかの実施形態は、数人の異なるユーザが互いの転送論理を制御又は閲覧することさえ許可することなく、1つ以上の共有フォワーディングエレメント(shared forwarding elements)により異なるユーザに対していくつかの異なるLDPセットを指定できるようにするネットワーク制御システムを提供する。いくつかの実施形態における共有フォワーディングエレメントは、仮想ネットワークスイッチ又は物理ネットワークスイッチ、ソフトウェアスイッチ(例えば、オープン・vスイッチ(Open vSwitch))、ルータ及び/又は他のスイッチング装置、並びにこれらのスイッチと、ルータと、及び/又は他のスイッチング装置との間に接続を確立する他のあらゆるネットワークエレメント(例えば、ロードバランサ等)を含みうる。そのようなフォワーディングエレメント(forwarding elements)(例えば、物理スイッチ又はルータ)を、以下ではスイッチングエレメント(switching elements)とも呼ぶ。既製のスイッチとは対照的に、ソフトウェアフォワーディングエレメントは、いくつかの実施形態においては、スタンドアロン装置(例えば、スタンドアロンコンピュータ)のメモリにそのスイッチングテーブル及びスイッチング論理を格納することで形成されるスイッチングエレメントであるが、他の実施形態においては、ハイパーバイザ及びそのハイパーバイザに加え1つ以上の仮想マシンを更に実行する装置(例えば、コンピュータ)のメモリにそのスイッチングテーブル及びスイッチング論理を格納することで形成されるスイッチングエレメントである。
これらの管理/共有スイッチングエレメントは、LDPセットを実現するためにネットワーク制御システムにより管理されるため、以下において管理対象スイッチングエレメント又は管理対象フォワーディングエレメントと呼ばれる。いくつかの実施形態において、制御システムは、以下において更に説明するように、PCPデータをこれらのスイッチングエレメントにプッシュすることでこれらを管理する。一般にスイッチングエレメントは、データ(例えば、データパケット)を受信し、例えば受信したデータパケットをドロップすること、あるソース装置から受信されるパケットを別の宛先装置に渡すこと、パケットを処理して宛先装置に渡すこと等の1つ以上の処理動作をデータに対して実行する。いくつかの実施形態において、スイッチングエレメントにプッシュされるPCPデータは、スイッチングエレメントにより(例えば、スイッチングエレメントの汎用プロセッサにより)、スイッチングエレメント(例えば、スイッチングエレメントの専用スイッチング回路)が自身が受信するデータパケットを処理する方法を指定する物理フォワーディングプレーンデータに変換される。
いくつかの実施形態において、ネットワーク制御システムは、システムがユーザからLDPセットを受け入れ、これらのLDPセットを実現するようにスイッチングエレメントを構成できるようにする1つ以上のコントローラ(以下においてコントローラインスタンスとも呼ばれる)を有する。これらのコントローラにより、システムは、異なるユーザが同一の管理対象スイッチングエレメントを共有する一方で互いのLDPセット及び論理ネットワークを閲覧又は制御するのを防止するような方法で、共有スイッチングエレメント間の接続により規定されるこれらの共有スイッチングエレメント及び論理ネットワークの制御を仮想化できる。
いくつかの実施形態において、各コントローラインスタンスは、ユーザ入力をLCPからLFPに変換して、次にLFPデータをPCPデータに変換する1つ以上のモジュールを実行する装置(例えば、汎用コンピュータ)である。いくつかの実施形態におけるこれらのモジュールは、制御モジュール及び仮想化モジュールを有する。制御モジュールは、ユーザがLDPSを指定及びポピュレートできるようにし、仮想化モジュールは、LDPSを物理スイッチングインフラストラクチャにマッピングすることで指定されたLDPSを実現する。いくつかの実施形態において、制御モジュール及び仮想化モジュールは、リレーショナルデータベースデータ構造に書き込まれるレコードに関して指定又はマッピングされたデータを表現する。すなわち、リレーショナルデータベースデータ構造は、制御モジュールを介して受信された論理データパス入力及び仮想化モジュールにより論理データパス入力がマッピングされる物理データの双方を格納する。いくつかの実施形態において、制御アプリケーション及び仮想化アプリケーションは、いくつかの実施形態においては2つの別個のアプリケーションであるが、他の実施形態においては同一のアプリケーションの一部である。
以上で、ネットワーク制御システムのいくつかの例を説明した。以下、より詳細な実施形態を説明する。第I章では、いくつかの実施形態のネットワーク制御システムについて説明する。続く第II章では、ネットワーク制御システムによるユニバーサルフォワーディング状態の変換について説明する。第III章では、本発明のいくつかの実施形態を実現するのに用いられる電子システムについて説明する。
I.ネットワーク制御システム
A.フローを制御層にプッシュするための外部層
図1は、本発明のいくつかの実施形態の仮想化ネットワークシステム100を示す。このシステムにより、多数のユーザは、ネットワーク・インフラストラクチャ・スイッチングエレメント(例えば、スイッチ、仮想スイッチ、ソフトウェアスイッチ等)の共有集合上の多数の異なるLDPセットを作成及び制御できる。ユーザがユーザの論理データパス(LDP)セットの集合(すなわち、ユーザのスイッチング論理)を作成及び制御することを許可する際、システムは、他のユーザのスイッチング論理を閲覧又は変更するためにユーザが別のユーザのLDPセットの集合へ直接アクセスすることを許可しない。しかし、システムは、異なるユーザが仮想化スイッチング論理を通してパケットを互いに渡すことを望む場合、ユーザに対してそのような通信を許可しない。
図1に示されるように、システム100は、1つ以上のスイッチングエレメント105と、ネットワークコントローラ110とを含む。スイッチングエレメントは、システム100のネットワーク・インフラストラクチャ・スイッチングエレメントを形成するN個のスイッチング装置(Nは1以上の数である)を有する。いくつかの実施形態において、ネットワーク・インフラストラクチャ・スイッチングエレメントは、仮想ネットワークスイッチ又は物理ネットワークスイッチ、ソフトウェアスイッチ(例えば、Open vSwitch)、ルータ及び/又は他のスイッチング装置、並びにこれらのスイッチと、ルータと、及び/又は他のスイッチング装置との間に接続を確立する他のあらゆるネットワークエレメント(例えば、ロードバランサ等)を含む。そのような全てのネットワーク・インフラストラクチャ・スイッチングエレメントを以下においてスイッチングエレメント又はフォワーディングエレメントと呼ぶ。
仮想スイッチング装置又は物理スイッチング装置105は、一般に、制御スイッチング論理125及びフォワーディングスイッチング論理130を含む。いくつかの実施形態において、制御スイッチング論理125は、(1)入力パケットに適用される規則、(2)破棄されるパケット及び(3)入力パケットに適用されるパケット処理方法を指定する。仮想スイッチングエレメント又は物理スイッチングエレメント105は、転送論理130を管理するテーブルをポピュレートするために制御論理125を使用する。転送論理130は、入力パケットに対してルックアップ動作を実行し、入力パケットを宛先アドレスに転送する。
図1に更に示されるように、ネットワークコントローラ110は制御アプリケーション115を含む。制御アプリケーション115により、スイッチング論理は、LDPセットに関して1人以上のユーザに対して(例えば、1人以上の管理者又はユーザにより)指定される。ネットワークコントローラ110は、LDPセットをスイッチング装置105にプッシュされる制御スイッチング論理に変換する仮想化アプリケーション120を更に含む。このアプリケーションにおいて、制御アプリケーション及び仮想化アプリケーションをいくつかの実施形態の場合に「制御エンジン」及び「仮想化エンジン」と呼ぶ。
いくつかの実施形態において、仮想化システム100は、2つ以上のネットワークコントローラ110を有する。ネットワークコントローラは、各々が特定のLDPSに対するスイッチング装置の集合に対して制御論理を指定することに関与する論理コントローラを有する。ネットワークコントローラは物理コントローラを更に備え、各物理コントローラは、自身が管理する責任を有するスイッチングエレメントの集合に制御論理をプッシュする。換言すると、論理コントローラは、特定のLDPSを実現するスイッチングエレメントの集合に対してのみ制御論理を指定し、物理コントローラは、スイッチングエレメントが実現するLDPセットに関係なく自身が管理するスイッチングエレメントに制御論理をプッシュする。
いくつかの実施形態において、ネットワークコントローラの仮想化アプリケーションは、データレコード(例えば、データタプル)に関して仮想化アプリケーションにより追跡されるスイッチエレメントの状態のコピーを格納するためにリレーショナルデータベースデータ構造を使用する。これらのデータレコードは、全ての物理スイッチングエレメント又は仮想スイッチングエレメントのグラフ及び物理ネットワークトポロジ内のそれらの相互接続、並びにそれらのフォワーディングテーブルを表す。例えばいくつかの実施形態において、ネットワークインフラストラクチャ内の各スイッチングエレメントは、リレーショナルデータベースデータ構造における1つ以上のデータレコードにより表される。しかし、他の実施形態において、仮想化アプリケーションに対するリレーショナルデータベースデータ構造は、スイッチングエレメントの一部のみに関する状態情報を格納する。例えば、以下において更に詳細に説明するように、いくつかの実施形態における仮想化アプリケーションは、ネットワークインフラストラクチャのエッジにおけるスイッチングエレメントしか追跡しない。更に他の実施形態において、仮想化アプリケーションは、ネットワークにおけるエッジスイッチングエレメント及びエッジスイッチングエレメント間の通信を容易にするネットワークにおけるいくつかの非エッジスイッチングエレメントに関する状態情報を格納する。
いくつかの実施形態において、リレーショナルデータベースデータ構造は、仮想化ネットワークシステム100における制御モデルの中核である。ある方法の下では、アプリケーションは、リレーショナルデータベースデータ構造から読み出し、リレーショナルデータベースデータ構造に書き込むことでネットワークを制御する。具体的には、いくつかの実施形態において、アプリケーション制御論理は、(1)リレーショナルデータベースデータ構造においてネットワークエンティティレコードと関連付けられた現在の状態を読み出し、(2)これらのレコードに作用することでネットワーク状態を変更しうる。このモデルの下では、仮想化アプリケーション120は、スイッチングエレメント105のテーブル(例えば、コントロールプレーンフローテーブル)におけるレコードを変更する必要がある場合、最初にテーブルを表す1つ以上のレコードをリレーショナルデータベースデータ構造に書き込む。次に仮想化アプリケーションは、この変更をスイッチングエレメントのテーブルに伝搬する。
いくつかの実施形態において、制御アプリケーションは、リレーショナルデータベースデータ構造を更に使用して、各ユーザが指定したLDPSに対する論理構成及び論理状態を格納する。これらの実施形態において、実際のスイッチングエレメントの状態を表すリレーショナルデータベースデータ構造における情報は、リレーショナルデータベースデータ構造に格納された全情報の部分集合のみを説明する。
いくつかの実施形態において、制御アプリケーション及び仮想化アプリケーションは、ユーザが指定したLDPSに対する論理構成及び論理状態を格納するために2次データ構造を使用する。これらの実施形態におけるこの2次データ構造は、異なるネットワークコントローラ間の通信媒体となる。例えば、特定のLDPSに関与しない論理コントローラを使用してユーザがその特定のLDPSを指定する場合、論理コントローラは、これらの論理コントローラの2次データ構造を介して、特定のLDPSに関与する別の論理コントローラに特定のLDPSに対する論理構成を渡す。いくつかの実施形態において、ユーザから特定のLDPSに対する論理構成を受信する論理コントローラは、仮想化ネットワークシステムにおいて構成データを他の全てのコントローラに渡す。このように、全ての論理コントローラにおける2次格納構造は、いくつかの実施形態において全てのユーザに対する全てのLDPセット用の論理構成データを含む。
いくつかの実施形態において、コントローラインスタンスのオペレーティングシステム(不図示)は、異なる実施形態の制御アプリケーション及び仮想化アプリケーション、並びにスイッチングエレメント105に対して異なる通信構造体(不図示)の集合を提供する。例えばいくつかの実施形態において、オペレーティングシステムは、(1)いずれか1人のユーザに対して物理スイッチングを実行するスイッチングエレメント105と、(2)ユーザに対するスイッチング論理をスイッチングエレメントにプッシュするために使用される仮想化アプリケーション120との間の通信インタフェース(不図示)を管理対象スイッチングエレメントに提供する。これらの実施形態のうちのいくつかにおいて、仮想化アプリケーションは、外部アプリケーション(例えば、仮想化アプリケーション)がスイッチングエレメントのコントロールプレーン機能性を制御できるようにするAPIの集合を指定する一般的に知られているスイッチアクセスインタフェースを介して、スイッチングエレメントの制御スイッチング論理125を管理する。具体的には、管理対象スイッチングエレメント通信インタフェースは、仮想化アプリケーションが管理対象スイッチングエレメント通信インタフェースを使用してリレーショナルデータベースデータ構造に格納されたレコードをスイッチングエレメントに送出できるようにAPIの集合を実現する。
そのように知られているスイッチアクセスインタフェースの2つの例としては、オープン・フロー(OpenFlow)インタフェース及びオープン仮想スイッチ通信インタフェースがある。それらは、以下の2つの文献、McKeown, N. (2008年)、OpenFlow: Enabling Innovation in Campus Networks (http://www.openflowswitch.org//documents/openflow-wp-latest.pdf から検索可能である)及びPettit, J. (2010年)、Virtual Switching in an Era of Advanced Edges (http://openvswitch.org/papers/dccaves2010.pdf から検索可能である)にそれぞれ記載されている。これらの2つの文献は、参考として本明細書に取り入れられる。
なお、データレコードを格納するためにリレーショナルデータベースデータ構造が使用される前述及び後述するこれらの実施形態の場合、オブジェクト指向データオブジェクト形式のデータを格納できるデータ構造が代わりに又は接続的に使用されうる。そのようなデータ構造の一例としては、NIBデータ構造がある。NIBデータ構造を使用するいくつかの例は、双方とも2011年7月6日に出願された米国特許出願第13/177,529号及び米国特許出願第13/177,533号に記載される。なお、米国特許出願第13/177,529号及び米国特許出願第13/177,533号は、参考として本明細書に取り入れられる。
図1は、制御スイッチング論理125の周囲の囲み135を描くことによりスイッチアクセスAPIの使用を概念的に示す。これらのAPIを介して、仮想化アプリケーションは、コントロールプレーンフローテーブルにおいてエントリを読み出して書き込みうる。スイッチングエレメントのコントロールプレーンリソース(例えば、コントロールプレーンテーブル)への仮想化アプリケーションの接続性は、いくつかの実施形態においては帯域内で(すなわち、オペレーティングシステムにより制御されるネットワークトラフィックを用いて)実現されるが、他の実施形態においては帯域外(すなわち、独立した物理ネットワークを介して)実現される。失敗の集中及びオペレーティングシステムへの基本接続性を回避する選択手段に対して最低必要条件しか要求せず、独立したネットワークを使用する場合、IS−IS又はOSPF等の標準的なIGPプロトコルで十分である。
(ソフトウェアスイッチングエレメントとは対照的に)スイッチングエレメントが物理スイッチングエレメントである場合にスイッチングエレメントに対して制御スイッチング論理125を規定するために、いくつかの実施形態の仮想化アプリケーションは、スイッチングエレメントのコントロールプレーン内で1つ以上の制御テーブルを作成するためにオープン仮想スイッチプロトコルを使用する。一般にコントロールプレーンは、スイッチングエレメントの汎用CPUにより作成及び実行される。システムが制御テーブルを作成すると、仮想化アプリケーションは、OpenFlowプロトコルを使用してフローエントリを制御テーブルに書き込む。物理スイッチングエレメントの汎用CPUは、スイッチングエレメントのフォワーディングプレーンにおける1つ以上のフォワーディングテーブルをポピュレートするように書き込まれたエントリを制御テーブルに変換するために内部論理を使用する。フォワーディングテーブルは、一般にスイッチングエレメントの専用のスイッチングチップにより作成及び実行される。フォワーディングテーブル内でフローエントリを実行することにより、スイッチングエレメントのスイッチングチップは、自身が受信するデータのパケットを処理及びルーティングしうる。
いくつかの実施形態において、仮想化ネットワークシステム100は、論理コントローラ及び物理コントローラに加えシャーシコントローラ(chassis controller)を有する。これらの実施形態において、シャーシコントローラは、特定のスイッチングエレメントを管理するためにスイッチアクセスAPIを実現する。すなわち、制御論理を特定のスイッチングエレメントにプッシュするのはシャーシコントローラである。これらの実施形態における物理コントローラは、論理コントローラから物理コントローラが関与するスイッチングエレメントの集合にインタフェース接続するシャーシコントローラに中継するための集約点として機能する。物理コントローラは、スイッチングエレメントの集合を管理するシャーシコントローラに制御論理を分配する。これらの実施形態において、物理コントローラがデータレコードとしてリレーショナルデータベースデータ構造に格納された制御論理をシャーシコントローラに送出できるように、ネットワークコントローラのオペレーティングシステムが物理コントローラとシャーシコントローラとの間に通信チャネル(例えば、遠隔手続き呼び出し(RPC)チャネル)を確立する管理対象スイッチングエレメント通信インタフェース。その結果、シャーシコントローラは、スイッチアクセスAPI又は他のプロトコルを使用して制御論理をスイッチングエレメントにプッシュする。
いくつかの実施形態のオペレーティングシステムが提供する通信構造体は、データレコードを別のネットワークコントローラに(例えば、論理コントローラから別の論理コントローラに、物理コントローラから別の物理コントローラに、論理コントローラから物理コントローラに、物理コントローラから論理コントローラに等)送出するためにネットワークコントローラが使用できるエクスポータ(不図示)を更に有する。具体的には、ネットワークコントローラの制御アプリケーション及び仮想化アプリケーションは、エクスポータを使用してリレーショナルデータベースデータ構造に格納されたデータレコードを1つ以上の他のネットワークコントローラにエクスポートしうる。いくつかの実施形態において、あるネットワークコントローラがチャネルを介してデータレコードを別のネットワークコントローラに送出できるように、エクスポータは、2つのネットワークコントローラの間に通信チャネル(例えば、RPCチャネル)を確立する。
いくつかの実施形態のオペレーティングシステムは、ネットワークコントローラからデータレコードを受信するためにネットワークコントローラが使用しうるインポータを更に有する。いくつかの実施形態のインポータは、別のネットワークコントローラのエクスポータに相当するものとして機能する。すなわち、インポータは、2つのネットワークコントローラ間に確立された通信チャネルの受信側にある。いくつかの実施形態において、ネットワークコントローラは、受信側コントローラが自身が関心のあるデータを供給するネットワークコントローラからのみデータを受信するためにチャネルに加入するパブリッシュ−サブスクライブモデルに従う。
B.フローのエッジスイッチングエレメントへのプッシュ
上述したように、リレーショナルデータベースデータ構造は、いくつかの実施形態においてはシステムのネットワークインフラストラクチャ内の各スイッチングエレメントに関するデータを格納するが、他の実施形態においてはネットワークインフラストラクチャのエッジにおけるスイッチングエレメントに関する状態情報のみを格納する。図2及び図3は、2つの異なる方法を区別する一例を示す。具体的には、図2は、マルチユーザサーバホスティングシステムのスイッチ・インフラストラクチャを示す。このシステムにおいて、6つのスイッチングエレメントは、2人のユーザA及びBの6つのマシンを相互接続するために採用される。これらのスイッチングエレメントのうちの4つ205〜220は、ユーザA及びBのマシン235〜260と直接接続するエッジスイッチングエレメントであり、スイッチングエレメントのうちの2つ225及び230は、エッジスイッチングエレメントを相互接続し、互いに接続する内部スイッチングエレメント(すなわち、非エッジスイッチングエレメント)である。前述及び後述される図示された全てのスイッチングエレメントは、いくつかの実施形態においてはソフトウェアスイッチングエレメントであってもよいが、他の実施形態においてはソフトウェアスイッチングエレメントと物理スイッチングエレメントとの混合である。例えば、エッジスイッチングエレメント205〜220、並びに非エッジスイッチングエレメント225及び230は、いくつかの実施形態においてソフトウェアスイッチングエレメントである。また、本出願に記載される「マシン」は、演算装置等の仮想マシン及び物理マシンを含む。
図3は、エッジスイッチングエレメント205〜220を管理するネットワークコントローラ300を示す。ネットワークコントローラ300は、図1を参照して上述したネットワークコントローラ110に類似する。図3に示されるように、コントローラ300は、制御アプリケーション305及び仮想化アプリケーション310を含む。コントローラインスタンス300に対するオペレーティングシステムは、エッジスイッチングエレメント205〜220のみに関するデータレコードを含むリレーショナルデータベースデータ構造(不図示)を維持する。また、オペレーティングシステムの上で動作するアプリケーション305及び310により、ユーザA及びBは、自身が使用するエッジスイッチングエレメントに対するスイッチングエレメント構成を変更できる。次にネットワークコントローラ300は、必要に応じてこれらの変更をエッジスイッチングエレメントに伝搬する。具体的には、この例において、2つのエッジスイッチングエレメント205及び220が双方のユーザA及びBのマシンにより使用される一方で、エッジスイッチングエレメント210はユーザAのマシン245のみにより使用され、エッジスイッチングエレメント215はユーザBのマシン250のみにより使用される。従って、図3は、スイッチングエレメント205及び220においてユーザA及びBのレコードを変更するが、スイッチングエレメント210においてユーザAのレコード及びスイッチングエレメント215においてユーザBのレコードのみを更新するネットワークコントローラ300を示す。
いくつかの実施形態のコントローラ300は、いくつかの理由から、エッジスイッチングエレメントのみを制御する(すなわち、エッジスイッチングエレメントに関するリレーショナルデータベースデータ構造におけるデータのみを維持する)。エッジスイッチングエレメントを制御することにより、必要とされない全てのスイッチングエレメント間の分離を維持することとは対照的に、必要とされるマシン(例えば、演算装置)間の分離を維持するのに十分な手段をコントローラに提供する。内部スイッチングエレメントは、スイッチングエレメント間でデータパケットを転送する。エッジスイッチングエレメントは、マシンと他のネットワークエレメント(例えば、他のスイッチングエレメント)との間でデータパケットを転送する。従って、エッジスイッチングエレメントがパケットをマシンに転送するために列をなした最後のスイッチングエレメントであるため、コントローラは、単にエッジスイッチングエレメントを制御することでユーザの分離を維持しうる。
エッジスイッチングエレメントの制御に加え、いくつかの実施形態のネットワークコントローラは、制御されるエッジスイッチングエレメントの動作を簡略化及び/又は容易にするためにスイッチネットワーク階層に挿入される非エッジスイッチングエレメントを更に利用及び制御する。例えばいくつかの実施形態において、コントローラは、自身が制御するスイッチングエレメントが、リーフノードであるいくつかのエッジスイッチングエレメント及び非リーフノードである1つ以上の非エッジスイッチングエレメントを有する階層スイッチングアーキテクチャにおいて相互接続されることを要求する。そのようないくつかの実施形態において、エッジスイッチングエレメントの各々は、1つ以上の非リーフスイッチングエレメントに接続し、他のエッジスイッチングエレメントとの通信を容易にするためにそのような非リーフスイッチングエレメントを使用する。
上記の説明は、いくつかの実施形態のネットワークコントローラによるエッジスイッチングエレメント及び非エッジスイッチングエレメントの制御に関連する。いくつかの実施形態において、エッジスイッチングエレメント及び非エッジスイッチングエレメント(リーフノード及び非リーフノード)を管理対象スイッチングエレメントと呼んでもよい。これは、管理対象スイッチングエレメントによりLDPセットを実現するために、これらのスイッチングエレメントがネットワークコントローラにより管理される(ネットワークコントローラにより管理されないネットワークにおける管理されていないスイッチングエレメントとは対照的に)ためである。
いくつかの実施形態のネットワークコントローラは、上述の物理データ及び論理データに基づいて管理対象スイッチングエレメントにわたり論理スイッチングエレメントを実現する。論理スイッチングエレメント(「論理フォワーディングエレメント」とも呼ばれる)は、スイッチングエレメントが機能してもよい1つ又は複数の異なる方法(例えば、層2スイッチング、層3ルーティング等)を機能するように規定されうる。ネットワークコントローラは、管理対象スイッチングエレメントを制御することにより、規定された論理スイッチングエレメントを実現する。いくつかの実施形態において、ネットワークコントローラは、管理対象スイッチングエレメントにわたり多数の論理スイッチングエレメントを実現する。これにより、ネットワークのネットワークトポロジに関係なく管理対象スイッチングエレメントにわたり多数の異なる論理スイッチングエレメントを実現できる。
いくつかの実施形態の管理対象スイッチングエレメントは、異なるルーティング基準に基づいてネットワークデータをルーティングするように構成されうる。このように、ネットワークにおけるスイッチングエレメントを通るネットワークデータのフローは、管理対象スイッチングエレメントにわたり多数の論理スイッチングエレメントを実現するために制御されうる。
C.論理スイッチングエレメント及び物理スイッチングエレメント
図4は、スイッチングエレメントの集合にわたり実現される多数の論理スイッチングエレメントの一例を示す。特に図4は、管理対象スイッチングエレメント410〜430にわたり実現される論理スイッチングエレメント480及び490を概念的に示す。図4に示されるように、ネットワーク400は、管理対象スイッチングエレメント410〜430及びマシン440〜465を含む。図4に示されるように、マシン440、450及び460はユーザAに属し、マシン445、455及び465はユーザBに属する。
いくつかの実施形態の管理対象スイッチングエレメント410〜430は、管理対象スイッチングエレメント410〜430に連結されるネットワークにおけるネットワークエレメント間でネットワークデータ(例えば、パケット、フレーム等)をルーティングする。示されるように、管理対象スイッチングエレメント410は、マシン440及び445とスイッチングエレメント420との間でネットワークデータをルーティングする。同様に、ネットワークエレメント420は、マシン450と管理対象スイッチングエレメント410及び430との間でネットワークデータをルーティングし、スイッチングエレメント430は、マシン455〜465とスイッチングエレメント420との間でネットワークデータをルーティングする。
また、管理対象スイッチングエレメント410〜430の各々は、スイッチの転送論理に基づいて、いくつかの実施形態においてはテーブルの形式であるネットワークデータをルーティングする。いくつかの実施形態において、フォワーディングテーブルは、ルーティング基準に従ってネットワークデータをルーティングすべき場所(例えば、スイッチ上のポート)を判定する。例えば、層2スイッチングエレメントのフォワーディングテーブルは、MACアドレス(例えば、ソースMACアドレス及び/又は宛先MACアドレス)に基づいてネットワークデータをルーティングすべき場所を判定してもよい。別の例として、層3スイッチングエレメントのフォワーディングテーブルは、IPアドレス(例えば、ソースIPアドレス及び/又は宛先IPアドレス)に基づいてネットワークデータをルーティングすべき場所を判定してもよい。他の多くの種類のルーティング基準が可能である。
図4に示されるように、管理対象スイッチングエレメント410〜430の各々におけるフォワーディングテーブルは、いくつかのレコードを含む。いくつかの実施形態において、各レコードは、ルーティング基準に基づいてネットワークデータをルーティングするための動作を指定する。レコードは、管理対象スイッチングエレメント410〜430を通るデータの「フロー」を制御するため、いくつかお実施形態においてフローエントリと呼ばれてもよい。
図4は、各ユーザの論理ネットワークの概念的表示を更に示す。示されるように、ユーザAの論理ネットワーク480は、ユーザAのマシン440、450及び460が連結される論理スイッチングエレメント485を含む。ユーザBの論理ネットワーク490は、ユーザBのマシン445、455及び465が連結される論理スイッチングエレメント495を含む。従って、ユーザAの観点から、ユーザAは、ユーザAのマシンだけが連結されるスイッチングエレメントを有し、ユーザBの観点から、ユーザBは、ユーザBのマシンだけが連結されるスイッチングエレメントを有する。換言すると、各ユーザに対して、ユーザは、ユーザのマシンのみを有する自身のネットワークを有する。
マシン440から発信されるマシン450宛てのネットワークデータ、及びマシン440から発信されるマシン460宛てのネットワークデータの流れを実現する概念的フローエントリを以下において説明する。管理対象スイッチングエレメント410のフォワーディングテーブルにおけるフローエントリ「A1〜A2」は、マシン410から発信されるマシン450宛てのネットワークデータをスイッチングエレメント420にルーティングするように管理対象スイッチングエレメント410に命令する。スイッチングエレメント420のフォワーディングテーブルにおけるフローエントリ「A1〜A2」は、マシン410から発信されるマシン450宛てのネットワークデータをマシン450にルーティングするようにスイッチングエレメント420に命令する。従って、マシン440がマシン450宛てのネットワークデータを送出する時、管理対象スイッチングエレメント410及び420は、スイッチングエレメントのフォワーディングテーブルにおける対応するレコードに基づいてデータパス470に沿ってネットワークデータをルーティングする。
また、管理対象スイッチングエレメント410のフォワーディングテーブルにおけるフローエントリ「A1〜A3」は、マシン440から発信されるマシン460宛てのネットワークデータをスイッチングエレメント420にルーティングするように管理対象スイッチングエレメント410に命令する。スイッチングエレメント420のフォワーディングテーブルにおけるフローエントリ「A1〜A3」は、マシン440から発信されるマシン460宛てのネットワークデータをスイッチングエレメント430にルーティングするようにスイッチングエレメント420に命令する。スイッチングエレメント430のフォワーディングテーブルにおけるフローエントリ「A1〜A3」は、マシン440から発信されるマシン460宛てのネットワークデータをマシン460にルーティングするようにスイッチングエレメント430に命令する。従って、マシン440がマシン460宛てのネットワークデータを送出する時、管理対象スイッチングエレメント410〜430は、スイッチングエレメントのフォワーディングテーブルにおける対応するレコードに基づいてデータパス470及び475に沿ってネットワークデータをルーティングする。
マシン440から発信されるマシン450宛てのネットワークデータ及びマシン440から発信されるマシン460宛てのネットワークデータのルーティングに対する概念的フローエントリを上述したが、同様のフローエントリは、ユーザAの論理ネットワーク480における他のマシンの間でネットワークデータをルーティングする管理対象スイッチングエレメント410〜430のフォワーディングテーブルに含まれるであろう。更に同様のフローエントリは、ユーザBの論理ネットワーク490におけるマシンの間でネットワークデータをルーティングする管理対象スイッチングエレメント410〜430のフォワーディングテーブルに含まれるであろう。
図4に示される概念的フローエントリは、パケットを送出すべき次のホップスイッチングエレメントを推定するために、管理対象スイッチングエレメントに関するソース情報及び宛先情報の双方を含む。しかし、いくつかの実施形態の管理対象スイッチングエレメントが宛先情報(例えば、コンテキスト識別子、宛先アドレス等)のみを使用して次のホップスイッチングエレメントを推定できるため、ソース情報はフローエントリにある必要はない。
いくつかの実施形態において、管理対象スイッチングエレメント410〜430にわたる論理スイッチングエレメント485及び495の実現を容易にするために、トンネリングプロトコル(例えば、無線アクセスポイントの制御及び提供 (CAPWAP) (control and provisioning of wireless access point)、GRE (generic routing encapsulation)、GREインターネットプロトコルセキュリティ (IPsec) 等)が使用されてもよい。トンネル化により、パケットは、別のパケットのペイロードとしてスイッチ及びルータを介して送信される。すなわち、パケットがトンネルパケットをカプセル化している他のパケットのヘッダに含まれたアドレスに基づいて転送されるため、トンネルパケットは、そのアドレス(例えば、ソースMACアドレス及び宛先MACアドレス)を公開する必要はない。従って、トンネルパケットが論理アドレス空間において意味のあるアドレスを有しうるが、他のパケットは物理アドレス空間におけるアドレスに基づいてフォワーディング/ルーティングされるため、トンネル化により論理アドレス空間を物理アドレス空間から分離できる。このように、トンネルは、論理スイッチングエレメント485及び495を実現するためにネットワークにおいて管理対象スイッチングエレメントを接続する「論理ワイヤ」としてみなされてもよい。
スイッチングエレメントの集合にわたり多数の論理スイッチングエレメントを実現するように上述の種々の方法でスイッチングエレメントを構成することにより、多数のユーザは、各ユーザの観点から、各々が独立したネットワーク及び/又はスイッチングエレメントを有することができる一方で、実際にはスイッチングエレメント(例えば、トンネル、物理ワイヤ)の集合間でスイッチングエレメント及び/又は接続の同一の集合の一部又は全てを共有している。
II.ユニバーサルフォワーディング状態
A.コントローラインスタンスの層
図5は、本発明のいくつかの実施形態のコントローラインスタンスの種々の処理層を介して管理対象スイッチングエレメントを制御する命令の伝搬を示す。図5は、同一のコントローラインスタンス又は異なるコントローラインスタンスの4つの処理層を介してコントロールプレーンデータを管理対象スイッチングエレメント525に変換及び伝搬する制御データパイプライン500を示す。これらの4つの層は、入力変換層505、制御層510、仮想化層515及びカスタマイゼーション層520である。
いくつかの実施形態において、これらの4つの層は同一のコントローラインスタンスにある。しかし、これらの層の他の構成が他の実施形態において存在する。例えば他の実施形態において、制御層510及び仮想化層515のみが同一のコントローラインスタンスにあるが、カスタマイズド物理コントロールプレーン(CPCP)データを伝搬する機能性は、別のコントローラインスタンス(例えば、不図示のシャーシコントローラ)のカスタマイゼーション層にある。これらの他の実施形態において、別のコントローラインスタンスがCPCPデータを生成して管理対象スイッチングエレメントにプッシュする前に、ユニバーサル物理コントロールプレーン(UPCP)データは、あるコントローラインスタンスのリレーショナルデータベースデータ構造(不図示)からこの他のコントローラインスタンスのリレーショナルデータベースデータ構造に転送される。前者のコントローラインスタンスは、UPCPデータを生成する論理コントローラであってもよく、後者のコントローラインスタンスは、UPCPデータをCPCPデータにカスタマイズする物理コントローラ又はシャーシコントローラであってもよい。
図5に示されるように、いくつかの実施形態における入力変換層505は、この層の出力を表現するために使用されうるLCP530を有する。いくつかの実施形態において、アプリケーション(例えば、不図示のウェブベースアプリケーション)は、ユーザがLDPセットを指定する入力を供給するためにユーザに提供される。このアプリケーションは、APIの呼び出しの形式の入力を入力変換層505に送出する。入力変換層505は、APIの呼び出しを制御層510により制御可能な形式のLCPデータに変換する。例えば入力は、制御層のnLogテーブルマッピングエンジンに供給可能な入力イベントの集合に変換される。nLogテーブルマッピングエンジン及びその動作を以下において更に説明する。
いくつかの実施形態における制御層510は、この層に対する入力及び出力を表現するために使用されうるLCP530及びLFP535を有する。LCPは、制御層及びそのユーザが1人以上のユーザに対するLCP内の1つ以上のLDPを指定することを許可する高レベル構造体のコレクションを含む。LFP535は、仮想化層515により処理可能な形式でユーザのLDPセットを表す。このように、2つの論理プレーン530及び535は、図5に示されるように、一般に一般的な管理対象スイッチングエレメント525において見つけられうるコントロールプレーン555及びフォワーディングプレーン560の仮想化空間アナログである。
いくつかの実施形態において、制御層510は、LCP構造体を規定及び公開する。層自体又は層のユーザは、LCP構造体を用いてLCP内の異なるLDPセットを規定する。例えばいくつかの実施形態において、LCPデータ530は論理ACLデータ等を含む。このデータ(例えば、論理ACLデータ)のうちのいくつかはユーザにより指定されうるが、他のそのようなデータ(例えば、論理L2レコード又はL3レコード)は、制御層により生成され、ユーザにより指定されなくてもよい。いくつかの実施形態において、制御層510は、制御層510が検出するリレーショナルデータベースデータ構造に対するある特定の変更(管理対象スイッチングエレメント及び管理データパスに対する変更を示す)に応答して、そのようなデータを生成及び/又は指定する。
いくつかの実施形態において、LCPデータ(すなわち、コントロールプレーン構造体に関して表現されるLDPセットデータ)は、管理対象スイッチングエレメントからの現在の動作データを考慮して、かつ、このコントロールプレーンデータがPCPデータに変換される方法を考慮せずに最初に指定されうる。例えば、このコントロールプレーンデータが、後で5つのコンピュータの間で所望のスイッチングを実現する3つの管理対象スイッチングエレメント用の物理制御データに変換されてもよいが、LCPデータは、5つのコンピュータを接続する1つの論理スイッチングエレメント用の制御データを指定してもよい。
制御層は、LCP内のあらゆるLDPSをLFP535におけるLDPSに変換するためのモジュール(不図示)の集合を含む。いくつかの実施形態において、制御層510は、この変換を実行するためにnLogテーブルマッピングエンジンを使用する。この変換を実行するために制御層がnLogテーブルマッピングエンジンを使用することを以下において更に説明する。制御層は、制御層510のLFP535から仮想化層515のLFP540にLDPセットをプッシュするためのモジュール(不図示)の集合を更に含む。
LFP540は、1人以上のユーザの1つ以上のLDPセットを含む。いくつかの実施形態におけるLFP540は、1人以上のユーザの1つ以上のLDPセット用の論理フォワーディングデータを含む。このデータのうちのいくつかは制御層によりLFP540にプッシュされるのに対し、他のそのようなデータは、いくつかの実施形態に対して以下において更に説明されるように、リレーショナルデータベースデータ構造におけるイベントを検出する仮想化層によりLFPにプッシュされる。
LFP540に加え、仮想化層515はUPCP545を含む。UPCP545はLDPセット用のUPCPデータを含む。仮想化層は、LFP540内のLDPセットをUPCP545におけるUPCPデータに変換するためのモジュール(不図示)の集合を含む。いくつかの実施形態において、仮想化層515は、この変換を実行するためにnLogテーブルマッピングエンジンを使用する。仮想化層は、UPCPデータを仮想化層515のUPCP545からカスタマイゼーション層520のリレーショナルデータベースデータ構造にプッシュするためのモジュール(不図示)の集合を更に含む。
いくつかの実施形態において、カスタマイゼーション層515に送出されるUPCPデータにより、管理対象スイッチングエレメント525は、制御層510により指定されたLDPセットに従ってデータパケットを処理できる。しかし、CPCPデータとは対照的に、UPCPデータは、いくつかの実施形態においては管理対象スイッチングエレメント及び/又は管理対象スイッチングエレメントの場所別の情報を表現しないため、制御層により指定された論理データを完全に実現しない。
UPCPデータは、管理対象スイッチングエレメントにおいてLDPセットを完全に実現するために、管理対象スイッチングエレメントの各々用のCPCPデータに変換されなければならない。例えば、LDPセットがいくつかの管理対象スイッチングエレメントにまたがるトンネルを指定する時、UPCPデータは、トンネルの一端を表す管理対象スイッチングエレメントの特定のネットワークアドレス(例えば、IPアドレス)を使用してその一端を表現する。しかし、トンネルがまたがる他の管理対象スイッチングエレメントの各々は、特定のネットワークアドレスを有する末端の管理対象スイッチングエレメントを参照するために、管理対象スイッチングエレメントに対してローカルなポート番号を使用する。すなわち、特定のネットワークアドレスは、管理対象スイッチングエレメントにおいてトンネルを指定するLDPセットを完全に実現するために、管理対象スイッチングエレメントの各々に対するローカルポート番号に変換されなければならない。
カスタマイゼーション層520がUPCPデータを生成するコントローラインスタンスとは異なる別のコントローラインスタンスにおいて動作していると仮定すると、CPCPデータに変換される中間データであるUPCPデータにより、いくつかの実施形態の制御システムは変倍できるようになる。これは、仮想化層515が、LDPセットを指定するLFPデータをLDPセットを実現する管理対象スイッチングエレメントの各々用のCPCPデータに変換する必要がないためである。代わりに、仮想化層515は、LDPセットを実現する全ての管理対象スイッチングエレメントに対して、一度だけLFPデータをUPCPデータに変換する。このように、仮想化アプリケーションは、LDPセットを実現する管理対象スイッチングエレメントの数と同じ回数だけLDPセットをCPCPデータに変換するために費やすであろう計算リソースを節約する。
カスタマイゼーション層520は、この層に対する入力及び出力を表現するために使用されうるUPCP546及びCPCP550を含む。カスタマイゼーション層は、UPCP546におけるUPCPデータをCPCP550におけるCPCPデータに変換するためのモジュール(不図示)の集合を含む。いくつかの実施形態において、カスタマイゼーション層520は、この変換を実行するためにnLogテーブルマッピングエンジンを使用する。カスタマイゼーション層は、CPCPデータをカスタマイゼーション層520のCPCP550から管理対象スイッチングエレメント525にプッシュするためのモジュール(不図示)の集合を更に含む。
管理対象スイッチングエレメントの各々にプッシュされるCPCPデータは、管理対象スイッチングエレメントに特有である。CPCPデータは、「物理」データと呼ばれるが、管理対象スイッチングエレメントが物理データ処理領域及び論理データ処理領域の双方において物理スイッチング動作を実行することを許可する。いくつかの実施形態において、カスタマイゼーション層520は、管理対象スイッチングエレメントの各々に対する独立したコントローラインスタンスにおいて動作する。
いくつかの実施形態において、カスタマイゼーション層520は、コントローラインスタンスにおいて動作しない。これらの実施形態におけるカスタマイゼーション層515は、管理対象スイッチングエレメント525にある。従って、これらの実施形態において、仮想化層515は、UPCPデータを管理対象スイッチングエレメントに送出する。管理対象スイッチングエレメントの各々は、UPCPデータを管理対象スイッチングエレメントに特有のCPCPデータにカスタマイズする。これらの実施形態のうちのいくつかにおいて、コントローラデーモンは、管理対象スイッチングエレメントの各々において動作しており、ユニバーサルデータを管理対象スイッチングエレメント用のカスタマイズドデータに変換する。コントローラデーモンを以下において更に説明する。
いくつかの実施形態において、管理対象スイッチングエレメント525に伝搬されるカスタマイズド物理コントロールプレーンデータにより、このスイッチングエレメントは、論理領域において規定された論理値に基づいてネットワークデータ(例えば、パケット)に対して物理フォワーディング動作を実行できるようになる。具体的には、いくつかの実施形態において、カスタマイズド物理コントロールプレーンデータは、論理値を含むフローエントリを指定する。これらの論理値は、論理領域においてネットワークデータを転送するために使用される論理アドレス及び論理ポート番号等を含む。管理対象スイッチングエレメントが論理値に基づいて物理フォワーディング動作を実行することでネットワークデータに対して論理フォワーディング動作を実行できるように、これらのフローエントリは、論理値を物理領域において規定された物理値に更にマッピングする。このように、物理コントロールプレーンデータは、管理対象スイッチングエレメントにわたり論理スイッチングエレメントを実現することを容易にする。管理対象スイッチングエレメントにおいて論理データ処理を実現するために伝搬された物理コントロールプレーンデータを使用するいくつかの例は、2011年7月6日に出願された米国特許出願第13/177,535号に更に記載される。なお、米国特許出願第13/177,535号は、参考として本明細書に取り入れられる。
制御データパイプライン500の層により処理されるコントロールプレーンデータは、層が高レベルになるにつれよりグローバルになる。すなわち、制御層510における論理コントロールプレーンデータは、論理コントロールプレーンデータにより規定された論理スイッチングエレメントを実現する管理対象スイッチングエレメントの集合全体にまたがる。これに対して、カスタマイゼーション層520におけるカスタマイズド物理コントロールプレーンデータは、論理スイッチングエレメントを実現する管理対象スイッチングエレメントの各々に対して局所的かつ特有である。
B.マルチコントローラインスタンス
図6は、いくつかの実施形態のマルチインスタンス、分散ネットワーク制御システム600を示す。この分散システムは、3つのコントローラインスタンス605、610及び615を用いて多数のスイッチングエレメント690を制御する。いくつかの実施形態において、分散システム600により、異なるコントローラインスタンスは、同一のスイッチングエレメント又は異なるスイッチングエレメントの動作を制御できる。図6に示されるように、各インスタンスは、入力モジュール620と、制御モジュール625と、レコード635と、2次格納構造(例えば、PTD)640と、コントローラ間通信インタフェース645と、管理対象スイッチングエレメント通信インタフェース650とを含む。
コントローラインスタンスの入力モジュール620は、ユーザから入力を取得して、その入力を制御モジュール625が理解及び処理するLCPデータに変換するという点で、図5を参照して上述した入力変換層505に類似する。上述したように、入力は、いくつかの実施形態においてAPIの呼び出しの形式である。入力モジュール620は、LCPデータを制御モジュール625に送出する。
コントローラインスタンスの制御モジュール625は、LCPデータをLFPデータに変換して、そのLFPデータを仮想化モジュール630にプッシュするという点で制御層510に類似する。更に制御モジュール625は、受信したLCPデータがコントローラインスタンスが管理しているLDPSのものであるかを判定する。コントローラインスタンスがLCPデータに対するLDPSのマスタ(すなわち、LDPSを管理する論理コントローラ)である場合、コントローラインスタンスの仮想化モジュールはデータを更に処理する。コントローラインスタンスがLCPデータに対するLDPSのマスタでない場合、いくつかの実施形態の制御モジュール625は、LCPデータを2次記憶装置640に格納する。
コントローラインスタンスの仮想化モジュール630は、LFPデータをUPCPデータに変換するという点で仮想化層515に類似する。いくつかの実施形態の仮想化モジュール630は、コントローラ間通信インタフェース645を介して別のコントローラインスタンスに、あるいは管理対象スイッチングエレメント通信インタフェース650を介して管理対象スイッチングエレメントにUPCPデータを送出する。
他のコントローラインスタンスがLDPSを実現する管理対象スイッチングエレメントのうちの少なくとも1つを管理することに関与する物理コントローラである場合、仮想化モジュール630は、UPCPデータを別のインスタンスに送出する。これは、仮想化モジュール630がUPCPデータを生成しているコントローラインスタンスが特定のLDPSに関与する単なる論理コントローラであるが、LDPSを実現する管理対象スイッチングエレメントに関与する物理コントローラ又はシャーシコントローラではない場合である。
管理対象スイッチングエレメントがUPCPデータを管理対象スイッチングエレメントに特有のCPCPデータに変換するように構成される場合、仮想化モジュール630は、UPCPデータを管理対象スイッチングエレメントに送出する。この場合、コントローラインスタンスは、UPCPデータからCPCPデータへの変換を実行するカスタマイゼーション層又はモジュールを有しない。
いくつかの実施形態において、レコード635は、コントローラインスタンスのリレーショナルデータベースデータ構造に格納されたレコードの集合である。いくつかの実施形態において、入力モジュール、制御モジュール及び仮想化モジュールの一部又は全ては、リレーショナルデータベースデータ構造に格納されたレコードを使用、更新及び管理する。すなわち、これらのモジュールの入力及び/又は出力は、リレーショナルデータベースデータ構造に格納される。
システム600は、いくつかの実施形態においては、各インスタンスのリレーショナルデータベースデータ構造において同一のスイッチングエレメントデータレコードを維持するが、他の実施形態においては、各コントローラインスタンスが管理しているLDPSに基づいてスイッチングエレメントデータレコードの異なる集合を異なるインスタンスのリレーショナルデータベースデータ構造が格納できるようにする。
いくつかの実施形態のPTD640は、ユーザが指定したネットワーク構成データ(例えば、APIの呼び出しの形式の入力から変換されたLCPデータ)を格納するための2次格納構造である。いくつかの実施形態において、各コントローラインスタンスのPTDは、システム600を使用して全てのユーザ用の構成データを格納する。ユーザ入力を受信するコントローラインスタンスが構成データを他のコントローラインスタンスのPTDに伝搬するため、全てのコントローラインスタンスの全てのPTDは、これらの実施形態において全てのユーザ用の全ての構成データを有する。しかし、他の実施形態において、コントローラインスタンスのPTDは、コントローラインスタンスが管理している特定のLDPS用の構成データのみを格納する。
異なるコントローラインスタンスが同一のあるいは重なり合う構成データ及び/又は2次格納構造レコードを格納できるようにすることにより、システムは、あらゆるネットワークコントローラの障害(あるいは、リレーショナルデータベースデータ構造及び/又は2次格納構造インスタンスの障害)によるデータの損失に警戒することで全体的な回復を向上させる。例えば、コントローラインスタンスにわたりPTDを複製することにより、障害を起こしたコントローラインスタンスは、別のインスタンスからそのPTDを迅速に再ロードできるようになる。
別のコントローラインスタンスとの通信チャネル(例えば、RPCチャネル)を確立するために、コントローラ間通信インタフェース645が使用される(例えば、不図示のエクスポータにより)。示されるように、コントローラ間通信インタフェースは、異なるコントローラインスタンス605〜615間でのデータのやり取りを容易にする。
管理対象スイッチングエレメント通信インタフェース650は、上述したように、コントローラインスタンスと管理対象スイッチングエレメントとの間の通信を容易にする。いくつかの実施形態において、ユニバーサルデータをカスタマイズドデータに変換できる管理対象スイッチングエレメントの各々に仮想化モジュール630により生成されたUPCPデータを伝搬するために、管理対象スイッチングエレメント通信インタフェースが使用される。
分配されたコントローラインスタンスの間の通信の一部又は全てに対して、システム600は調整マネージャ(CM)655を使用する。各インスタンスにおけるCM655により、インスタンスは、ある特定の動作を他のインスタンスと調整できる。異なる実施形態は、インスタンス間で動作の異なる集合を調整するためにCMを使用する。そのような動作の例としては、リレーショナルデータベースデータ構造に書き込むこと、PTDに書き込むこと、スイッチングエレメントを制御すること、コントローラインスタンスの耐故障性に関連したコントローラ間の通信を容易にすること等がある。また、LDPSのマスタ及び管理対象スイッチングエレメントのマスタを見つけるために、CMが使用される。
上述したように、システム600の異なるコントローラインスタンスは、同一のスイッチングエレメントの動作又は異なるスイッチングエレメントの動作を制御できる。いくつかのインスタンスにわたりこれらの動作の制御を分配することにより、システムは、より容易にスケールアップして更なるスイッチングエレメントを処理できる。具体的には、システムは、多数のコントローラインスタンスを使用することで実現されうる効率の恩恵を受けるために、異なるスイッチングエレメントの管理を異なるコントローラインスタンスに分配できる。そのような分散システムにおいて、各コントローラインスタンスが管理下で有するスイッチングエレメントの数が減少しうることにより、スイッチングエレメントにわたりフローエントリを生成及び分配するために各コントローラが実行する必要がある計算の数は減少する。他の実施形態において、多数のコントローラインスタンスを使用することにより、スケールアウトネットワーク管理システムを作成できるようになる。大規模なネットワークにおいてネットワークフローテーブルを分配する最適な方法の計算は、CPUを多用するタスクである。コントローラインスタンスで処理を分割することにより、システム600は、大規模なネットワークに対処できるスケールアウトネットワーク管理システムを作成するために、より多数であるがあまり高性能でないコンピュータシステムの集合を使用しうる。
作業負荷を分配し、動作が異なるコントローラインスタンスと競合するのを避けるために、いくつかの実施形態のシステム600は、システム600内の1つのコントローラインスタンス(例えば、605)をLDPS及び/又はあらゆる所定の管理対象スイッチングエレメントのマスタ(すなわち、論理コントローラ又は物理コントローラ)と呼ぶ。いくつかの実施形態において、各マスタコントローラインスタンスは、マスタが処理している管理対象スイッチングエレメントに関連したデータのみをリレーショナルデータベースデータ構造に格納する。
いくつかの実施形態において、上述したように、CMは、コントローラインスタンスの回復に関連したコントローラ間の通信を容易にする。例えばCMは、上述の2次記憶装置によりコントローラ間の通信を実現する。制御システムにおけるコントローラインスタンスは、多くの理由(例えば、ハードウェア障害、ソフトウェア障害、ネットワーク障害等)により障害を起こす恐れがある。異なる実施形態は、コントローラインスタンスが障害を起こしたかを判定するために異なる技術を使用してもよい。いくつかの実施形態において、制御システムにおけるコントローラインスタンスが障害を起こしたかを判定するために、合意プロトコルが使用される。これらの実施形態のうちのいくつかは、合意プロトコルを実現するためにアパッチズーキーパ(Apache Zookeeper)を使用してもよく、他の実施形態は、他の方法で合意プロトコルを実現してもよい。
CM655のいくつかの実施形態は、コントローラインスタンスが障害を起こしたかを判定するために規定のタイムアウトを利用してもよい。例えば、コントローラインスタンスのCMがある時間の長さ(すなわち、規定のタイムアウトの長さ)内で通信(例えば、制御システムにおける別のコントローラインスタンスの別のCMから送出された)に応答しない場合、応答しないコントローラインスタンスは障害を起こしたと判定される。他の実施形態においてコントローラインスタンスが障害を起こしたかを判定するために、他の技術が利用されてもよい。
マスタコントローラインスタンスが障害を起こす場合、LDPセット及びスイッチングエレメントに対する新しいマスタが判定される必要がある。CM655のいくつかの実施形態は、マスタコントローラインスタンスを選出するマスタ選出処理(例えば、LDPセットの管理を区分するための及び/又はスイッチングエレメントの管理を区分するための)を実行することでそのような判定を行う。いくつかの実施形態のCM655は、障害を起こしたコントローラインスタンスがマスタであったLDPセット及びスイッチングエレメントの双方に対する新しいマスタコントローラインスタンスを選出するためのマスタ選出処理を実行してもよい。しかし、他の実施形態のCM655は、(1)障害を起こしたコントローラインスタンスがマスタであったLDPセットに対する新しいマスタコントローラインスタンスを選出するためのマスタ選出処理と、(2)障害を起こしたコントローラインスタンスがマスタであったスイッチングエレメントに対する新しいマスタコントローラインスタンスを選出するための別のマスタ選出処理とを実行してもよい。これらの場合、CM655は、2つの異なるコントローラインスタンス、すなわち障害を起こしたコントローラインスタンスがマスタであったLDPセットに対するあるコントローラインスタンス及び障害を起こしたコントローラインスタンスがマスタであったスイッチングエレメントに対する別のコントローラインスタンスを新しいコントローラインスタンスとして判定してもよい。
代わりに又は接続的に、いくつかの実施形態のクラスタにおけるコントローラは、上述したようにリーダコントローラを判定するために合意アルゴリズムを実行する。リーダコントローラは、マスタコントローラが障害を起こした場合に引き継ぐために、特定のワークアイテムに対するマスタコントローラ及び場合によってはホットスタンドバイコントローラを割り当てることにより、クラスタにおける各コントローラインスタンスが関与するタスクを区分する。
いくつかの実施形態において、マスタ選出処理は、コントローラインスタンスが制御システムに追加される場合にLDPセットの管理及び/又はスイッチングエレメントの管理を区分するためのものでもある。特に、制御システム600が制御システム600においてコントローラインスタンスのメンバーの変化を検出する場合、CM655のいくつかの実施形態はマスタ選出処理を実行する。例えば、新しいネットワークコントローラが制御システム600に追加されたことを制御システム600が検出する場合、CM655は、LDPセットの管理及び/又はスイッチングエレメントの管理の一部を既存のコントローラインスタンスから新しいコントローラインスタンスに再分配するためにマスタ選出処理を実行してもよい。しかし、他の実施形態において、新しいネットワークコントローラが制御システム600に追加されたことを制御システム600が検出する場合、LDPセットの管理及び/又はスイッチングエレメントの管理の一部は、既存のコントローラインスタンスから新しいネットワークコントローラに再分配されない。代わりに、これらの実施形態における制御システム600は、割り当てられていないLDPセット及び/又はスイッチングエレメント(例えば、新しいLDPセット及び/又はスイッチングエレメント、あるいは障害を起こしたネットワークコントローラからのLDPセット及び/又はスイッチングエレメント)を検出する場合、割り当てられていないLDPセット及び/又はスイッチングエレメントを新しいコントローラインスタンスに割り当てる。
C.LDPセット及び管理対象スイッチングエレメントの管理を区分すること
図7は、図6のシステム600に類似する分散システム700においてスイッチングエレメント(すなわち、物理コントローラ)に対してマスタコントローラインスタンスを指定する一例を示す。この例において、2つのコントローラ705及び710は、2人の異なるユーザA及びBに対する3つのスイッチングエレメントS1、S2及びS3を制御する。2つの制御アプリケーション715及び720を通して、2人のユーザは、コントローラの仮想化アプリケーション745及び750により2つのコントローラインスタンス705及び710の2つのリレーショナルデータベースデータ構造755及び760に同様に格納される多数のレコードに変換される2つの異なるLDPセット725及び730を指定する。
図7に示される例において、双方のコントローラ705及び710の双方の制御アプリケーション715及び720は、双方のユーザA及びBに対するスイッチングエレメントS2のレコードを変更できるが、コントローラ705のみがこのスイッチングエレメントのマスタである。この例は2つの異なるシナリオを示す。第1シナリオは、ユーザBに対するスイッチングエレメントS2においてレコードS2b1を更新するコントローラ705を含む。第2シナリオは、制御アプリケーション720がリレーショナルデータベースデータ構造760においてスイッチングエレメントS2及びユーザAに対するレコードS2a1を更新した後にスイッチングエレメントS2においてレコードS2a1を更新するコントローラ705を含む。図7に示される例において、この更新は、コントローラ710のリレーショナルデータベースデータ構造760からコントローラ705のリレーショナルデータベースデータ構造755にルーティングされ、その後スイッチングエレメントS2にルーティングされる。
異なる実施形態は、コントローラインスタンス710のリレーショナルデータベースデータ構造760に対する変更をコントローラインスタンス705のリレーショナルデータベースデータ構造755に伝搬するために異なる技術を使用する。例えば、この更新を伝搬するために、いくつかの実施形態におけるコントローラ710の仮想化アプリケーション750は、レコードの集合を直接リレーショナルデータベースデータ構造755に送出する(コントローラ間通信モジュール又はエクスポータ/インポータを使用することで)。それに応答して、仮想化アプリケーション745は、リレーショナルデータベースデータ構造755に対する変更をスイッチングエレメントS2に送出する。
いくつかの実施形態のシステム700は、リレーショナルデータベースデータ構造の変更を別のコントローラインスタンスのリレーショナルデータベースデータ構造に伝搬するのではなく、制御アプリケーション720からの要求に応答してスイッチングエレメントS2においてレコードS2a1を変更するために他の技術を使用する。例えば、いくつかの実施形態の分散制御システムは、2次格納構造(例えば、PTD)を異なるコントローラインスタンス間の通信チャネルとして使用する。いくつかの実施形態において、PTDは全てのインスタンスにわたり複製され、リレーショナルデータベースデータ構造の一部又は全ては、PTD格納層を介してあるコントローラインスタンスから別のコントローラインスタンスにプッシュされる。従って、図7に示される例において、リレーショナルデータベースデータ構造760に対する変更は、コントローラ710のPTDに対して複製され、そこから、それは、コントローラ705のPTD又はリレーショナルデータベースデータ構造755において複製されうる。
いくつかの実施形態が、コントローラインスタンスをスイッチングエレメントのマスタと呼ぶことに加え、あるコントローラインスタンスをLDPSのマスタと呼ぶため、図7に示される動作のシーケンスに対する他の変動が存在しうる。いくつかの実施形態において、異なるコントローラインスタンスは、リレーショナルデータベースデータ構造においてスイッチングエレメント及びそのスイッチングエレメントに対する対応するレコードのマスタであってよいが、他の実施形態は、コントローラインスタンスがリレーショナルデータベースデータ構造においてスイッチングエレメント及びそのスイッチングエレメントに対する全てのレコードのマスタとなることを要求する。
システム700がスイッチングエレメント及びリレーショナルデータベースデータ構造レコードに対するマスタの指名を可能にする実施形態において、図7に示される例は、コントローラインスタンス710がリレーショナルデータベースデータ構造レコードS2a1のマスタである例を示すが、コントローラインスタンス705は、スイッチングエレメントS2に対するマスタである。コントローラインスタンス705及び710以外のコントローラインスタンスがリレーショナルデータベースデータ構造レコードS2a1のマスタであった場合、制御アプリケーション720からのリレーショナルデータベースデータ構造レコードの変更に対する要求は、この他のコントローラインスタンスに伝搬されなければならなかったであろう。この他のコントローラインスタンスは、リレーショナルデータベースデータ構造レコードを変更する。この変更により、リレーショナルデータベースデータ構造755及びスイッチングエレメントS2は、この変更をコントローラインスタンス705に伝搬する1つ又は複数の手段によりそれらのレコードを更新する。
他の実施形態において、コントローラインスタンス705は、リレーショナルデータベースデータ構造レコードS2a1のマスタであってもよく、あるいはスイッチングエレメントS2及びそのリレーショナルデータベースデータ構造の全てのレコードのマスタであってもよい。これらの実施形態において、制御アプリケーション720からのリレーショナルデータベースデータ構造レコードの変更に対する要求は、リレーショナルデータベースデータ構造755におけるレコード及びスイッチングエレメントS2を変更するコントローラインスタンス705に伝搬されなければならないであろう。
上述したように、異なる実施形態は、異なるコントローラインスタンス間の通信を容易にするために異なる技術を採用する。また、異なる実施形態は、異なる方法でコントローラインスタンスを実現する。例えばいくつかの実施形態において、制御アプリケーション(例えば、図6及び図7の625又は715)及び仮想化アプリケーション(例えば、630又は745)のスタックは、インストールされて単一のコンピュータ上で動作する。また、いくつかの実施形態において、多数のコントローラインスタンスは、インストールされて単一のコンピュータ上で並列に動作しうる。いくつかの実施形態において、コントローラインスタンスは、いくつかのコンピュータの間で分割された構成要素のスタックも有しうる。例えばあるインスタンス内で、制御アプリケーション(例えば、625又は715)は第1物理マシン又は仮想マシン上にあってよく、仮想化アプリケーション(例えば、630又は745)は第2物理マシン又は仮想マシン上にあってよい。
図8は、入力を分配するためのコントローラ、LDPSのマスタコントローラ(論理コントローラとも呼ばれる)及び管理対象スイッチングエレメントのマスタコントローラ(物理コントローラとも呼ばれる)として機能するいくつかのコントローラインスタンスの動作の一例を示す。いくつかの実施形態において、全てのコントローラインスタンスが図6を参照して上述したような異なるモジュール及びインタフェースのフルスタックを含むわけではない。あるいは、全てのコントローラインスタンスがフルスタックの全ての機能を実行するわけではない。例えば、図8に示されるコントローラインスタンス805、810及び815は、いずれもモジュール及びインタフェースのフルスタックを有しない。
この例におけるコントローラインスタンス805は、入力を分配するためのコントローラインスタンスである。すなわち、いくつかの実施形態のコントローラインスタンス805は、APIの呼び出しの形式でユーザから入力を取得する。APIの呼び出しにより、ユーザは、特定のLDPSを構成する(例えば、管理対象スイッチングエレメントの集合において実現される論理スイッチングエレメント又は論理ルータを構成する)ための要求又は情報の問い合わせ(例えば、ユーザの論理スイッチの論理ポートに対するネットワークトラフィックの統計)に対する要求を指定できる。コントローラインスタンス805の入力モジュール820は、いくつかの実施形態においてこれらのAPIの呼び出しを受信して、PTD825に格納され、別のコントローラインスタンスに送出されうる形態(例えば、データタプル又はレコード)にそれらを変換する。
次に、この例におけるコントローラインスタンス805は、特定のLDPSのレコードの管理に関与する別のコントローラインスタンスにこれらのレコードを送出する。この例において、コントローラインスタンス810は、LDPSのレコードに関与する。コントローラインスタンス810は、コントローラインスタンス805のPTD825からレコードを受信し、コントローラインスタンス810の2次格納構造であるPTD845にそのレコードを格納する。いくつかの実施形態において、異なるコントローラインスタンスのPTDは、直接互いに情報をやり取りできるため、コントローラ間通信インタフェースに依存する必要はない。
次に制御アプリケーション810は、これらのレコードをPTDに追加することを検出し、リレーショナルデータベースデータ構造842において他のレコードを生成又は変更するためにそのレコードを処理する。特に、制御アプリケーションはLFPデータを生成する。その結果、仮想化アプリケーションは、リレーショナルデータベースデータ構造においてこれらのレコードの変更及び/又は追加を検出し、リレーショナルデータベースデータ構造において他のレコードを変更及び/又は生成する。これらの他のレコードは、この例においてUPCPデータを表す。その後、これらのレコードは、コントローラインスタンス810のコントローラ間通信インタフェース850を介して、特定のLDPSを実現するスイッチングエレメントのうちの少なくとも1つを管理している別のコントローラインスタンスに送出される。
この例におけるコントローラインスタンス815は、スイッチングエレメント855を管理しているコントローラインスタンスである。スイッチングエレメントは、特定のLDPSの少なくとも一部を実現する。コントローラインスタンス815は、コントローラ間通信インタフェース865を介してコントローラインスタンス810からUPCPデータを表すレコードを受信する。いくつかの実施形態において、コントローラインスタンス815は、UPCPデータをCPCPデータに変換するための制御アプリケーション及び仮想化アプリケーションを有する。しかし、この例において、コントローラインスタンス815は、UPCPデータの送出先の管理対象スイッチングエレメントの集合を識別するだけである。このように、コントローラインスタンス815は、このコントローラが管理する責任を有する管理対象スイッチングエレメントに送出するデータを収集するための集約点として機能する。この例において、管理対象スイッチングエレメント855は、コントローラインスタンス815により管理対象スイッチングエレメントの1つである。
D.入力変換層
図9は、入力変換アプリケーション900に対するソフトウェアアーキテクチャを概念的に示す。いくつかの実施形態の入力変換アプリケーションは、図5を参照して上述した入力変換層505として機能する。特に入力変換アプリケーションは、ユーザが入力値を入力することを許可するユーザインタフェースアプリケーションから入力を受信する。入力変換アプリケーションは、入力を要求に変換し、要求を処理するために要求を1つ以上のコントローラインスタンスにディスパッチする。入力変換アプリケーションは、いくつかの実施形態においては、制御アプリケーションが動作する同一のコントローラインスタンスにおいて動作するが、他の実施形態においては独立したコントローラインスタンスとして動作する。図9に示されるように、入力変換アプリケーションは、入力パーサ905と、フィルタ910と、要求生成器915と、要求リポジトリ920と、ディスパッチャ925と、応答マネージャ930と、コントローラ間通信インタフェース940とを含む。
いくつかの実施形態において、入力変換アプリケーション900は、LDPセット及び情報の問い合わせを指定するためのAPIの呼び出しの集合をサポートする。これらの実施形態において、ユーザが入力値を入力することを許可するユーザインタフェースアプリケーションは、APIの呼び出しの形式の入力を入力変換アプリケーション900に送出するように実現される。従って、これらのAPIの呼び出しは、LDPS(例えば、ユーザにより指定された論理スイッチングエレメント構成)及び/又はユーザの情報の問い合わせ(例えば、ユーザの論理スイッチングエレメントの論理ポートに対するネットワークトラフィックの統計)を指定する。更に入力変換アプリケーション900は、いくつかの実施形態において論理コントローラ、物理コントローラ及び/又は別のコントローラインスタンスの別の入力変換アプリケーションから入力を取得してもよい。
いくつかの実施形態の入力パーサ905は、ユーザインタフェースアプリケーションからAPIの呼び出しの形式の入力を受信する。いくつかの実施形態において、入力パーサは、APIの呼び出しからユーザ入力値を取り出し、その入力値をフィルタ910に渡す。フィルタ910は、ある特定の要件に適合しない入力値を除外する。例えばフィルタ910は、論理ポートに対して無効なネットワークアドレスを指定する入力値を除外する。不適合入力値を含むAPIの呼び出しに対して、応答マネージャ930は、入力が適合していないことを示す応答をユーザに送出する。
要求生成器915は、要求に対する応答を生成する要求を処理する1つ以上のコントローラインスタンスに送出される要求を生成する。これらの要求は、処理対象のコントローラインスタンス及び/又は情報の問い合わせを受信するためのLDPSデータを含んでもよい。例えば要求は、ユーザが管理している論理スイッチングエレメントの論理ポートの統計情報を求めてもよい。この要求に対する応答は、論理スイッチングエレメントと関連付けられたLDPSを管理する責任を有するコントローラインスタンスにより準備された要求された統計情報を含むであろう。
異なる実施形態の要求生成器915は、要求を受信及び処理するコントローラインスタンスの実現例に依存して、異なる形式に従って要求を生成する。例えば、いくつかの実施形態の要求生成器915が生成する要求は、要求を受信するコントローラインスタンスのリレーショナルデータベースデータ構造に格納するのに適したレコードの形態(例えば、データタプル)である。これらの実施形態のうちのいくつかにおいて、受信側コントローラインスタンスは、要求を表すレコードを処理するためにnLogテーブルマッピングエンジンを使用する。他の実施形態において、要求は、要求を受信するコントローラインスタンスのNIBデータ構造と対話できるオブジェクト指向データオブジェクトの形式である。これらの実施形態において、受信側コントローラインスタンスは、nLogテーブルマッピングエンジンを経ずにNIBデータ構造上で直接データオブジェクトを処理する。
ディスパッチャ925が生成された要求を適切なコントローラインスタンスに送出できるように、いくつかの実施形態の要求生成器915は、要求を要求リポジトリ920に預ける。ディスパッチャ925は、各要求が送出されるべきコントローラインスタンスを識別する。場合によっては、ディスパッチャは、要求と関連付けられたLDPSを調べ、そのLDPSのマスタであるコントローラインスタンスを識別する。場合によっては、ディスパッチャは、要求がスイッチングエレメントと特に関連がある場合(例えば、要求がスイッチングエレメントのポートにマッピングされる論理ポートの統計情報に関する場合)に要求を送出するためのコントローラインスタンスとして特定のスイッチングエレメントのマスタ(すなわち、物理コントローラ)を識別する。ディスパッチャは、要求を識別されたコントローラインスタンスに送出する。受信側コントローラインスタンスは、要求が情報の問い合わせを含む場合に応答を返送する。
コントローラ間通信インタフェース940は、要求が送出されうる別のコントローラインスタンスとの通信チャネル(例えば、RPCチャネル)を確立するという点で、図6を参照して上述したコントローラ間通信インタフェース645に類似する。通信チャネルは、いくつかの実施形態においては双方向であるが、他の実施形態においては一方向である。チャネルが一方向である場合、コントローラ間通信インタフェースは、入力変換アプリケーションが異なるチャネルを介して要求を送出し、応答を受信できるように、別のコントローラインスタンスとの多数のチャネルを確立する。
受信側コントローラインスタンスが情報の問い合わせを指定する要求を受信する場合、コントローラインスタンスは、要求を処理し、問い合わせのあった情報を含む応答を生成する。応答マネージャ930は、コントローラ間通信インタフェース940により確立されたチャネルを介して要求を処理したコントローラインスタンスから応答を受信する。場合によっては、2つ以上の応答は、送出された要求に対して返送してもよい。例えば、ユーザが管理している論理スイッチングエレメントの全ての論理ポートからの統計情報に対する要求は、各コントローラからの応答を返送するであろう。ポートが論理ポートにマッピングされる多数の異なるスイッチングエレメントに対する多数の物理コントローラインスタンスからの応答は、直接又は論理スイッチと関連付けられたLDPSのマスタを介して入力変換アプリケーション900に返送されてもよい。そのような場合、いくつかの実施形態の応答マネージャ930は、これらの応答をマージして、単一のマージされた応答をユーザインタフェースアプリケーションに送出する。
上述したように、コントローラインスタンスにおいて動作する制御アプリケーションは、変換動作を実行することにより、LCPデータを表すデータレコードをLFPデータを表すデータレコードに変換する。具体的には、いくつかの実施形態において、制御アプリケーションは、仮想化アプリケーションにより作成されるLDPSテーブル(例えば、論理フォワーディングテーブル)にLDPセットをポピュレートする。
E.nLogエンジン
いくつかの実施形態におけるコントローラインスタンスは、データログテーブルマッピング技術の変動を使用するnLogテーブルマッピングエンジンを使用することでマッピング動作を実行する。テーブルのある集合をテーブルの別の集合にマッピングするために、データログはデータベース管理の分野で使用される。データログは、その現在の実現例が低速なことが多いため、ネットワーク制御システムの仮想化アプリケーションにおいてテーブルマッピング動作を実行するのに適したツールではない。
従って、いくつかの実施形態のnLogエンジンは、LDPSデータタプルを管理対象スイッチングエレメントのデータタプルにリアルタイムでマッピングできるように迅速に動作するようにカスタム設計される。このカスタム設計は、いくつかのカスタム設計の選択肢に基づいている。例えばいくつかの実施形態は、アプリケーション開発者により(例えば、制御アプリケーションの開発者により)表現される高レベル宣言規則の集合からnLogテーブルマッピングエンジンをコンパイルする。これらの実施形態のうちのいくつかにおいて、nLogエンジンに対して行われる1つのカスタム設計の選択肢は、アプリケーション開発者が宣言規則を表現するためにAND演算子のみを使用することを許可するためのものである。開発者が他の演算子(例えば、OR、XOR等)を使用するのを防止することにより、これらの実施形態は、結果として得られるnLogエンジンの規則が実行時により高速に実行するAND演算に関して表現されることを保証する。
別のカスタム設計の選択肢は、nLogエンジンにより実行された結合演算に関連する。結合演算は、異なるテーブルのレコード間での関連付けを作成するための一般的なデータベース操作である。いくつかの実施形態において、外結合演算(外部結合演算とも呼ばれる)を実行するのは時間がかかりうるためにエンジンのリアルタイムの動作にとって現実的ではないため、nLogエンジンは、結合演算を内結合演算(内部結合演算とも呼ばれる)に限定する。
更に別のカスタム設計の選択肢は、いくつかの異なるコントローラインスタンスにより実行される分散テーブルマッピングエンジンとしてnLogエンジンを実現するためのものである。いくつかの実施形態は、LDPセットの管理を区分することで分散してnLogエンジンを実現する。LDPセットの管理を区分することは、特定のLDPSと関連付けられたレコードを指定する責任を有するインスタンスとして1つのコントローラインスタンスのみをその特定のLDPSの各々に対して指定することを含む。例えば、制御システムが2つの異なるコントローラインスタンスを有する5人の異なるユーザに対して5つのLDPセットを指定するために3つのスイッチングエレメントを使用する場合、一方のコントローラインスタンスは、LDPセットのうちの2つに関連するレコードに対するマスタであってよく、他方のコントローラインスタンスは、他の3つのLDPセットに対するレコードに対するマスタであってよい。
LDPセットの管理を区分することは、いくつかの実施形態において、各LDPSに対するテーブルマッピング動作をLDPSに関与するコントローラインスタンスのnLogエンジンに更に割り当てる。いくつかのnLogインスタンスにわたりnLogテーブルマッピング動作を分配することにより、各nLogインスタンスの負荷を軽減する結果、各nLogインスタンスがマッピング動作を完了できるまでの速度が上昇する。更にこのような分配により、コントローラインスタンスを実行する各マシンに対するメモリサイズの要件が減少する。いくつかの実施形態は、各nLogインスタンスにより実行される第1結合演算がLDPSパラメータに基づくように指示することにより、異なるインスタンスにわたりnLogテーブルマッピング動作を区分する。このような指示により、インスタンスがnLogインスタンスにより管理されないLDPSに関連する結合演算の集合を開始した場合に各nLogインスタンスの結合演算が即座に失敗して終了することを保証する。nLogエンジンを使用するいくつかの例は、先に組み込まれた米国特許出願第13/177,533号に記載される。
F.制御層
図10は、本発明のいくつかの実施形態の制御アプリケーション1000を示す。このアプリケーション1000は、図6の制御モジュール625としていくつかの実施形態において使用される。このアプリケーション1000は、LCPデータを表す入力データタプルを含む入力テーブルをLFPデータを表すデータタプルにマッピングするためにnLogテーブルマッピングエンジンを使用する。このアプリケーションは、制御アプリケーション1000からLDPセットを指定するデータタプルを受信する仮想化アプリケーション1005の上にある。仮想化アプリケーション1005は、データタプルをUPCPデータにマッピングする。
より具体的には、制御アプリケーション1000により、異なるユーザは、ユーザが管理する論理スイッチングエレメントの所望の構成を指定する異なるLDPセットを規定できる。制御アプリケーション1000は、マッピング動作により、各ユーザの各LDPS用のデータをLDPSと関連付けられた論理スイッチングエレメント用のLFPデータを指定するデータタプルの集合に変換する。いくつかの実施形態において、制御アプリケーションは、仮想化アプリケーション1005が実行される同一のホスト上で実行される。制御アプリケーション及び仮想化アプリケーションは、他の実施形態において同一のマシン上で動作する必要はない。
図10に示されるように、制御アプリケーション1000は、規則エンジン入力テーブル1010の集合と、関数テーブル及び定数テーブル1015の集合と、インポータ1020と、規則エンジン1025と、規則エンジン出力テーブル1045の集合と、トランスレータ1050と、エクスポータ1055と、PTD1060と、コンパイラ1035とを含む。コンパイラ1035は、アプリケーションの他の構成要素とは異なる時間インスタンスで動作するアプリケーションの1つの構成要素である。コンパイラが、開発者が特定の制御アプリケーション及び/又は仮想化環境に対する規則エンジンを指定する必要がある場合に動作するのに対し、残りのアプリケーションのモジュールは、1人以上のユーザにより指定されたLDPセットを展開するためにアプリケーションが仮想化アプリケーションとインタフェース接続する実行時に動作する。
いくつかの実施形態において、コンパイラ1035は、宣言型言語で指定される宣言型命令1040のかなり小さな集合(例えば、数百行)を取得し、これらをアプリケーションのテーブルマッピングを実行する規則エンジン1025の動作を指定するコード(すなわち、オブジェクトコード)の大きな集合(例えば、何千の行)に変換する。従って、コンパイラは、制御アプリケーションを規定及び更新する制御アプリケーション開発者の処理を大幅に簡略化する。これは、コンパイラにより、開発者が、制御アプリケーションの複雑なマッピング動作のコンパクトな定義を可能にする高レベルプログラミング言語を使用し、その後1つ又は複数の変更(例えば、制御アプリケーションによりサポートされた論理ネットワーク化機能の変更、制御アプリケーションの所望の挙動に対する変更等)に応答してこのマッピング動作を更新できるためである。更にコンパイラにより、開発者は、マッピング動作を規定している時に、イベントが制御アプリケーションに到達する順序を考慮する必要がなくなる。
いくつかの実施形態において、規則エンジン(RE)入力テーブル1010は、ユーザ及び/又は制御アプリケーションにより指定された論理データ及び/又はスイッチング構成(例えば、アクセス制御リスト構成、専用仮想ネットワーク構成、ポートセキュリティ構成等)を有するテーブルを含む。入力テーブル1010は、いくつかの実施形態においてネットワーク制御システムにより管理対象スイッチングエレメントからの物理データを含むテーブルを更に含む。いくつかの実施形態において、そのような物理データは、管理対象スイッチングエレメントに関するデータと、異なるユーザの異なるLDPセットを展開するためにネットワーク制御システムにより採用されたネットワーク構成に関する他のデータとを含む。
RE入力テーブル1010は、ユーザにより提供されたLCPデータを部分的にポピュレートされる。RE入力テーブル1010は、LFPデータ及びUPCPデータも含む。RE入力テーブル1010に加え、制御アプリケーション1000は、テーブルマッピング動作のための入力を収集するために規則エンジン1025が使用する他の種々雑多なテーブル1015を含む。これらのテーブル1015は、規則エンジン1025がテーブルマッピング動作を実行する必要がある定数に対する規定の値を格納する定数テーブルを含む。例えば定数テーブル1015は、値0として規定される定数「zero」と、値4,000として規定される定数「dispatch_port_no」と、値0xFF:FF:FF:FF:FF:FFとして規定される定数「broadcast_MAC_addr」とを含んでもよい。
規則エンジン1025が定数を参照する時、定数に対して規定された対応する値が実際に検索及び使用される。また、定数テーブル1015の定数に対して規定された値は、変更及び/又は更新されてもよい。このように、定数テーブル1015は、規則エンジン1025が規則エンジン1025の動作を指定するコードを再書き込み又は再コンパイルする必要なく参照する定数に対して規定された値を変更する機能を提供する。テーブル1015は、出力テーブル1045をポピュレートするために必要とされる値を算出するために規則エンジン1025が使用する必要がある関数を格納する関数テーブルを更に含む。
規則エンジン1025は、LCPデータをLFPデータに変換するためのある方法を指定するテーブルマッピング動作を実行する。規則エンジン(RE)入力テーブルの1つが変更される場合は常に、規則エンジンは、結果として1つ以上のRE出力テーブルにおける1つ以上のデータタプルを変更してもよいテーブルマッピング動作の集合を実行する。
図10に示されるように、規則エンジン1025は、イベント処理プログラム1022と、いくつかのクエリプラン1027と、テーブルプロセッサ1030とを含む。各クエリプランは、RE入力テーブルの1つが変更されると実行される結合演算の集合を指定する規則の集合である。以下において、そのような変更を入力テーブルイベントと呼ぶ。この例において、各クエリプランは、宣言1040の集合の1つの宣言規則からコンパイラ1035により生成される。いくつかの実施形態において、2つ以上のクエリプランは、1つの宣言規則から生成される。例えばクエリプランは、1つの宣言規則により結合された各テーブルに対して作成される。すなわち、宣言規則が4つのテーブルに結合するように指定する場合、4つの異なるクエリプランはその1つの宣言から作成される。いくつかの実施形態において、クエリプランは、nLog宣言型言語を使用することで規定される。
規則エンジン1025のイベント処理プログラム1022は、各入力テーブルイベントの発生を検出する。異なる実施形態のイベント処理プログラムは、異なる方法で入力テーブルイベントの発生を検出する。いくつかの実施形態において、イベント処理プログラムは、RE入力テーブルのレコードに対する変更を通知するために、コールバックをRE入力テーブルに登録する。そのような実施形態において、イベント処理プログラム1022は、レコードの1つが変更したRE入力テーブルからの通知を受信する時に入力テーブルイベントを検出する。
検出された入力テーブルイベントに応答して、イベント処理プログラム1022は、(1)検出されたテーブルイベントに対して適切なクエリプランを選択し、(2)クエリプランを実行するようにテーブルプロセッサ1303に指示する。クエリプランを実行するために、テーブルプロセッサ1030は、いくつかの実施形態において、1つ以上の入力テーブル1010及び種々雑多なテーブル1015からデータ値の1つ以上の集合を表す1つ以上のレコードを生成するために、クエリプランにより指定された結合演算を実行する。次に、いくつかの実施形態のテーブルプロセッサ1030は、(1)結合演算により生成されたレコードからデータ値の部分集合を選択するために選択動作を実行し、(2)選択されたデータ値の部分集合を1つ以上のRE出力テーブル1045に書き込む。
いくつかの実施形態において、RE出力テーブル1045は、論理ネットワークエレメントデータ属性及び物理ネットワークエレメントデータ属性の双方を格納する。テーブル1045は、規則エンジン1025のテーブルマッピング動作の出力を格納するためにRE出力テーブルと呼ばれる。いくつかの実施形態において、RE出力テーブルは、いくつかの異なるカテゴリにグループ化されうる。例えばいくつかの実施形態において、これらのテーブルは、RE入力テーブル及び/又は制御アプリケーション(CA)出力テーブルであってよい。テーブルの変更により、規則エンジンがクエリプランの実行を必要とする入力イベントを検出する場合、テーブルはRE入力テーブルである。RE出力テーブル1045は、規則エンジンに別のクエリプランを実行させるイベントを生成するRE入力テーブル1010であってもよい。そのようなイベントは、内部入力イベントと呼ばれ、制御アプリケーション1000又はインポータ1020によるRE入力テーブルの変更により発生するイベントである外部入力イベントと対比される。
以下において更に説明するように、テーブルの変更により、エクスポータ1055が変更を仮想化アプリケーション1005にエクスポートする場合、テーブルはCA出力テーブルである。RE出力テーブル1045のテーブルは、いくつかの実施形態において、RE入力テーブル、CA出力テーブル又はRE入力テーブル及びCA出力テーブルの双方であってよい。
エクスポータ1055は、RE出力テーブル1045のCA出力テーブルに対する変更を検出する。異なる実施形態のエクスポータは、異なる方法でCA出力テーブルイベントの発生を検出する。いくつかの実施形態において、エクスポータは、CA出力テーブルのレコードに対する変更を通知するために、コールバックをCA出力テーブルに登録する。そのような実施形態において、エクスポータ1055は、レコードの1つが変更したCA出力テーブルからの通知を受信する時に出力テーブルイベントを検出する。
検出された出力テーブルイベントに応答して、エクスポータ1055は、変更されたCA出力テーブルにおける変更されたデータタプルの一部又は全てを取得し、この変更されたデータタプルを仮想化アプリケーション1005の入力テーブル(不図示)に伝搬する。いくつかの実施形態において、データタプルを仮想化アプリケーションにプッシュするエクスポータ1055の代わりに、仮想化アプリケーション1005は、CA出力テーブル1045からのデータタプルを仮想化アプリケーションの入力テーブルにプルする。いくつかの実施形態において、制御アプリケーション1000のCA出力テーブル1045と仮想化1005の入力テーブルとは同一であってもよい。更に他の実施形態において、制御アプリケーション及び仮想化アプリケーションはテーブルの1つの集合を使用するため、CA出力テーブルは、実質的には仮想化アプリケーション(VA)入力テーブルである。
いくつかの実施形態において、制御アプリケーションは、制御アプリケーションが管理する責任を有しないLDPセット用のデータを出力テーブル1045に保持しない。しかし、そのようなデータは、PTDに格納可能であり、PTDに格納される形式にトランスレータ1050により変換される。データと関連付けられたLDPセットを管理する責任を有する他のコントローラインスタンスの一部がデータを処理できるように、制御アプリケーション1000のPTDは、このデータを他のコントローラインスタンスの1つ以上の他の制御アプリケーションインスタンスに伝搬する。
いくつかの実施形態において、制御アプリケーションは、データの回復のために出力テーブル1045に格納されたデータ(すなわち、制御アプリケーションが出力テーブルに保持するデータ)をPTDに更に持って行く。更にそのようなデータは、トランスレータ1050により変換され、PTDに格納され、他のコントローラインスタンスの他の制御アプリケーションインスタンスに伝搬される。従って、これらの実施形態において、コントローラインスタンスのPTDは、ネットワーク制御システムにより管理全てのLDPセット用の全ての構成データを有する。すなわち、各PTDは、いくつかの実施形態において論理ネットワークの構成のグローバルビューを含む。
インポータ1020は、入力データの多数の異なるソースとインタフェース接続し、入力テーブル1010を変更又は作成するために入力データを使用する。いくつかの実施形態のインポータ1020は、コントローラ間通信インタフェース(不図示)を介して入力変換アプリケーション1070から入力データを受信する。他のコントローラインスタンスからPTDを介して受信されたデータが入力テーブル1010を変更又は作成するために入力データとして使用されうるように、インポータ1020はPTD1060ともインタフェース接続する。また、インポータ1020は、RE入力テーブル及びRE出力テーブル1045のRE入力テーブル&CA出力テーブルを用いて変更を更に検出する。
G.仮想化層
上述したように、いくつかの実施形態の仮想化アプリケーションは、ネットワーク制御システムの異なるユーザの異なるLDPセットがネットワーク制御システムにより管理対象スイッチングエレメントにより実現されうる方法を指定する。いくつかの実施形態において、仮想化アプリケーションは、変換動作を実行することにより、管理対象スイッチングエレメントのインフラストラクチャ内のLDPセットの実現例を指定する。これらの変換動作は、LDPセットデータレコードを最初に管理対象スイッチングエレメント内に格納されて、次にスイッチングエレメントのフォワーディング挙動を規定するためのフォワーディングプレーンデータ(例えば、フローエントリ)を生成するためにスイッチングエレメントにより使用される制御データレコード(例えば、UPCPデータ)に変換する。変換動作は、管理対象スイッチングエレメント内及びその間で規定されるべきネットワーク構造体(例えば、トンネル、キュー、キューコレクション等)を指定する他のデータを更に生成する(例えば、テーブルにおいて)。ネットワーク構造体は、管理対象スイッチングエレメントの集合に動的に追加される動的に展開又は事前設定される管理ソフトウェアスイッチングエレメントである管理ソフトウェアスイッチングエレメントを更に含む。
図11は、本発明のいくつかの実施形態の仮想化アプリケーション1100を示す。このアプリケーション1100は、図6の仮想化モジュール630としていくつかの実施形態において使用される。仮想化アプリケーション1100は、UPCPデータを表すLDPSデータタプルを含む入力テーブルをマッピングするためにnLogテーブルマッピングエンジンを使用する。このアプリケーションは、LDPSデータタプルを生成する制御アプリケーション1105の下にある。制御アプリケーション1105は、図10を参照して上述した制御アプリケーション1000に類似する。仮想化アプリケーション1100は、仮想化アプリケーション1005に類似する。
図11に示されるように、仮想化アプリケーション1100は、規則エンジン入力テーブル1110の集合と、関数テーブル及び定数テーブル1115の集合と、インポータ1120と、規則エンジン1125と、規則エンジン出力テーブル1145の集合と、トランスレータ1150と、エクスポータ1155と、PTD1160と、コンパイラ1135とを含む。コンパイラ1135は、図10を参照して上述したコンパイラ1035に類似する。
仮想化アプリケーション1100がLDPSデータタプルをUPCPデータタプルにマッピングするために、いくつかの実施形態における開発者は、LDPSデータタプルをいくつかの管理対象スイッチングエレメントに対するUPCPデータタプルにマッピングする命令を含む宣言型命令1140を宣言型言語で指定する。いくつかのそのような実施形態において、これらのスイッチングエレメントは、UPCPデータをCPCPデータに変換するためのUPCPを含む。
他の管理対象スイッチングエレメントに対して、仮想化アプリケーション1100は、UPCPを有しない管理対象スイッチングエレメントの各々に特有のCPCPデータタプルにLDPSデータタプルをマッピングする。いくつかの実施形態において、仮想化アプリケーション1100は、別のコントローラインスタンスの仮想化アプリケーションからUPCPデータを受信する場合、ユニバーサル物理コントロールプレーンデータタプルを物理データパスセットデータタプルに変換するために、UPCPを有しないいくつかの管理対象スイッチングエレメントに対するCPCPデータタプルに出力テーブル1140におけるCPCPデータタプルを更にマッピングする。
いくつかの実施形態において、UPCPタプルを特定の管理対象スイッチングエレメントに特有のCPCPデータに変換するためのシャーシコントローラがある場合、仮想化アプリケーション1100は、入力UPCPデータを特定の管理対象スイッチングエレメント用のCPCPデータに変換しない。これらの実施形態において、仮想化アプリケーション1100を有するコントローラインスタンスは、コントローラインスタンスがマスタである管理対象スイッチングエレメントの集合を識別し、UPCPデータを管理対象スイッチングエレメントの集合に配信する。
RE入力テーブル1110は、RE入力テーブル1010に類似する。RE入力テーブル1110に加え、仮想化アプリケーション1100は、テーブルマッピング動作のための入力を収集するために規則エンジン1125が使用する他の種々雑多なテーブル1115を含む。これらのテーブル1115はテーブル1015に類似する。図11に示されるように、規則エンジン1125は、イベント処理プログラム1122と、いくつかのクエリプラン1127と、イベント処理プログラム1022、クエリプラン1027及びテーブル処理1030が実行する時と同様に機能するテーブルプロセッサ1130とを含む。
いくつかの実施形態において、RE出力テーブル1145は、論理ネットワークエレメントデータ属性及び物理ネットワークエレメントデータ属性の双方を格納する。テーブル1145は、規則エンジン1125のテーブルマッピング動作の出力を格納するためにRE出力テーブルと呼ばれる。いくつかの実施形態において、RE出力テーブルは、いくつかの異なるカテゴリにグループ化されうる。例えばいくつかの実施形態において、これらのテーブルは、RE入力テーブル及び/又は仮想化アプリケーション(VA)出力テーブルであってよい。テーブルの変更により、規則エンジンがクエリプランの実行を必要とする入力イベントを検出する場合、テーブルはRE入力テーブルである。RE出力テーブル1145は、それが規則エンジンにより変更された後に規則エンジンに別のクエリプランを実行させるイベントを生成するRE入力テーブル1110であってもよい。そのようなイベントは、内部入力イベントと呼ばれ、インポータ1020を介した制御アプリケーション1105によるRE入力テーブルの変更により発生するイベントである外部入力イベントと対比される。
テーブルの変更により、エクスポータ1155が変更を管理対象スイッチングエレメント又は他のコントローラインスタンスにエクスポートする場合、テーブルはVA制御テーブルである。図12に示されるように、RE出力テーブル1145のテーブルは、いくつかの実施形態において、RE入力テーブル1110、VA出力テーブル1205又はRE入力テーブル1110及びVA出力テーブル1205の双方であってよい。
エクスポータ1155は、RE出力テーブル1145のVA出力テーブル1205に対する変更を検出する。異なる実施形態のエクスポータは、異なる方法でVA出力テーブルイベントの発生を検出する。いくつかの実施形態において、エクスポータは、VA出力テーブルのレコードに対する変更を通知するために、コールバックをVA出力テーブルに登録する。そのような実施形態において、エクスポータ1155は、レコードの1つが変更したVA出力テーブルからの通知を受信する時に出力テーブルイベントを検出する。
検出された出力テーブルイベントに応答して、エクスポータ1155は、変更されたVA出力テーブルにおける変更されたデータタプルの各々を取得し、この変更されたデータタプルを他のコントローラインスタンス(例えば、シャーシコントローラ)の1つ以上又は管理対象スイッチングエレメントの1つ以上に伝搬する。このようにする際、エクスポートは、LDPS(例えば、1つ以上の論理スイッチング構成)をレコードにより指定されたような1つ以上の管理対象スイッチングエレメントに展開することを完了する。
VA出力テーブルがいくつかの実施形態において論理ネットワークエレメントデータ属性及び物理ネットワークエレメントデータ属性の双方を格納する時、いくつかの実施形態におけるPTD1160は、出力テーブル1145における論理ネットワークエレメントデータ属性及び物理ネットワークエレメントデータ属性と同一のあるいはそれらから導出される論理ネットワークエレメント属性及び物理ネットワークエレメント属性の双方を格納する。しかし、他の実施形態において、PTD1160は、出力テーブル1145における物理ネットワークエレメントデータ属性と同一のあるいはそれから導出される物理ネットワークエレメント属性のみを格納する。
いくつかの実施形態において、仮想化アプリケーションは、仮想化アプリケーションが管理する責任を有しないLDPセット用のデータを出力テーブル1145に保持しない。しかし、そのようなデータは、PTDに格納可能であり、PTDに格納される形式にトランスレータ1150により変換される。データと関連付けられたLDPセットを管理する責任を有する他の仮想化アプリケーションインスタンスの一部がデータを処理できるように、仮想化アプリケーション1100のPTDは、このデータを他のコントローラインスタンスの1つ以上の他の仮想化アプリケーションインスタンスに伝搬する。
いくつかの実施形態において、仮想化アプリケーションは、データの回復のために出力テーブル1145に格納されたデータ(すなわち、仮想化アプリケーションが出力テーブルに保持するデータ)をPTDに更に持って行く。更にそのようなデータは、トランスレータ1150により変換され、PTDに格納され、他のコントローラインスタンスの他の仮想化アプリケーションインスタンスに伝搬される。従って、これらの実施形態において、コントローラインスタンスのPTDは、ネットワーク制御システムにより管理全てのLDPセット用の全ての構成データを有する。すなわち、各PTDは、いくつかの実施形態において論理ネットワークの構成のグローバルビューを含む。
インポータ1120は、入力データの多数の異なるソースとインタフェース接続し、入力テーブル1110を変更又は作成するために入力データを使用する。いくつかの実施形態のインポータ1120は、コントローラ間通信インタフェースを介して入力変換アプリケーション1170から入力データを受信する。他のコントローラインスタンスからPTDを介して受信されたデータが入力テーブル1110を変更又は作成するために入力データとして使用されうるように、インポータ1120はPTD1160ともインタフェース接続する。また、インポータ1120は、RE入力テーブル及びRE出力テーブル1145のRE入力テーブル&VA出力テーブルを用いて変更を更に検出する。
H.ネットワークコントローラ
図13は、本発明のいくつかの実施形態の制御アプリケーション及び仮想化アプリケーションのテーブルマッピング動作を示す簡略図である。図13の上半分に示されるように、制御アプリケーション1305は、いくつかの実施形態の仮想化アプリケーション1310が次にUPCPデータ又はCPCPデータにマッピングするLFPデータにLCPデータをマッピングする。
図13の下半分は、制御アプリケーション及び仮想化アプリケーションのテーブルマッピング動作を示す。下半分に示されるように、入力LCPデータからLFPデータを生成するためにいくつかの実施形態において制御アプリケーションのnLogエンジン1320により定数テーブル及び関数テーブル(不図示)のデータと共にこれらの全てのデータのコレクションが使用されるため、制御アプリケーションの入力テーブル1315は、LCPデータ、LFP(LFP)データ及びUPCPデータを格納する。
図13は、インポータ1350が、ユーザから(例えば、入力変換アプリケーションを通して)LCPデータを受信し、LCPデータで制御アプリケーションの入力テーブル1315を更新することを示す。図13は、インポータ1350が、いくつかの実施形態においてPTD1340の変化(例えば、他のコントローラインスタンスに端を発するLCPデータの変化)を検出又は受信し、そのような変化に応答して入力テーブル1315を更新してもよいことを更に示す。
図13の下半分は、仮想化アプリケーション1310のテーブルマッピング動作を更に示す。示されるように、UPCPデータ及び/又はCPCPデータを生成するためにいくつかの実施形態における仮想化アプリケーションのnLogエンジン1320により定数テーブル及び関数テーブル(不図示)のデータと共にLFPデータが使用されるため、仮想化アプリケーションの入力テーブル1355はLFPデータを格納する。いくつかの実施形態において、エクスポータ1370は、生成されたUPCPデータを1つ以上の他のコントローラインスタンス(例えば、シャーシコントローラ)に送出し、UPCPデータを管理対象スイッチングエレメントに特有のCPCPデータに変換する管理対象スイッチングエレメント又は1つ以上の管理対象スイッチングエレメントにこのデータをプッシュする前にCPCPデータを生成する。他の実施形態において、エクスポータ1370は、生成されたCPCPデータを1つ以上の管理対象スイッチングエレメントに送出し、これらの管理対象スイッチングエレメントのフォワーディング挙動を規定する。
いくつかの実施形態において、UPCPデータを特定の管理対象スイッチングエレメントに特有のCPCPデータに変換するためのシャーシコントローラがある場合、仮想化アプリケーション1310は、入力UPCPデータを特定の管理対象スイッチングエレメント用のCPCPデータに変換しない。これらの実施形態において、仮想化アプリケーション1310を有するコントローラインスタンスは、コントローラインスタンスがマスタである管理対象スイッチングエレメントの集合を識別し、UPCPデータを管理対象スイッチングエレメントの集合に配信する。
図13は、インポータ1375が、制御アプリケーション1305からLFPデータを受信し、LFPデータで仮想化アプリケーションの入力テーブル1355を更新することを示す。図13は、インポータ1375が、いくつかの実施形態においてPTD1340の変化(例えば、他のコントローラインスタンスに端を発するLCPデータの変化)を検出又は受信し、そのような変化に応答して入力テーブル1355を更新してもよいことを更に示す。図13は、インポータ1375が別のコントローラインスタンスからUPCPデータを受信してもよいことを更に示す。
上述したように、インポータが制御アプリケーション又は仮想化アプリケーションの入力テーブルにプッシュする論理データ又は物理データの一部は、他のコントローラインスタンスにより生成され、PTDに渡されるデータに関連する。例えばいくつかの実施形態において、多数のLDPセットに関連する論理構造体(例えば、論理ポート、論理キュー等)に関する論理データは変化する恐れがあり、トランスレータ(例えば、コントローラインスタンスのトランスレータ1380)は、この変化を入力テーブルに書き込んでもよい。マルチコントローラインスタンス環境において別のコントローラインスタンスにより生成されるそのような論理データの別の例は、LDPSに関与しない第1コントローラインスタンス上のLDPS用のLCPデータをユーザが提供する際に生じる。この変化は、第1コントローラインスタンスのトランスレータにより第1コントローラインスタンスのPTDに追加される。次にこの変化は、PTDにより実行される複製処理により他のコントローラインスタンスのPTDにわたり伝搬される。LDPSのマスタ又はLDPSに関与する論理コントローラである第2コントローラインスタンスのインポータは、最終的にこのように変化して、その変化をアプリケーションの入力テーブル(例えば、制御アプリケーションの入力テーブル)に書き込む。従って、場合によってはインポータが入力テーブルに書き込む論理データは、別のコントローラインスタンスのPTDから発生してもよい。
上述したように、制御アプリケーション1305及び仮想化アプリケーション1310は、いくつかの実施形態において同一のマシン又は異なるマシン上で動作する2つの別個のアプリケーションである。しかし、他の実施形態は、これらの2つのアプリケーションを1つの統合アプリケーションの2つのモジュール、すなわちLFPにおいて論理データを生成する制御アプリケーションモジュール1305及びUPCP又はCPCPにおいて物理データを生成する仮想化アプリケーションとしてこれらの2つのアプリケーションを実現する。
更に他の実施形態は、これらの2つのアプリケーションの制御動作及び仮想化動作を2つの別個のモジュールに分離することなく、1つの統合アプリケーション内でこれらの動作を統合する。図14は、そのような統合アプリケーション1400の一例を示す。このアプリケーション1400は、上述の実施形態のように、テーブルの入力集合1415からテーブルの出力集合1420にデータをマッピングするためにnLogテーブルマッピングエンジン1410を使用する図10、図11及び図13は、テーブルの入力集合において1つ以上のテーブルを含んでもよい。この統合アプリケーションにおけるテーブルの入力集合は、LFPデータにマッピングされる必要があるLCPデータ、あるいはCPCPデータ又はUPCPデータにマッピングされる必要があるLFPデータを含んでもよい。テーブルの入力集合は、CPCPデータにマッピングされる必要があるUPCPデータを更に含んでもよい。UPCPデータは、CPCPデータにマッピングされることなく管理対象スイッチングエレメントの集合に対するシャーシコントローラの集合に配信される。マッピングは、統合アプリケーション1400を実行するコントローラインスタンスが論理コントローラ又は物理コントローラであるか、及び物理コントローラの管理対象スイッチングエレメントがUPCPデータを管理対象スイッチングエレメント用のCPCPデータにマッピングするためのシャーシコントローラを有するマスタであるかに依存する。
この統合制御/仮想化アプリケーション1400において、インポータ1430は、ユーザ又は他のコントローラインスタンスから入力データを取得する。インポータ1430は、PTDに対して複製されるPTD1440の変化を更に検出又は受信する。エクスポータ1425は、出力テーブルレコードを他のコントローラインスタンス(例えば、シャーシコントローラ)にエクスポートする。
出力テーブルレコードを別のコントローラインスタンスに送出する時、エクスポータは、レコードに含まれたデータが通信チャネル(例えば、RPCチャネル)を介して他のコントローラインスタンスに送出されるようにコントローラ間通信インタフェース(不図示)を使用する。出力テーブルレコードを管理対象スイッチングエレメントに送出する時、エクスポータは、レコードに含まれたデータが2つのチャネルを介して管理対象スイッチングエレメントに送出されるように管理対象スイッチングエレメント通信インタフェース(不図示)を使用する。一方のチャネルは、管理対象スイッチングエレメントのフォワーディングプレーンを制御するためにスイッチ制御プロトコル(例えば、OpenFlow)を使用して確立され、他方のチャネルは、構成データを送出するために構成プロトコルを使用して確立される。
出力テーブルレコードをシャーシコントローラに送出する時、いくつかの実施形態におけるエクスポータ1425は、レコードに含まれたデータを送出するために通信の単一のチャネルを使用する。これらの実施形態において、シャーシコントローラは、この単一のチャネルを介してデータを受け入れるが、2つのチャネルを介して管理対象スイッチングエレメントと通信する。図18を参照して、シャーシコントローラを以下において更に詳細に説明する。
図15は、そのような統合アプリケーション1500の別の例を示す。統合アプリケーション1500は、nLogテーブルマッピングエンジン1410の入力データ及び出力データの一部を格納するためにネットワーク情報ベース(NIB)(network information base)データ構造1510を使用する。上述したように、NIBデータ構造は、オブジェクト指向データオブジェクトの形式のデータを格納する。統合アプリケーション1500において、出力テーブル1420は1次格納構造である。PTD1440及びNIB1510は2次格納構造である。
統合アプリケーション1500は、テーブルの入力集合1415からテーブルの出力集合1420にデータをマッピングするためにnLogテーブルマッピングエンジン1410を使用する。いくつかの実施形態において、テーブルの出力集合1420におけるデータの一部は、エクスポータ1425により1つ以上の他のコントローラインスタンス、あるいは1つ又は管理対象スイッチングエレメントにエクスポートされる。そのようなエクスポートされたデータは、管理対象スイッチングエレメントのフロー挙動を規定するUPCPデータ又はCPCPデータを含む。これらのデータは、データの回復のためにPTD1440におけるトランスレータ1435によりPTDにおいてバックアップされてもよい。
テーブルの出力集合1420におけるデータの一部は、NIBパブリッシャ(NIB publisher)1505によりNIB1510に発行される。これらのデータは、ユーザが統合アプリケーション1500を使用して管理する論理スイッチングエレメントの構成情報を含む。NIB1510に格納されたデータは、調整マネージャ1520により他のコントローラインスタンスの他のNIBに対して複製される。
NIBモニタ1515は、NIB1510から変化の通知を受信し、いくつかの通知(例えば、統合アプリケーションがマスタであるLDPセットに関連する通知)に対して、インポータ1430を介して変化を入力テーブル1415にプッシュする。
クエリマネージャ1525は、入力変換アプリケーション(不図示)とインタフェース接続して構成データに関するクエリ(例えば、情報の問い合わせ)を受信するためにコントローラ間通信インタフェース(不図示)を使用する。図15に示されるように、いくつかの実施形態のマネージャ1525は、ユーザが管理している論理ネットワークエレメントに関する状態情報(例えば、論理ポートの統計)を提供するようにNIBにクエリするためにNIB1510ともインタフェース接続する。しかし、他の実施形態において、クエリマネージャ1525は、状態情報を取得するように出力テーブル1420にクエリする。
いくつかの実施形態において、アプリケーション1500は、PTD及びNIB以外の2次格納構造(不図示)を使用する。これらの構造は、永続的な非トランザクションデータベース(PNTD)及びハッシュテーブルを含む。いくつかの実施形態において、これらの2種類の2次格納構造は、異なる種類のデータを格納し、データを異なる方法で格納し、及び/又は、異なる種類のクエリを処理する異なるクエリインタフェースを提供する。
PNTDは、ディスク又は他の不揮発性メモリに格納される永続的なデータベースである。いくつかの実施形態は、1つ以上のスイッチングエレメント属性又はスイッチングエレメント動作に関するデータ(例えば、統計、計算等)を格納するためにこのデータベースを使用する。例えばこのデータベースは、特定のスイッチングエレメントの特定のポートを介してルーティングされたパケットの数を格納するためにいくつかの実施形態において使用される。PNTDに格納されたデータの種類の他の例としては、エラーメッセージ、ログファイル、警告メッセージ及び課金データがある。
いくつかの実施形態におけるPNTDは、データベースクエリを処理できるデータベースクエリマネージャ(不図示)を有するが、それがトランザクションデータベースではないため、このクエリマネージャは、複雑な条件付きトランザクションクエリを処理できない。いくつかの実施形態において、PNTDへのアクセスは、PTDへのアクセスよりも高速であるが、ハッシュテーブルへのアクセスよりも低速である。
PNTDとは異なり、ハッシュテーブルは、ディスク又は他の不揮発性メモリに格納されるデータベースではない。代わりに、ハッシュテーブルは、揮発性システムメモリ(例えば、RAM)に格納される格納構造である。ハッシュテーブルは、テーブルに格納されるレコードを迅速に識別するためにハッシュインデックスを使用するハッシュ技法を使用する。システムメモリにおけるハッシュテーブルの配置と組み合わされたこの構造により、このテーブルに非常に迅速にアクセスできる。この迅速なアクセスを容易にするために、いくつかの実施形態において簡略化されたクエリインタフェースが使用される。例えばいくつかの実施形態において、ハッシュテーブルは、2つのクエリ、すなわち値をテーブルに書き込むためのプット(Put)クエリと、テーブルから値を検索するためのゲット(Get)クエリしか有しない。いくつかの実施形態は、迅速に変化するデータを格納するためにハッシュテーブルを使用する。そのような迅速に変化するデータの例としては、ネットワークエンティティの状況、統計、状態、アップタイム、リンク構成及びパケット処理情報がある。また、いくつかの実施形態において、統合アプリケーションは、多数のノードに書き込まれるフローエントリ等の繰り返しクエリされる情報を格納するために、ハッシュテーブルをキャッシュとして使用する。いくつかの実施形態は、NIBにおけるレコードに迅速にアクセスするためにNIBにおいてハッシュ構造を採用する。従って、これらの実施形態のうちのいくつかにおいて、ハッシュテーブルはNIBデータ構造の一部である。
PTD及びPNTDは、ネットワークデータをハードディスクに保存することでコントローラの回復を向上させる。コントローラシステムが障害を起こす場合、ネットワーク構成データはPTDにおけるディスクに保存され、ログファイル情報はPNTDにおけるディスクに保存される。
I.ネットワーク制御システム階層
図16は、ネットワーク制御システム1600のアーキテクチャの一例を概念的に示す。特に図16は、ネットワーク制御システムの異なるエレメントにより入力からCPCPデータを生成することを示す。示されるように、いくつかの実施形態のネットワーク制御システム1600は、入力変換コントローラ1605と、論理コントローラ1610と、物理コントローラ1615及び1620と、3つの管理対象スイッチングエレメント1625〜1635とを含む。図16は、管理対象スイッチングエレメント(図16において「M.S.E.」として書かれた)に接続されてそれらの間でデータをやり取りする5つのマシン1640〜1660を更に示す。図16に示された階層においての各層におけるコントローラの数、管理対象スイッチングエレメント及びマシンの数、並びにコントローラと、管理対象スイッチングエレメントと、マシンとの関係等のアーキテクチャの詳細は、例示のためにすぎない。コントローラと、スイッチングエレメントと、マシンとの多くの他の異なる組合せがネットワーク制御システム1600に対して可能であることは、当業者により理解されるであろう。
いくつかの実施形態において、ネットワーク制御システムにおける各コントローラは、図6を参照して上述した異なるモジュール及びインタフェースのフルスタックを有する。しかし、各コントローラは、コントローラに対して与えられた機能性を実行するために全てのモジュール及びインタフェースを使用する必要はない。あるいは、いくつかの実施形態において、システムにおけるコントローラは、コントローラに対して与えられた機能性を実行するために必要なモジュール及びインタフェースのみを有する。例えば、LDPSのマスタである論理コントローラ1610は、入力LCPデータからUPCPデータを生成するために、入力モジュール(例えば、入力変換アプリケーション)を備えないが、制御モジュール及び仮想化モジュール(例えば、制御アプリケーション又は仮想化アプリケーション、あるいは統合アプリケーション)を有する。
また、異なるコントローラの異なる組合せは、同一のマシンにおいて動作していてもよい。例えば、入力変換コントローラ1605及び論理コントローラ1610は、同一の演算装置において動作してもよい。また、1つのコントローラは、異なるLDPセットに対して異なる方法で機能してもよい。例えば単一のコントローラは、第1LDPSのマスタ及び第2LDPSを実現する管理対象スイッチングエレメントのマスタであってもよい。
入力変換コントローラ1605は、特定のLDPSを指定するユーザから受信した入力からLCPデータを生成する入力変換アプリケーション(不図示)を含む。入力変換コントローラ1605は、システム1605用の構成データからLDPSのマスタを識別する。この例において、LDPSのマスタは論理コントローラ1610である。いくつかの実施形態において、2つ以上のコントローラは同一のLDPSのマスタであってよい。また、1つの論理コントローラは、2つ以上のLDPセットのマスタであってよい。
論理コントローラ1610は、特定のLDPSに関与する。従って、論理コントローラ1610は、入力変換コントローラから受信したLCPデータからUPCPデータを生成する。具体的には、論理コントローラ1610の制御モジュール(不図示)は、受信したLCPデータからLFPデータを生成し、論理コントローラ1610の仮想化モジュール(不図示)は、LFPデータからUPCPデータを生成する。
論理コントローラ1610は、LDPSを実現する管理対象スイッチングエレメントのマスタである物理コントローラを識別する。この例において、管理対象スイッチングエレメント1625〜1635がこの例においてLDPSを実現するように構成されるため、論理コントローラ1610は物理コントローラ1615及び1620を識別する。論理コントローラ1610は、生成されたUPCPデータを物理コントローラ1615及び1620に送出する。
物理コントローラ1615及び1620の各々は、1つ以上の管理対象スイッチングエレメントのマスタであってよい。この例において、物理コントローラ1615は、2つの管理対象スイッチングエレメント1625及び1630のマスタであり、物理コントローラ1620は、管理対象スイッチングエレメント1635のマスタである。管理対象スイッチングエレメントの集合のマスタとして、いくつかの実施形態の物理コントローラは、受信したUPCPデータから管理対象スイッチングエレメントの各々に対して特有のCPCPデータを生成する。従って、この例において、物理コントローラ1615は、管理対象スイッチングエレメント1625及び1630の各々に対してカスタマイズされたPCPデータを生成する。物理コントローラ1320は、管理対象スイッチングエレメント1635に対してカスタマイズされたPCPデータを生成する。物理コントローラは、CPCPデータをコントローラがマスタである管理対象スイッチングエレメントに送出する。いくつかの実施形態において、多数の物理コントローラは、同一の管理対象スイッチングエレメントのマスタであってよい。
CPCPデータを送出することに加え、いくつかの実施形態の物理コントローラは、管理対象スイッチングエレメントからデータを受信する。例えば物理コントローラは、管理対象スイッチングエレメントの構成情報(例えば、管理対象スイッチングエレメントのVIFの識別子)を受信する。物理コントローラは、構成情報を維持し、論理コントローラがマスタであるLDPセットを実現する管理対象スイッチングエレメントの構成情報を論理コントローラが有するように情報を論理コントローラまで更に送出する。
管理対象スイッチングエレメント1625〜1635の各々は、管理対象スイッチングエレメントが受信したCPCPデータから物理フォワーディングプレーンデータを生成する。上述したように、物理フォワーディングプレーンデータは、管理対象スイッチングエレメントのフォワーディング挙動を規定する。換言すると、管理対象スイッチングエレメントは、CPCPデータを使用してフォワーディングテーブルをポピュレートする。管理対象スイッチングエレメント1625〜1635は、フォワーディングテーブルに従ってマシン1640〜1660の間でデータを転送する。
図17は、ネットワーク制御システム1700のアーキテクチャの一例を概念的に示す。図16のように、図17は、ネットワーク制御システムの異なるエレメントにより入力からCPCPデータを生成することを示す。図16のネットワーク制御システム1600とは対照的に、ネットワーク制御システム1700はシャーシコントローラ1725〜1735を有する。示されるように、いくつかの実施形態のネットワーク制御システム1700は、入力変換コントローラ1705と、論理コントローラ1610と、物理コントローラ1715及び1720と、シャーシコントローラ1725〜1735と、3つの管理対象スイッチングエレメント1740〜1750とを含む。図17は、管理対象スイッチングエレメント1740〜1750に接続されてそれらの間でデータをやり取りする5つのマシン1755〜1775を更に示す。図17に示された階層においての各層におけるコントローラの数、管理対象スイッチングエレメント及びマシンの数、並びにコントローラと、管理対象スイッチングエレメントと、マシンとの関係等のアーキテクチャの詳細は、例示のためにすぎない。コントローラと、スイッチングエレメントと、マシンとの多くの他の異なる組合せがネットワーク制御システム1700に対して可能であることは、当業者により理解されるであろう。
入力変換コントローラ1705は、特定のLDPSを指定するユーザから受信した入力からLCPデータを生成する入力変換アプリケーションを含むという点で入力変換コントローラ1605に類似する。入力変換コントローラ1705は、システム1705用の構成データからLDPSのマスタを識別する。この例において、LDPSのマスタは論理コントローラ1710である。
論理コントローラ1710は、入力変換コントローラ1705から受信したLCPデータからUPCPデータを生成するという点で論理コントローラ1610に類似する。論理コントローラ1710は、LDPSを実現する管理対象スイッチングエレメントのマスタである物理コントローラを識別する。この例において、管理対象スイッチングエレメント1740〜1750がこの例においてLDPSを実現するように構成されるため、論理コントローラ1710は物理コントローラ1715及び1720を識別する。論理コントローラ1710は、生成されたUPCPデータを物理コントローラ1715及び1720に送出する。
物理コントローラ1615及び1620のように、物理コントローラ1715及び1720の各々は、1つ以上の管理対象スイッチングエレメントのマスタであってよい。この例において、物理コントローラ1715は、2つの管理対象スイッチングエレメント1740及び1745のマスタであり、物理コントローラ1730は、管理対象スイッチングエレメント1750のマスタである。しかし、物理コントローラ1715及び1720は、管理対象スイッチングエレメント1740〜1750用のCPCPデータを生成しない。管理対象スイッチングエレメントの集合のマスタとして、物理コントローラは、物理コントローラがマスタである管理対象スイッチングエレメントの各々に関与するシャーシコントローラにUPCPデータを送出する。すなわち、いくつかの実施形態の物理コントローラは、物理コントローラがマスタである管理対象スイッチングエレメントにインタフェース接続するシャーシコントローラを識別する。いくつかの実施形態において、物理コントローラは、シャーシコントローラが物理コントローラのチャネルに加入しているかを判定することでこれらのシャーシコントローラを識別する。
いくつかの実施形態のシャーシコントローラは、管理対象スイッチングエレメントと1対1の関係を有する。シャーシコントローラは、管理対象スイッチングエレメントのマスタである物理コントローラからUPCPデータを受信し、管理対象スイッチングエレメントに対して特有のCPCPデータを生成する。図18を参照して、シャーシコントローラのアーキテクチャの一例を以下において更に詳細に説明する。いくつかの実施形態におけるシャーシコントローラが、シャーシコントローラが管理する管理対象スイッチングエレメントが動作する同一のマシンにおいて動作するのに対し、他の実施形態において、シャーシコントローラ及び管理対象スイッチングエレメントは異なるマシンにおいて動作する。この例において、シャーシコントローラ1725及び管理対象スイッチングエレメント1740は、同一の演算装置において動作する。
管理対象スイッチングエレメント1625〜1635のように、管理対象スイッチングエレメント1740〜1750の各々は、管理対象スイッチングエレメントが受信したCPCPデータから物理フォワーディングプレーンデータを生成する。管理対象スイッチングエレメント1740〜1750は、CPCPデータを使用してそれぞれのフォワーディングテーブルをポピュレートする。管理対象スイッチングエレメント1740〜1750は、フローテーブルに従ってマシン1755〜1775の間でデータを転送する。
上述したように、管理対象スイッチングエレメントは、場合によっては2つ以上のLDPSを実現してもよい。そのような場合、そのような管理対象スイッチングエレメントのマスタである物理コントローラは、各LDPセット用のUPCPデータを受信する。従って、ネットワーク制御システム1700における物理コントローラは、LDPセットを実現する特定の管理対象スイッチングエレメントに対する異なるLDPセット用のUPCPデータをシャーシコントローラに中継するための集約点として機能していてもよい。
図17に示されたシャーシコントローラは管理対象スイッチングエレメントより上のレベルであるが、いくつかの実施形態のシャーシコントローラが管理対象スイッチングエレメント内にあるか、あるいはそれに隣接するため、一般にシャーシコントローラは、管理対象スイッチングエレメントが動作するのと同一のレベルで動作する。
いくつかの実施形態において、ネットワーク制御システムは、ネットワーク制御システム1600及び1700のハイブリッドを有してよい。すなわち、このハイブリッドネットワーク制御システムにおいて、物理コントローラの一部は、管理対象スイッチングエレメントのいくつか用のCPCPデータを生成し、物理コントローラの一部は、管理対象スイッチングエレメントのいくつか用のCPCPデータを生成しない。後者の管理対象スイッチングエレメントの場合、ハイブリッドシステムは、CPCPデータを生成するシャーシコントローラを有する。
上述したように、いくつかの実施形態のシャーシコントローラは、単一の管理対象スイッチングエレメントを管理するためのコントローラである。いくつかの実施形態のシャーシコントローラは、図6を参照して上述した異なるモジュール及びインタフェースのフルスタックを有しない。シャーシコントローラが有するモジュールの1つは、それが1つ以上の物理コントローラから受信するUPCPデータからCPCPデータを生成するシャーシ制御アプリケーションである。図18は、シャーシ制御アプリケーション1800に対するアーキテクチャの一例を示す。このアプリケーション1800は、UPCPデータを表す入力データタプルを含む入力テーブルをLFPデータを表すデータタプルにマッピングするためにnLogテーブルマッピングエンジンを使用する。このアプリケーション1800は、管理対象スイッチングエレメント1885とデータをやり取りすることにより、この例において管理対象スイッチングエレメント1885を管理する。いくつかの実施形態において、アプリケーション1800(すなわち、シャーシコントローラ)は、管理対象スイッチングエレメント1885が動作している同一のマシンにおいて動作する。
図18に示されるように、シャーシ制御アプリケーション1800は、規則エンジン入力テーブル1810の集合と、関数テーブル及び定数テーブル1815の集合と、インポータ1820と、規則エンジン1825と、規則エンジン出力テーブル1845の集合と、エクスポータ1855と、管理対象スイッチングエレメント通信インタフェース1865と、コンパイラ1835とを含む。図18は、物理コントローラ1805及び管理対象スイッチングエレメント1885を更に示す。
コンパイラ1835は、図10のコンパイラ1035に類似する。いくつかの実施形態において、規則エンジン(RE)入力テーブル1810は、管理対象スイッチングエレメント1885のマスタである物理コントローラ1805がシャーシ制御アプリケーション1800に送出したUPCPデータ及び/又はスイッチング構成(例えば、アクセス制御リスト構成、専用仮想ネットワーク構成、ポートセキュリティ構成等)を有するテーブルを含む。入力テーブル1810は、管理対象スイッチングエレメント1885からの物理データを含むテーブルを更に含む。いくつかの実施形態において、そのような物理データは、管理対象スイッチングエレメント1885に関するデータ(例えば、CPCPデータ、物理フォワーディングデータ)と、管理対象スイッチングエレメント1885の構成に関する他のデータとを含む。
RE入力テーブル1810は、RE入力テーブル1010に類似する。入力テーブル1810は、物理コントローラ1805により提供されたUPCPデータにより部分的にポピュレートされる。いくつかの実施形態の物理コントローラ1805は、1つ以上の論理コントローラ(不図示)からUPCPデータを受信する。
入力テーブル1810に加え、シャーシ制御アプリケーション1800は、テーブルマッピング動作のための入力を収集するために規則エンジン1825が使用する他の種々雑多なテーブル1815を含む。これらのテーブル1815はテーブル1015に類似する。図18に示されるように、規則エンジン1825は、イベント処理プログラム1822と、いくつかのクエリプラン1827と、イベント処理プログラム1022、クエリプラン1027及びテーブル処理1030が実行する時と同様に機能するテーブルプロセッサ1830とを含む。
いくつかの実施形態において、RE出力テーブル1845は、論理ネットワークエレメントデータ属性及び物理ネットワークエレメントデータ属性の双方を格納する。テーブル1845は、規則エンジン1825のテーブルマッピング動作の出力を格納するためにRE出力テーブルと呼ばれる。いくつかの実施形態において、RE出力テーブルは、いくつかの異なるカテゴリにグループ化されうる。例えばいくつかの実施形態において、これらのテーブルは、RE入力テーブル及び/又はシャーシ制御アプリケーション(CCA)出力テーブルであってよい。テーブルの変更により、規則エンジンがクエリプランの実行を必要とする入力イベントを検出する場合、テーブルはRE入力テーブルである。RE出力テーブル1845は、それが規則エンジンにより変更された後に規則エンジンに別のクエリプランを実行させるイベントを生成するRE入力テーブル1810であってもよい。そのようなイベントは、内部入力イベントと呼ばれ、インポータ1820を介した制御アプリケーション1805によるRE入力テーブルの変更により発生するイベントである外部入力イベントと対比される。テーブルの変更により、エクスポータ1855が変更を管理対象スイッチングエレメント又は他のコントローラインスタンスにエクスポートする場合、テーブルはCA出力テーブルである。
エクスポータ1855は、RE出力テーブル1845のCCA出力テーブルに対する変更を検出する。異なる実施形態のエクスポータは、異なる方法でCCA出力テーブルイベントの発生を検出する。いくつかの実施形態において、エクスポータは、CCA出力テーブルのレコードに対する変更を通知するために、コールバックをCCA出力テーブルに登録する。そのような実施形態において、エクスポータ1855は、レコードの1つが変更したCCA出力テーブルからの通知を受信する時に出力テーブルイベントを検出する。
検出された出力テーブルイベントに応答して、エクスポータ1855は、変更された出力テーブルにおける変更されたデータタプルの各々を取得し、この変更されたデータタプルを他のコントローラインスタンス(例えば、物理コントローラ)の1つ以上又は管理対象スイッチングエレメント1885に伝搬する。エクスポータ1855は、変更されたデータタプルを他のコントローラインスタンスに送出するためにコントローラ間通信インタフェース(不図示)を使用する。コントローラ間通信インタフェースは、他のコントローラインスタンスとの通信チャネル(例えば、RPCチャネル)を確立する。
いくつかの実施形態のエクスポータ1855は、変更されたデータタプルを管理対象スイッチングエレメント1885に送出するために管理対象スイッチングエレメント通信インタフェース1865を使用する。いくつかの実施形態の管理対象スイッチングエレメント通信インタフェースは、通信の2つのチャネルを確立する。管理対象スイッチングエレメント通信インタフェースは、スイッチング制御プロトコルを使用して2つのチャネルの第1チャネルを確立する。スイッチング制御プロトコルの一例は、OpenFlowプロトコルである。OpenFlowプロトコルは、いくつかの実施形態において、スイッチングエレメントのフォワーディングプレーン(例えば、フォワーディングテーブル)を制御するための通信プロトコルである。例えばOpenFlowプロトコルは、フローエントリを管理対象スイッチングエレメント1885に追加するためのコマンドと、フローエントリを管理対象スイッチングエレメント1885から除去するためのコマンドと、フローエントリを管理対象スイッチングエレメントにおいて変更するためのコマンドとを提供する。
管理対象スイッチングエレメント通信インタフェースは、構成情報を送出するために構成プロトコルを使用して2つのチャネルの第2チャネルを確立する。いくつかの実施形態において、構成情報は、管理対象スイッチングエレメント1885を構成するための情報、例えば入力ポート、出力ポート、ポートに対するQoS構成等に対する情報を含む。
管理対象スイッチングエレメント通信インタフェース1865は、2つのチャネルを介して管理対象スイッチングエレメント1885から管理対象スイッチングエレメント1885における更新を受信する。シャーシ制御アプリケーション1800により開始されない管理対象スイッチングエレメント1885のフローエントリ又は構成による変更がある場合、いくつかの実施形態の管理対象スイッチングエレメント1885は、更新をシャーシ制御アプリケーションに送出する。そのような変更の例としては、管理対象スイッチングエレメント1885のポートに接続されたマシンの障害、管理対象スイッチングエレメント1885へのVM移行等がある。管理対象スイッチングエレメント通信インタフェース1865は、1つ以上の入力テーブル1810を変更するインポータ1820に更新を送出する。これらの更新から規則エンジン1825により生成された出力がある場合、エクスポータ1855は、この出力を物理コントローラ1805に送出する。
J.フローエントリの生成
図19A−Bは、UPCPデータに基づく2つの管理対象スイッチングエレメント間のトンネルの作成の一例を示す。具体的には、図19A−Bは、2つの管理対象スイッチングエレメント1925と1930との間にトンネルを確立するためにネットワーク管理システム1900の異なる構成要素により実行される一連の動作を4つの異なる段階1901〜1904において示す。図19A−Bは、論理スイッチングエレメント1905と、VM1及びVM2とを更に示す。4つの段階1901〜1904の各々は、ネットワーク制御システム1900、並びに管理対象スイッチングエレメント1925及び1930を下部に示し、論理スイッチングエレメント1905及び論理スイッチングエレメント1905に接続されたVMを上部に示す。VMは、各段階の上部及び下部の双方に示される。
第1段階1901に示されるように、論理スイッチングエレメント1905は、VM1とVM2との間でデータを転送する。具体的には、データは、論理スイッチングエレメント1905の論理ポート1を介してVM1に達するかあるいはVM1から生じ、論理スイッチングエレメント1905の論理ポート2を介してVM2に達するかあるいはVM2から生じる。論理スイッチングエレメント1905は、この例において管理対象スイッチングエレメント1925により実現される。すなわち、論理ポート1は、管理対象スイッチングエレメント1925のポート3にマッピングされ、論理ポート2は、管理対象スイッチングエレメント1925のポート4にマッピングされる。
この例におけるネットワーク制御システム1900は、コントローラクラスタ1910と、2つのシャーシコントローラ1915及び1920とを有する。コントローラクラスタ1910は、コントローラクラスタ1910が受信する入力に基づいてUPCPデータを集合的に生成する入力変換コントローラ(不図示)と、論理コントローラ(不図示)と、物理コントローラ(不図示)とを有する。シャーシコントローラは、UPCPデータを受信し、ユニバーサルデータを各シャーシコントローラが管理している管理対象スイッチングエレメントに特有のPCPデータにカスタマイズする。管理対象スイッチングエレメント1925及び1930が管理対象スイッチングエレメント1925と1930との間でデータを転送するために管理対象スイッチングエレメントが使用する物理フォワーディングプレーンデータを生成できるように、シャーシコントローラ1915及び1920は、CPCPデータをそれぞれ管理対象スイッチングエレメント1925及び1930に渡す。
第2段階1902において、管理対象スイッチングエレメント1930を含むネットワークの管理者は、管理対象スイッチングエレメント1930が動作するホスト(不図示)においてVM3を作成する。管理者は、管理対象スイッチングエレメント1930のポート5を作成し、VM3をポートに接続する。ポート3を作成すると、いくつかの実施形態の管理対象スイッチングエレメント1930は、新たに作成されたポートに関する情報をコントローラクラスタ1910に送出する。いくつかの実施形態において、情報は、ポート番号、ネットワークアドレス(例えば、IPアドレス及びMACアドレス)、管理対象スイッチングエレメントが属する伝送ゾーン、ポートに接続されたマシン等を含んでもよい。上述したように、この構成情報は、管理対象スイッチングエレメントを管理するシャーシコントローラを通過し、次に論理スイッチングエレメント1905を管理するユーザまで物理コントローラ及び論理コントローラを通過する。このユーザに対して、新しいVMは、ユーザが管理している論理スイッチングエレメント1905に追加されるために使用可能になっている。
段階1903において、この例におけるユーザは、VM3を使用し、VM3を論理スイッチングエレメント1905に接続することを決定する。その結果、論理スイッチングエレメント1905の論理ポート6が作成される。従って、VM3に達するかあるいはVM3から生じるデータは、論理ポート6を通過する。いくつかの実施形態において、コントローラクラスタ1910は、論理スイッチングエレメントの一対の論理ポートがマッピングされる一対のポートを有する管理対象スイッチングエレメントの各対の間にトンネルを作成するように論理スイッチングエレメントを実現する全ての管理対象スイッチングエレメントに指示する。この例において、トンネルは、論理ポート1と論理ポート6との間(すなわち、VM1とVM3との間)及び論理ポート2と論理ポート6との間(すなわち、VM2とVM3との間)のデータのやり取りを容易にするために、管理対象スイッチングエレメント1925と1930との間に確立されうる。すなわち、管理対象スイッチングエレメント1925のポート3と管理対象スイッチングエレメント1930のポート5との間でやり取りされるデータ及び管理対象スイッチングエレメント1925のポート4と管理対象スイッチングエレメント1930のポート5との間でやり取りされるデータは、管理対象スイッチングエレメント1925と1930との間に確立されたトンネルを通過しうる。
論理ポート1及び論理ポート2が同一の管理対象スイッチングエレメント1925上の2つのポートにマッピングされるため、2つの管理対象スイッチングエレメント間のトンネルは、論理ポート1と論理ポート2との間(すなわち、VM1とVM2との間)のデータのやり取りを容易にするために必要とされない。
第3段階1903は、コントローラクラスタ1910が、トンネルを作成する命令を指定するUPCPデータを管理対象スイッチングエレメント1925から管理対象スイッチングエレメント1930に送出することを更に示す。この例において、UPCPデータは、UPCPデータを管理対象スイッチングエレメント1925に特有のPCPデータにカスタマイズするシャーシコントローラ1915に送出される。
第4段階1904は、シャーシコントローラ1915がトンネルを作成する命令及びパケットをトンネルに転送する命令を指定するPCPデータをトンネルに送出することを示す。管理対象スイッチングエレメント1925は、CPCPデータに基づいて管理対象スイッチングエレメント1930へのトンネルを作成する。より具体的には、管理対象スイッチングエレメント1925は、ポート7を作成し、管理対象スイッチングエレメント1930のポート8へのトンネル(例えば、GREトンネル)を確立する。2つの管理対象スイッチングエレメントの間にトンネルを作成するより詳細な動作を以下において説明する。
図20は、いくつかの実施形態が2つの管理対象スイッチングエレメントの間でのトンネルの作成及び使用を指定するCPCPデータをUPCPデータから生成するために実行する処理2000を概念的に示す。いくつかの実施形態において、処理2000は管理対象スイッチングエレメントとインタフェース接続するシャーシコントローラ又は管理対象スイッチングエレメントと直接インタフェース接続する物理コントローラにより実行される。
処理2000は、論理コントローラ又は物理コントローラからUPCPデータを受信することで開始する。いくつかの実施形態において、UPCPデータは異なる種類を有する。UPCPデータの種類の1つは、管理対象スイッチングエレメントにおけるトンネルの作成及びトンネルの使用を指定するユニバーサルトンネルフロー命令である。いくつかの実施形態において、ユニバーサルトンネルフロー命令は、ネットワークで管理対象スイッチングエレメントにおいて作成されたポートに関する命令を含む。このポートは、ユーザが論理スイッチングエレメントの論理ポートをマッピングした管理対象スイッチングエレメントのポートである。このポートは、トンネル化データが到達する必要がある宛先ポートでもある。ポートに関する情報は、(1)ポートを有する管理対象スイッチングエレメントが属する伝送ゾーンと、(2)いくつかの実施形態において宛先ポートを有する管理対象スイッチングエレメントへのトンネルを構築するために使用されたトンネルプロトコル(例えば、GRE、CAPWAP等)に基づくトンネルの種類と、(3)宛先ポートを有する管理対象スイッチングエレメントのネットワークアドレス(例えば、IPアドレス)(例えば、確立するためのトンネルの一方の端として機能するVIFのIPアドレス)を含む。
次に処理2000は、受信したUPCPデータがユニバーサルトンネルフロー命令であるかを判定する(2010において)。いくつかの実施形態において、UPCPデータは、処理2000が受信したユニバーサルプレーンデータの種類を判定できるように種類を指定する。処理2000が受信したユニバーサルデータがユニバーサルトンネルフロー命令ではないと判定する(2010において)場合、2015に進み、CPCPデータを生成して、生成されたデータを処理2000が管理している管理対象スイッチングエレメントに送出するようにUPCPデータを処理する。その後、処理2000は終了する。
処理2000は、受信したUPCPデータがユニバーサルトンネルフロー命令であると判定する(2010において)場合、2020に進み、宛先ポートに関する情報を取得するためにデータを構文解析する。次に処理2000は、宛先ポートを有する管理対象スイッチングエレメントがソースポートを有する管理対象スイッチングエレメントと同一の伝送ゾーンにあるかを判定する(2025において)。ソースポートを有する管理対象スイッチングエレメントは、処理2000を実行するシャーシコントローラ又は物理コントローラが管理する管理対象スイッチングエレメントである。いくつかの実施形態において、伝送ゾーンは、プールノード等の第2レベルの管理対象スイッチングエレメントを使用せずに互いに通信できるマシンのグループを含む。
いくつかの実施形態において、論理コントローラは、宛先ポートを有する管理対象スイッチングエレメントがソースポートを有する管理対象スイッチングエレメントと同一の伝送ゾーンにあるかを判定する。論理コントローラは、処理2000を実行するシャーシコントローラに送出する(物理コントローラを介して)ためのユニバーサルトンネルフロー命令を準備する際にこの判定を考慮する。具体的には、ユニバーサルトンネルフロー命令は、異なるトンネルを作成するために異なる情報を含む。図21の説明の後、これらの異なるトンネルの例を以下において説明する。これらの実施形態において、処理2000は、2025をスキップし、2015に進む。
処理2000は、ソースポートを含む管理対象スイッチングエレメント及び宛先ポートを含む管理対象スイッチングエレメントが同一の伝送ゾーンにないと判定する(2025において)場合、上述した2015に進む。処理2000は、ソースポートを含む管理対象スイッチングエレメント及び宛先ポートを含む管理対象スイッチングエレメントが同一の伝送ゾーンにあると判定する(2025において)場合、2030に進み、ユニバーサルトンネルフロー命令をカスタマイズし、カスタマイズされた情報をソースポートを有する管理対象スイッチングエレメントに送出する。ユニバーサルトンネルフロー命令のカスタマイズを以下において詳細に説明する。その後、処理2000は終了する。
図21は、管理対象スイッチングエレメントがトンネルを作成し、そのトンネルを介してデータを宛先に送出できるように、いくつかの実施形態がカスタマイズドトンネルフロー命令を生成し、カスタマイズド命令を管理対象スイッチングエレメントに送出するために実行する処理を概念的に示す。いくつかの実施形態において、処理2100は、管理対象スイッチングエレメントとインタフェース接続するコントローラインスタンス又は管理対象スイッチングエレメントと直接インタフェース接続する物理コントローラにより実行される。処理2100は、いくつかの実施形態において、処理2100を実行するコントローラがユニバーサルトンネルフロー命令を受信し、宛先ポートに関するポート情報を構文解析し、宛先ポートを有する管理対象スイッチングエレメントがコントローラが管理する管理対象スイッチングエレメントと同一の伝送ゾーンにあると判定した時に開始する。
処理2100は、トンネルポートを作成する命令を生成する(2105において)ことで開始する。いくつかの実施形態において、処理2100は、ポート情報に基づいてコントローラが管理する管理対象スイッチングエレメントにおいてトンネルポートを作成する命令を生成する。命令は、確立すべきトンネルの種類及びトンネルの宛先端となるNICのIPアドレス等を含む。コントローラにより管理管理対象スイッチングエレメントのトンネルポートは、トンネルの他方の端となる。
次に処理2100は、トンネルポートを作成する生成された命令をコントローラが管理する管理対象スイッチングエレメントに送出する(2110において)。上述したように、いくつかの実施形態のシャーシコントローラ又は管理対象スイッチングエレメントと直接インタフェース接続する物理コントローラは、管理対象スイッチングエレメントと通信するために2つのチャネルを使用する。一方のチャネルは、管理対象スイッチングエレメントと構成情報をやり取りする構成チャネルであり、他方のチャネルは、管理対象スイッチングエレメントとフローエントリ及びイベントデータをやり取りするためのスイッチングエレメント制御チャネル(例えば、OpenFlowプロトコルを使用して確立されたチャネル)である。いくつかの実施形態において、処理は、トンネルポートを作成する生成された命令をコントローラが管理する管理対象スイッチングエレメントに送出するために構成チャネルを使用する。生成された命令を受信すると、いくつかの実施形態の管理対象スイッチングエレメントは、トンネルの種類により指定されたトンネルプロトコルを使用して、管理対象スイッチングエレメントにおいてトンネルポートを作成し、トンネルポートと宛先ポートを有する管理対象スイッチングエレメントのポートとの間にトンネルを確立する。トンネルポート及びトンネルが作成及び確立されると、いくつかの実施形態の管理対象スイッチングエレメントは、トンネルの識別子の値(例えば、4)をコントローラインスタンスに返送する。
次に、いくつかの実施形態の処理2100は、構成チャネルを介してトンネルポートの識別子の値(例えば、「tunnel_port=4」)を受信する(2115において)。次に処理2100は、この受信した値を使用してユニバーサルトンネルフロー命令に含まれるフローエントリを変更する。このフローエントリは、管理対象スイッチングエレメントに送出されると、管理対象スイッチングエレメントに動作を実行させる。しかし、ユニバーサルデータであるため、このフローエントリは、実際のポート番号ではなくユニバーサル識別子(例えば、tunnel_port)によりトンネルポートを識別する。例えば、受信したユニバーサルトンネルフロー命令におけるこのフローエントリは、「宛先=宛先マシンのUUIDの場合、tunnel_portに送出する(If destination=destination machine's UUID, send to tunnel_port)」であってもよい。処理2100は、トンネルポートの識別子の値を含むフローエントリを作成する(2120において)。具体的には、処理2100は、作成されたポートを識別する識別子の実際値によりトンネルポートに対する識別子を置換する。例えば、変更されたフローエントリは、「宛先=宛先マシンのUUIDの場合、4に送出する(If destination=destination machine's UUID, send to 4)」のように見えるであろう。
次に処理2100は、このフローエントリを管理対象スイッチングエレメントに送出する(2125において)。いくつかの実施形態において、処理は、スイッチングエレメント制御チャネル(例えば、OpenFlowチャネル)を介してこのフローエントリを管理対象スイッチングエレメントに送出する。管理対象スイッチングエレメントは、このフローエントリを使用してフローエントリのテーブルを更新する。管理対象スイッチングエレメントは、それ以降は、宛先マシンに向けられたデータをトンネルポートに送出することでトンネルを介してそのデータを転送する。その後、処理は終了する。
図22A−Bは、ユニバーサルトンネルフロー命令を管理対象スイッチングエレメント2215が受信及び使用するカスタマイズド命令に変換するシャーシコントローラ2210の動作の一例を7つの異なる段階2201〜2207において概念的に示す。シャーシコントローラ2210は、図18を参照して上述したシャーシコントローラ1800に類似する。しかし、説明を容易にするために、図22A−Bではシャーシコントローラ2210の全ての構成要素は示されない。
図示のように、シャーシコントローラ2210は、入力テーブル2220と、規則エンジン2225と、出力テーブル2230とを含み、それらは入力テーブル1820、規則エンジン1825及び出力テーブル1845に類似する。シャーシコントローラ2210は、管理対象スイッチングエレメント2215を管理する。2つのチャネル2235及び2240は、いくつかの実施形態においてシャーシコントローラと管理対象スイッチングエレメント2215との間に確立される。チャネル2235は、構成データ(例えば、ポート、ポートの現在の状況、管理対象スイッチングエレメントと関連付けられたキュー等の作成に関するデータ)をやり取りするためのものである。チャネル2240はOpenFlowチャネル(OpenFlow制御チャネル)であり、それを介していくつかの実施形態においてフローエントリをやり取りする。
第1段階2201は、シャーシコントローラ2210が物理コントローラ(不図示)から受信したユニバーサルトンネルフロー命令を使用して入力テーブル2220を更新したことを示す。示されるように、ユニバーサルトンネルフロー命令は、トンネル及びフローエントリ2250を作成する命令2245を含む。示されるように、命令2245は、作成されるトンネルの種類及び宛先ポートを有する管理対象スイッチングエレメントのIPアドレスを含む。フローエントリ2250は、管理対象スイッチングエレメント2215に特有でないユニバーサルデータに関して行うべき動作を指定する。規則エンジンは、命令2245及びフローエントリ2250に対してテーブルマッピング動作を実行する。
第2段階2202は、規則エンジン2225により実行されたテーブルマッピング動作の結果を示す。命令2260は命令2245に起因する。命令2245及び2260は、いくつかの実施形態において同一であってもよいが、他の実施形態においては同一でなくてもよい。例えば、トンネルの種類の表す命令2245及び2260における値は異なってもよい。命令2260は、命令2260に含まれてもよい情報の中でも特に、IPアドレス及び作成されるトンネルの種類を含む。フローエントリ2250は、テーブルマッピング動作を全くトリガしなかったため、入力テーブル2220に留まる。
第3段階2203は、命令2260が構成チャネル2235を介して管理対象スイッチングエレメント2215にプッシュされていることを示す。管理対象スイッチングエレメント2215は、トンネルポートを作成し、管理対象スイッチングエレメント2215と宛先ポートを有する別の管理対象スイッチングエレメントとの間にトンネルを確立する。いくつかの実施形態において、トンネルの一方の端は作成されたトンネルポートであり、トンネルの他方の端は宛先IPアドレスと関連付けられるポートである。いくつかの実施形態の管理対象スイッチングエレメント2215は、トンネルを確立するためにトンネルの種類により指定されたプロトコルを使用する。
第4段階2204は、管理対象スイッチングエレメント2215がトンネルポート(この例において「ポート1」)及びトンネル2270を作成したことを示す。この段階は、管理対象スイッチングエレメントがトンネルポート識別子の実際値を返送することを更に示す。管理対象スイッチングエレメント2215は、この例においてOpenFlowチャネル2240を介してこの情報を送出する。情報は、入力イベントデータとして入力テーブル2220に入る。第5の段階2205は、入力テーブル2220が管理対象スイッチングエレメント2215からの情報で更新されることを示す。この更新は、規則エンジン2225をトリガしてテーブルマッピング動作を実行させる。
第6の段階2206は、前の段階2204において実行されたテーブルマッピング動作の結果を示す。出力テーブル2230は、ここでは管理対象スイッチングエレメント2215に特有の情報に関して行われる動作を指定するフローエントリ2275を有する。具体的には、フローエントリ2275は、パケットの宛先が宛先ポートである場合に管理対象スイッチングエレメント2215がポート1を介してパケットに送出されるべきであることを指定する。第7の段階2207は、フローエントリ2275を使用してパケットを転送する管理対象スイッチングエレメント2215にフローエントリ2275がプッシュされていることを示す。
なお、図22に示されるような命令2245及びシャーシコントローラ2210と管理対象スイッチングエレメント2215との間でやり取りされたデータは、ユニバーサルトンネルフロー命令及びカスタマイズド命令の概念的表示であり、実際の表現及び形式でなくてもよい。
また、図22の例はシャーシコントローラ2210の動作に関して説明される。この例は、UPCPデータを物理コントローラがマスタである管理対象スイッチングエレメント用のCPCPデータに変換するいくつかの実施形態の物理コントローラにも適用可能である。
図19〜図22は、論理スイッチングエレメントの2つの論理ポートを使用している一対のマシン(例えば、VM)間でのデータのやり取りを容易にするための2つの管理エッジスイッチングエレメント間でのトンネルの作成を示す。このトンネルは、トンネルのとりうる用途の1つを範囲に含む。本発明のいくつかの実施形態において、トンネルの他の多くの用途はネットワーク制御システムにおいて可能である。トンネルの用途の例としては、(1)管理対象スイッチングエレメントとプールノードとの間のトンネルと、(2)一方がエッジスイッチングエレメントであり、他方がL3ゲートウェイサービスを提供する(すなわち、ネットワーク層(L3)においてルーティングサービスを受けるためにルータに接続される管理対象スイッチングエレメント)である2つの管理対象スイッチングエレメント間のトンネルと、(3)論理ポート及びL2ゲートウェイサービスに接続される別の論理ポートの2つの管理対象スイッチングエレメント間のトンネルとがある。
次に、3つの例の各々においてトンネルを作成する一連のイベントを説明する。管理対象スイッチングエレメントとプールノードとの間のトンネルの場合、最初にプールノードが提供され、次に管理対象スイッチングエレメントが提供される。VMは、管理対象スイッチングエレメントのポートに接続される。このVMは、管理対象スイッチングエレメントに接続される最初のVMである。次にこのVNは、論理ポートを管理対象スイッチングエレメントのポートにマッピングすることにより、論理スイッチングエレメントの論理ポートに結合される。論理ポートが管理対象スイッチングエレメントのポートにマッピングされると、論理コントローラは、ユニバーサルトンネルフロー命令を管理対象スイッチングエレメントとインタフェース接続するシャーシコントローラに(又は物理コントローラに)送出する(例えば、物理コントローラを介して)。
次にシャーシコントローラは、プールノードへのトンネルを作成するように管理対象スイッチングエレメントに命令する。トンネルが作成されると、その後提供されて管理対象スイッチングエレメントに接続される別のVMは、この新しいVMが同一の論理スイッチングエレメントの論理ポートに結合される場合にプールノードとデータをやり取りするための同一のトンネルを共有する。新しいノードが異なる論理スイッチの論理ポートに結合される場合、論理コントローラは、最初のVMが管理対象スイッチングエレメントに接続された場合に伝えられた同一のユニバーサルトンネルフロー命令を送出する。しかし、例えばトンネルが既に作成されていて動作可能であるため、ユニバーサルトンネルフロー命令は、プールノードへの新しいトンネルを作成させない。
確立されたトンネルが一方向トンネルである場合、別の一方向トンネルはプールノード側から確立される。最初のVMが結合される論理ポートが管理対象スイッチングエレメントのポートにマッピングされる場合、論理コントローラは、ユニバーサルトンネルフロー命令をプールノードに更に送出する。ユニバーサルトンネルフロー命令に基づいて、プールノードにインタフェース接続するシャーシコントローラは、管理対象スイッチングエレメントへのトンネルを作成するようにプールノードに命令する。
管理エッジスイッチングエレメントとL3ゲートウェイサービスを提供する管理対象スイッチングエレメントとの間のトンネルの場合、ユーザのいくつかのVMを含む論理スイッチングエレメントが提供されており、かつ、論理ルータがL3ゲートウェイサービスを提供する伝送ノードにおいて実現されると仮定する。論理パッチポートは、論理ルータを論理スイッチングエレメントにリンクするために論理スイッチングエレメントにおいて作成される。いくつかの実施形態において、論理パッチの作成及びVMの提供の順序は、トンネル作成に対して差異を生じさせない。論理パッチポートの作成により、論理コントローラは、論理スイッチングエレメントを実現する全ての管理対象スイッチングエレメント(すなわち、各々が論理スイッチングエレメントの論理ポートがマッピングされる少なくとも1つのポートを有する全ての管理対象スイッチングエレメント)にインタフェース接続するシャーシコントローラ(又は物理コントローラ)にユニバーサルトンネルフロー命令を送出する。これらの管理対象スイッチングエレメントの各々に対する各シャーシコントローラは、伝送ノードへのトンネルを作成するように管理対象スイッチングエレメントに命令する。管理対象スイッチングエレメントの各々が伝送ノードへのトンネルを作成する結果、論理スイッチングエレメントを実現する管理対象スイッチングエレメントの数と同数のトンネルが得られる。
これらのトンネルが一方向である場合、伝送ノードは、論理スイッチングエレメントを実現する管理対象スイッチングエレメントの各々へのトンネルを作成するためのものである。論理パッチポートが作成されて論理ルータに接続される場合、論理スイッチングエレメントは、ユニバーサルトンネルフロー命令を伝送ノードにプッシュする。伝送ノードにインタフェース接続するシャーシコントローラは、トンネルを作成するように伝送ノードに命令し、伝送ノードは、管理対象スイッチングエレメントへのトンネルを作成する。
いくつかの実施形態において、管理対象スイッチングエレメントの1つに接続されたあらゆるマシン及び他の管理対象スイッチングエレメントに接続されたあらゆるマシンが同一の論理スイッチングエレメント又は2つの異なるスイッチングエレメントの論理ポートを使用しているかに関係なく、2つの管理対象スイッチングエレメント間に確立されたトンネルは、これらの2つのマシンの間でデータをやり取りするために使用されうる。それは、トンネル化により、異なるLDPセットを管理している異なるユーザが隔離されている間に管理対象スイッチングエレメントを共有できるようにする一例である。
論理ポート及びL2ゲートウェイサービスに接続される別の論理ポートがある2つの管理対象スイッチングエレメント間のトンネルの作成は、論理ポートがL2ゲートウェイサービスに接続される時に開始する。接続により、論理コントローラは、ユニバーサルトンネルフロー命令を論理スイッチングエレメントの他の論理ポートを実現する全ての管理対象スイッチングエレメントに送出する。命令に基づいて、これらの管理対象スイッチングエレメントからL2ゲートウェイサービスに接続された論理ポートを実現する管理対象スイッチングエレメントへのトンネルが確立される。
III.電子システム
上述の特徴及びアプリケーションの多くは、コンピュータ読み取り可能な記憶媒体(コンピュータ可読媒体とも呼ばれる)に記録された命令セットとして指定されるソフトウェア処理として実現される。これらの命令は、1つ以上の処理ユニット(例えば、1つ以上のプロセッサ、プロセッサのコア又は他の処理ユニット)により実行される場合、命令に示された動作を処理ユニットに実行させる。コンピュータ可読媒体の例としては、CD−ROM、フラッシュドライブ、RAMチップ、ハードドライブ、EPROM等があるが、それらに限定されない。コンピュータ可読媒体には、無線で又は有線接続を介して進む搬送波及び電子信号は含まれない。
本明細書において、「ソフトウェア」という用語は、プロセッサにより処理されるためにメモリに読み込まれうる読み出し専用メモリにあるファームウェア又は磁気記憶装置に格納されたアプリケーションを含むことを意図している。また、いくつ化の実施形態において、多くのソフトウェアの発明は、別個のソフトウェアの発明を残しつつ、より大きなプログラムのサブパーツとして実現されうる。いくつかの実施形態において、多数のソフトウェアの発明は、独立したプログラムとしても実現されうる。最後に、本明細書において説明されるソフトウェアの発明を共に実現する独立したプログラムのあらゆる組合せは、本発明の範囲内である。いくつかの実施形態において、ソフトウェアプログラムは、1つ以上の電子システムで動作するようにインストールされる場合、ソフトウェアプログラムの動作を実行及び実施する1つ以上の特定のマシンの実現例を規定する。
図23は、本発明のいくつかの実施形態を実現するのに用いられる電子システム2300を概念的に示す。上述の制御アプリケーション、仮想化アプリケーション又はオペレーティングシステムアプリケーションのいずれかを実行するために、電子システム2300が使用されうる。電子システム2300は、コンピュータ(例えば、デスクトップコンピュータ、パーソナルコンピュータ、タブレットコンピュータ、サーバコンピュータ、メインフレーム、ブレードコンピュータ等)、電話機、PDA又は他の何らかの種類の電子装置であってもよい。そのような電子システムは、種々のコンピュータ可読媒体及び他の種々のコンピュータ可読媒体用のインタフェースを含む。電子システム2300は、バス2305と、処理ユニット2310と、システムメモリ2325と、読み出し専用メモリ2330と、固定記憶装置2335と、入力装置2340と、出力装置2345とを含む。
バス2305は、全てのシステム、周辺装置及び電子システム2300の多くの内部装置を通信可能に接続するチップセットバスを集合的に表す。例えばバス2305は、処理ユニット2310を読み出し専用メモリ2330、システムメモリ2325及び固定記憶装置2335と通信可能に接続する。
これらの種々のメモリユニットから、処理ユニット2310は、本発明の処理を実行するために実行する命令及び処理するデータ検索する。処理ユニットは、単一のプロセッサ又は異なる実施形態においてはマルチコアプロセッサであってもよい。
読み出し専用メモリ(ROM)2330は、電子システムの処理ユニット2310及び他のモジュールにより必要とされる静的データ及び命令を格納する。一方、固定記憶装置2335は、読み取り/書き込みメモリエレメントである。この装置は、電子システム2300がオフの場合でも命令及びデータを格納する不揮発性メモリユニットである。本発明のいくつかの実施形態は、大容量記憶装置(例えば、磁気ディスク又は光ディスク及びそれに対応するディスクドライブ)を固定記憶装置2335として使用する。
他の実施形態は、取り外し可能な記憶装置(例えば、フロッピディスク、フラッシュドライブ等)を固定記憶装置として使用する。固定記憶装置2335と同じく、システムメモリ2325は読み取り/書き込みメモリエレメントである。しかし、記憶装置2335とは異なり、システムメモリは、ランダムアクセスメモリ等の揮発性読み取り/書き込みメモリエレメントである。システムメモリは、プロセッサが実行時に必要とする命令及びデータのいくつかを格納する。いくつかの実施形態において、本発明の処理は、システムメモリ2325、固定記憶装置2335及び/又は読み出し専用メモリ2330に格納される。これらの種々のメモリユニットから、処理ユニット2310は、いくつかの実施形態の処理を実行するために実行する命令及び処理するデータ検索する。
バス2305は、入力装置2340及び出力装置2345にも接続する。入力装置により、ユーザは、電子システムに対して情報を通信し、コマンドを選択できるようになる。入力装置2340は、英数字キーボード及びポインティングデバイス(「カーソル制御デバイス」とも呼ばれる)を含む。出力装置2345は、電子システムにより生成された画像を表示する。出力装置は、プリンタ及びブラウン管(CRT)又は液晶ディスプレイ(LCD)等の表示装置を含む。いくつかの実施形態は、入力装置及び出力装置の双方として機能するタッチスクリーン等の装置を含む。
最後に、図23に示されるように、バス2305は、ネットワークアダプタ(不図示)を介して電子システム2300をネットワーク2365に更に連結する。このように、コンピュータは、コンピュータのネットワーク(例えば、ローカルエリアネットワーク(「LAN」)、ワイドエリアネットワーク(「WAN」)又はイントラネット、あるいはインターネット等のネットワークのネットワークの一部であってよい。電子システム2300のいずれか又は全ての構成要素は、本発明と関連して使用されてもよい。
いくつかの実施形態は、機械可読媒体又はコンピュータ可読媒体(あるいは、コンピュータ可読記憶媒体、機械可読媒体又は機械可読記憶媒体と呼ばれる)にコンピュータプログラム命令を格納するマイクロプロセッサ、記憶装置及びメモリ等の電子部品を含む。そのようなコンピュータ可読媒体のいくつかの例としては、RAM、ROM、読み出し専用コンパクトディスク(CD−ROM)、書き込み可能なコンパクトディスク(CD−R)、書き換え可能なコンパクトディスク(CD−RW)、読み出し専用汎用ディスク(例えば、DVD−ROM、2層式DVD−ROM)、種々の書き込み可能な/書き換え可能なDVD(例えば、DVD−RAM、DVD−RW、DVD+RW等)、フラッシュメモリ(例えば、SDカード、ミニSDカード、マイクロSDカード等)、磁気ハードドライブ及び/又は固体ハードドライブ、読み出し専用ブルーレイ及び書き込み可能ブルーレイ(Blu−Ray(登録商標))ディスク、超高密度光ディスク、他のあらゆる光媒体又は磁気媒体、並びにフロッピディスクがある。コンピュータ可読媒体は、少なくとも1つの処理ユニットにより実行可能なコンピュータプログラムを格納してもよく、種々の動作を実行する命令セットを含む。コンピュータプログラム又はコンピュータコードの例としては、例えばコンパイラにより生成されるマシンコード、インタプリタを使用してコンピュータ、電子部品又はマイクロプロセッサにより実行される高レベルコードを含むファイルがある。
上記の説明は、主にソフトウェアを実行するマイクロプロセッサ又はマルチコアプロセッサを参照したが、いくつかの実施形態は、特定用途向け集積回路(ASIC)又はフィールドプログラマブルゲートアレイ(FPGA)等の1つ以上の集積回路により実行される。いくつかの実施形態において、そのような集積回路は、回路自体に格納される命令を実行する。
本明細書において使用されるように、「コンピュータ」、「サーバ」、「プロセッサ」及び「メモリ」という用語は、全て電子装置又は他の技術装置を参照する。これらの用語は、ユーザ又はユーザのグループを除外する。本明細書の目的のために、「表示する」という用語は、電子装置上に表示することを意味する。本明細書において使用されるように、「1つのコンピュータ可読媒体」、「複数のコンピュータ可読媒体」及び「機械可読媒体」という用語は、コンピュータにより読み出し可能な形式で情報を格納する有形の物体、物理的対象物に完全に限定される。これらの用語は、あらゆる無線信号、有線ダウンロード信号及び他のあらゆる一時的な信号を除外する。
多くの特定の詳細を参照して本発明を説明したが、本発明の主旨から逸脱することなく本発明が他の特定の形態で実施されうることは、当業者により理解されるであろう。また、多くの図面(図20及び図21を含む)は処理を概念的に示す。これらの処理の特定の動作は、図示され説明された正確な順序で実行されなくてもよい。特定の動作は連続した一連の動作で実行されなくてもよく、異なる特定の動作は異なる実施形態において実行されてもよい。更に処理は、いくつかのサブ処理を使用して又はより大きなマクロ処理の一部として実現されうる。
また、ユーザがLCPデータに関してLDPセットを提供するいくつかの実施形態を上述した。しかし、他の実施形態において、ユーザは、LFPデータに関してLDPセットを提供してもよい。また、スイッチングエレメントを管理するためにコントローラインスタンスがPCPデータをスイッチングエレメントに提供するいくつかの実施形態を上述した。しかし、他の実施形態において、コントローラインスタンスは、スイッチングエレメントに物理フォワーディングプレーンデータを提供してもよい。そのような実施形態において、リレーショナルデータベースデータ構造は物理フォワーディングプレーンデータを格納し、仮想化アプリケーションはそのようなデータを生成する。
また、上述のいくつかの例において、ユーザは1つ以上の論理スイッチングエレメントを指定する。いくつかの実施形態において、ユーザは、そのような論理スイッチングエレメント構成と共に物理スイッチングエレメント構成を提供してよい。また、いくつかの実施形態において1つの演算装置上で実行するいくつかのアプリケーション層により個々に形成されるコントローラインスタンスを説明するが、そのようなインスタンスが、それらの動作の1つ以上の層を実行するいくつかの実施形態における専用の演算装置又は他のマシンにより形成されることは、当業者により理解されるであろう。
また、上述のいくつかの例は、LDPSが1人のユーザと関連付けられることを示す。次に、ユーザがいくつかの実施形態においてLDPセットの1つ以上の集合と関連付けられてもよいことは、当業者により理解されるであろう。すなわち、ユーザが多数のLDPセットと関連付けられてもよいため、LDPSとユーザとの関係は常に1対1の関係ではない。従って、本発明が上述の例示的な詳細により限定されないことは、当業者により理解されるであろう。