본 발명의 이하의 상세한 설명에서, 본 발명의 많은 상세, 일례 및 실시예가 기재되고 기술되어 있다. 그렇지만, 본 발명이 기재될 실시예로 제한되지 않는다는 것과 본 발명이 논의된 구체적인 상세 및 일례 중 일부가 없어도 실시될 수 있다는 것이 기술 분야의 당업자에게 명확하고 명백하게 될 것이다.
본 발명의 어떤 실시예들은, 상이한 사용자들이 각각의 다른 사용자의 전달 논리를 제어하거나 심지어 볼 수 있게 해주는 일 없이, 하나 이상의 공유 전달 요소들(shared forwarding elements)을 통해 몇명의 상이한 사용자들에 대해 몇개의 상이한 LDP 세트들이 지정될 수 있게 해주는 네트워크 제어 시스템을 제공한다. 어떤 실시예들에서, 공유 전달 요소들은 가상 또는 물리 네트워크 스위치들, 소프트웨어 스위치들(예컨대, Open vSwitch), 라우터들, 및/또는 기타 스위칭 장치들은 물론, 이 스위치들, 라우터들 및/또는 기타 스위칭 장치들 간의 연결을 설정하는 임의의 다른 네트워크 요소들(부하 분산기, 기타 등등)을 포함할 수 있다. 이러한 전달 요소들(예컨대, 물리 스위치 또는 라우터)은 이하에서 스위칭 요소라고도 한다. 시판 중인 스위치와 달리, 소프트웨어 전달 요소(software forwarding element)는, 어떤 실시예들에서, 그의 스위칭 테이블(들) 및 논리를 독립형 장치(예컨대, 독립형 컴퓨터)의 메모리에 저장함으로써 형성되는 스위칭 요소인 한편, 다른 실시예들에서, 그의 스위칭 테이블(들) 및 논리를 장치(예컨대, 컴퓨터)의 메모리에 저장함으로써 형성되고, 또한 하이퍼바이저(hypervisor) 및 그 하이퍼바이저 위에 있는 하나 이상의 가상 기계들을 실행하는 스위칭 요소이다.
이들 관리되고 공유되는 스위칭 요소는 관리 스위칭 요소(managed switching element) 또는 관리 전달 요소(managed forwarding element)라고 하는데, 그 이유는 이들이 LDP 세트들을 구현하기 위해 네트워크 제어 시스템에 의해 관리되기 때문이다. 어떤 실시예들에서, 제어 시스템은 PCP 데이터를 이들 스위칭 요소로 푸시함으로써 스위칭 요소들을 관리하며, 이에 대해서는 이하에서 더 기술한다. 스위칭 요소들은 일반적으로 데이터(예컨대, 데이터 패킷)를 수신하고 데이터에 대해 하나 이상의 처리 동작들(수신된 데이터 패킷을 폐기하는 것, 하나의 소스 장치로부터 수신되는 데이터를 다른 목적지 장치로 전달하는 것, 패킷을 처리하고 이어서 이를 목적지 장치로 전달하는 것, 기타 등등)을 수행한다. 어떤 실시예들에서, 스위칭 요소로 푸시되는 PCP 데이터는, 스위칭 요소에 의해(예컨대, 스위칭 요소의 범용 프로세서에 의해), 스위칭 요소(예컨대, 스위칭 요소의 특수 스위칭 회로)가 수신하는 데이터 패킷들을 어떻게 처리하는지를 지정하는 물리 전달 평면 데이터(physical forwarding plane data)로 변환된다.
어떤 실시예들에서, 네트워크 제어 시스템은 시스템이 사용자들로부터 LDP 세트들을 수신할 수 있게 해주고 이 LDP 세트들을 구현하도록 스위칭 요소들을 구성할 수 있게 해주는 하나 이상의 제어기들[이하에서 제어기 인스턴스(controller instance)라고도 함]을 포함한다. 이들 제어기는, 동일한 관리 스위칭 요소들을 공유하는 동안 상이한 사용자들이 각각의 다른 사용자의 LDP 세트들 및 논리 네트워크들을 보거나 제어하지 못하게 하는 방식으로, 시스템이 공유 스위칭 요소들 및 이들 공유 스위칭 요소 사이의 연결에 의해 정의되는 논리 네트워크들의 제어를 가상화할 수 있게 해준다.
어떤 실시예들에서, 각각의 제어기 인스턴스는 사용자 입력을 LCP 데이터로부터 LFP 데이터로 변환하고 이어서 LFP 데이터를 PCP 데이터로 변환하는 하나 이상의 모듈들을 실행하는 장치(예컨대, 범용 컴퓨터)이다. 어떤 실시예들에서, 이들 모듈은 제어 모듈 및 가상화 모듈을 포함한다. 제어 모듈은 사용자가 LDPS를 지정하고 채울 수 있게 해주는 반면, 가상화 모듈은, LDPS를 물리 스위칭 인프라 상에 매핑함으로써, 지정된 LDPS를 구현한다. 어떤 실시예들에서, 제어 및 가상화 모듈들은 지정된 또는 매핑된 데이터를 관계형 데이터베이스 데이터 구조로 작성되는 레코드들로 표현한다. 즉, 관계형 데이터베이스 데이터 구조는 제어 모듈을 통해 수신되는 논리 데이터 경로 입력 및 가상화 모듈에 의해 논리 데이터 경로 입력이 매핑되는 물리 데이터 둘 다를 저장하고 있다. 어떤 실시예들에서, 제어 및 가상화 응용 프로그램들은 2개의 별개인 응용 프로그램인 반면, 다른 실시예들에서, 이들은 동일한 응용 프로그램의 일부이다.
이상에서 네트워크 제어 시스템의 몇가지 예에 대해 기술하였다. 몇가지 더 상세한 실시예가 이하에 기술되어 있다. 섹션 I는 어떤 실시예들의 네트워크 제어 시스템에 대해 기술하고 있다. 이어서 섹션 II는 네트워크 제어 시스템에 의한 범용 전달 상태 변환에 대해 기술하고 있다. 섹션 III은 본 발명의 어떤 실시예들이 구현되는 전자 시스템에 대해 기술하고 있다.
I. 네트워크 제어 시스템
A. 흐름들을 제어 계층으로 푸시하는 외부 계층들
도 1은 본 발명의 어떤 실시예들의 가상화된 네트워크 시스템(100)을 나타낸 것이다. 이 시스템은 다수의 사용자들이 공유되는 한 세트의 네트워크 인프라 스위칭 요소들(예컨대, 스위치들, 가상 스위치들, 소프트웨어 스위치들, 기타)을 통해 다수의 상이한 LDP 세트들을 생성하고 제어할 수 있게 해준다. 사용자가 사용자의 LDP 세트들의 세트(즉, 사용자의 스위칭 논리)을 생성하고 제어할 수 있게 해주는 데 있어서, 이 시스템은 사용자가 다른 사용자의 스위칭 논리를 보거나 수정하기 위해 다른 사용자의 LDP 세트들의 세트에 직접 액세스할 수 있게 해주지 않는다. 그렇지만, 이 시스템은, 사용자들이 이러한 통신을 원하는 경우, 상이한 사용자들이 그들의 가상화된 스위칭 논리를 통해 서로에게 패킷들을 전달할 수 있게 해준다.
도 1에 도시된 바와 같이, 시스템(100)은 하나 이상의 스위칭 요소들(105) 및 네트워크 제어기(110)를 포함하고 있다. 스위칭 요소들은 시스템(100)의 네트워크 인프라 스위칭 요소들을 형성하는 N개(단, N은 1보다 크거나 같은 수임)의 스위칭 장치들을 포함하고 있다. 어떤 실시예들에서, 네트워크 인프라 스위칭 요소들은 가상 또는 물리 네트워크 스위치들, 소프트웨어 스위치들(예컨대, Open vSwitch), 라우터들, 및/또는 기타 스위칭 장치들은 물론, 이 스위치들, 라우터들 및/또는 기타 스위칭 장치들 간의 연결을 설정하는 임의의 다른 네트워크 요소들(부하 분산기, 기타 등등)을 포함한다. 이러한 네트워크 인프라 스위칭 요소들 전부는 이하에서 스위칭 요소 또는 전달 요소라고 한다.
가상 또는 물리 스위칭 장치들(105)은 통상적으로 제어 스위칭 논리(125) 및 전달 스위칭 논리(130)를 포함한다. 어떤 실시예들에서, 스위치의 제어 논리(125)는 (1) 들어오는 패킷들에 적용되어야 하는 규칙들, (2) 폐기될 패킷들, 및 (3) 들어오는 패킷들에 적용될 패킷 처리 방법들을 지정한다. 가상 또는 물리 스위칭 요소들(105)은 전달 논리(130)를 통제하는 테이블들을 채우기 위해 제어 논리(125)를 사용한다. 전달 논리(130)는 들어오는 패킷들에 대해 탐색 동작들을 수행하고 들어오는 패킷들을 목적지 주소로 전달한다.
도 1에 추가로 도시된 바와 같이, 네트워크 제어기(110)는 제어 응용 프로그램(115)을 포함하고 이를 통해 (예컨대, 하나 이상의 관리자들 또는 사용자들에 의해) 하나 이상의 사용자들에 대해 스위칭 논리가 LDP 세트들로 지정된다. 네트워크 제어기(110)는 또한 LDP 세트들을 스위칭 장치들(105)로 푸시될 제어 스위칭 논리로 변환하는 가상화 응용 프로그램(120)을 포함한다. 이 출원에서, 제어 응용 프로그램 및 가상화 응용 프로그램은, 어떤 실시예들들에 대해, "제어 엔진" 및 "가상화 엔진"이라고 한다.
어떤 실시예들에서, 가상화 시스템(100)은 2개 이상의 네트워크 제어기들(110)을 포함한다. 네트워크 제어기들은 각각이 특정의 LDPS에 대한 한 세트의 스위칭 장치들에 대한 제어 논리를 지정하는 일을 맡고 있는 논리 제어기들을 포함한다. 네트워크 제어기들은 또한 각각이 물리 제어기가 관리를 맡고 있는 한 세트의 스위칭 요소들로 제어 논리를 푸시하는 물리 제어기들을 포함한다. 환언하면, 논리 제어기는 특정의 LDPS를 구현하는 한 세트의 스위칭 요소들에 대해서만 제어 논리를 지정하는 반면, 물리 제어기는, 스위칭 요소들이 구현하는 LDP 세트들에 관계없이, 물리 제어기가 관리하는 스위칭 요소들로 제어 논리를 푸시한다.
어떤 실시예들에서, 네트워크 제어기의 가상화 응용 프로그램은 가상화 응용 프로그램에 의해 추적되는 스위치 요소 상태들의 사본을 데이터 레코드들(예컨대, 데이터 튜플들)로 저장하기 위해 관계형 데이터베이스 데이터 구조를 사용한다. 이 데이터 레코드들은 모든 물리 또는 가상 스위칭 요소들 그리고 물리 네트워크 토폴로지 및 그들의 전달 테이블들 내에서의 그들의 상호연결들의 그래프를 나타낸다. 예를 들어, 어떤 실시예들에서, 네트워크 인프라 내의 각각의 스위칭 요소는 관계형 데이터베이스 데이터 구조에서 하나 이상의 데이터 레코드들로 표현된다. 그렇지만, 다른 실시예들에서, 가상화 응용 프로그램에 대한 관계형 데이터베이스 데이터 구조는 스위칭 요소들 중 단지 일부에 관한 상태 정보를 저장한다. 예를 들어, 이하에서 추가로 기술하는 바와 같이, 어떤 실시예들에서, 가상화 응용 프로그램은 네트워크 인프라의 경계에 있는 스위칭 요소들만을 추적한다. 또 다른 실시예들에서, 가상화 응용 프로그램은 네트워크에서의 에지 스위칭 요소들은 물론, 에지 스위칭 요소들 간의 통신을 용이하게 해주는 네트워크에서의 어떤 비에지 스위칭 요소들(non-edge switching elements)에 관한 상태 정보를 저장한다.
어떤 실시예들에서, 관계형 데이터베이스 데이터 구조는 가상화된 네트워크 시스템(100)에서의 제어 모델의 핵심이다. 한가지 방식에서, 응용 프로그램들은, 관계형 데이터베이스 데이터 구조로부터 판독하고 그에 기입하는 것에 의해, 네트워크를 제어한다. 구체적으로는, 어떤 실시예들에서, 응용 프로그램 제어 논리는 (1) 관계형 데이터베이스 데이터 구조에서 네트워크 엔터티 레코드들과 연관되어 있는 현재 상태를 판독하고 (2) 이 레코드들을 조작함으로써 네트워크 상태를 변경할 수 있다. 이 모델 하에서, 가상화 응용 프로그램(120)이 스위칭 요소(105)의 테이블(예컨대, 제어 평면 흐름 테이블)에서의 레코드를 수정할 필요가 있을 때, 가상화 응용 프로그램(120)은 먼저 테이블을 표현하는 하나 이상의 레코드들을 관계형 데이터베이스 데이터 구조에 기입한다. 가상화 응용 프로그램은 이어서 이 변경을 스위칭 요소의 테이블로 전파한다.
어떤 실시예들에서, 제어 응용 프로그램도 각각의 사용자 지정 LDPS에 대한 논리 구성 및 논리 상태를 저장하기 위해 관계형 데이터베이스 데이터 구조를 사용한다. 이 실시예들에서, 실제 스위칭 요소들의 상태를 나타내는 관계형 데이터베이스 데이터 구조에서의 정보는 관계형 데이터베이스 데이터 구조에 저장되어 있는 전체 정보의 서브셋만을 고려한다.
어떤 실시예들에서, 제어 및 가상화 응용 프로그램들은 사용자 지정 LDPS에 대한 논리 구성 및 논리 상태를 저장하기 위해 보조 데이터 구조를 사용한다. 이 실시예들에서, 이 보조 데이터 구조는 상이한 네트워크 제어기들 간의 통신 매체로서 역할한다. 예를 들어, 사용자가 특정의 LDPS를 맡고 있지 않은 논리 제어기를 사용하여 특정의 LDPS를 지정할 때, 논리 제어기는 특정의 LDPS에 대한 논리 구성을, 특정의 LDPS를 맡고 있는 다른 논리 제어기로, 이 논리 제어기들의 보조 데이터 구조를 통해, 전달한다. 어떤 실시예들에서, 특정의 LDPS에 대한 논리 구성을 사용자로부터 수신하는 논리 제어기는 구성 데이터를 가상화된 네트워크 시스템 내의 모든 다른 제어기들로 전달한다. 이러한 방식으로, 모든 논리 제어기에서의 보조 저장 구조는, 어떤 실시예들에서, 모든 사용자에 대해 모든 LDP 세트들에 대한 논리 구성 데이터를 포함한다.
어떤 실시예들에서, 제어기 인스턴스의 운영 체제(도시 생략)는 상이한 실시예들의 제어 및 가상화 응용 프로그램들 그리고 스위칭 요소들(105)에 대한 한 세트의 상이한 통신 구성체(communication construct)(도시 생략)를 제공한다. 예를 들어, 어떤 실시예들에서, 운영 체제는 (1) 임의의 한명의 사용자에 대한 물리 스위칭을 수행하는 스위칭 요소들과 (2) 사용자들에 대한 스위칭 논리를 스위칭 요소들(105)로 푸시하는 데 사용되는 가상화 응용 프로그램(120) 사이의 통신 인터페이스(도시 생략)를 갖는 관리 스위칭 요소를 제공한다. 이 실시예들 중 어떤 실시예들에서, 가상화 응용 프로그램은 외부 응용 프로그램(가상화 응용 프로그램 등)이 스위칭 요소의 제어 평면 기능을 제어할 수 있게 해주는 한 세트의 API를 지정하는 통상적으로 알려져 있는 스위치-액세스 인터페이스(switch-access interface)를 통해 스위칭 요소의 제어 스위칭 논리(125)를 관리한다. 구체적으로는, 관리 스위칭 요소 통신 인터페이스는, 가상화 응용 프로그램이 관계형 데이터베이스 데이터 구조에 저장되어 있는 레코드들을 관리 스위칭 요소 통신 인터페이스를 통해 스위칭 요소들로 송신할 수 있도록, 한 세트의 API를 구현한다.
이러한 공지된 스위치-액세스 인터페이스의 2개의 예는 OpenFlow 인터페이스 및 Open Virtual Switch 통신 인터페이스이고, 이들은, 각각, 이하의 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 데이터 구조를 사용하는 몇개의 예들이 미국 특허 출원 제13/177,529호 및 제13/177,533호(둘 다 2011년 7월 6일자로 출원됨)에 기술되어 있다. 미국 특허 출원 제13/177,529호 및 제13/177,533호는 참조 문헌으로서 본 명세서에 포함된다.
도 1은 제어 스위칭 논리(125) 주위에 점선(135)으로 나타내는 것을 통해 스위치-액세스 API들의 사용을 개념적으로 나타내고 있다. 이 API들을 통해, 가상화 응용 프로그램은 제어 평면 흐름 테이블들 내의 엔트리들을 판독하고 기입할 수 있다. 어떤 실시예들에서, 가상화 응용 프로그램과 스위칭 요소들의 제어 평면 자원들(예컨대, 제어 평면 테이블들) 간의 연결이 대역내에서(즉, 운영 체제에 의해 제어되는 네트워크 트래픽에 의해) 구현되는 반면, 다른 실시예들에서, 이는 대역외에서(즉, 별도의 물리 네트워크를 통해) 구현된다. 고장 시에 수렴할 수 없는(beyond convergence) 선택된 메커니즘 및 운영 체제에의 기본적인 연결에 대해 최소한의 요구사항만이 있으며, 따라서, 별도의 네트워크를 사용할 때, IS-IS 또는 OSPF 등의 표준의 IGP 프로토콜들로 충분하다.
스위칭 요소들이 (소프트웨어 스위칭 요소들과 달리) 물리 스위칭 요소들일 때 스위칭 요소들에 대한 제어 스위칭 논리(125)를 정의하기 위해, 어떤 실시예들의 가상화 응용 프로그램은 스위칭 요소의 제어 평면 내에 하나 이상의 제어 테이블들을 생성하기 위해 Open Virtual Switch 프로토콜을 사용한다. 제어 평면은 통상적으로 스위칭 요소의 범용 CPU에 의해 생성되고 실행된다. 이 시스템이 제어 테이블(들)을 생성했으면, 가상화 응용 프로그램은 OpenFlow 프로토콜을 사용하여 흐름 엔트리들을 제어 테이블(들)에 기입한다. 물리 스위칭 요소의 범용 CPU는 스위칭 요소의 전달 평면에서의 하나 이상의 전달 테이블들을 채우기 위해 제어 테이블(들)에 기입된 엔트리들을 변환하는데에 그의 내부 논리를 사용한다. 전달 테이블들은 통상적으로 스위칭 요소의 특수 스위칭 칩에 의해 생성되고 실행된다. 전달 테이블들 내의 흐름 엔트리들의 실행을 통해, 스위칭 요소의 스위칭 칩은 수신하는 데이터의 패킷들을 처리하고 라우팅할 수 있다.
어떤 실시예들에서, 가상화된 네트워크 시스템(100)은, 논리 및 물리 제어기들에 부가하여, 섀시 제어기를 포함한다. 이 실시예들에서, 섀시 제어기는 특정의 스위칭 요소를 관리하기 위해 스위치-액세스 API들을 구현한다. 즉, 섀시 제어기가 제어 논리를 특정의 스위칭 요소로 푸시한다. 이 실시예들에서, 물리 제어기는 제어 논리를 논리 제어기들로부터 물리 제어기가 맡고 있는 한 세트의 스위칭 요소들과 인터페이스하는 섀시 제어기들로 중계하는 집계점(aggregation point)으로서 기능한다. 물리 제어기는 제어 논리를 한 세트의 스위칭 요소들을 관리하는 섀시 제어기들로 배포한다. 이 실시예들에서, 네트워크 제어기의 운영 체제가 물리 제어기와 섀시 제어기 사이의 통신 채널[예컨대, RPC(Remote Procedure Call) 채널]을 설정하는 관리 스위칭 요소 통신 인터페이스는 물리 제어기가 관계형 데이터베이스 데이터 구조에 데이터 레코드로서 저장된 제어 논리를 섀시 제어기로 송신할 수 있도록 되어 있다. 섀시 제어기는 결국 스위치-액세스 API들 또는 다른 프로토콜들을 사용하여 제어 논리를 스위칭 요소로 푸시할 것이다.
어떤 실시예들의 운영 체제가 제공하는 통신 구성체는 또한 네트워크 제어기가 데이터 레코드들을 다른 네트워크 제어기로(예컨대, 논리 제어기로부터 다른 논리 제어기로, 물리 제어기로부터 다른 물리 제어기로, 논리 제어기로부터 물리 제어기로, 물리 제어기로부터 논리 제어기로, 기타) 송신하기 위해 사용할 수 있는 익스포터(exporter)(도시 생략)를 포함한다. 구체적으로는, 네트워크 제어기의 제어 응용 프로그램 및 가상화 응용 프로그램은 관계형 데이터베이스 데이터 구조에 저장되어 있는 데이터 레코드들을 익스포터를 사용하여 하나 이상의 다른 네트워크 제어기들로 내보내기(export)할 수 있다. 어떤 실시예들에서, 하나의 네트워크 제어기가 채널을 통해 다른 네트워크 제어기로 데이터 레코드들을 송신할 수 있도록 익스포터는 2개의 네트워크 제어기들 사이에 통신 채널(예컨대, RPC 채널)을 설정한다.
어떤 실시예들의 운영 체제는 또한 네트워크 제어기가 네트워크 제어기로부터 데이터 레코드들을 수신하기 위해 사용할 수 있는 임포터(importer)를 제공한다. 어떤 실시예들의 임포터는 다른 네트워크 제어기의 익스포터에 대한 대응물로서 기능한다. 즉, 임포터는 2개의 네트워크 제어기들 사이에 설정된 통신 채널의 수신단에 있다. 어떤 실시예들에서, 네트워크 제어기들은 수신측 제어기들이 수신측 제어기가 관심을 가지고 있는 데이터를 공급하는 네트워크 제어기들로부터만 데이터를 수신하기 위해 채널에 가입하는 발행-구독(publish-subscribe) 모델을 따른다.
B. 흐름들을 에지 스위칭 요소로 푸시
앞서 언급한 바와 같이, 어떤 실시예들에서, 관계형 데이터베이스 데이터 구조는 시스템의 네트워크 인프라 내의 각각의 스위칭 요소에 관한 데이터를 저장하는 반면, 다른 실시예들에서, 관계형 데이터베이스 데이터 구조는 네트워크 인프라의 경계에 있는 스위칭 요소들에 관한 상태 정보만을 저장한다. 도 2 및 도 3은 2개의 상이한 방식들을 구별하는 한 예를 나타낸 것이다. 구체적으로는, 도 2는 다중 사용자 서버 호스팅 시스템의 스위치 인프라를 나타낸 것이다. 이 시스템에서, 2명의 사용자 A 및 B의 6개의 기계들을 상호연결시키기 위해 6개의 스위칭 요소들이 이용된다. 이 스위칭 요소들(205 내지 220) 중 4개는 사용자 A 및 B의 기계들(235 내지 260)과 직접 연결을 가지는 에지 스위칭 요소인 반면, 스위칭 요소들 중 2개(225 및 230)는 에지 스위칭 요소들을 상호연결시키고 서로에 연결되어 있는 내부 스위칭 요소(interior switching element)(즉, 비에지 스위칭 요소)이다. 어떤 실시예들에서, 앞서 기술한 도면들에 예시되어 있는 스위칭 요소들 전부는 소프트웨어 스위칭 요소인 한편, 다른 실시예들에서, 스위칭 요소들은 소프트웨어 및 물리 스위칭 요소들의 혼합이다. 예를 들어, 어떤 실시예들에서, 에지 스위칭 요소들(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은 네트워크 제어기(300)가 스위칭 요소들(205 및 220)에 있는 사용자 A 및 B의 레코드들을 수정하지만, 스위칭 요소(210)에 있는 사용자 A 레코드들만 그리고 스위칭 요소(215)에 있는 사용자 B 레코드들만 업데이트하는 것을 나타내고 있다.
어떤 실시예들의 제어기(300)는 몇가지 이유로 에지 스위칭 요소들만을 제어한다(즉, 관계형 데이터베이스 데이터 구조에 에지 스위칭 요소들에 관한 데이터만을 유지한다). 에지 스위칭 요소들을 제어하는 것은, 모든 스위칭 요소들 간의 격리를 유지하는 것(필요하지 않음)과는 달리, 기계들(예컨대, 컴퓨팅 장치들) 간의 격리를 유지하는 것(필요함)에 충분한 메커니즘을 제어기에 제공한다. 내부 스위칭 요소들은 스위칭 요소들 사이에서 데이터 패킷들을 전달한다. 에지 스위칭 요소들은 기계들과 다른 네트워크 요소들(예컨대, 다른 스위칭 요소들) 사이에서 데이터 패킷들을 전달한다. 이와 같이, 에지 스위칭 요소가 패킷들을 기계로 전달하는 라인에서의 마지막 스위칭 요소이기 때문에, 제어기는 에지 스위칭 요소를 제어하는 것만으로 사용자 격리를 유지할 수 있다.
에지 스위칭 요소들을 제어하는 것에 부가하여, 어떤 실시예들의 네트워크 제어기는 또한 제어되는 에지 스위칭 요소들의 동작을 간단화하기 위해 및/또는 용이하게 해주기 위해 스위치 네트워크 계층구조에 삽입되는 비에지 스위칭 요소들을 이용하고 제어한다. 예를 들어, 어떤 실시예들에서, 제어기는, 몇개의 에지 스위칭 요소들을 리프 노드(leaf node)로서 가지며 하나 이상의 비에지 스위칭 요소들을 비리프 노드(non-leaf node)로서 가지는 계층적 스위칭 아키텍처에서, 그가 제어하는 스위칭 요소들이 상호연결될 것을 필요로 한다. 어떤 이러한 실시예들에서, 각각의 에지 스위칭 요소는 비리프 스위칭 요소들 중 하나 이상에 연결되어 있고, 그와 다른 에지 스위칭 요소들 간의 통신을 용이하게 해주기 위해 이러한 비리프 스위칭 요소들을 사용한다.
이상의 논의는 어떤 실시예들의 네트워크 제어기에 의한 에지 스위칭 요소들 및 비에지 스위칭 요소들의 제어에 관한 것이다. 어떤 실시예들에서, 에지 스위칭 요소들 및 비에지 스위칭 요소들(리프 노드들 및 비리프 노드들)은 관리 스위칭 요소라고 할 수 있다. 이러한 이유는, 관리 스위칭 요소들을 통해 LDP 세트들을 구현하기 위해, 이 스위칭 요소들이 (네트워크에 있는, 네트워크 제어기에 의해 관리되지 않는 미관리 스위칭 요소들과 달리) 네트워크 제어기에 의해 관리되기 때문이다.
어떤 실시예들의 네트워크 제어기들은 앞서 기술한 물리 데이터 및 논리 데이터에 기초하여 관리 스위칭 요소들을 통해 논리 스위칭 요소를 구현한다. 논리 스위칭 요소("논리 전달 요소"라고도 함)는 스위칭 요소가 기능할 수 있는 다수의 상이한 방식들(예컨대, 계층 2 스위칭, 계층 3 라우팅 등)로 기능하도록 정의될 수 있다. 네트워크 제어기들은, 관리 스위칭 요소들의 제어를 통해, 정의된 논리 스위칭 요소를 구현한다. 어떤 실시예들에서, 네트워크 제어기들은 관리 스위칭 요소들에 걸쳐 다수의 논리 스위칭 요소들을 구현한다. 이것은, 네트워크의 네트워크 토폴로지에 관계없이, 다수의 상이한 논리 스위칭 요소들이 관리 스위칭 요소들에 걸쳐 구현될 수 있게 해준다.
어떤 실시예들의 관리 스위칭 요소들은 상이한 라우팅 기준들에 기초하여 네트워크 데이터를 라우팅하도록 구성되어 있을 수 있다. 이러한 방식으로, 관리 스위칭 요소들에 걸쳐 다수의 논리 스위칭 요소들을 구현하기 위해 네트워크에서의 스위칭 요소들을 통한 네트워크 데이터의 흐름이 제어될 수 있다.
C. 논리 스위칭 요소 및 물리 스위칭 요소
도 4는 한 세트의 스위칭 요소들에 걸쳐 구현되는 다수의 논리 스위칭 요소들의 한 예를 나타낸 것이다. 상세하게는, 도 4는 관리 스위칭 요소들(410 내지 430)에 걸쳐 구현되는 논리 스위칭 요소들(480 및 490)을 개념적으로 나타낸 것이다. 도 4에 도시된 바와 같이, 네트워크(400)는 관리 스위칭 요소들(410 내지 430) 및 기계들(440 내지 465)을 포함하고 있다. 이 도면에 나타낸 바와 같이, 기계들(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에 도시되어 있는 개념적인 흐름 엔트리들은 패킷들을 송신해야 하는 다음 홉(next-hop) 스위칭 요소들을 알아내기 위해 관리 스위칭 요소들에 대한 소스 및 목적지 정보 둘 다를 포함한다. 그렇지만, 소스 정보가 흐름 엔트리들에 있을 필요가 없는데, 그 이유는 어떤 실시예들의 관리 스위칭 요소들이 목적지 정보만(예컨대, 컨텍스트 식별자, 목적지 주소 등)을 사용하여 다음 홉 스위칭 요소들을 알아낼 수 있기 때문이다.
어떤 실시예들에서, 관리 스위칭 요소들(410 내지 430)에 걸쳐 논리 스위칭 요소들(485 및 495)의 구현을 용이하게 해주기 위해, 터널링 프로토콜들[예컨대, CAPWAP(control and provisioning of wireless access points), GRE(generic route encapsulation), GRE IPsec(Internet Protocol Security) 등]에 의해 제공되는 터널들이 사용될 수 있다. 터널링에 의해, 패킷이 스위치들 및 라우터들을 통해 다른 패킷의 페이로드로서 전송된다. 즉, 터널링된 패킷은 그의 주소들(예컨대, 소스 및 목적지 MAC 주소들)을 노출시킬 필요가 없는데, 그 이유는 패킷이 터널링된 패킷을 캡슐화하고 있는 외부 패킷(outer packet)의 헤더에 포함되어 있는 주소에 기초하여 전달되기 때문이다. 따라서, 터널링은 논리 주소 공간과 물리 주소 공간의 분리를 가능하게 해주는데, 그 이유는 터널링된 패킷은 논리 주소 공간에서 의미있는 주소들을 가질 수 있는 반면, 외부 패킷은 물리 주소 공간에서의 주소들에 기초하여 전달/라우팅되기 때문이다. 이러한 방식으로, 터널들은 논리 스위칭 요소들(485 및 495)을 구현하기 위해 네트워크에서 관리 스위칭 요소들을 연결시키는 "논리 와이어들(logical wires)"로 볼 수 있다.
한 세트의 스위칭 요소들에 걸쳐 다수의 논리 스위칭 요소들을 구현하기 위해 앞서 기술한 다양한 방식들로 스위칭 요소들을 구성하는 것은 다수의 사용자들이, 각각의 사용자의 관점에서 볼 때, 각각 별도의 네트워크 및/또는 스위칭 요소를 가질 수 있게 해주지만, 사용자들이 실제로는 동일한 세트의 스위칭 요소들 및/또는 한 세트의 스위칭 요소들 간의 연결들(예컨대, 터널들, 물리 와이어들)의 일부 또는 전부를 공유하고 있다.
II. 범용 전달 상태
A. 제어기 인스턴스(들)의 계층들
도 5는 본 발명의 어떤 실시예들의 제어기 인스턴스들(controller instances)의 다양한 처리 계층들을 통해 관리 스위칭 요소(managed switching element)를 제어하는 명령어들이 전파하는 것을 나타낸 것이다. 이 도면은 제어 평면 데이터를 변환하고 동일하거나 상이한 제어기 인스턴스들의 4개의 처리 계층들을 통해 관리 스위칭 요소(525)로 전파하는 제어 데이터 파이프라인(500)을 나타내고 있다. 이 4개의 계층들은 입력 변환 계층(505), 제어 계층(510), 가상화 계층(515), 및 커스터마이즈 계층(520)이다.
어떤 실시예들에서, 이 4개의 계층들이 동일한 제어기 인스턴스에 있다. 그렇지만, 다른 실시예들에서, 이 계층들의 다른 배열들이 있다. 예를 들어, 다른 실시예들에서, 제어 및 가상화 계층들(510 및 515)만이 동일한 제어기 인스턴스에 있고, CPCP(customized physical control plane) 데이터를 전파하는 기능은 다른 제어기 인스턴스[예컨대, 섀시 제어기(도시 생략)]의 커스터마이즈 계층에 존재한다. 이 다른 실시예들에서, UPCP(universal physical control plane) 데이터는 하나의 제어기 인스턴스의 관계형 데이터베이스 데이터 구조(도시 생략)로부터 다른 제어기 인스턴스의 관계형 데이터베이스 데이터 구조로 전송되고, 이어서 이 다른 제어기 인스턴스는 CPCP 데이터를 발생하여 관리 스위칭 요소로 푸시한다. 전자의 제어기 인스턴스는 UPCP 데이터를 발생하는 논리 제어기일 수 있고, 후자의 제어기 인스턴스는 UPCP 데이터를 CPCP 데이터로 커스터마이즈하는 물리 제어기 또는 섀시 제어기일 수 있다.
도 5에 도시된 바와 같이, 어떤 실시예들에서, 입력 변환 계층(505)은 이 계층의 출력을 표현하는 데 사용될 수 있는 LCP(530)를 가진다. 어떤 실시예들에서, 사용자들이 LDP 세트들을 지정하는 입력들을 공급하기 위해, 응용 프로그램[예컨대, 웹 기반 응용 프로그램(도시 생략)]이 사용자들에게 제공된다. 이 응용 프로그램은 입력들을 API 호출들의 형태로 입력 변환 계층(505)으로 송신하고, 입력 변환 계층(505)은 API 호출들을 제어 계층(510)에 의해 처리될 수 있는 형식으로 되어 있는 LCP 데이터로 변환한다. 예를 들어, 입력들은 한 세트의 입력 이벤트들로 변환되고, 이 입력 이벤트들은 제어 계층의 nLog 테이블 매핑 엔진으로 피드될 수 있다. nLog 테이블 매핑 엔진 및 그의 동작에 대해 이하에서 더 기술할 것이다.
어떤 실시예들에서, 제어 계층(510)은 이 계층에 대한 입력 및 출력을 표현하는 데 사용될 수 있는 LCP(530) 및 LFP(535)를 가진다. LCP는 제어 계층 및 그의 사용자들이 하나 이상의 사용자들에 대한 LCP 내에 하나 이상의 LDP 세트들을 지정할 수 있게 해주는 상위 레벨 구성체들의 모음을 포함한다. LFP(535)는 사용자들의 LDP 세트들을 가상화 계층(515)에 의해 처리될 수 있는 형식으로 나타낸다. 이러한 방식으로, 2개의 논리 평면(530 및 535)은, 도 5에 도시되어 있는 바와 같이, 통상적으로 전형적인 관리 스위칭 요소(525)에서 발견될 수 있는 제어 및 전달 평면들(555 및 560)의 가상화 공간 대응물이다.
어떤 실시예들에서, 제어 계층(510)은 LCP 구성체들을 정의하고 노출시키고, 그에 의해 계층 자체 또는 계층의 사용자들은 LCP 내에 상이한 LDP 세트들을 정의한다. 예를 들어, 어떤 실시예들에서, LCP 데이터(530)는 논리 ACL 데이터 등을 포함한다. 이 데이터(예컨대, 논리 ACL 데이터) 중 일부는 사용자에 의해 지정될 수 있는 반면, 다른 이러한 데이터(예컨대, 논리 L2 또는 L3 레코드들)는 제어 계층에 의해 발생되고, 사용자에 의해 지정되지 않을 수 있다. 어떤 실시예들에서, 제어 계층(510)은 제어 계층(510)이 검출하는 관계형 데이터베이스 데이터 구조에 대한 특정의 변경들(관리 스위칭 요소들 및 관리 데이터 경로들에 대한 변경들을 나타냄)에 응답하여 이러한 데이터를 발생 및/또는 지정한다.
어떤 실시예들에서, LCP 데이터(즉, 제어 평면 구성체들로 표현되는 LDP 세트 데이터)가 처음에는 관리 스위칭 요소들로부터의 현재의 동작 데이터를 고려함이 없이 그리고 이 제어 평면 데이터가 PCP 데이터로 변환되는 방식을 고려함이 없이 지정될 수 있다. 예를 들어, LCP 데이터는 5대의 컴퓨터들을 연결시키는 하나의 논리 스위칭 요소에 대한 제어 데이터를 지정할 수 있지만, 이 제어 평면 데이터는 나중에 5대의 컴퓨터들 사이의 원하는 스위칭을 구현하는 3개의 관리 스위칭 요소들에 대한 물리 제어 데이터로 변환될 수 있다.
제어 계층은 LCP 내의 임의의 LDPS를 LFP(535) 내의 LDPS로 변환하는 한 세트의 모듈들(도시 생략)을 포함하고 있다. 어떤 실시예들에서, 제어 계층(510)은 이 변환을 수행하기 위해 nLog 테이블 매핑 엔진을 사용한다. 제어 계층이 이 변환을 수행하기 위해 nLog 테이블 매핑 엔진을 사용하는 것에 대해 이하에서 더 기술한다. 제어 계층은 또한 LDP 세트들을 제어 계층(510)의 LFP(535)로부터 가상화 계층(515)의 LFP(540)로 푸시하는 한 세트의 모듈들(도시 생략)을 포함하고 있다.
LFP(540)는 하나 이상의 사용자들의 하나 이상의 LDP 세트들을 포함하고 있다. 어떤 실시예들에서, LFP(540)는 하나 이상의 사용자들의 하나 이상의 LDP 세트들에 대한 논리 전달 데이터를 포함하고 있다. 이 데이터의 일부는 제어 계층에 의해 LFP(540)로 푸시되는 반면, 다른 이러한 데이터는 관계형 데이터베이스 데이터 구조에서 이벤트들을 검출하는 가상화 계층에 의해 LFP로 푸시되며, 이에 대해서는 어떤 실시예들과 관련하여 이하에서 더 기술한다.
LFP(540)에 부가하여, 가상화 계층(515)은 UPCP(545)를 포함하고 있다. UPCP(545)는 LDP 세트들에 대한 UPCP 데이터를 포함하고 있다. 가상화 계층은 LFP(540) 내의 LDP 세트들을 UPCP(545) 내의 UPCP 데이터로 변환하는 한 세트의 모듈들(도시 생략)을 포함하고 있다. 어떤 실시예들에서, 가상화 계층(515)은 이 변환을 수행하기 위해 nLog 테이블 매핑 엔진을 사용한다. 가상화 계층은 또한 가상화 계층(515)의 UPCP(545)로부터의 UPCP 데이터를 커스터마이즈 계층(520)의 관계형 데이터베이스 데이터 구조로 푸시하는 한 세트의 모듈들(도시 생략)을 포함하고 있다.
어떤 실시예들에서, 커스터마이즈 계층(515)으로 송신되는 UPCP 데이터는 관리 스위칭 요소들(525)이 제어 계층(510)에 의해 지정된 LDP 세트들에 따라 데이터 패킷들을 처리할 수 있게 해준다. 그렇지만, CPCP 데이터와 달리, UPCP 데이터는 제어 계층에 의해 지정되는 논리 데이터의 완전한 구현이 아닌데, 그 이유는, 어떤 실시예들에서, UPCP 데이터가 관리 스위칭 요소들에서의 차이 및/또는 관리 스위칭 요소들의 위치 관련 정보를 표현하지 않기 때문이다.
관리 스위칭 요소들에서 LDP 세트들을 완전하게 구현하기 위해, UPCP 데이터가 각각의 관리 스위칭 요소에 대한 CPCP 데이터로 변환되어야만 한다. 예를 들어, LDP 세트들이 몇개의 관리 스위칭 요소들에 걸친 터널을 지정할 때, UPCP 데이터는 터널의 한쪽 끝을 나타내는 관리 스위칭 요소의 특정의 네트워크 주소(예컨대, IP 주소)를 사용하여 그 끝을 표현한다. 그렇지만, 터널이 걸쳐 있는 다른 관리 스위칭 요소들 각각은, 특정의 네트워크 주소를 가지는 마지막 관리 스위칭 요소를 가리키기 위해, 관리 스위칭 요소에 로컬인 포트 번호를 사용한다. 즉, 관리 스위칭 요소들에서 터널을 지정하는 LDP 세트들을 완전하게 구현하기 위해, 특정의 네트워크 주소가 관리 스위칭 요소들 각각에 대한 로컬 포트 번호로 변환되어야만 한다.
커스터마이즈 계층(520)이 UPCP 데이터를 발생하는 제어기 인스턴스와 상이한 다른 제어기 인스턴스에서 실행 중인 것으로 가정하면, CPCP 데이터로 변환될 중간 데이터로서의 UPCP 데이터는 어떤 실시예들의 제어 시스템이 확장될 수 있게 해준다. 이러한 이유는 가상화 계층(515)이 LDP 세트들을 지정하는 LFP 데이터를 LDP 세트들을 구현하는 관리 스위칭 요소들 각각에 대한 CPCP 데이터로 변환할 필요가 없기 때문이다. 그 대신에, 가상화 계층(515)은 LDP 세트들을 구현하는 모든 관리 스위칭 요소들에 대해 한번 LFP 데이터를 UPCP 데이터로 변환한다. 이러한 방식으로, 가상화 응용 프로그램은, LDP 세트들을 구현하는 관리 스위칭 요소들의 수만큼에 대해, LDP 세트들을 CPCP 데이터로 변환하는 것을 수행하기 위해 그렇지 않았으면 소비할 필요가 있을 계산 자원을 절감한다.
커스터마이즈 계층(520)은 이 계층에 대한 입력 및 출력을 표현하는 데 사용될 수 있는 UPCP(546) 및 CPCP(550)를 포함하고 있다. 커스터마이즈 계층은 UPCP(546) 내의 UPCP 데이터를 CPCP(550) 내의 CPCP 데이터로 변환하는 한 세트의 모듈들(도시 생략)을 포함하고 있다. 어떤 실시예들에서, 커스터마이즈 계층(520)은 이 변환을 수행하기 위해 nLog 테이블 매핑 엔진을 사용한다. 커스터마이즈 계층은 또한 커스터마이즈 계층(520)의 CPCP(550)로부터의 CPCP 데이터를 관리 스위칭 요소들(525)로 푸시하는 한 세트의 모듈들(도시 생략)을 포함하고 있다.
각각의 관리 스위칭 요소로 푸시되는 CPCP 데이터는 관리 스위칭 요소에 특유하다. CPCP 데이터는, 비록 이 데이터를 "물리" 데이터라고 하지만, 관리 스위칭 요소가 물리 및 논리 데이터 처리 영역들 둘 다에서 물리 스위칭 동작들을 수행할 수 있게 해준다. 어떤 실시예들에서, 커스터마이즈 계층(520)이 관리 스위칭 요소들(525) 각각에 대해 별개의 제어기 인스턴스에서 실행된다.
어떤 실시예들에서, 커스터마이즈 계층(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), 보조 저장 구조(예컨대, PTD)(640), 제어기간 통신 인터페이스(645), 관리 스위칭 요소 통신 인터페이스(650)를 포함하고 있다.
제어기 인스턴스의 입력 모듈(620)은, 입력 모듈(620)이 사용자들로부터 입력들을 받고 그 입력들을 제어 모듈(625)이 이해하고 처리할 LCP 데이터로 변환한다는 점에서, 도 5를 참조하여 앞서 기술한 입력 변환 계층(505)과 유사하다. 앞서 언급한 바와 같이, 어떤 실시예들에서, 입력들은 API 호출들의 형태로 되어 있다. 입력 모듈(620)은 LCP 데이터를 제어 모듈(625)로 송신한다.
제어기 인스턴스의 제어 모듈(625)은, 제어 모듈(625)이 LCP 데이터를 LFP 데이터로 변환하고 LFP 데이터를 가상화 모듈(630)로 푸시한다는 점에서, 제어 계층(510)과 유사하다. 그에 부가하여, 제어 모듈(625)은 수신된 LCP 데이터가 제어기 인스턴스가 관리하고 있는 LDPS를 가지는지를 판정한다. 제어기 인스턴스가 LCP 데이터에 대한 LDPS의 마스터(즉, LDPS를 관리하는 논리 제어기)인 경우, 제어기 인스턴스의 가상화 모듈은 데이터를 추가로 처리할 것이다. 그렇지 않은 경우, 어떤 실시예들의 제어 모듈(625)은 LCP 데이터를 보조 저장 장치(640)에 저장한다.
제어기 인스턴스의 가상화 모듈(630)은, 가상화 모듈(630)이 LFP 데이터를 UPCP 데이터로 변환한다는 점에서, 가상화 계층(515)과 유사하다. 어떤 실시예들의 가상화 모듈(630)은 이어서 UPCP 데이터를 제어기간 통신 인터페이스(645)를 통해 다른 제어기 인스턴스로 또는 관리 스위칭 요소 통신 인터페이스(650)를 통해 관리 스위칭 요소들로 송신한다.
가상화 모듈(630)은, 다른 제어기 인스턴스가 LDPS를 구현하는 관리 스위칭 요소들 중 적어도 하나를 관리하는 일을 맡고 있는 물리 제어기일 때, UPCP 데이터를 다른 인스턴스로 송신한다. 이것은 가상화 모듈(630)이 UPCP 데이터를 발생한 제어기 인스턴스가 LDPS를 구현하는 관리 스위칭 요소들을 맡고 있는 물리 제어기 또는 섀시 제어기가 아니라 단지 특정의 LDPS를 맡고 있는 논리 제어기일 경우에 그러하다.
가상화 모듈(630)은, 관리 스위칭 요소들이 UPCP 데이터를 관리 스위칭 요소들에 특유한 CPCP 데이터로 변환하도록 구성되어 있을 때, UPCP 데이터를 관리 스위칭 요소들로 송신한다. 이 경우에, 제어기 인스턴스는 UPCP 데이터를 CPCP 데이터로 변환하는 것을 수행하는 커스터마이즈 계층 또는 모듈을 갖지 않을 것이다.
어떤 실시예들에서, 레코드들(635)은 제어기 인스턴스의 관계형 데이터베이스 데이터 구조에 저장되어 있는 한 세트의 레코드들이다. 어떤 실시예들에서, 입력 모듈, 제어 모듈 및 가상화 모듈 중 일부 또는 전부는 관계형 데이터베이스 데이터 구조에 저장되어 있는 레코드들을 사용, 업데이트, 및 관리한다. 즉, 이 모듈들의 입력 및/또는 출력은 관계형 데이터베이스 데이터 구조에 저장된다.
어떤 실시예들에서, 시스템(600)은 각각의 인스턴스의 관계형 데이터베이스 데이터 구조에 동일한 스위칭 요소 데이터 레코드들을 유지하는 반면, 다른 실시예들에서, 시스템(600)은 상이한 인스턴스들의 관계형 데이터베이스 데이터 구조들이 각각의 제어기 인스턴스가 관리하고 있는 LDPS(들)에 기초하여 상이한 스위칭 요소 데이터 레코드들의 세트들을 저장할 수 있게 해준다.
어떤 실시예들의 PTD(640)는 사용자 지정 네트워크 구성 데이터(예컨대, API 호출들의 형태로 되어 있는 입력들로부터 변환된 LCP 데이터)를 저장하기 위한 보조 저장 구조이다. 어떤 실시예들에서, 각각의 제어기 인스턴스의 PTD는 시스템(600)을 사용하는 모든 사용자들에 대한 구성 데이터를 저장하고 있다. 사용자 입력을 수신하는 제어기 인스턴스는, 이 실시예들에서, 모든 제어기 인스턴스의 모든 PTD가 모든 사용자들에 대한 모든 구성 데이터를 가지도록, 구성 데이터를 다른 제어기 인스턴스들의 PTD들로 전파한다. 그렇지만, 다른 실시예들에서, 제어기 인스턴스의 PTD는 제어기 인스턴스가 관리하고 있는 특정의 LDPS에 대한 구성 데이터만을 저장하고 있다.
상이한 제어기 인스턴스들이 동일하거나 중복하는 구성 데이터, 및/또는 보조 저장 구조 레코드들을 저장할 수 있게 해줌으로써, 시스템은, 임의의 네트워크 제어기의 고장(또는 관계형 데이터베이스 데이터 구조 인스턴스 및/또는 보조 저장 구조 인스턴스의 고장)으로 인한 데이터의 손실로부터 보호함으로써, 그의 전체 탄력성을 향상시킨다. 예를 들어, 제어기 인스턴스들에 걸쳐 PTD를 복제하는 것은 고장난 제어기 인스턴스가 그의 PTD를 다른 인스턴스로부터 신속하게 재로드할 수 있게 해준다.
다른 제어기 인스턴스와 통신 채널(예컨대, RPC 채널)을 설정하기 위해 어기간 통신 인터페이스(645)가 [예컨대, 익스포터(도시 생략)에 의해] 사용된다. 도시된 바와 같이, 제어기간 통신 인터페이스는 상이한 제어기 인스턴스들(605 내지 615) 사이의 데이터 교환을 용이하게 해준다.
관리 스위칭 요소 통신 인터페이스(650)는, 앞서 언급한 바와 같이, 제어기 인스턴스와 관리 스위칭 요소 간의 통신을 용이하게 해준다. 어떤 실시예들에서, 가상화 모듈(630)에 의해 발생된 UPCP 데이터를, 범용 데이터를 커스터마이즈된 데이터로 변환할 수 있는 각각의 관리 스위칭 요소로 전파하기 위해 관리 스위칭 요소 통신 인터페이스가 사용된다.
분산된 제어기 인스턴스들 간의 통신들 중 일부 또는 전부에 대해, 시스템(600)은 조정 관리자들(CM)(655)을 사용한다. 각각의 인스턴스에서의 CM(655)은 인스턴스가 특정의 활동들을 다른 인스턴스들과 조정할 수 있게 해준다. 상이한 실시예들은 인스턴스들 사이에서 상이한 세트의 활동들을 조정하기 위해 CM을 사용한다. 이러한 활동들의 예는 관계형 데이터베이스 데이터 구조에 기입하는 것, PTD에 기입하는 것, 스위칭 요소들을 제어하는 것, 제어기 인스턴스들의 장애 허용(fault tolerance)에 관련된 제어기간 통신을 용이하게 해주는 것 등을 포함한다. 또한, LDPS의 마스터들 및 관리 스위칭 요소들의 마스터들을 찾는 데 CM이 사용된다.
앞서 언급한 바와 같이, 시스템(600)의 상이한 제어기 인스턴스들은 동일한 스위칭 요소들 또는 상이한 스위칭 요소들의 동작들을 제어할 수 있다. 이 동작들의 제어를 몇개의 인스턴스들에 걸쳐 분산시킴으로써, 이 시스템은 부가의 스위칭 요소들을 처리하기 위해 보다 쉽게 확장될 수 있다. 구체적으로는, 이 시스템은, 다수의 제어기 인스턴스들을 사용함으로써 실현될 수 있는 효율성의 이점을 누리기 위해, 상이한 스위칭 요소들의 관리를 상이한 제어기 인스턴스들로 분산시킬 수 있다. 이러한 분산 시스템에서, 각각의 제어기 인스턴스는 관리 하에 감소된 수의 스위칭 요소들을 가질 수 있고, 그로써 흐름 엔트리들을 발생하고 스위칭 요소들에 걸쳐 분산시키기 위해 각각의 제어기 인스턴스가 수행할 필요가 있는 계산의 수를 감소시킨다. 다른 실시예들에서, 다수의 제어기 인스턴스들의 사용은 스케일 아웃(scale-out) 네트워크 관리 시스템의 생성을 가능하게 해준다. 대규모 네트워크들에서 네트워크 흐름 테이블들을 어떻게 최상으로 분산시키는지의 계산은 CPU를 많이 사용하는 작업이다. 처리를 제어기 인스턴스들에 걸쳐 분할함으로써, 시스템(600)은, 대규모 네트워크들을 처리할 수 있는 스케일 아웃 네트워크 관리 시스템을 생성하기 위해, 한 세트의 보다 많지만 덜 강력한 컴퓨터 시스템들을 사용할 수 있다.
작업 부하를 분산시키기 위해 그리고 상이한 제어기 인스턴스들로부터의 동작들이 충돌하는 것을 피하기 위해, 어떤 실시예들의 시스템(600)은 시스템(600) 내의 하나의 제어기 인스턴스(예컨대, 605)를 LDPS 및/또는 임의의 주어진 관리 스위칭 요소의 마스터(즉, 논리 제어기 또는 물리 제어기)로서 지정한다. 어떤 실시예들에서, 각각의 마스터 제어기 인스턴스는 마스터가 처리하고 있는 관리 스위칭 요소에 관련된 데이터만을 그의 관계형 데이터베이스 데이터 구조에 저장한다.
어떤 실시예들에서, 앞서 살펴본 바와 같이, CM은 제어기 인스턴스들의 장애 허용에 관련된 제어기간 통신을 용이하게 해준다. 예를 들어, CM은 앞서 기술한 보조 저장 장치를 통해 제어기간 통신을 구현한다. 제어 시스템 내의 제어기 인스턴스가 다수의 원인들(예컨대, 하드웨어 고장, 소프트웨어 고장, 네트워크 고장 등)로 인해 고장날 수 있다. 상이한 실시예들은 제어기 인스턴스가 고장났는지를 판정하기 위해 상이한 기법들을 사용할 수 있다. 어떤 실시예들에서, 제어 시스템 내의 제어기 인스턴스가 고장났는지를 판정하기 위해 일치 프로토콜(consensus protocol)이 사용된다. 이 실시예들 중 어떤 실시예들이 일치 프로토콜을 구현하기 위해 Apache Zookeeper를 사용할 수 있는 반면, 다른 실시예들은 일치 프로토콜을 다른 방식들로 구현할 수 있다.
CM(655)의 어떤 실시예들은, 제어기 인스턴스가 고장났는지를 판정하기 위해, 정의된 타임아웃들을 이용할 수 있다. 예를 들어, 제어기 인스턴스의 CM이 일정 시간(즉, 정의된 타임아웃 양) 내에 (예컨대, 제어 시스템 내의 다른 제어기 인스턴스의 다른 CM으로부터 송신된) 통신에 응답하지 않는 경우, 비응답 제어기 인스턴스는 고장난 것으로 판정된다. 다른 실시예들에서, 제어기 인스턴스가 고장났는지를 판정하기 위해 다른 기법들이 이용될 수 있다.
마스터 제어기 인스턴스가 고장날 때, LDP 세트들 및 스위칭 요소들에 대한 새로운 마스터가 결정될 필요가 있다. CM(655)의 어떤 실시예들은 (예컨대, LDP 세트들의 관리의 분할 및/또는 스위칭 요소들의 관리의 분할을 위해) 마스터 제어기 인스턴스를 선택하는 마스터 선택 프로세스를 수행함으로써 이러한 결정을 한다. 어떤 실시예들의 CM(655)은 고장난 제어기 인스턴스가 그의 마스터였던 LDP 세트들 및 스위칭 요소들 둘 다에 대한 새로운 마스터 제어기 인스턴스를 선택하기 위한 마스터 선택 프로세스를 수행할 수 있다. 그렇지만, 다른 실시예들의 CM(655)은 (1) 고장난 제어기 인스턴스가 그의 마스터였던 LDP 세트들에 대한 새로운 마스터 제어기 인스턴스를 선택하기 위한 마스터 선택 프로세스 및 (2) 고장난 제어기 인스턴스가 그의 마스터였던 스위칭 요소들에 대한 새로운 마스터 제어기 인스턴스를 선택하기 위한 다른 마스터 선택 프로세스를 수행할 수 있다. 이들 경우에, CM(655)은 2개의 상이한 제어기 인스턴스들을 새로운 제어기 인스턴스로서 결정할 수 있다: 하나는 고장난 제어기 인스턴스가 거의 마스터였던 LDP 세트들에 대한 것이고 다른 하나는 고장난 제어기 인스턴스가 그의 마스터였던 스위칭 요소들에 대한 것임.
다른 대안으로서 또는 그와 결합하여, 어떤 실시예들의 클러스터 내의 제어기들은 앞서 언급한 바와 같이 리더 제어기(leader controller)를 결정하기 위해 일치 알고리즘(consensus algorithm)을 실행한다. 리더 제어기는, 특정의 작업 항목에 대한 마스터 제어기를 할당하고, 어떤 경우에, 마스터 제어기가 고장나는 경우 인계받을 상시 대기 제어기(hot-standby controller)를 할당함으로써, 클러스터 내의 각각의 제어기 인스턴스가 맡고 있는 작업들을 분할한다.
어떤 실시예들에서, 마스터 선택 프로세스는 또한, 제어기 인스턴스가 제어 시스템에 추가될 때, LDP 세트들의 관리 및/또는 스위칭 요소들의 관리를 분할하기 위한 것이다. 상세하게는, CM(655)의 어떤 실시예들은, 제어 시스템(600)이 제어 시스템(600) 내의 제어기 인스턴스들의 멤버쉽의 변화를 검출할 때, 마스터 선택 프로세스를 수행한다. 예를 들어, CM(655)은, 제어 시스템(600)이 새로운 네트워크 제어기가 제어 시스템(600)에 추가되었다는 것을 검출할 때, LDP 세트들의 관리 및/또는 스위칭 요소들의 관리의 일부분을 기존의 제어기 인스턴스들로부터 새로운 제어기 인스턴스로 재분배하기 위해 마스터 선택 프로세스를 수행할 수 있다. 그렇지만, 다른 실시예들에서, 제어 시스템(600)이 새로운 네트워크 제어기가 제어 시스템(600)에 추가되었다는 것을 검출할 때, LDP 세트들의 관리 및/또는 스위칭 요소들의 관리의 일부분을 기존의 제어기 인스턴스들로부터 새로운 제어기 인스턴스로 재분배하는 것이 행해지지 않는다. 그 대신에, 이 실시예들에서, 제어 시스템(600)이 미할당된 LDP 세트들 및/또는 스위칭 요소들을 검출할 때, 제어 시스템(600)은 미할당된 LDP 세트들 및/또는 스위칭 요소들(예컨대, 새로운 LDP 세트들 및/또는 스위칭 요소들 또는 고장난 네트워크 제어기로부터의 LDP 세트들 및/또는 스위칭 요소들)을 새로운 제어기 인스턴스에 할당한다.
C. LDP 세트들 및 관리 스위칭 요소들의 관리의 분할
도 7은 도 6의 시스템(600)과 유사한 분산 시스템(700)에서 스위칭 요소에 대한 마스터 제어기 인스턴스(즉, 물리 제어기)를 지정하는 한 예를 나타낸 것이다. 이 예에서, 2명의 상이한 사용자 A 및 B에 대해, 2개의 제어기(705 및 710)가 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 시나리오는 제어기(705)가 사용자 B에 대한 스위칭 요소(S2)에서의 레코드(S2b1)를 업데이트하는 것을 포함한다. 제2 시나리오는, 제어 응용 프로그램(720)이 관계형 데이터베이스 데이터 구조(760)에서의 스위칭 요소(S2) 및 사용자 A에 대한 레코드(S2a1)를 업데이트한 후에, 제어기(705)가 스위칭 요소(S2)에서의 레코드(S2a1)를 업데이트하는 것을 포함한다. 도 7에 예시된 예에서, 이 업데이트는 제어기(710)의 관계형 데이터베이스 데이터 구조(760)로부터 제어기(705)의 관계형 데이터베이스 데이터 구조(755)로 보내지고, 이어서 스위칭 요소(S2)로 보내진다.
상이한 실시예들은 제어기 인스턴스(710)의 관계형 데이터베이스 데이터 구조(760)에 대한 변경들을 제어기 인스턴스(705)의 관계형 데이터베이스 데이터 구조(755)로 전파시키기 위해 상이한 기법들을 사용한다. 예를 들어, 이 업데이트를 전파시키기 위해, 어떤 실시예들에서, 제어기(710)의 가상화 응용 프로그램(750)은 (제어기간 통신 모듈들 또는 익스포터/임포터를 사용하여) 한 세트의 레코드들을 관계형 데이터베이스 데이터 구조(755)로 직접 송신한다. 그에 응답하여, 가상화 응용 프로그램(745)은 관계형 데이터베이스 데이터 구조(755)에 대한 변경들을 스위칭 요소(S2)로 송신할 것이다.
관계형 데이터베이스 데이터 구조 변경들을 다른 제어기 인스턴스의 관계형 데이터베이스 데이터 구조로 전파시키는 대신에, 어떤 실시예들의 시스템(700)은, 제어 응용 프로그램(720)으로부터의 요청에 응답하여, 스위칭 요소(S2)에서의 레코드(S2a1)를 변경하기 위해 다른 기법들을 사용한다. 예를 들어, 어떤 실시예들의 분산 제어 시스템은 상이한 제어기 인스턴스들 사이의 통신 채널들로서 보조 저장 구조(예컨대, 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)로 전파시킬 다수의 메커니즘들을 통해 그의 레코드들을 수정하게 할 것이다.
다른 실시예들에서, 제어기 인스턴스(705)는 관계형 데이터베이스 데이터 구조 레코드(S2a1)의 마스터일 수 있거나, 제어기 인스턴스(705)는 스위칭 요소(S2) 및 그의 관계형 데이터베이스 데이터 구조의 모든 레코드들의 마스터일 수 있다. 이 실시예들에서, 제어 응용 프로그램(720)으로부터의 관계형 데이터베이스 데이터 구조 레코드 수정에 대한 요청은 제어기 인스턴스(705)로 전파되어야만 할 것이고, 제어기 인스턴스(705)는 이어서 관계형 데이터베이스 데이터 구조(755) 및 스위칭 요소(S2)에서의 레코드들을 수정할 것이다.
앞서 언급한 바와 같이, 상이한 실시예들은 상이한 제어기 인스턴스들 간의 통신을 용이하게 해주기 위해 상이한 기법들을 이용한다. 그에 부가하여, 상이한 실시예들은 상이한 방식으로 제어기 인스턴스들을 구현한다. 예를 들어, 어떤 실시예들에서, 제어 응용 프로그램(들)(예컨대, 도 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 호출들을 수신하고, 이를 PTD(825)에 저장되고 다른 제어기 인스턴스로 송신될 수 있는 형태(예컨대, 데이터 튜플들 또는 레코드들)로 변환한다.
이 예에서, 제어기 인스턴스(805)는 이어서 이 레코드들을, 특정의 LDPS의 레코드들을 관리하는 일을 맡고 있는 다른 제어기 인스턴스로 송신한다. 이 예에서, 제어기 인스턴스(810)는 LDPS의 레코드들을 맡고 있다. 제어기 인스턴스(810)는 제어기 인스턴스(805)의 PTD(825)로부터 레코드들을 수신하고, 레코드들을 제어기 인스턴스(810)의 보조 저장 구조인 PTD(845)에 저장한다. 어떤 실시예들에서, 상이한 제어기 인스턴스들의 PTD들은 서로 직접 정보를 교환할 수 있고, 제어기간 통신 인터페이스들에 의존할 필요가 없다.
제어 응용 프로그램(810)은 이어서 이 레코드들의 PTD에의 추가를 검출하고, 레코드들을 처리하여 관계형 데이터베이스 데이터 구조(842)에서의 다른 레코드들을 발생 또는 수정한다. 상세하게는, 제어 응용 프로그램은 LFP 데이터를 발생한다. 가상화 응용 프로그램은 차례로 관계형 데이터베이스 데이터 구조에서의 이 레코드들의 수정 및/또는 추가를 검출하고, 관계형 데이터베이스 데이터 구조에서의 다른 레코드들을 수정 및/또는 발생한다. 이 예에서, 이 다른 레코드들은 UPCP 데이터를 나타낸다. 이 레코드들은 이어서 제어기 인스턴스(810)의 제어기간 통신 인터페이스(850)를 통해 특정의 LDPS를 구현하는 스위칭 요소들 중 적어도 하나를 관리하고 있는 다른 제어기 인스턴스로 송신된다.
이 예에서, 제어기 인스턴스(815)는 스위칭 요소(855)를 관리하고 있는 제어기 인스턴스이다. 이 스위칭 요소는 특정의 LDPS의 적어도 일부를 구현한다. 제어기 인스턴스(815)는 제어기간 통신 인터페이스(865)를 통해 제어기 인스턴스(810)로부터 UPCP 데이터를 나타내는 레코드들을 수신한다. 어떤 실시예들에서, 제어기 인스턴스(815)는 UPCP 데이터를 CPCP 데이터로 변환하는 것을 수행하기 위해 제어 응용 프로그램 및 가상화 응용 프로그램을 가질 것이다. 그렇지만, 이 예에서, 제어기 인스턴스(815)는 단지 UPCP 데이터를 송신할 한 세트의 관리 스위칭 요소들을 식별한다. 이러한 방식으로, 제어기 인스턴스(815)는 이 제어기가 관리를 맡고 있는 관리 스위칭 요소들로 송신할 데이터를 수집하기 위한 집계점으로서 기능한다. 이 예에서, 관리 스위칭 요소(855)는 제어기 인스턴스(815)에 의해 관리되는 스위칭 요소들 중 하나이다.
D. 입력 변환 계층
도 9는 입력 변환 응용 프로그램(900)에 대한 소프트웨어 아키텍처를 개념적으로 나타낸 것이다. 어떤 실시예들의 입력 변환 응용 프로그램은 도 5를 참조하여 앞서 기술한 입력 변환 계층(505)으로서 기능한다. 상세하게는, 입력 변환 응용 프로그램은 사용자가 입력 값들을 입력할 수 있게 해주는 사용자 인터페이스 응용 프로그램으로부터 입력들을 수신한다. 입력 변환 응용 프로그램은 입력들을 요청들로 변환하고, 요청들을 처리하기 위해, 요청들을 하나 이상의 제어기 인스턴스들로 디스패치한다. 어떤 실시예들에서, 입력 변환 응용 프로그램은 제어 응용 프로그램이 실행되는 동일한 제어기 인스턴스에서 실행되는 반면, 다른 실시예들에서, 입력 변환 응용 프로그램은 별도의 제어기 인스턴스로서 실행된다. 이 도면에 도시된 바와 같이, 입력 변환 응용 프로그램은 입력 파서(905), 필터(910), 요청 발생기(915), 요청 저장소(920), 디스패처(925), 응답 관리자(930), 및 제어기간 통신 인터페이스(940)를 포함하고 있다.
어떤 실시예들에서, 입력 변환 응용 프로그램(900)은 LDP 세트들 및 정보 조회들을 지정하기 위한 한 세트의 API 호출들을 지원한다. 이 실시예들에서, 사용자가 입력 값들을 입력할 수 있게 해주는 사용자 인터페이스 응용 프로그램은 입력들을 API 호출들의 형태로 입력 변환 응용 프로그램(900)으로 송신하도록 구현된다. 따라서, 이 API 호출들은 LDPS(예컨대, 사용자에 의해 지정된 논리 스위칭 요소 구성) 및/또는 사용자의 정보 조회(예컨대, 사용자의 논리 스위칭 요소의 논리 포트들에 대한 네트워크 트래픽 통계)를 지정한다. 또한, 어떤 실시예들에서, 입력 변환 응용 프로그램(900)은 논리 제어기들, 물리 제어기들, 및/또는 다른 제어기 인스턴스의 다른 입력 변환 응용 프로그램으로부터 입력들을 받을 수 있다.
어떤 실시예들의 입력 파서(905)는 사용자 인터페이스 응용 프로그램으로부터 API 호출들의 형태로 입력들을 수신한다. 어떤 실시예들에서, 입력 파서는 API 호출들로부터 사용자 입력 값들을 추출하고 입력 값들을 필터(910)로 전달한다. 필터(910)는 특정의 요구사항에 부합하지 않는 입력 값들을 필터링 제거한다. 예를 들어, 필터(910)는 논리 포트에 대해 유효하지 않은 네트워크 주소를 지정하는 입력 값들을 필터링 제거한다. 부합하지 않는 입력 값들을 포함하는 그 API 호출들에 대해, 응답 관리자(930)는 입력들이 부합하지 않는다는 것을 나타내는 응답을 사용자로 송신한다.
요청 발생기(915)는 하나 이상의 제어기 인스턴스들로 송신될 요청들을 발생하고, 이 제어기 인스턴스들은 요청들에 대한 응답들을 생성하기 위해 요청들을 처리할 것이다. 이 요청들은 수신측 제어기 인스턴스들이 처리할 LDPS 데이터 및/또는 정보 조회들을 포함할 수 있다. 예를 들어, 요청은 사용자가 관리하고 있는 논리 스위칭 요소의 논리 포트의 통계 정보를 요구할 수 있다. 이 요청에 대한 응답은 논리 스위칭 요소와 연관되어 있는 LDPS를 관리하는 일을 맡고 있는 제어기 인스턴스에 의해 준비되는 요청된 통계 정보를 포함할 것이다.
상이한 실시예들의 요청 발생기(915)는, 요청들을 수신하고 처리하는 제어기 인스턴스들의 구현에 의존하여, 상이한 형식들에 따라 요청들을 발생한다. 예를 들어, 어떤 실시예들의 요청 발생기(915)가 발생하는 요청들은 요청들을 수신하는 제어기 인스턴스들의 관계형 데이터베이스 데이터 구조들에 저장하기에 적당한 레코드들(예컨대, 데이터 튜플들)의 형태로 되어 있다. 이 실시예들 중 어떤 실시예들에서, 수신측 제어기 인스턴스들은 요청들을 나타내는 레코드들을 처리하기 위해 nLog 테이블 매핑 엔진을 사용한다. 다른 실시예들에서, 요청들은 요청들을 수신하는 제어기 인스턴스들의 NIB 데이터 구조들과 상호작용할 수 있는 객체 지향 데이터 객체들의 형태로 되어 있다. 이 실시예들에서, 수신측 제어기 인스턴스들은 nLog 테이블 매핑 엔진을 거치는 일 없이 NIB 데이터 구조 상에서 직접 데이터 객체를 처리한다.
어떤 실시예들의 요청 발생기(915)는, 디스패처(925)가 요청들을 적절한 제어기 인스턴스들로 송신할 수 있도록, 발생된 요청들을 요청 저장소(920)에 보관한다. 디스패처(925)는 각각의 요청이 송신되어야만 하는 제어기 인스턴스들을 식별한다. 어떤 경우에, 디스패처는 요청과 연관되어 있는 LDPS를 보고 그 LDPS의 마스터인 제어기 인스턴스를 식별한다. 어떤 경우에, 디스패처는, 요청이 스위칭 요소와 특정하여 관련되어 있을 때(예컨대, 요청이 스위칭 요소의 포트에 매핑되는 논리 포트의 통계 정보에 관한 것일 때), 특정의 스위칭 요소의 마스터(즉, 물리 제어기)를 요청을 송신할 제어기 인스턴스로서 식별한다. 디스패처는 요청을 식별된 제어기 인스턴스로 송신한다. 수신측 제어기 인스턴스들은, 요청들이 정보 조회들을 포함할 때, 응답들을 반환한다.
제어기간 통신 인터페이스(940)는, 제어기간 통신 인터페이스(940)가 다른 제어기 인스턴스와 통신 채널(예컨대, RPC 채널)(이를 통해 요청들이 송신될 수 있음)을 설정한다는 점에서, 도 6을 참조하여 앞서 기술한 제어기간 통신 인터페이스(645)와 유사하다. 어떤 실시예들의 통신 채널은 양방향인 반면, 다른 실시예들에서, 통신 채널은 단방향이다. 채널이 단방향일 때, 입력 변환 응용 프로그램이 상이한 채널들을 통해 요청들을 송신하고 응답들을 수신할 수 있도록, 제어기간 통신 인터페이스(inter-controller communication interface)는 다른 제어기 인스턴스와 다수의 채널들을 설정한다.
수신측 제어기 인스턴스들이 정보 조회들을 지정하는 요청들을 수신할 때, 제어기 인스턴스는 요청들을 처리하고 조회된 정보를 포함하는 응답들을 생성한다. 응답 관리자(930)는, 제어기간 통신 인터페이스(940)에 의해 설정된 채널(들)을 통해, 요청들을 처리한 제어기 인스턴스들로부터 응답들을 수신한다. 어떤 경우에, 송출된 요청에 대해 2개 이상의 응답들이 반환될 수 있다. 예를 들어, 사용자가 관리하고 있는 논리 스위칭 요소의 모든 논리 포트들로부터의 통계 정보에 대한 요청은 각각의 제어기로부터의 응답을 반환할 것이다. 논리 포트들에 매핑되는 포트들을 갖는 다수의 상이한 스위칭 요소들에 대한 다수의 물리 제어기 인스턴스들로부터의 응답들은, 입력 변환 응용 프로그램(900)으로 직접 또는 논리 스위치와 연관되어 있는 LDPS의 마스터를 통해, 입력 변환 응용 프로그램(900)으로 반환될 수 있다. 이러한 경우에, 어떤 실시예들의 응답 관리자(930)는 그 응답들을 병합하고 단일의 병합된 응답을 사용자 인터페이스 응용 프로그램으로 송신한다.
앞서 언급한 바와 같이, 제어기 인스턴스에서 실행 중인 제어 응용 프로그램은, 변환 동작들을 수행함으로써, LCP 데이터를 나타내는 데이터 레코드들을 LFP 데이터를 나타내는 데이터 레코드들로 변환한다. 구체적으로는, 어떤 실시예들에서, 제어 응용 프로그램은 가상화 응용 프로그램에 의해 생성되는 LDPS 테이블들(예컨대, 논리 전달 테이블들)을 LDP 세트들로 채운다.
E. nLog 엔진
어떤 실시예들에서, 제어기 인스턴스는 데이터 로그 테이블 매핑(datalog table mapping) 기법의 변형을 사용하는 nLog 테이블 매핑 엔진을 사용하여 그의 매핑 동작들을 수행한다. 데이터 로그는 데이터 로그 관리의 분야에서 한 세트의 테이블들을 다른 세트의 테이블들에 매핑하기 위해 사용된다. 데이터 로그는, 그의 현재 구현이 종종 느리기 때문에, 네트워크 제어 시스템의 가상화 응용 프로그램에서 테이블 매핑 동작들을 수행하는 데 적당한 도구가 아니다.
그에 따라, 어떤 실시예들의 nLog 엔진은 LDPS 데이터 튜플들의 관리 스위칭 요소의 데이터 튜플들로의 실시간 매핑을 수행할 수 있도록 신속하게 동작하게 맞춤 설계되어 있다. 이 맞춤 설계는 몇가지 맞춤 설계 선택들에 기초하고 있다. 예를 들어, 어떤 실시예들은 응용 프로그램 개발자에 의해(예컨대, 제어 응용 프로그램의 개발자에 의해) 표현되는 한 세트의 고수준 선언 규칙들(high level declaratory rules)로부터 nLog 테이블 매핑 엔진을 컴파일한다. 이 실시예들 중 어떤 실시예들에서, nLog 엔진에 대해 행해지는 하나의 맞춤 설계 선택은 응용 프로그램 개발자가 선언 규칙들을 표현하는 데 AND 연산자만을 사용할 수 있게 해주는 것이다. 개발자가 다른 연산자들(OR, XOR 기타 등등)을 사용하지 못하게 함으로써, 이 실시예들은 얻어지는 nLog 엔진의 규칙들이 런타임 시에 보다 빠르게 실행되는 AND 연산들로 표현되도록 한다.
다른 맞춤 설계 선택은 nLog 엔진에 의해 수행되는 결합 연산(join operation)에 관한 것이다. 결합 연산들은 상이한 테이블들의 레코드들 사이에 연관 관계(association)을 생성하는 통상의 데이터베이스 연산들이다. 어떤 실시예들에서, nLog 엔진은 그의 결합 연산을 내측 결합 연산(inner join operation)[내부 결합 연산(internal join operation)이라고도 함]로 제한하는데, 그 이유는 외측 결합 연산[외부 결합 연산(external join operation)이라고도 함]을 수행하는 것이 시간이 많이 걸리고 따라서 엔진의 실시간 연산에 비실용적일 수 있기 때문이다.
또 다른 맞춤 설계 선택은 nLog 엔진을, 몇개의 상이한 제어기 인스턴스들에 의해 실행되는 분산 테이블 매핑 엔진으로서 구현하는 것이다. 어떤 실시예들은 LDP 세트들의 관리를 분할함으로써 nLog 엔진을 분산 방식으로 구현한다. LDP 세트들의 관리를 분할하는 것은 각각의 특정의 LDPS에 대해 단지 하나의 제어기 인스턴스를 그 특정의 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), 변환기(translator)(1050), 익스포터(1055), PTD(1060), 및 컴파일러(1035)를 포함하고 있다. 컴파일러(1035)는 응용 프로그램의 다른 구성요소들과 상이한 순간에 동작하는 응용 프로그램의 한 구성요소이다. 개발자가 특정의 제어 응용 프로그램 및/또는 가상화된 환경에 대한 규칙 엔진을 지정할 필요가 있을 때 컴파일러가 동작하는 반면, 나머지 응용 프로그램의 모듈들은 응용 프로그램이 하나 이상의 사용자에 의해 지정된 LDP 세트들을 배포하기 위해 가상화 응용 프로그램과 인터페이스하는 런타임 시에 동작한다.
어떤 실시예들에서, 컴파일러(1035)는 선언형 언어(declarative language)로 지정되는 비교적 작은 세트의(예컨대, 수백 라인의) 선언 명령어들(1040)을 받고 이들을, 응용 프로그램의 테이블 매핑을 수행하는 규칙 엔진(1025)의 동작을 지정하는 큰 세트의(예컨대, 수천 라인의) 코드(즉, 오브젝트 코드)로 변환한다. 그에 따라, 컴파일러는 제어 응용 프로그램을 정의하고 업데이트하는 제어 응용 프로그램 개발자의 프로세스를 크게 간단화시킨다. 이러한 이유는 컴파일러가 개발자가 제어 응용 프로그램의 복잡한 매핑 동작의 간소한 정의를 가능하게 해주는 고수준 프로그래밍 언어를 사용할 수 있게 해주고 다수의 변경들(예컨대, 제어 응용 프로그램에 의해 지원되는 논리 네트워킹 함수들의 변경, 제어 응용 프로그램의 원하는 거동에 대한 변경 등)에 응답하여 이 매핑 동작을 나중에 업데이트할 수 있게 해주기 때문이다. 더욱이, 컴파일러는, 개발자가 매핑 동작을 정의하고 있을 때, 개발자가 이벤트들이 제어 응용 프로그램에 도착하게 될 순서를 고려하지 않아도 되게 해준다.
어떤 실시예들에서, 규칙 엔진(RE) 입력 테이블들(1010)은 사용자 및/또는 제어 응용 프로그램에 의해 지정되는 논리 데이터 및/또는 스위칭 구성들(예컨대, 접근 제어 목록 구성, 사설 가상망 구성, 포트 보안 구성 등)을 갖는 테이블들을 포함한다. 어떤 실시예들에서, 입력 테이블들(1010)은 또한 네트워크 제어 시스템에 의해 관리되는 스위칭 요소들로부터의 물리 데이터를 포함하는 테이블들을 포함한다. 어떤 실시예들에서, 이러한 물리 데이터는 관리 스위칭 요소들에 관한 데이터 및 상이한 사용자들의 상이한 LDP 세트들을 배포하기 위해 네트워크 제어 시스템에 의해 이용되는 네트워크 구성에 관한 기타 데이터를 포함한다.
RE 입력 테이블들(1010)은 사용자들에 의해 제공되는 LCP 데이터에 의해 부분적으로 채워진다. RE 입력 테이블들(1010)은 또한 LFP 데이터 및 UPCP 데이터를 포함한다. RE 입력 테이블들(1010)에 부가하여, 제어 응용 프로그램(1000)은 규칙 엔진(1025)이 그의 테이블 매핑 동작들을 위한 입력들을 수집하기 위해 사용하는 기타 테이블들(1015)을 포함한다. 이 테이블들(1015)은 규칙 엔진(1025)이 그의 테이블 매핑 동작들을 수행하기 위해 필요로 하는 상수들에 대해 정의된 값들을 저장하는 상수 테이블들을 포함한다. 예를 들어, 상수 테이블들(1015)은 값 0으로서 정의되어 있는 상수 "zero", 값 4000으로서 정의되어 있는 상수 "dispatch_port_no", 및 값 0xFF:FF:FF:FF:FF:FF로서 정의되어 있는 상수 "broadcast MAC addr"를 포함할 수 있다.
규칙 엔진(1025)이 상수들을 참조할 때, 상수들에 대해 정의된 대응하는 값이 실제로 검색되고 사용된다. 그에 부가하여, 상수 테이블들(1015)에서의 상수들에 대해 정의된 값들이 수정 및/또는 업데이트될 수 있다. 이러한 방식으로, 상수 테이블들(1015)은, 규칙 엔진(1025)의 동작을 지정하는 코드를 재작성 또는 재컴파일할 필요 없이, 규칙 엔진(1025)이 참조하는 상수들에 대해 정의된 값을 수정하는 기능을 제공한다. 테이블들(1015)은 규칙 엔진(1025)이 출력 테이블들(1045)을 채우기 위해 필요한 값들을 계산하기 위해 사용할 필요가 있는 함수들을 저장하는 함수 테이블들을 추가로 포함하고 있다.
규칙 엔진(1025)은 LCP 데이터를 LFP 데이터로 변환하는 하나의 방식을 지정하는 테이블 매핑 동작들을 수행한다. 규칙 엔진(RE) 입력 테이블들 중 하나가 수정될 때마다, 규칙 엔진은 하나 이상의 RE 출력 테이블들에서의 하나 이상의 데이터 튜플들을 수정할지도 모르는 한 세트의 테이블 매핑 동작들을 수행한다.
도 10에 도시된 바와 같이, 규칙 엔진(1025)은 이벤트 처리기(1022), 몇개의 질의 계획들(1027), 및 테이블 처리기(1030)를 포함하고 있다. 각각의 질의 계획은 RE 입력 테이블들 중 하나에 대한 수정이 있을 시에 수행되어야 하는 한 세트의 결합 연산들을 지정하는 한 세트의 규칙들이다. 이러한 수정을 이하에서 입력 테이블 이벤트(input table event)라고 한다. 이 예에서, 한 세트의 선언들(1040)에서의 하나의 선언 규칙으로부터 컴파일러(1035)에 의해 각각의 질의 계획이 발생된다. 어떤 실시예들에서, 하나의 선언 규칙으로부터 2개 이상의 질의 계획이 발생된다. 예를 들어, 하나의 선언 규칙에 의해 결합되는 테이블들 각각에 대해 질의 계획이 생성된다. 즉, 하나의 선언 규칙이 4개의 테이블들을 결합하라고 지정할 때, 그 하나의 선언에 대해 4개의 상이한 질의 계획들이 생성될 것이다. 어떤 실시예들에서, nLog 선언형 언어를 사용하여 질의 계획들이 정의된다.
규칙 엔진(1025)의 이벤트 처리기(1022)는 각각의 입력 테이블 이벤트의 발생을 검출한다. 상이한 실시예들의 이벤트 처리기는 상이한 방식으로 입력 테이블 이벤트의 발생을 검출한다. 어떤 실시예들에서, 이벤트 처리기는 RE 입력 테이블들의 레코드들에 대한 변경들을 통지하기 위해 RE 입력 테이블들에 콜백들(callbacks)을 등록한다. 이러한 실시예들에서, 이벤트 처리기(1022)는, RE 입력 테이블로부터 그의 레코드들 중 하나가 변경되었다는 통지를 수신할 때, 입력 테이블 이벤트를 검출한다.
검출된 입력 테이블 이벤트에 응답하여, 이벤트 처리기(1022)는 (1) 검출된 테이블 이벤트에 대한 적절한 질의 계획을 선택하고, (2) 질의 계획을 실행하라고 테이블 처리기(1030)에 지시한다. 질의 계획을 실행하기 위해, 어떤 실시예들에서, 테이블 처리기(1030)는 하나 이상의 입력 및 기타 테이블들(1010 및 1015)로부터 하나 이상의 세트의 데이터 값들을 나타내는 하나 이상의 레코드들을 생성하기 위해 질의 계획에 의해 지정된 결합 연산들을 수행한다. 어떤 실시예들의 테이블 처리기(1030)는 이어서 (1) 결합 연산들에 의해 생성된 레코드(들)로부터 데이터 값들의 서브셋을 선택하기 위해 선택 동작을 수행하고, (2) 데이터 값들의 선택된 서브셋을 하나 이상의 RE 출력 테이블들(1045)에 기입한다.
어떤 실시예들에서, RE 출력 테이블들(1045)은 논리 및 물리 네트워크 요소 데이터 속성들 둘 다를 저장한다. 테이블들(1045)은 RE 출력 테이블이라고 하는데, 그 이유는 규칙 엔진(1025)의 테이블 매핑 동작들의 출력을 저장하기 때문이다. 어떤 실시예들에서, RE 출력 테이블들은 몇개의 상이한 카테고리들로 그룹화될 수 있다. 예를 들어, 어떤 실시예들에서, 이 테이블들은 RE 입력 테이블들 및/또는 제어 응용 프로그램(CA) 출력 테이블들일 수 있다. 테이블에서의 변경이 규칙 엔진으로 하여금 질의 계획의 실행을 필요로 하는 입력 테이블를 검출하게 할 때, 테이블은 RE 입력 테이블이다. RE 출력 테이블(1045)이 또한 규칙 엔진으로 하여금 다른 질의 계획을 수행하게 하는 이벤트를 발생하는 RE 입력 테이블(1010)일 수 있다. 이러한 이벤트는 내부 입력 이벤트(internal input event)라고 하고, 제어 응용 프로그램(1000) 또는 임포터(1020)에 의해 행해지는 RE 입력 테이블 수정에 의해 야기되는 이벤트인 외부 입력 이벤트(external input event)와 대비된다.
이하에서 더 기술하는 바와 같이, 테이블에서의 변경이 익스포터(1055)로 하여금 변경을 가상화 응용 프로그램(1005)으로 내보내기하게 할 때 테이블은 CA 출력 테이블이다. 어떤 실시예들에서, RE 출력 테이블들(1045)에서의 테이블은 RE 입력 테이블, CA 출력 테이블, 또는 RE 입력 테이블 및 CA 출력 테이블 둘 다일 수 있다.
익스포터(1055)는 RE 출력 테이블들(1045)의 CA 출력 테이블들에 대한 변경들을 검출한다. 상이한 실시예들의 익스포터는 상이한 방식으로 CA 출력 테이블 이벤트의 발생을 검출한다. 어떤 실시예들에서, 익스포터는 CA 출력 테이블들의 레코드들에 대한 변경들을 통지하기 위해 CA 출력 테이블들에 콜백들을 등록한다. 이러한 실시예들에서, 익스포터(1055)는, CA 출력 테이블로부터 그의 레코드들 중 하나가 변경되었다는 통지를 수신할 때, 출력 테이블 이벤트를 검출한다.
검출된 출력 테이블 이벤트에 응답하여, 익스포터(1055)는 수정된 CA 출력 테이블들에서의 수정된 데이터 튜플들 중 일부 또는 전부를 받고 이 수정된 데이터 튜플(들)을 가상화 응용 프로그램(1005)의 입력 테이블들(도시 생략)로 전파한다. 어떤 실시예들에서, 익스포터(1055)가 데이터 튜플들을 가상화 응용 프로그램으로 푸시하는 대신에, 가상화 응용 프로그램(1005)은 데이터 튜플들을 CA 출력 테이블들(1045)로부터 가상화 응용 프로그램의 입력 테이블들로 풀링한다. 어떤 실시예들에서, 제어 응용 프로그램(1000)의 CA 출력 테이블들(1045) 및 가상화 응용 프로그램(1005)의 입력 테이블들이 동일할 수 있다. 또 다른 실시예들에서, 제어 및 가상화 응용 프로그램들은 한 세트의 테이블들을 사용하고, 따라서 CA 출력 테이블들이 본질적으로 가상화 응용 프로그램(VA) 입력 테이블들이다.
어떤 실시예들에서, 제어 응용 프로그램은 제어 응용 프로그램이 관리를 맡고 있지 않은 LDP 세트들에 대한 데이터를 출력 테이블들(1045)에 유지하지 않는다. 그렇지만, 이러한 데이터가 PTD에 저장될 수 있는 형식으로 변환기(1050)에 의해 변환될 것이고, PTD에 저장된다. 제어 응용 프로그램(1000)의 PTD는 이 데이터를 다른 제어기 인스턴스들의 하나 이상의 다른 제어 응용 프로그램 인스턴스들로 전파하고, 따라서 데이터와 연관되어 있는 LDP 세트들을 관리하는 일을 맡고 있는 다른 제어기 인스턴스들 중 일부가 데이터를 처리할 수 있다.
어떤 실시예들에서, 제어 응용 프로그램은 또한 출력 테이블들(1045)에 저장되어 있는 데이터(즉, 제어 응용 프로그램이 출력 테이블들에 유지하는 데이터)를 데이터의 탄력성을 위해 PTD로 가져간다. 이러한 데이터가 또한 변환기(1050)에 의해 변환되고, PTD에 저장되며, 다른 제어기 인스턴스들의 다른 제어 응용 프로그램 인스턴스들로 전파된다. 따라서, 이 실시예들에서, 제어기 인스턴스의 PTD는 네트워크 제어 시스템에 의해 관리되는 모든 LDP 세트들에 대한 모든 구성 데이터를 가지고 있다. 즉, 어떤 실시예들에서, 각각의 PTD는 논리 네트워크의 구성의 전역적 뷰를 포함하고 있다.
임포터(1020)는 다수의 상이한 입력 데이터 소스들과 인터페이스하고, 입력 테이블들(1010)을 수정 또는 생성하기 위해 입력 데이터를 사용한다. 어떤 실시예들의 임포터(1020)는 제어기간 통신 인터페이스(도시 생략)를 통해 입력 변환 응용 프로그램(1070)으로부터 입력 데이터를 수신한다. 임포터(1020)는 또한, 다른 제어기 인스턴스들로부터 PTD를 통해 수신된 데이터가 입력 테이블들(1010)을 수정 또는 생성하기 위해 입력 데이터로서 사용될 수 있도록, PTD(1060)와 인터페이스한다. 더욱이, 임포터(1020)는 또한 RE 입력 테이블들 그리고 RE 입력 테이블들 및 RE 출력 테이블들(1045)의 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), PTD(1160), 및 컴파일러(1135)를 포함하고 있다. 컴파일러(1135)는 도 10을 참조하여 앞서 기술한 컴파일러(1035)와 유사하다.
가상화 응용 프로그램(1100)이 LDPS 데이터 튜플들을 UPCP 데이터 튜플들에 매핑하기 위해, 어떤 실시예들에서, 개발자는 LDPS 데이터 튜플들을 어떤 관리 스위칭 요소들에 대한 UPCP 데이터 튜플들에 매핑하는 명령어들을 포함하는 선언 명령어들(1140)을 선언형 언어로 지정한다. 어떤 이러한 실시예들에서, 이 스위칭 요소들은 UPCP 데이터를 CPCP 데이터로 변환하는 UPCP들을 포함한다.
다른 관리 스위칭 요소들에 대해, 가상화 응용 프로그램(1100)은 LDPS 데이터 튜플들을 UPCP들을 갖지 않는 각각의 관리 스위칭 요소에 특유한 CPCP 데이터 튜플들에 매핑한다. 어떤 실시예들에서, 가상화 응용 프로그램(1100)이 다른 제어기 인스턴스의 가상화 응용 프로그램으로부터 UPCP 데이터를 수신할 때, 가상화 응용 프로그램(1100)은 또한, 범용 물리 제어 평면 데이터 튜플들을 물리 데이터 경로 세트 데이터 튜플들로 변환하기 위해, 출력 테이블들(1140)에서의 UPCP 데이터 튜플들을 UPCP들을 갖지 않는 어떤 관리 스위칭 요소에 대한 CPCP 데이터 튜플들에 매핑한다.
어떤 실시예들에서, UPCP 튜플들을 특정의 관리 스위칭 요소에 특유한 CPCP 데이터로 변환하는 섀시 제어기가 있을 때, 가상화 응용 프로그램(1100)은 입력 UPCP 데이터를 특정의 관리 스위칭 요소에 대한 CPCP 데이터로 변환하지 않는다. 이 실시예들에서, 가상화 응용 프로그램(1100)을 가지는 제어기 인스턴스는 제어기 인스턴스가 그의 마스터인 한 세트의 관리 스위칭 요소들을 식별하고 UPCP 데이터를 그 세트의 관리 스위칭 요소들로 배포한다.
RE 입력 테이블들(1110)은 RE 입력 테이블들(1010)과 유사하다. RE 입력 테이블들(1110)에 부가하여, 가상화 응용 프로그램(1100)은 규칙 엔진(1125)이 그의 테이블 매핑 동작들을 위한 입력들을 수집하기 위해 사용하는 기타 테이블들(1115)을 포함한다. 이 테이블들(1115)은 테이블들(1015)과 유사하다. 도 11에 도시된 바와 같이, 규칙 엔진(1125)은 이벤트 처리기(1022), 질의 계획(1027), 및 테이블 처리기(1030)와 유사하게 기능하는 이벤트 처리기(1122), 몇개의 질의 계획들(1127), 및 테이블 처리기(1130)를 포함한다.
어떤 실시예들에서, RE 출력 테이블들(1145)은 논리 및 물리 네트워크 요소 데이터 속성들 둘 다를 저장한다. 테이블들(1145)은 RE 출력 테이블이라고 하는데, 그 이유는 규칙 엔진(1125)의 테이블 매핑 동작들의 출력을 저장하기 때문이다. 어떤 실시예들에서, RE 출력 테이블들은 몇개의 상이한 카테고리들로 그룹화될 수 있다. 예를 들어, 어떤 실시예들에서, 이 테이블들은 RE 입력 테이블들 및/또는 가상화 응용 프로그램(VA) 출력 테이블들일 수 있다. 테이블에서의 변경이 규칙 엔진으로 하여금 질의 계획의 실행을 필요로 하는 입력 테이블를 검출하게 할 때, 테이블은 RE 입력 테이블이다. RE 출력 테이블(1145)이 또한, 규칙 엔진에 의해 수정된 후에, 규칙 엔진으로 하여금 다른 질의 계획을 수행하게 하는 이벤트를 발생하는 RE 입력 테이블(1110)일 수 있다. 이러한 이벤트는 내부 입력 이벤트라고 하고, 임포터(1120)를 통해 제어 응용 프로그램(1105)에 의해 행해지는 RE 입력 테이블 수정에 의해 야기되는 이벤트인 외부 입력 이벤트와 대비된다.
테이블에서의 변경이 익스포터(1155)로 하여금 변경을 관리 스위칭 요소들 또는 기타 제어기 인스턴스들로 내보내기하게 할 때 테이블은 VA 출력 테이블이다. 도 12에 도시된 바와 같이, 어떤 실시예들에서, RE 출력 테이블들(1145)에서의 테이블은 RE 입력 테이블(1110), VA 출력 테이블(1205), 또는 RE 입력 테이블(1110) 및 VA 출력 테이블(1205) 둘 다일 수 있다.
익스포터(1155)는 RE 출력 테이블들(1145)의 VA 출력 테이블들(1205)에 대한 변경들을 검출한다. 상이한 실시예들의 익스포터는 상이한 방식으로 VA 출력 테이블 이벤트의 발생을 검출한다. 어떤 실시예들에서, 익스포터는 VA 출력 테이블들의 레코드들에 대한 변경들을 통지하기 위해 VA 출력 테이블들에 콜백들을 등록한다. 이러한 실시예들에서, 익스포터(1155)는, VA 출력 테이블로부터 그의 레코드들 중 하나가 변경되었다는 통지를 수신할 때, 출력 테이블 이벤트를 검출한다.
검출된 출력 테이블 이벤트에 응답하여, 익스포터(1155)는 수정된 VA 출력 테이블들에서의 각각의 수정된 데이터 튜플을 받고 이 수정된 데이터 튜플을 다른 제어기 인스턴스들 중 하나 이상(예컨대, 섀시 제어기)으로 또는 관리 스위칭 요소들 중 하나 이상으로 전파한다. 이것을 함에 있어서, 익스포터는 레코드들에 의해 지정된 바와 같이 LDPS(예컨대, 하나 이상의 논리 스위칭 구성들)를 하나 이상의 관리 스위칭 요소들로 배포하는 것을 완료한다.
어떤 실시예들에서, VA 출력 테이블들이 논리 및 물리 네트워크 요소 데이터 속성들 둘 다를 저장하기 때문에, 어떤 실시예들에서, PTD(1160)는 출력 테이블들(1145)에서의 논리 및 물리 네트워크 요소 데이터 속성들과 동일하거나 그들로부터 도출되는 논리 및 물리 네트워크 요소 속성들 둘 다를 저장한다. 그렇지만, 다른 실시예들에서, PTD(1160)는 출력 테이블들(1145)에서의 물리 네트워크 요소 데이터 속성들과 동일하거나 그들로부터 도출되는 물리 네트워크 요소 속성들만을 저장한다.
어떤 실시예들에서, 가상화 응용 프로그램은 가상화 응용 프로그램이 관리를 맡고 있지 않은 LDP 세트들에 대한 데이터를 출력 테이블들(1145)에 유지하지 않는다. 그렇지만, 이러한 데이터가 PTD에 저장될 수 있는 형식으로 변환기(1150)에 의해 변환될 것이고, 이어서 PTD에 저장된다. 가상화 응용 프로그램(1100)의 PTD는 이 데이터를 다른 제어기 인스턴스들의 하나 이상의 다른 가상화 응용 프로그램 인스턴스들로 전파하고, 따라서 데이터와 연관되어 있는 LDP 세트들을 관리하는 일을 맡고 있는 다른 가상화 응용 프로그램 인스턴스들 중 일부가 데이터를 처리할 수 있다.
어떤 실시예들에서, 가상화 응용 프로그램은 또한 출력 테이블들(1145)에 저장되어 있는 데이터(즉, 가상화 응용 프로그램이 출력 테이블들에 유지하는 데이터)를 데이터의 탄력성을 위해 PTD로 가져간다. 이러한 데이터가 또한 변환기(1150)에 의해 변환되고, PTD에 저장되며, 다른 제어기 인스턴스들의 다른 가상화 응용 프로그램 인스턴스들로 전파된다. 따라서, 이 실시예들에서, 제어기 인스턴스의 PTD는 네트워크 제어 시스템에 의해 관리되는 모든 LDP 세트들에 대한 모든 구성 데이터를 가지고 있다. 즉, 어떤 실시예들에서, 각각의 PTD는 논리 네트워크의 구성의 전역적 뷰를 포함하고 있다.
임포터(1120)는 다수의 상이한 입력 데이터 소스들과 인터페이스하고, 입력 테이블들(1110)을 수정 또는 생성하기 위해 입력 데이터를 사용한다. 어떤 실시예들의 임포터(1120)는 제어기간 통신 인터페이스를 통해 입력 변환 응용 프로그램(1170)으로부터 입력 데이터를 수신한다. 임포터(1120)는 또한, 다른 제어기 인스턴스들로부터 PTD를 통해 수신된 데이터가 입력 테이블들(1110)을 수정 또는 생성하기 위해 입력 데이터로서 사용될 수 있도록, PTD(1160)와 인터페이스한다. 더욱이, 임포터(1120)는 또한 RE 입력 테이블들 그리고 RE 입력 테이블들 및 RE 출력 테이블들(1145)의 VA 출력 테이블들에 대한 변경들을 검출한다.
H. 네트워크 제어기
도 13은 본 발명의 어떤 실시예들의 제어 응용 프로그램 및 가상화 응용 프로그램의 테이블 매핑 동작들의 간단화된 뷰를 나타낸 것이다. 이 도면의 상반부에 나타낸 바와 같이, 제어 응용 프로그램(1305)은 LCP 데이터를 LFP 데이터에 매핑하고, 어떤 실시예들의 가상화 응용 프로그램(1310)은 이어서 이를 UPCP 데이터 또는 CPCP 데이터에 매핑한다.
이 도면의 하반부는 제어 응용 프로그램 및 가상화 응용 프로그램의 테이블 매핑 동작들을 나타내고 있다. 이 하반부에 도시된 바와 같이, 제어 응용 프로그램의 입력 테이블들(1315)은 LCP 데이터, LFP(LFP) 데이터 및 UPCP 데이터를 저장하는데, 그 이유는 이들 데이터 모두의 집합체가, 상수 및 함수 테이블들(도시 생략)에 있는 데이터와 함께, 어떤 실시예들에서, 입력 LCP 데이터로부터 LFP 데이터를 발생하기 위해 제어 응용 프로그램의 nLog 엔진(1320)에 의해 사용되기 때문이다.
이 도면은 임포터(1350)가 (예컨대, 입력 변환 응용 프로그램을 통해) 사용자로부터 LCP 데이터를 수신하고 제어 응용 프로그램의 입력 테이블들(1315)을 LCP 데이터로 업데이트하는 것을 나타내고 있다. 이 도면은 또한, 어떤 실시예들에서, 임포터(1350)가 PTD(1340)에서의 변경들(예컨대, 다른 제어기 인스턴스들로부터 시작된 LCP 데이터 변경들)을 검출하거나 수신하고, 이러한 변경들에 응답하여, 임포터(1350)는 입력 테이블들(1315)을 업데이트할 수 있다.
이 도면의 하반부는 또한 가상화 응용 프로그램(1310)의 테이블 매핑 동작들을 나타내고 있다. 도시된 바와 같이, 가상화 응용 프로그램의 입력 테이블들(1355)은 LFP 데이터를 저장하는데, 그 이유는 LFP 데이터가, 상수 및 함수 테이블들(도시 생략)에 있는 데이터와 함께, 어떤 실시예들에서, UPCP 데이터 및/또는 CPCP 데이터를 발생하기 위해 가상화 응용 프로그램의 nLog 엔진(1320)에 의해 사용되기 때문이다. 어떤 실시예들에서, 익스포터(1370)는, 이 데이터를 관리 스위칭 요소들로 또는 UPCP 데이터를 관리 스위칭 요소들에 특유한 CPCP 데이터로 변환하는 하나 이상의 관리 스위칭 요소들로 푸시하기 전에, CPCP 데이터를 발생하기 위해 발생된 UPCP 데이터를 하나 이상의 제어기 인스턴스들로 송신한다. 다른 실시예들에서, 익스포터(1370)는, 이 관리 스위칭 요소들의 전달 거동들을 정의하기 위해, 발생된 CPCP 데이터를 하나 이상의 관리 스위칭 요소들로 송신한다.
어떤 실시예들에서, UPCP 데이터를 특정의 관리 스위칭 요소에 특유한 CPCP 데이터로 변환하는 섀시 제어기가 있을 때, 가상화 응용 프로그램(1310)은 입력 UPCP 데이터를 특정의 관리 스위칭 요소에 대한 CPCP 데이터로 변환하지 않는다. 이 실시예들에서, 가상화 응용 프로그램(1310)을 가지는 제어기 인스턴스는 제어기 인스턴스가 그의 마스터인 한 세트의 관리 스위칭 요소들을 식별하고 UPCP 데이터를 그 세트의 관리 스위칭 요소들로 배포한다.
이 도면은 임포터(1375)가 제어 응용 프로그램(1305)으로부터 LFP 데이터를 수신하고 가상화 응용 프로그램의 입력 테이블들(1355)을 LFP 데이터로 업데이트하는 것을 나타내고 있다. 이 도면은 또한, 어떤 실시예들에서, 임포터(1375)가 PTD(1340)에서의 변경들(예컨대, 다른 제어기 인스턴스들로부터 시작된 LCP 데이터 변경들)을 검출하거나 수신하고, 이러한 변경들에 응답하여, 임포터(1375)는 입력 테이블들(1355)을 업데이트할 수 있다. 이 도면은 또한 임포터(1375)가 다른 제어기 인스턴스로부터 UPCP 데이터를 수신할 수 있다는 것을 나타내고 있다.
앞서 언급한 바와 같이, 임포터가 제어 또는 가상화 응용 프로그램의 입력 테이블들로 푸시하는 논리 또는 물리 데이터의 일부는 다른 제어기 인스턴스들에 의해 발생되어 PTD로 전달되는 데이터에 관련되어 있다. 예를 들어, 어떤 실시예들에서, 다수의 LDP 세트들에 관련되어 있는 논리 구성체들(예컨대, 논리 포트들, 논리 큐들 등)에 관한 논리 데이터가 변할 수 있고, 변환기[예컨대, 제어기 인스턴스의 변환기(1380)]는 이 변경을 입력 테이블들에 기입할 수 있다. 다중 제어기 인스턴스 환경에서 다른 제어기 인스턴스에 의해 생성되는 이러한 논리 데이터의 다른 예는 사용자가 LDPS를 맡고 있지 않은 제1 제어기 인스턴스에서 LDPS에 대한 LCP 데이터를 제공할 때 일어난다. 이 변경은 제1 제어기 인스턴스의 변환기에 의해 제1 제어기 인스턴스의 PTD에 추가된다. 이 변경은 이어서 PTD들에 의해 수행되는 복제 프로세스들에 의해 다른 제어기 인스턴스들의 PTD들을 거쳐 전파된다. LDPS의 마스터이거나 LDPS를 맡고 있는 논리 제어기인 제2 제어기 인스턴스의 임포터는 궁극적으로 이 변경을 받고, 이어서 그 변경을 응용 프로그램의 입력 테이블들 중 하나(예컨대, 제어 응용 프로그램의 입력 테이블)에 기입한다. 그에 따라, 임포터가 입력 테이블들에 기입하는 논리 데이터는, 어떤 경우에, 다른 제어기 인스턴스의 PTD로부터 올 수 있다.
앞서 언급한 바와 같이, 제어 응용 프로그램(1305) 및 가상화 응용 프로그램(1310)은, 어떤 실시예들에서, 동일한 기계 또는 상이한 기계들 상에서 동작하는 2개의 별개인 응용 프로그램들이다. 그렇지만, 다른 실시예들은 이 2개의 응용 프로그램들을 하나의 통합 응용 프로그램의 2개의 모듈들로서 구현하고, 제어 응용 프로그램 모듈(1305)은 논리 데이터를 LFP에 발생하고 가상화 응용 프로그램은 물리 데이터를 UPCP에 또는 CPCP에 발생한다.
또 다른 실시예들은, 이 동작들을 2개의 별개인 모듈들로 분리시키는 일 없이, 이 2개의 응용 프로그램들의 제어 및 가상화 동작들을 하나의 통합 응용 프로그램 내에 통합한다. 도 14는 이러한 통합 응용 프로그램(1400)의 한 예를 나타낸 것이다. 이 응용 프로그램(1400)은 입력 세트의 테이블들(1415)로부터 출력 세트의 테이블들(1420)로 데이터를 매핑하기 위해 nLog 테이블 매핑 엔진(1410)을 사용하고, 앞서 기술한 실시예들과 같이, 도 10, 도 11 및 도 13은 입력 세트의 테이블들 내에 하나 이상의 테이블들을 포함할 수 있다. 이 통합 응용 프로그램에서, 입력 세트의 테이블들은 LFP 데이터에 매핑될 필요가 있는 LCP 데이터를 포함할 수 있거나, CPCP 또는 UPCP 데이터에 매핑될 필요가 있는 LFP 데이터를 포함할 수 있다. 입력 세트의 테이블들은 또한 CPCP 데이터에 매핑될 필요가 있는 UPCP 데이터를 포함할 수 있다. UPCP 데이터는, CPCP 데이터에 매핑되는 일 없이, 한 세트의 관리 스위칭 요소들에 대한 한 세트의 섀시 제어기들에 배포된다. 이 매핑은 통합 응용 프로그램(1400)을 실행하는 제어기 인스턴스가 논리 제어기인지 물리 제어기인지 그리고 물리 제어기의 관리 스위칭 요소들이 UPCP 데이터를 관리 스위칭 요소들에 대한 CPCP 데이터에 매핑하기 위한 섀시 제어기를 가지는 마스터인지에 의존한다.
이 통합 제어 및 가상화 응용 프로그램(1400)에서, 임포터(1430)는 사용자들 또는 다른 제어기 인스턴스들로부터 입력 데이터를 받는다. 임포터(1430)는 또한 PTD에 복제되는 PTD(1440)에서의 변경들을 검출 또는 수신한다. 익스포터(1425)는 출력 테이블 레코드들을 다른 제어기 인스턴스들(예컨대, 섀시 제어기)로 내보내기한다.
출력 테이블 레코드들을 다른 제어기 인스턴스로 송신할 때, 레코드들에 포함된 데이터가 통신 채널(예컨대, RPC 채널)을 통해 다른 제어기 인스턴스로 송신되도록, 익스포터는 제어기간 통신 인터페이스(도시 생략)를 사용한다. 출력 테이블 레코드들을 관리 스위칭 요소들로 송신할 때, 레코드들에 포함된 데이터가 2개의 채널을 통해 관리 스위칭 요소로 송신되도록, 익스포터는 관리 스위칭 요소 통신 인터페이스(도시 생략)를 사용한다. 하나의 채널은 관리 스위칭 요소의 전달 평면을 제어하기 위해 스위치 제어 프로토콜(예컨대, OpenFlow)을 사용하여 설정되고, 다른 채널은 구성 데이터를 송신하기 위해 구성 프로토콜을 사용하여 설정된다.
출력 테이블 레코드들을 섀시 제어기로 송신할 때, 어떤 실시예들에서, 익스포터(1425)는 레코드들에 포함되어 있는 데이터를 송신하기 위해 단일의 통신 채널을 사용한다. 이 실시예들에서, 섀시 제어기는 이 단일 채널을 통해 데이터를 받지만, 2개의 채널을 통해 관리 스위칭 요소와 통신한다. 섀시 제어기가 도 18을 참조하여 이하에서 더 상세히 추가로 기술된다.
도 15는 이러한 통합 응용 프로그램(1500)의 다른 예를 나타낸 것이다. 통합 응용 프로그램(1500)은 nLog 테이블 매핑 엔진(1410)의 입력 및 출력 데이터의 일부를 저장하기 위해 NIB(network information base) 데이터 구조(1510)를 사용한다. 앞서 언급한 바와 같이, NIB 데이터 구조는 데이터를 객체 지향 데이터 객체들의 형태로 저장한다. 통합 응용 프로그램(1500)에서, 출력 테이블들(1420)은 주 저장 구조(primary storage structure)이다. PTD(1440) 및 NIB(1510)는 보조 저장 구조들이다.
통합 응용 프로그램(1500)은 입력 세트의 테이블들(1415)로부터 출력 세트의 테이블들(1420)로 데이터를 매핑하기 위해 nLog 테이블 매핑 엔진(1410)을 사용한다. 어떤 실시예들에서, 출력 세트의 테이블들(1420) 내의 데이터의 일부는 익스포터(1425)에 의해 하나 이상의 다른 제어기 인스턴스들 또는 하나 이상의 관리 스위칭 요소들로 내보내기된다. 이러한 내보내기된 데이터는 관리 스위칭 요소들의 흐름 거동을 정의하게 될 UPCP 또는 CPCP 데이터를 포함한다. 이들 데이터는 데이터 탄력성을 위해 PTD(1440) 내 변환기(1435)에 의해 PTD에 백업될 수 있다.
출력 세트의 테이블들(1420) 내의 데이터의 일부는 NIB 게시자(NIB publisher)(1505)에 의해 NIB(1510)에 게시된다. 이들 데이터는 사용자가 통합 응용 프로그램(1500)을 사용하여 관리하는 논리 스위칭 요소들의 구성 정보를 포함한다. NIB(1510)에 저장된 데이터는 조정 관리자(1520)에 의해 다른 제어기 인스턴스들의 다른 NIB들로 복제된다.
NIB 모니터(1515)는 NIB(1510)로부터 변경들의 통지를 수신하고, 어떤 통지들(예컨대, 통합 응용 프로그램이 그에 대한 마스터인 LDP 세트들에 관련이 있는 것들)에 대해, 변경들을 임포터(1430)를 통해 입력 테이블들(1415)로 푸시한다.
질의 관리자(1525)는 입력 변환 응용 프로그램(도시 생략)과 인터페이스하여 구성 데이터에 관한 질의들(예컨대, 정보 조회들)을 수신하기 위해 제어기간 통신 인터페이스(도시 생략)를 사용한다. 이 도면에 도시된 바와 같이, 어떤 실시예들의 관리자(1525)는 또한 NIB에 질의를 하여 사용자가 관리하고 있는 논리 네트워크 요소들에 관한 상태 정보(예컨대, 논리 포트 통계)를 제공하기 위해 NIB(1510)와 인터페이스한다. 그렇지만, 다른 실시예들에서, 질의 관리자(1525)는 상태 정보를 획득하기 위해 출력 테이블들(1420)에 질의를 한다.
어떤 실시예들에서, 응용 프로그램(1500)은 PTD 및 NIB 이외의 보조 저장 구조(도시 생략)를 사용한다. 이 구조들은 PNTD(persistent non-transactional database) 및 해시 테이블을 포함한다. 어떤 실시예들에서, 이 2가지 유형의 보조 저장 구조들은 상이한 유형의 데이터를 저장하고, 데이터를 상이한 방식들로 저장하며, 및/또는 상이한 유형의 질의들을 처리하는 상이한 질의 인터페이스들을 제공한다.
PNTD는 디스크 또는 기타 비휘발성 메모리에 저장되는 영속적 데이터베이스이다. 어떤 실시예들은 하나 이상의 스위칭 요소 속성들 또는 동작들에 관한 데이터(예컨대, 통계, 계산 등)를 저장하기 위해 이 데이터베이스를 사용한다. 예를 들어, 어떤 실시예에서, 이 데이터베이스는 특정의 스위칭 요소의 특정의 포트를 통해 라우팅되는 패킷들의 수를 저장하는 데 사용된다. PNTD에 저장되는 데이터의 유형들의 다른 예는 오류 메시지, 로그 파일, 경고 메시지, 및 과금 데이터를 포함한다.
어떤 실시예들에서, PNTD는 데이터베이스 질의를 처리할 수 있는 데이터베이스 질의 관리자(도시 생략)를 가지지만, 그것이 트랜잭션 데이터베이스가 아니기 때문에, 이 질의 관리자는 복잡한 조건부 트랜잭션 질의들을 처리할 수 없다. 어떤 실시예들에서, PNTD에 대한 액세스가 PTD에 대한 액세스보다는 더 빠르지만, 해시 테이블에 대한 액세스보다는 더 느리다.
PNTD와 달리, 해시 테이블은 디스크 또는 기타 비휘발성 메모리에 저장되는 데이터베이스가 아니다. 그 대신에, 이는 휘발성 시스템 메모리(예컨대, RAM)에 저장되는 저장 구조이다. 이는 테이블에 저장되어 있는 레코드들을 신속하게 식별하기 위해 해싱된 인덱스들을 사용하는 해싱 기법들을 사용한다. 시스템 메모리에서의 해시 테이블의 배치와 결합된 이 구조는 이 테이블이 아주 신속하게 액세스될 수 있게 해준다. 이 신속한 액세스를 용이하게 해주기 위해, 어떤 실시예들에서, 간단화된 질의 인터페이스가 사용된다. 예를 들어, 어떤 실시예들에서, 해시 테이블은 단지 2개의 질의 - 테이블에 값들을 기입하기 위한 Put 질의 및 테이블로부터 값들을 검색하기 위한 Get 질의 - 를 가진다. 어떤 실시예들은 빠르게 변하는 데이터를 저장하기 위해 해시 테이블을 사용한다. 이러한 빠르게 변하는 데이터의 예는 네트워크 엔터티 상태, 통계, 상태, 가동 시간, 링크 배열, 및 패킷 처리 정보를 포함한다. 게다가, 일부 실시예에서, 통합 응용 프로그램은 해시 테이블들을 반복적으로 질의되는 정보(예컨대, 다수의 노드들에 기입될 흐름 엔트리들)를 저장하는 캐시로서 사용한다. 어떤 실시예들은 NIB에서의 레코드들에 신속하게 액세스하기 위해 NIB에 해시 구조를 이용한다. 그에 따라, 이 실시예들 중 어떤 실시예들에서, 해시 테이블은 NIB 데이터 구조의 일부이다.
PTD 및 PNTD는 하드 디스크 상에 네트워크 데이터를 유지함으로서 제어기의 탄력성을 향상시킨다. 제어기 시스템이 고장나는 경우, 네트워크 구성 데이터는 PTD에서 디스크 상에 유지될 것이고, 로그 파일 정보는 PNTD에서 디스크 상에 유지될 것이다.
I. 네트워크 제어 시스템 계층구조
도 16은 네트워크 제어 시스템(1600)의 예시적인 아키텍처를 개념적으로 나타낸 것이다. 상세하게는, 이 도면은 네트워크 제어 시스템의 상이한 요소들에 의한 입력들로부터 CPCP 데이터를 발생하는 것을 나타내고 있다. 도시된 바와 같이, 어떤 실시예들의 네트워크 제어 시스템(1600)은 입력 변환 제어기(1605), 논리 제어기(1610), 물리 제어기들(1615 및 1620), 그리고 3개의 관리 스위칭 요소들(1625 내지 1635)을 포함한다. 이 도면은 또한 5개의 기계들(1640 내지 1660)을 예시하고 있고, 이들 기계는 그들 사이에서 데이터를 교환하기 위해 관리 스위칭 요소들(도면에 "M.S.E."로서 표시되어 있음)(1625 내지 1635)에 연결되어 있다. 이 도면에 도시되어 있는, 계층구조에서 각각의 계층에 있는 제어기들의 수, 관리 스위칭 요소들 및 기계들의 수, 및 제어기들, 관리 스위칭 요소들, 및 기계들 간의 관계 등의 아키텍처의 상세는 단지 예시를 위한 것이다. 기술 분야의 당업자라면 네트워크 제어 시스템(1600)에 대해 제어기들, 스위칭 요소들 및 기계들의 많은 다른 상이한 조합들이 가능하다는 것을 잘 알 것이다.
어떤 실시예들에서, 네트워크 제어 시스템에 있는 제어기들 각각은 도 6을 참조하여 앞서 기술한 상이한 모듈들 및 인터페이스들의 전체 스택을 가진다. 그렇지만, 각각의 제어기는 제어기에 대해 주어진 기능들을 수행하기 위해 모든 모듈들 및 인터페이스들을 사용할 필요가 없다. 다른 대안으로서, 일부 실시예에서, 시스템에서의 제어기는 제어기에 대해 주어진 기능들을 수행하기 위해 필요한 그 모듈들 및 인터페이스들만을 가진다. 예를 들어, LDPS의 마스터인 논리 제어기(1610)는 입력 모듈(예컨대, 입력 변환 응용 프로그램)을 포함하지 않지만, 입력 LCP 데이터로부터 UPCP 데이터를 발생하기 위해 제어 모듈 및 가상화 모듈(예컨대, 제어 응용 프로그램 또는 가상화 응용 프로그램, 또는 통합 응용 프로그램)을 포함한다.
더욱이, 상이한 제어기들의 상이한 조합들이 동일한 기계에서 실행 중일 수 있다. 예를 들어, 입력 변환 제어기(1605) 및 논리 제어기(1610)는 동일한 컴퓨팅 장치에서 실행되고 있을 수 있다. 또한, 하나의 제어기가 상이한 LDP 세트들에 대해 상이하게 기능할 수 있다. 예를 들어, 단일의 제어기가 제1 LDPS의 마스터 및 제2 LDPS를 구현하는 관리 스위칭 요소의 마스터일 수 있다.
입력 변환 제어기(1605)는 특정의 LDPS를 지정하는 사용자로부터 수신된 입력들로부터 LCP 데이터를 발생하는 입력 변환 응용 프로그램(도시 생략)을 포함한다. 입력 변환 제어기(1605)는, 시스템(1605)의 구성 데이터로부터, LDPS의 마스터를 식별한다. 이 예에서, LDPS의 마스터는 논리 제어기(1610)이다. 어떤 실시예들에서, 2개 이상의 제어기가 동일한 LDPS의 마스터일 수 있다. 또한, 하나의 논리 제어기가 2개 이상의 LDP 세트들의 마스터일 수 있다.
논리 제어기(1610)는 특정의 LDPS를 맡고 있다. 논리 제어기(1610)는 따라서 입력 변환 제어기로부터 수신된 LCP 데이터로부터 UPCP 데이터를 발생한다. 구체적으로는, 논리 제어기(1610)의 제어 모듈(도시 생략)은 수신된 LCP 데이터로부터 LFP 데이터를 발생하고, 논리 제어기(1610)의 가상화 모듈(도시 생략)은 LFP 데이터로부터 UPCP 데이터를 발생한다.
논리 제어기(1610)는 LDPS를 구현하는 관리 스위칭 요소들의 마스터들인 물리 제어기들을 식별한다. 이 예에서, 논리 제어기(1610)는 물리 제어기들(1615 및 1620)을 식별하는데, 그 이유는 관리 스위칭 요소들(1625 내지 1635)이, 이 예에서, LDPS를 구현하도록 구성되어 있기 때문이다. 논리 제어기(1610)는 발생된 UPCP 데이터를 물리 제어기들(1615 및 1620)로 송신한다.
물리 제어기들(1615 및 1620) 각각은 하나 이상의 관리 스위칭 요소들의 마스터일 수 있다. 이 예에서, 물리 제어기(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과 같이, 이 도면은 네트워크 제어 시스템의 상이한 요소들에 의한 입력들로부터 CPCP 데이터를 발생하는 것을 나타내고 있다. 도 16에서의 네트워크 제어 시스템(1600)과 달리, 네트워크 제어 시스템(1700)은 섀시 제어기들(1725 내지 1735)을 포함한다. 도시된 바와 같이, 어떤 실시예들의 네트워크 제어 시스템(1700)은 입력 변환 제어기(1705), 논리 제어기(1610), 물리 제어기들(1715 및 1720), 섀시 제어기들(1725 내지 1735), 그리고 3개의 관리 스위칭 요소들(1740 내지 1750)을 포함한다. 이 도면은 또한 5개의 기계들(1755 내지 1775)을 예시하고 있고, 이들 기계는 그들 사이에서 데이터를 교환하기 위해 관리 스위칭 요소들(1740 내지 1750)에 연결되어 있다. 이 도면에 도시되어 있는, 계층구조에서 각각의 계층에 있는 제어기들의 수, 관리 스위칭 요소들 및 기계들의 수, 및 제어기들, 관리 스위칭 요소들, 및 기계들 간의 관계 등의 아키텍처의 상세는 단지 예시를 위한 것이다. 기술 분야의 당업자라면 네트워크 제어 시스템(1700)에 대해 제어기들, 스위칭 요소들 및 기계들의 많은 다른 상이한 조합들이 가능하다는 것을 잘 알 것이다.
입력 변환 제어기(1705)는, 입력 변환 제어기(1705)가 특정의 LDPS를 지정하는 사용자로부터 수신된 입력들로부터 LCP 데이터를 발생하는 입력 변환 응용 프로그램을 포함한다는 점에서, 입력 변환 제어기(1605)와 유사하다. 입력 변환 제어기(1705)는, 시스템(1705)의 구성 데이터로부터, LDPS의 마스터를 식별한다. 이 예에서, LDPS의 마스터는 논리 제어기(1710)이다.
논리 제어기(1710)는, 논리 제어기(1710)가 입력 변환 제어기(1705)로부터 수신된 LCP 데이터로부터 UPCP 데이터를 발생한다는 점에서, 논리 제어기(1610)와 유사하다. 논리 제어기(1710)는 LDPS를 구현하는 관리 스위칭 요소들의 마스터들인 물리 제어기들을 식별한다. 이 예에서, 논리 제어기(1710)는 물리 제어기들(1715 및 1720)을 식별하는데, 그 이유는 관리 스위칭 요소들(1740 내지 1750)이, 이 예에서, LDPS를 구현하도록 구성되어 있기 때문이다. 논리 제어기(1710)는 발생된 UPCP 데이터를 물리 제어기들(1715 및 1720)로 송신한다.
물리 제어기들(1615 및 1620)과 같이, 물리 제어기들(1715 및 1720) 각각은 하나 이상의 관리 스위칭 요소들의 마스터일 수 있다. 이 예에서, 물리 제어기(1715)는 2개의 관리 스위칭 요소들(1740 및 1745)의 마스터이고, 물리 제어기(1730)는 관리 스위칭 요소(1750)의 마스터이다. 그렇지만, 물리 제어기들(1715 및 1720)은 관리 스위칭 요소들(1740 내지 1750)에 대한 CPCP 데이터를 발생하지 않는다. 관리 스위칭 요소들의 마스터로서, 물리 제어기는 UPCP 데이터를, 물리 제어기가 그의 마스터인 각각의 관리 스위칭 요소를 맡고 있는 섀시 제어기로 송신한다. 즉, 어떤 실시예들의 물리 제어기는 물리 제어기가 그의 마스터인 관리 스위칭 요소들과 인터페이스하는 섀시 제어기들을 식별한다. 어떤 실시예들에서, 물리 제어기는 섀시 제어기들이 물리 제어기의 채널에 가입 중인지를 판정함으로써 그 섀시 제어기들을 식별한다.
어떤 실시예들의 섀시 제어기는 관리 스위칭 요소와 일대일 관계를 가진다. 섀시 제어기는 관리 스위칭 요소의 마스터인 물리 제어기로부터 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)의 혼성체(hybrid)를 가질 수 있다. 즉, 이 혼성 네트워크 제어 시스템에서, 물리 제어기들 중 일부는 관리 스위칭 요소들 중 일부에 대한 CPCP 데이터를 발생하고, 물리 제어기들 중 일부는 관리 스위칭 요소들 중 일부에 대한 CPCP 데이터를 발생하지 않는다. 후자의 관리 스위칭 요소들에 대해, 혼성 시스템은 CPCP 데이터를 발생하는 섀시 제어기들을 가진다.
앞서 언급한 바와 같이, 어떤 실시예들의 섀시 제어기는 단일의 관리 스위칭 요소를 관리하는 제어기이다. 어떤 실시예들의 섀시 제어기는 도 6을 참조하여 앞서 기술한 상이한 모듈들 및 인터페이스들의 전체 스택을 갖지 않는다. 섀시 제어기가 가지는 모듈들 중 하나는 그가 하나 이상의 물리 제어기들로부터 수신하는 UPCP 데이터로부터 CPCP 데이터를 발생하는 섀시 제어 응용 프로그램이다. 도 18은 섀시 제어 응용 프로그램(chassis control application)(1800)에 대한 예시적인 아키텍처를 나타낸 것이다. 이 응용 프로그램(1800)은 UPCP 데이터를 나타내는 입력 데이터 튜플들을 포함하는 입력 테이블들을 LFP 데이터를 나타내는 데이터 튜플들에 매핑하기 위해 nLog 테이블 매핑 엔진을 사용한다. 이 응용 프로그램(1800)은, 이 예에서, 관리 스위칭 요소(1885)와 데이터를 교환함으로써 관리 스위칭 요소(1885)를 관리한다. 어떤 실시예들에서, 응용 프로그램(1800)(즉, 섀시 제어기)은 관리 스위칭 요소(1885)가 실행 중인 동일한 기계에서 실행된다.
도 18에 도시된 바와 같이, 섀시 제어 응용 프로그램(1800)은 한 세트의 규칙-엔진 입력 테이블들(1810), 한 세트의 함수 및 상수 테이블들(1815), 임포터(1820), 규칙 엔진(1825), 한 세트의 규칙-엔진 출력 테이블들(1845), 익스포터(1855), 관리 스위칭 요소 통신 인터페이스(1865), 및 컴파일러(1835)를 포함하고 있다. 이 도면은 또한 물리 제어기(1805) 및 관리 스위칭 요소(1885)를 예시하고 있다.
컴파일러(1835)는 도 10에서의 컴파일러들(1035)과 유사하다. 어떤 실시예들에서, 규칙 엔진(RE) 입력 테이블들(1810)은 관리 스위칭 요소(1885)의 마스터인 물리 제어기(1805)가 섀시 제어 응용 프로그램(1800)으로 송신한 UPCP 데이터 및/또는 스위칭 구성들(예컨대, 접근 제어 목록 구성, 사설 가상망 구성, 포트 보안 구성 등)을 갖는 테이블들을 포함한다. 입력 테이블들(1810)은 또한 관리 스위칭 요소(1885)로부터의 물리 데이터를 포함하는 테이블들을 포함한다. 어떤 실시예들에서, 이러한 물리 데이터는 관리 스위칭 요소(1885)에 관한 데이터(예컨대, CPCP 데이터, 물리 전달 데이터) 및 관리 스위칭 요소(1885)의 구성에 관한 기타 데이터를 포함한다.
RE 입력 테이블들(1810)은 RE 입력 테이블들(1010)과 유사하다. 입력 테이블들(1810)은 물리 제어기(1805)에 의해 제공되는 UPCP 데이터에 의해 부분적으로 채워진다. 어떤 실시예들의 물리 제어기(1805)는 하나 이상의 논리 제어기들(도시 생략)로부터 UPCP 데이터를 수신한다.
입력 테이블들(1810)에 부가하여, 섀시 제어 응용 프로그램(1800)은 규칙 엔진(1825)이 그의 테이블 매핑 동작들을 위한 입력들을 수집하기 위해 사용하는 기타 테이블들(1815)을 포함한다. 이 테이블들(1815)은 테이블들(1015)과 유사하다. 도 18에 도시된 바와 같이, 규칙 엔진(1825)은 이벤트 처리기(1022), 질의 계획(1027), 및 테이블 처리기(1030)와 유사하게 기능하는 이벤트 처리기(1822), 몇개의 질의 계획들(1827), 및 테이블 처리기(1830)를 포함한다.
어떤 실시예들에서, RE 출력 테이블들(1845)은 논리 및 물리 네트워크 요소 데이터 속성들 둘 다를 저장한다. 테이블들(1845)은 RE 출력 테이블이라고 하는데, 그 이유는 규칙 엔진(1825)의 테이블 매핑 동작들의 출력을 저장하기 때문이다. 어떤 실시예들에서, RE 출력 테이블들은 몇개의 상이한 카테고리들로 그룹화될 수 있다. 예를 들어, 어떤 실시예들에서, 이 테이블들은 RE 입력 테이블들 및/또는 섀시 제어기 응용 프로그램(CCA) 출력 테이블들일 수 있다. 테이블에서의 변경이 규칙 엔진으로 하여금 질의 계획의 실행을 필요로 하는 입력 테이블를 검출하게 할 때, 테이블은 RE 입력 테이블이다. RE 출력 테이블(1845)이 또한, 규칙 엔진에 의해 수정된 후에, 규칙 엔진으로 하여금 다른 질의 계획을 수행하게 하는 이벤트를 발생하는 RE 입력 테이블(1810)일 수 있다. 이러한 이벤트는 내부 입력 이벤트라고 하고, 임포터(1820)를 통해 제어 응용 프로그램(1805)에 의해 행해지는 RE 입력 테이블 수정에 의해 야기되는 이벤트인 외부 입력 이벤트와 대비된다. 테이블에서의 변경이 익스포터(1855)로 하여금 변경을 관리 스위칭 요소들 또는 기타 제어기 인스턴스들로 내보내기하게 할 때 테이블은 CCA 출력 테이블이다.
익스포터(1855)는 RE 출력 테이블들(1845)의 CCA 출력 테이블들에 대한 변경들을 검출한다. 상이한 실시예들의 익스포터는 상이한 방식으로 CCA 출력 테이블 이벤트의 발생을 검출한다. 어떤 실시예들에서, 익스포터는 CCA 출력 테이블들의 레코드들에 대한 변경들을 통지하기 위해 CCA 출력 테이블들에 콜백들을 등록한다. 이러한 실시예들에서, 익스포터(1855)는, CCA 출력 테이블로부터 그의 레코드들 중 하나가 변경되었다는 통지를 수신할 때, 출력 테이블 이벤트를 검출한다.
검출된 출력 테이블 이벤트에 응답하여, 익스포터(1855)는 수정된 출력 테이블들에서의 각각의 수정된 데이터 튜플을 받고 이 수정된 데이터 튜플을 다른 제어기 인스턴스들 중 하나 이상(예컨대, 물리 제어기)으로 또는 관리 스위칭 요소(1885)로 전파한다. 익스포터(1855)는 수정된 데이터 튜플들을 다른 제어기 인스턴스들로 송신하기 위해 제어기간 통신 인터페이스(도시 생략)를 사용한다. 제어기간 통신 인터페이스는 다른 제어기 인스턴스들과 통신 채널들(예컨대, RPC 채널)을 설정한다.
어떤 실시예들의 익스포터(1855)는 수정된 데이터 튜플들을 관리 스위칭 요소(1885)로 송신하기 위해 관리 스위칭 요소 통신 인터페이스(1865)를 사용한다. 어떤 실시예들의 관리 스위칭 요소 통신 인터페이스는 2개의 통신 채널들을 설정한다. 관리 스위칭 요소 통신 인터페이스는 스위칭 제어 프로토콜을 사용하여 2개의 채널들 중 제1 채널을 설정한다. 스위칭 제어 프로토콜의 한 예는 OpenFlow 프로토콜이다. 어떤 실시예들에서, OpenFlow 프로토콜은 스위칭 요소의 전달 평면(예컨대, 전달 테이블들)을 제어하는 통신 프로토콜이다. 예를 들어, OpenFlow 프로토콜은 관리 스위칭 요소(1885)에 흐름 엔트리들을 추가하는 명령, 그로부터 흐름 엔트리들을 제거하는 명령, 및 그에서의 흐름 엔트리들을 수정하는 명령을 제공한다.
관리 스위칭 요소 통신 인터페이스는 구성 정보를 송신하기 위해 구성 프로토콜을 사용하여 2개의 채널들 중 제2 채널을 설정한다. 어떤 실시예들에서, 구성 정보는 관리 스위칭 요소(1885)를 구성하는 정보[인그레스 포트들(ingress ports), 이그레스 포트들(egress ports), 포트들에 대한 QoS 구성들을 구성하는 정보 등]를 포함한다.
관리 스위칭 요소 통신 인터페이스(1865)는 2개의 채널들을 통해 관리 스위칭 요소(1885)로부터 관리 스위칭 요소(1885)에서의 업데이트들을 수신한다. 어떤 실시예들의 관리 스위칭 요소(1885)는, 섀시 제어 응용 프로그램(1800)에 의해 개시되지 않은 관리 스위칭 요소(1885)의 흐름 엔트리들 또는 구성에 대한 변경들이 있을 때, 업데이트들을 섀시 제어 응용 프로그램으로 송신한다. 이러한 변경들의 예는 관리 스위칭 요소(1885)의 포트에 연결되어 있는 기계의 고장, 관리 스위칭 요소(1885)로의 VM 마이그레이션 등을 포함한다. 관리 스위칭 요소 통신 인터페이스(1865)는 업데이트들을 임포터(1820)로 송신하고, 임포터(1820)는 하나 이상의 입력 테이블들(1810)을 수정할 것이다. 이 업데이트들로부터 규칙 엔진(1825)에 의해 생성된 출력이 있을 때, 익스포터(1855)는 이 출력을 물리 제어기(1805)로 송신할 것이다.
J. 흐름 엔트리들을 발생
도 19는 UPCP 데이터에 기초하여 2개의 관리 스위칭 요소들 사이에 터널을 생성하는 한 예를 나타낸 것이다. 구체적으로는, 이 도면은 2개의 관리 스위칭 요소들(1925 및 1930) 사이에 터널을 설정하기 위해 네트워크 관리 시스템(1900)의 상이한 구성요소들에 의해 수행되는 일련의 동작들을 4개의 상이한 스테이지들(1901 내지 1904)로 나타내고 있다. 이 도면은 또한 논리 스위칭 요소(1905)와 VM 1 및 VM 2를 나타내고 있다. 4개의 스테이지들(1901 내지 1904) 각각은 하부 부분에 네트워크 제어 시스템(1900) 및 관리 스위칭 요소들(1925 및 1930)을 나타내고 상부 부분에 논리 스위칭 요소(1905) 및 논리 스위칭 요소(1905)에 연결되어 있는 VM들을 나타내고 있다. VM들은 각각의 스테이지의 상부 부분 및 하부 부분 둘 다에 도시되어 있다.
제1 스테이지(1901)에 도시된 바와 같이, 논리 스위칭 요소(1905)는 VM 1과 VM 2 사이에서 데이터를 전달한다. 구체적으로는, 데이터가 논리 스위칭 요소(1905)의 논리 포트 1을 통해 VM 1로 가거나 그로부터 오고, 데이터가 논리 스위칭 요소(1905)의 논리 포트 2를 통해 VM 2로 가거나 그로부터 온다. 이 예에서, 논리 스위칭 요소(1905)는 관리 스위칭 요소(1925)에 의해 구현된다. 즉, 논리 포트 1이 관리 스위칭 요소(1925)의 포트 3에 매핑되고, 논리 포트 2가 관리 스위칭 요소(1925)의 포트 4에 매핑된다.
네트워크 제어 시스템(1900)은, 이 예에서, 제어기 클러스터(1910) 및 2개의 섀시 제어기들(1915 및 1920)을 포함한다. 제어기 클러스터(1910)는 입력 변환 제어기들(도시 생략), 논리 제어기들(도시 생략), 및 물리 제어기들(도시 생략)을 포함하며, 이들 모두는 제어기 클러스터(1910)가 수신하는 입력들에 기초하여 UPCP 데이터를 발생한다. 섀시 제어기들은 UPCP 데이터를 수신하고 범용 데이터를 각각의 섀시 제어기가 관리하고 있는 관리 스위칭 요소에 특유한 PCP 데이터로 커스터마이즈한다. 섀시 제어기들(1915 및 1920)은 CPCP 데이터를 관리 스위칭 요소들(1925 및 1930)로, 각각, 전달하고, 따라서 관리 스위칭 요소들(1925 및 1930)은 관리 스위칭 요소들(1925 및 1930) 사이에서 데이터를 전달하기 위해 관리 스위칭 요소들이 사용하는 물리 전달 평면 데이터를 발생할 수 있다.
제2 스테이지(1902)에서, 관리 스위칭 요소(1930)를 포함하는 네트워크의 관리자(administrator)는 관리 스위칭 요소(1930)가 실행되는 호스트(도시 생략)에 VM 3를 생성한다. 관리자는 관리 스위칭 요소(1930)의 포트 5를 생성하고 VM 3를 그 포트에 접속시킨다. 포트 3의 생성 시에, 어떤 실시예들의 관리 스위칭 요소(1930)는 새로 생성된 포트에 관한 정보를 제어기 클러스터(1910)로 송신한다. 어떤 실시예들에서, 이 정보는 포트 번호, 네트워크 주소(예컨대, IP 및 MAC 주소), 관리 스위칭 요소가 속하는 전송 구역(transport zone), 포트에 접속되어 있는 기계 등을 포함할 수 있다. 앞서 언급한 바와 같이, 이 구성 정보는 관리 스위칭 요소를 관리하는 섀시 제어기를 통과하고 이어서 논리 스위칭 요소(1905)를 관리하는 사용자에 이르기까지 계속하여 물리 제어기들 및 논리 제어기들을 통과한다. 이 사용자에 대해, 새로운 VM이 사용자가 관리하고 있는 논리 스위칭 요소(1905)에 추가될 수 있게 된다.
스테이지(1903)에서, 사용자는, 이 예에서, VM 3를 사용하기로 결정하고, VM 3를 논리 스위칭 요소(1905)에 접속시킨다. 그 결과, 논리 스위칭 요소(1905)의 논리 포트 6이 생성된다. 따라서, VM 3로 가거나 그로부터 나오는 데이터는 논리 포트 6을 통과할 것이다. 어떤 실시예들에서, 제어기 클러스터(1910)는, 논리 스위칭 요소의 한 쌍의 논리 포트들이 매핑되는 한 쌍의 포트들을 가지는 각각의 관리 스위칭 요소 쌍 사이에 터널을 생성하라고, 논리 스위칭 요소를 구현하는 모든 관리 스위칭 요소들에 지시한다. 이 예에서, 논리 포트 1과 논리 포트 6 사이의(즉, VM 1과 VM 3 사이의) 그리고 논리 포트 2와 논리 포트 6 사이의(즉 VM 2와 VM 3 사이의) 데이터 교환을 용이하게 해주기 위해, 관리 스위칭 요소들(1925 및 1930) 사이에 터널이 설정될 수 있다. 즉, 관리 스위칭 요소(1925)의 포트 3과 관리 스위칭 요소(1930)의 포트 5 사이에서 교환되는 데이터 및 관리 스위칭 요소(1925)의 포트 4와 관리 스위칭 요소(1930)의 포트 5 사이에서 교환되는 데이터는 관리 스위칭 요소들(1925 및 1930) 사이에 설정된 터널을 통과할 수 있다.
2개의 관리 스위칭 요소들 사이의 터널이 논리 포트 1과 논리 포트 2 사이의(즉, VM 1과 VM 2 사이의) 데이터 교환을 용이하게 해주는 데 필요하지 않은데, 그 이유는 논리 포트 1 및 논리 포트 2가 동일한 관리 스위칭 요소(1925) 상의 2개의 포트에 매핑되기 때문이다.
제3 스테이지(1903)는 또한 제어기 클러스터(1910)가 관리 스위칭 요소(1925)로부터 관리 스위칭 요소(1930)로의 터널을 생성하라는 명령어들을 지정하는 UPCP 데이터를 송신하는 것을 보여주고 있다. 이 예에서, UPCP 데이터는 섀시 제어기(1915)로 송신되고, 섀시 제어기(1915)는 UPCP 데이터를 관리 스위칭 요소(1925)에 특유한 PCP 데이터로 커스터마이즈할 것이다.
제4 스테이지(1904)는 섀시 제어기(1915)가 터널을 생성하고 패킷들을 터널로 전달하라는 명령어들을 지정하는 터널 PCP 데이터를 송신하는 것을 보여준다. 관리 스위칭 요소(1925)는 CPCP 데이터에 기초하여 관리 스위칭 요소(1930)로의 터널을 생성한다. 보다 구체적으로는, 관리 스위칭 요소(1925)는 포트 7을 생성하고 관리 스위칭 요소(1930)의 포트 8로의 터널(예컨대, GRE 터널)을 설정한다. 2개의 관리 스위칭 요소들 사이에 터널을 생성하는 보다 상세한 동작들에 대해 이하에서 기술할 것이다.
도 20은 어떤 실시예들이 UPCP 데이터로부터 2개의 관리 스위칭 요소들 사이의 터널의 생성 및 사용을 지정하는 CPCP 데이터를 발생하기 위해 수행하는 프로세스(2000)을 개념적으로 나타낸 것이다. 어떤 실시예들에서, 프로세스(2000)는 관리 스위칭 요소와 인터페이스하는 섀시 제어기 또는 관리 스위칭 요소와 직접 인터페이스하는 물리 제어기에 의해 수행된다.
프로세스(2000)는 논리 제어기 또는 물리 제어기로부터 UPCP 데이터를 수신하는 것으로 시작한다. 어떤 실시예들에서, UPCP 데이터는 상이한 유형들을 가진다. UPCP 데이터의 유형들 중 하나의 유형은 관리 스위칭 요소에서의 터널의 생성 및 터널의 사용을 지정하는 범용 터널 흐름 명령어들이다. 어떤 실시예들에서, 범용 터널 흐름 명령어들은 네트워크에서 관리 스위칭 요소에 생성되는 포트에 관한 정보를 포함한다. 이 포트는 사용자가 논리 스위칭 요소의 논리 포트를 매핑한 관리 스위칭 요소의 포트이다. 이 포트는 또한 터널링된 데이터가 도달해야만 하는 목적지 포트이다. 포트에 관한 정보는 (1) 포트를 가지는 관리 스위칭 요소가 속하는 전송 구역, (2) 어떤 실시예들에서, 목적지 포트를 가지는 관리 스위칭 요소로의 터널을 구축하는 데 사용되는 터널 프로토콜들(예컨대, GRE, CAPWAP 등)에 기초하는 터널 유형, 및 (3) 목적지 포트를 가지는 관리 스위칭 요소의 네트워크 주소(예컨대, IP 주소)(예컨대, 설정할 터널의 한쪽 끝으로서 기능할 VIF의 IP 주소)를 포함한다.
그 다음에, 프로세스(2000)는 (2010에서) 수신된 UPCP 데이터가 범용 터널 흐름 명령어인지를 판정한다. 어떤 실시예들에서, 프로세스(2000)가 수신된 범용 평면 데이터의 유형을 판정할 수 있도록 UPCP 데이터는 그의 유형을 지정한다. 프로세스(2000)가 (2010에서) 수신된 범용 데이터가 범용 터널 흐름 명령어가 아닌 것으로 판정할 때, 프로세스는 UPCP 데이터를 처리하여 CPCP 데이터를 발생하고 발생된 데이터를 프로세스(2000)가 관리하고 있는 관리 스위칭 요소로 송신하기 위해 2015로 진행한다. 이어서, 프로세스(2000)가 종료한다.
프로세스(2000)가 (2010에서) 수신된 UPCP 데이터가 범용 터널 흐름 명령어인 것으로 판정할 때, 프로세스(2000)는 데이터를 파싱하여 목적지 포트에 관한 정보를 획득하기 위해 2020으로 진행한다. 프로세스(2000)는 이어서 (2025에서) 목적지 포트를 가지는 관리 스위칭 요소가 소스 포트를 가지는 관리 스위칭 요소가 있는 동일한 전송 구역에 있는지를 판정한다. 소스 포트를 가지는 관리 스위칭 요소는 프로세스(2000)를 수행하는 섀시 제어기 또는 물리 제어기가 관리하는 관리 스위칭 요소이다. 어떤 실시예들에서, 전송 구역은, 풀 노드 등의 제2 레벨의 관리 스위칭 요소를 사용하는 일 없이, 서로 통신할 수 있는 일군의 기계들을 포함한다.
어떤 실시예들에서, 논리 제어기는 목적지 포트를 가지는 관리 스위칭 요소가 소스 포트를 가지는 관리 스위칭 요소가 있는 동일한 전송 구역에 있는지를 판정한다. 논리 제어기는 (물리 제어기를 통해) 프로세스(2000)을 수행하는 섀시 제어기로 송신할 범용 터널 흐름 명령어들을 준비하는 데 이 판정을 고려한다. 구체적으로는, 범용 터널 흐름 명령어들은 상이한 터널들을 생성하기 위한 상이한 정보를 포함할 것이다. 이 상이한 터널 예들에 대해서는 이하에서 도 21의 설명 후에 기술되어 있다. 이 실시예들에서, 프로세스(2000)는 2025를 생략하고 2015로 진행한다.
프로세스(2000)가 (2025에서) 소스 포트를 갖는 관리 스위칭 요소 및 목적지 포트를 갖는 관리 스위칭 요소가 동일한 전송 구역에 있지 않은 것으로 판정할 때, 프로세스(2000)는 이상에 기술되어 있는 2015로 진행한다. 그렇지 않은 경우, 프로세스는 범용 터널 흐름 명령어들을 커스터마이즈하고 커스터마이즈된 정보를 소스 포트를 가지는 관리 스위칭 요소로 송신하기 위해 2030으로 진행한다. 범용 터널 흐름 명령어들을 커스터마이즈하는 것에 대해서는 이하에서 상세히 기술할 것이다. 이어서, 프로세스(2000)가 종료한다.
도 21은 어떤 실시예들이, 관리 스위칭 요소가 터널을 생성하고 터널을 통해 데이터를 목적지로 송신할 수 있도록, 커스터마이즈된 터널 흐름 명령어들을 발생하기 위해 그리고 커스터마이즈된 터널 흐름 명령어들을 관리 스위칭 요소로 송신하기 위해 수행하는 프로세스(2100)를 개념적으로 나타낸 것이다. 어떤 실시예들에서, 프로세스(2100)는 관리 스위칭 요소와 인터페이스하는 제어기 인스턴스 또는 관리 스위칭 요소와 직접 인터페이스하는 물리 제어기에 의해 수행된다. 어떤 실시예들에서, 프로세스(2100)는 프로세스(2100)를 수행하는 제어기가 범용 터널 흐름 명령어들을 수신하고, 목적지 포트에 관한 포트 정보를 파싱하며, 목적지 포트를 가지는 관리 스위칭 요소가 제어기가 관리하는 관리 스위칭 요소와 동일한 전송 구역에 있는 것으로 판정할 때 시작한다.
프로세스(2100)는 (2105에서) 터널 포트를 생성하기 위한 명령어들을 발생하는 것으로 시작한다. 어떤 실시예들에서, 프로세스(2100)는 포트 정보에 기초하여 제어기가 관리하는 관리 스위칭 요소에 터널 포트를 생성하기 위한 명령어들을 발생한다. 이 명령어들은, 예를 들어, 설정할 터널의 유형, 및 터널의 목적지 종단이 될 NIC의 IP 주소를 포함한다. 제어기에 의해 관리되는 관리 스위칭 요소의 터널 포트는 터널의 다른쪽 끝이 될 것이다.
그 다음에, 프로세스(2100)는 (2110에서) 제어기가 관리하는 관리 스위칭 요소로의 터널 포트를 생성하기 위해 발생된 명령어들을 송신한다. 앞서 언급한 바와 같이, 어떤 실시예들의 섀시 제어기 또는 관리 스위칭 요소와 직접 인터페이스하는 물리 제어기는 관리 스위칭 요소와 통신하기 위해 2개의 채널들을 사용한다. 하나의 채널은 관리 스위칭 요소와 구성 채널를 교환하기 위한 구성 채널이고 다른 채널은 관리 스위칭 요소와 흐름 엔트리들 및 이벤트 데이터를 교환하기 위한 스위칭 요소 제어 채널(예컨대, OpenFlow 프로토콜을 사용하여 설정된 채널)이다. 어떤 실시예들에서, 프로세스는 제어기가 관리하는 관리 스위칭 요소로의 터널 포트를 생성하기 위해 발생된 명령어들을 송신하는 데 구성 채널을 사용한다. 발생된 명령어들을 수신할 시에, 어떤 실시예들의 관리 스위칭 요소는 관리 스위칭 요소에 터널 포트를 생성하고, 터널 유형에 의해 지정된 터널 프로토콜을 사용하여, 터널 포트와 목적지 포트를 가지는 관리 스위칭 요소의 포트 사이에 터널을 설정한다. 터널 포트 및 터널이 생성되고 설정될 때, 어떤 실시예들의 관리 스위칭 요소는 터널의 식별자의 값(예컨대, 4)을 다시 제어기 인스턴스로 송신한다.
어떤 실시예들의 프로세스(2100)는 이어서 (2115에서) 구성 채널을 통해 터널 포트의 식별자의 값("tunnel_port = 4")을 수신한다. 프로세스(2100)는 이어서 이 수신된 값을 사용하여 범용 터널 흐름 명령어들에 포함되어 있는 흐름 엔트리를 수정한다. 이 흐름 엔트리는, 관리 스위칭 요소로 송신될 때, 관리 스위칭 요소로 하여금 동작을 수행하게 한다. 그렇지만, 범용 데이터인 경우, 이 흐름 엔트리는 실제 포트 번호가 아니라 범용 식별자(예컨대, tunnel_port)에 의해 터널 포트를 식별한다. 예를 들어, 수신된 범용 터널 흐름 명령어들에서의 이 흐름 엔트리는 "If destination=destination machine's UUID, send to tunnel_port"일 수 있다. 프로세스(2100)는 (2120에서) 터널 포트의 식별자의 값으로 흐름 엔트리를 생성한다. 구체적으로는, 프로세스(2100)는 터널 포트에 대한 식별자를 생성된 포트를 식별해주는 식별자의 실제 값으로 대체한다. 예를 들어, 수정된 흐름 엔트리는 "If destination=destination machine's UUID, send to 4"처럼 보일 것이다.
프로세스(2100)는 이어서 (2125에서) 이 흐름 엔트리를 관리 스위칭 요소로 송신한다. 어떤 실시예들에서, 이 프로세스는 이 흐름 엔트리를 스위칭 요소 제어 채널(예컨대, OpenFlow 채널)을 통해 관리 스위칭 요소로 송신한다. 관리 스위칭 요소는 이 흐름 엔트리를 사용하여 그의 흐름 엔트리 테이블을 업데이트할 것이다. 관리 스위칭 요소는 그로부터 계속하여, 데이터를 터널 포트로 송신함으로써, 목적지 기계로 보내지는 데이터를 터널을 통해 전달한다. 이어서, 프로세스는 종료한다.
도 22는 범용 터널 흐름 명령어들을 관리 스위칭 요소(2215)가 수신하여 사용하기 위한 커스터마이즈된 명령어들로 변환하는 섀시 제어기(chassis controller)(2210)의 예시적인 동작을 7개의 상이한 스테이지들(2201 내지 2207)로 개념적으로 나타낸 것이다. 섀시 제어기(2210)는 도 18을 참조하여 앞서 기술한 섀시 제어기(1800)와 유사하다. 그렇지만, 논의의 편의상, 섀시 제어기(2210)의 모든 구성요소들이 도 22에 도시되어 있는 것은 아니다.
도시된 바와 같이, 섀시 제어기(2210)는, 입력 테이블들(1820), 규칙 엔진(1825), 및 출력 테이블들(1845)과 유사한, 입력 테이블들(2220), 규칙 엔진(2225), 및 출력 테이블들(2230)을 포함한다. 섀시 제어기(2210)는 관리 스위칭 요소(2215)를 관리한다. 어떤 실시예에서, 섀시 제어기와 관리 스위칭 요소(2215) 사이에 2개의 채널들(2235 및 2240)이 설정된다. 채널(2235)은 구성 데이터(예컨대, 포트를 생성하는 것에 관한 데이터, 포트의 현재 상태, 관리 스위칭 요소와 연관되어 있는 큐에 관한 데이터 등)를 교환하기 위한 것이다. 어떤 실시예들에서, 채널(2240)은 흐름 엔트리들을 교환하기 위한 OpenFlow 채널(OpenFlow 제어 채널)이다.
제1 스테이지(2201)는 섀시 제어기(2210)가 물리 제어기(도시 생략)로부터 수신된 범용 터널 흐름 명령어들을 사용하여 입력 테이블들(2220)을 업데이트한 것을 보여주고 있다. 도시된 바와 같이, 범용 터널 흐름 명령어들은 터널을 생성하는 명령어(2245) 및 흐름 엔트리(2250)를 포함한다. 도시된 바와 같이, 명령어(2245)는 생성될 터널의 유형 및 목적지 포트를 가지는 관리 스위칭 요소의 IP 주소를 포함한다. 흐름 엔트리(2250)는 관리 스위칭 요소(2215)에 특유하지 않은 범용 데이터로 취할 조치를 지정한다. 규칙 엔진은 명령어(2245) 및 흐름 엔트리(2250)에 대해 테이블 매핑 동작을 수행한다.
제2 스테이지(2202)는 규칙 엔진(2225)에 의해 수행된 테이블 매핑 동작의 결과를 보여준다. 명령어(2245)로부터 명령어(2260)가 얻어진다. 어떤 실시예들에서, 명령어들(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)로 푸시된 것을 보여주고, 관리 스위칭 요소(2215)는 흐름 엔트리(2275)를 사용하여 패킷들을 전달할 것이다.
유의할 점은, 도 22에 도시된 바와 같이, 명령어(2245) 및 섀시 제어기(2210)와 관리 스위칭 요소(2215) 사이에서 교환되는 데이터가 범용 터널 흐름 명령어들 및 커스터마이즈된 명령어들의 개념적 표현이고 실제 표현 및 형식으로 되어 있지 않을 수 있다는 것이다.
더욱이, 도 22의 예가 섀시 제어기(2210)의 동작의 면에서 기술되어 있다. 이 예는 또한 UPCP 데이터를 관리 스위칭 요소들(물리 제어기가 이들의 마스터임)에 대한 CPCP 데이터로 변환하는 어떤 실시예들의 물리 제어기에도 적용가능하다.
도 19 내지 도 22는 논리 스위칭 요소의 2개의 논리 포트들을 사용하고 있는 한 쌍의 기계들(예컨대, VM들) 사이에서의 데이터 교환을 용이하게 해주기 위해 2개의 관리 에지 스위칭 요소들(managed edge switching elements) 사이에 터널을 생성하는 것을 나타낸 것이다. 이 터널은 터널의 가능한 용도들 중 하나를 다루고 있다. 본 발명의 어떤 실시예들에서, 네트워크 제어 시스템에서 터널의 많은 다른 용도들이 가능하다. 터널의 예시적인 용도들로는 다음과 같은 것들이 있다: (1) 관리 에지 스위칭 요소와 풀 노드(pool node) 사이의 터널, (2) 2개의 관리 스위칭 요소들(하나는 에지 스위칭 요소이고 다른 하나는 L3 게이트웨이 서비스를 제공함)[즉, 네트워크 계층(L3)에서 라우팅 서비스를 받기 위해 라우터에 연결되어 있는 관리 스위칭 요소] 사이의 터널, 및 (3) 논리 포트 및 L2 게이트웨이 서비스에 접속되어 있는 다른 논리 포트인 2개의 관리 스위칭 요소들 사이의 터널.
3개의 예들 각각에서 터널을 생성하기 위한 이벤트들의 시퀀스에 대해 이제부터 기술할 것이다. 관리 스위칭 요소와 풀 노드 사이의 터널에 대해, 풀 노드가 먼저 프로비저닝되고, 이어서 관리 스위칭 요소가 프로비저닝된다. VM이 관리 스위칭 요소의 포트에 연결된다. 이 VM은 관리 스위칭 요소에 연결되는 첫번째 VM이다. 이 VM은 이어서, 논리 스위칭 요소의 논리 포트를 관리 스위칭 요소의 포트에 매핑하는 것에 의해, 논리 스위칭 요소의 논리 포트에 바인딩된다. 논리 포트를 관리 스위칭 요소의 포트에 매핑하는 것이 행해지면, 논리 제어기는 [예컨대, 물리 제어기(들)를 통해] 범용 터널 흐름 명령어들을 관리 스위칭 요소와 인터페이스하는 섀시 제어기로(또는 물리 제어기로) 송신한다.
섀시 제어기는 이어서 풀 노드의 터널을 생성하라고 관리 스위칭 요소에 지시한다. 터널이 생성되면, 나중이 프로비저닝되어 관리 스위칭 요소에 연결되는 다른 VM은, 이 새로운 VM이 동일한 논리 스위칭 요소의 논리 포트에 바인딩되어 있는 경우, 풀 노드와 데이터를 교환하기 위해 동일한 터널을 공유할 것이다. 새로운 노드가 상이한 논리 스위치의 논리 포트에 바인딩되어 있는 경우, 논리 제어기는 첫번째 VM이 관리 스위칭 요소에 연결될 때 아래로 전달되었던 동일한 범용 터널 흐름 명령어들을 송신할 것이다. 그렇지만, 예를 들어, 터널이 이미 생성되어 동작하고 있기 때문에, 범용 터널 흐름 명령어들은 풀 노드로의 새로운 터널을 생성하게 하지 않을 것이다.
설정된 터널이 단방향 터널인 경우, 풀 노드 측으로부터 다른 단방향 터널이 설정된다. 첫번째 VM이 바인딩되어 있는 논리 포트가 관리 스위칭 요소의 포트에 매핑될 때, 논리 제어기는 또한 범용 터널 흐름 명령어들을 풀 노드로 송신한다. 범용 터널 흐름 명령어들에 기초하여, 풀 노드와 인터페이스하는 섀시 제어기는 관리 스위칭 요소로의 터널을 생성하라고 풀 노드에 지시할 것이다.
관리 에지 스위칭 요소와 L3 게이트웨이 서비스를 제공하는 관리 스위칭 요소 사이의 터널에 대해, 사용자의 몇개의 VM들을 갖는 논리 스위칭 요소가 프로비저닝되고 논리 라우터가 L3 게이트웨이 서비스를 제공하는 전송 노드에 구현되는 것으로 가정된다. 논리 라우터를 논리 스위칭 요소에 링크시키기 위해 논리 패치 포트(logical patch port)가 논리 스위칭 요소에 생성된다. 어떤 실시예들에서, 논리 패치의 생성 및 VM들의 프로비저닝의 순서가 터널 생성에 영향을 미치지 않는다. 논리 패치 포트의 생성은 논리 제어기로 하여금 범용 터널 흐름 명령어들을, 논리 스위칭 요소를 구현하는 모든 관리 스위칭 요소들(즉, 각각이 논리 스위칭 요소의 논리 포트가 매핑되어 있는 적어도 하나의 포트를 가지는 모든 관리 스위칭 요소들)과 인터페이스하는 섀시 제어기들(또는, 물리 제어기들)로 송신하게 한다. 이 관리 스위칭 요소들 각각에 대한 각각의 섀시 제어기는 전송 노드로의 터널을 생성하라고 관리 스위칭 요소에 지시한다. 관리 스위칭 요소들 각각은 전송 노드로의 터널을 생성하고, 그 결과 논리 스위칭 요소를 구현하는 관리 스위칭 요소들의 수만큼의 터널들이 생긴다.
이 터널들이 단방향인 경우, 전송 노드는 논리 스위칭 요소를 구현하는 관리 스위칭 요소들 각각으로의 터널을 생성해야 한다. 논리 패치 포트가 생성되어 논리 라우터에 연결될 때, 논리 스위칭 요소는 범용 터널 흐름 명령어들을 전송 노드로 푸시한다. 전송 노드와 인터페이스하는 섀시 제어기는 터널들을 생성하라고 전송 노드에 지시하고, 전송 노드는 관리 스위칭 요소들로의 터널들을 생성한다.
어떤 실시예들에서, 2개의 관리 스위칭 요소들 사이에 설정된 터널은, 이들 2개의 기계가 동일한 논리 스위칭 요소의 논리 포트들을 사용하든 2개의 상이한 스위칭 요소들의 논리 포트들을 사용하든 관계없이, 관리 스위칭 요소들 중 하나에 접속된 임의의 기계와 다른 관리 스위칭 요소에 접속된 임의의 기계 사이의 데이터 교환을 위해 사용될 수 있다. 이는 터널링이 상이한 LDP 세트들을 관리하고 있는 상이한 사용자들이 격리되어 있는 동안 관리 스위칭 요소들을 공유할 수 있게 해주는 한 예시적인 경우이다.
논리 포트 및 L2 게이트웨이 서비스에 접속되어 있는 다른 논리 포트인 2개의 관리 스위칭 요소들 사이의 터널의 생성은 논리 포트가 L2 게이트웨이 서비스에 접속될 때 시작한다. 접속은 논리 제어기로 하여금 범용 터널 흐름 명령어들을 논리 스위칭 요소의 다른 논리 포트들을 구현하는 모든 관리 스위칭 요소들로 송출하게 한다. 명령어들에 기초하여, 이 관리 스위칭 요소들로부터 L2 게이트웨이 서비스에 접속되어 있는 논리 포트를 구현하는 관리 스위칭 요소로의 터널들이 설정된다.
III. 전자 시스템
상기한 특징 및 응용의 다수는 컴퓨터 판독가능 저장 매체(컴퓨터 판독가능 매체라고도 함)에 기록된 일련의 명령어로서 지정되는 소프트웨어 프로세스로서 구현된다. 이들 명령어는, 하나 이상의 처리 장치(들)(예컨대, 하나 이상의 프로세서, 프로세서의 코어, 또는 기타 처리 장치)에 의해 실행될 때, 처리 장치(들)로 하여금 명령어에 나타낸 동작을 수행하게 한다. 컴퓨터 판독가능 매체의 일례는, CD-ROM, 플래시 드라이브, RAM 칩, 하드 드라이브, EPROM 등을 포함하지만, 이들로 제한되지 않는다. 컴퓨터 판독가능 매체는 무선으로 또는 유선 연결을 통해 전달되는 반송파 및 전자 신호를 포함하지 않는다.
본 명세서에서, "소프트웨어"라는 용어는 프로세서에서 처리하기 위해 메모리 내로 판독될 수 있는, 판독 전용 메모리에 존재하는 펌웨어 또는 자기 저장 장치에 저장된 응용 프로그램을 포함하는 것으로 보아야 한다. 또한, 어떤 실시예들에서, 다수의 소프트웨어 발명이 개별 소프트웨어 발명으로 있으면서 큰 프로그램의 하위 부분으로서 구현될 수 있다. 어떤 실시예들에서, 다수의 소프트웨어 발명이 또한 개별 프로그램으로서 구현될 수 있다. 마지막으로, 다같이 본 명세서에 기술된 소프트웨어 발명을 구현하는 개별 프로그램의 임의의 조합이 본 발명의 범위 내에 속한다. 어떤 실시예들에서, 소프트웨어 프로그램은, 하나 이상의 전자 시스템에서 동작하도록 설치될 때, 소프트웨어 프로그램의 동작을 실행하고 수행하는 하나 이상의 특정의 기계 구현을 정의한다.
도 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(cathode ray tube) 또는 LCD(liquid crystal display)와 같은 디스플레이 장치를 포함한다. 어떤 실시예들은 입력 장치 및 출력 장치 둘 다로서 기능하는 터치스크린 등의 디바이스를 포함하고 있다.
마지막으로, 도 23에 도시된 바와 같이, 버스(2305)는 또한 네트워크 어댑터(도시 생략)를 통해 전자 시스템(2300)을 네트워크(2365)에 결합시킨다. 이러한 방식으로, 컴퓨터는 컴퓨터들의 네트워크[LAN(local area network), WAN(wide area network) 또는 인트라넷 등], 또는 네트워크들의 네트워크(인터넷 등)의 일부일 수 있다. 전자 시스템(2300)의 구성요소의 일부 또는 전부가 본 발명과 관련하여 사용될 수 있다.
어떤 실시예들은 마이크로프로세서, 기계 판독가능 또는 컴퓨터 판독가능 매체(다른 대안으로서, 컴퓨터 판독가능 저장 매체, 기계 판독가능 매체, 또는 기계 판독가능 저장 매체라고 함)에 컴퓨터 프로그램 명령어를 저장하는 저장 장치 및 메모리와 같은 전자 구성요소를 포함하고 있다. 이러한 컴퓨터 판독가능 매체의 어떤 일례는 RAM, ROM, CD-ROM(read-only compact disc), CD-R(recordable compact disc), CD-RW(rewritable compact disc), 판독 전용 DVD(read-only digital versatile disc)(예를 들어, DVD-ROM, 2층(dual-layer) DVD-ROM), 각종의 기록가능/재기록가능(recordable/rewritable) DVD(예를 들어, DVD-RAM, DVD-RW, DVD+RW 등), 플래시 메모리(예컨대, SD 카드, 미니-SD 카드, 마이크로-SD 카드 등), 자기 및/또는 고상 하드 드라이브, 판독 전용 및 기록가능 블루레이® 디스크, 초밀도(ultra density) 광 디스크, 임의의 다른 광 또는 자기 매체, 및 플로피 디스크를 포함한다. 컴퓨터 판독가능 매체는 적어도 하나의 처리 장치에 의해 실행될 수 있는 컴퓨터 프로그램을 저장할 수 있고, 다양한 동작을 수행하는 명령어 집합을 포함한다. 컴퓨터 프로그램 또는 컴퓨터 코드의 일례는 컴파일러에 의해 생성된 것과 같은 기계 코드, 및 인터프리터를 사용하여 컴퓨터, 전자 구성요소, 또는 마이크로프로세서에 의해 실행되는 상위 레벨 코드를 포함하는 파일을 포함한다.
상기 논의가 주로 소프트웨어를 실행하는 마이크로프로세서 또는 멀티-코어 프로세서를 참조하고 있지만, 일부 실시예는 ASIC(application specific integrated circuit) 또는 FPGA(field programmable gate array) 등의 하나 이상의 집적 회로에 의해 수행된다. 어떤 실시예들에서, 이러한 집적 회로는 회로 자체 상에 저장되어 있는 명령어들을 실행한다.
본 명세서에서 사용되는 바와 같이, "컴퓨터", "서버", "프로세서", 및 "메모리"라는 용어 모두는 전자 또는 다른 기술적 장치를 말한다. 이 용어들은 사람 또는 사람의 그룹을 제외한다. 본 명세서의 목적상, '디스플레이' 또는 '디스플레이하는'이라는 용어는 전자 장치 상에 디스플레이하는 것을 의미한다. 본 명세서에서 사용되는 바와 같이, "컴퓨터 판독가능 매체", "컴퓨터 판독가능 매체들", 및 "기계 판독가능 매체"라는 용어는 컴퓨터에 의해 판독될 수 있는 형태로 정보를 저장하는 유형의 물리적 물체(tangible, physical object)로 전적으로 제한된다. 이 용어들은 임의의 무선 신호, 유선 다운로드 신호, 및 임의의 다른 사용후 삭제 신호(ephemeral signal)를 제외한다.
본 발명이 다수의 구체적인 상세를 참조하여 기술되어 있지만, 당업자라면 본 발명이 본 발명의 사상을 벗어나지 않고 다른 특정의 형태로 구현될 수 있다는 것을 잘 알 것이다. 그에 부가하여, 다수의 도면(도 20 및 도 21을 포함함)은 프로세스를 개념적으로 나타내고 있다. 이 프로세스들의 특정의 동작들이 도시되고 기술된 바로 그 순서로 수행되지 않을 수 있다. 특정의 동작이 하나의 연속적인 일련의 동작으로서 수행되지 않을 수 있고, 다른 특정의 동작이 다른 실시예들에서 수행될 수 있다. 게다가, 프로세스가 몇개의 서브프로세스를 사용하여 또는 더 큰 매크로 프로세스의 일부로서 구현될 수 있다.
또한, 사용자가 LDP 세트들을 LCP 데이터로 제공하는 몇개의 실시예들이 앞서 기술되었다. 그렇지만, 다른 실시예들에서, 사용자는 LDP 세트들을 LFP 데이터로 제공할 수 있다. 그에 부가하여, 제어기 인스턴스가 스위칭 요소를 관리하기 위해 PCP 데이터를 스위칭 요소에 제공하는 몇개의 실시예들이 앞서 기술되었다. 그렇지만, 다른 실시예들에서, 제어기 인스턴스는 물리 전달 평면 데이터를 스위칭 요소에 제공할 수 있다. 이러한 실시예들에서, 관계형 데이터베이스 데이터 구조는 물리 전달 평면 데이터를 저장할 것이고, 가상화 응용 프로그램은 이러한 데이터를 발생할 것이다.
게다가, 상기 몇개의 예들에서, 사용자는 하나 이상의 논리 스위칭 요소들을 지정한다. 어떤 실시예들에서, 사용자는 물리 스위칭 요소 구성들을, 이러한 논리 스위칭 요소 구성들과 함께, 제공할 수 있다. 또한, 어떤 실시예들에서, 하나의 컴퓨팅 장치 상에서 실행되는 몇개의 응용 프로그램 계층들에 의해 개별적으로 형성되는 제어기 인스턴스들이 기술되어 있지만, 기술 분야의 당업자라면, 어떤 실시예들에서, 이러한 인스턴스들이 그들의 동작들 중 하나 이상의 계층들을 수행하는 정교한 컴퓨팅 장치들 또는 기타 기계들에 의해 형성된다는 것을 잘 알 것이다.
또한, 앞서 기술한 몇개의 예들이 LDPS가 하나의 사용자와 연관되어 있는 것을 보여주고 있다. 기술 분야의 당업자라면, 어떤 실시예들에서, 그러면 사용자가 LDP 세트들의 하나 이상의 세트들과 연관되어 있을 수 있다는 것을 잘 알 것이다. 즉, LDPS와 사용자 간의 관계가 항상 일대일 관계는 아닌데, 그 이유는 사용자가 다수의 LDP 세트들과 연관되어 있을 수 있기 때문이다. 따라서, 기술 분야의 당업자라면 본 발명이 이상의 예시적인 상세에 의해 제한되어서는 안된다는 것을 잘 알 것이다.