KR102059284B1 - 분산 패킷 스케줄링을 위한 시스템들 및 방법들 - Google Patents

분산 패킷 스케줄링을 위한 시스템들 및 방법들 Download PDF

Info

Publication number
KR102059284B1
KR102059284B1 KR1020187011258A KR20187011258A KR102059284B1 KR 102059284 B1 KR102059284 B1 KR 102059284B1 KR 1020187011258 A KR1020187011258 A KR 1020187011258A KR 20187011258 A KR20187011258 A KR 20187011258A KR 102059284 B1 KR102059284 B1 KR 102059284B1
Authority
KR
South Korea
Prior art keywords
network
packet
virtual
network packet
traffic class
Prior art date
Application number
KR1020187011258A
Other languages
English (en)
Other versions
KR20180055882A (ko
Inventor
무스타파 쿠틀루크 테스틱글루
세스 키이스
Original Assignee
사이트릭스 시스템스, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 사이트릭스 시스템스, 인크. filed Critical 사이트릭스 시스템스, 인크.
Publication of KR20180055882A publication Critical patent/KR20180055882A/ko
Application granted granted Critical
Publication of KR102059284B1 publication Critical patent/KR102059284B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04JMULTIPLEX COMMUNICATION
    • H04J3/00Time-division multiplex systems
    • H04J3/02Details
    • H04J3/06Synchronising arrangements
    • H04J3/0635Clock or time synchronisation in a network
    • H04J3/0638Clock or time synchronisation among nodes; Internode synchronisation
    • H04J3/0658Clock or time synchronisation among packet nodes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/12Avoiding congestion; Recovering from congestion
    • H04L47/125Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/60Queue scheduling implementing hierarchical scheduling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/6215Individual queue per QOS, rate or priority
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/625Queue scheduling characterised by scheduling criteria for service slots or service orders
    • H04L47/6265Queue scheduling characterised by scheduling criteria for service slots or service orders past bandwidth allocation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
    • H04L69/322Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
    • H04L69/324Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the data link layer [OSI layer 2], e.g. HDLC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/32Flow control; Congestion control by discarding or delaying data units, e.g. packets or frames

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

방법은, 제1 네트워크 패킷 스케줄러에 의해, 복수의 네트워크 패킷 스케줄러들의 각각의 다른 네트워크 패킷 스케줄러로부터, 네트워크 패킷들의 상대적인 전송 우선 순위를 정의하는 복수의 트래픽 클래스들의 각각의 트래픽 클래스에 대한 가상 패킷을 수신하는 단계; 상기 제1 네트워크 패킷 스케줄러에 의해, 상기 복수의 트래픽 클래스들의 제1 트래픽 클래스의 네트워크 패킷을 수신하는 단계; 상기 제1 네트워크 패킷 스케줄러에 의해, 각각의 가상 패킷을 각각의 트래픽 클래스에 대해 생성된 복수의 가상 연결들의 임의의 가상 연결로 전송하는 단계; 상기 제1 네트워크 패킷 스케줄러에 의해, 네트워크 패킷 또는 가상 패킷을 전송을 위한 버퍼 내의 다음 패킷으로 스케줄링하는 단계; 상기 제1 네트워크 패킷 스케줄러에 의해, 상기 버퍼 내의 상기 다음 패킷이 가상 패킷인 것으로 결정하는 단계; 및 상기 제1 네트워크 패킷 스케줄러에 의해, 상기 버퍼 내의 상기 다음 패킷이 가상 패킷인 것으로 결정한 것에 응답하여, 상기 가상 패킷을 폐기하는 단계를 포함한다.

Description

분산 패킷 스케줄링을 위한 시스템들 및 방법들
본 출원은 "분산 패킷 스케줄링을 위한 시스템들 및 방법들"이라는 명칭으로 2015년 10월 30일에 출원된 미국 비-가출원 제14/927,867호의 우선권 및 이익을 주장하며, 이는 본 명세서에서 모든 목적들을 위해 전체로써 참고로 인용된다.
본 출원은 일반적으로 네트워크 패킷 스케줄링에 관한 것이다. 특히, 본 출원은 병렬로 동작하는 다수의 네트워크 패킷 스케줄러들을 동기화하기 위한 시스템들 및 방법들에 관한 것이다.
네트워크 패킷 스케줄러들은 네트워크 트래픽을 규제하고 우선 순위를 결정하기 위해 사용된다. 패킷 교환 통신 네트워크에서 노드 상에 또는 노드에 의해 실행될 때, 네트워크 스케줄러는 버퍼로서 동작하는 노드의 네트워크 인터페이스 제어기의 송신 및 수신 큐들에서 네트워크 패킷들의 시퀀스를 관리하는 중재자 프로그램이다. 네트워크 패킷 스케줄러는 버퍼로부터 어떤 네트워크 패킷을 다음에 송신할지 결정한다. 버퍼 영역은 상이한 큐들로 분할될 수 있고, 각각은 구성된 패킷 분류 규칙들에 따라 하나의 흐름의 패킷들을 보유한다. 예를 들어, 패킷들은 출발지 및 목적지 IP 주소들에 의해 흐름들로 분할될 수 있다.
네트워크 스케줄링 알고리즘들 및 관련 설정들은 네트워크 스케줄러가 버퍼를 관리하는 방법을 결정한다. 네트워크 패킷 스케줄링에 사용되는 많은 알고리즘들, 예를 들어 적응형 가상 큐잉(Adaptive Virtual Queueing), 클래스 기반 큐잉(Class-based Queueing), 신용 기반 페어 큐잉(Credit-based Fair Queueing), 데피싯 라운드 로빈(Deficit Round Robin), 계층형 페어 서비스(Hierarchical Fair-Service), 계층형 토큰 버킷(Hierarchical Token Bucket), 페어 큐잉(Fair Queueing), 가중치 페어 큐잉(Weighted Fair Queuing), 계층형 가중치 페어 큐잉(Hierarchical Weighted Fair Queuing) 등이 있다. 이러한 알고리즘들의 일반적인 구현들은 고가의 더미(heap)/정렬 동작들을 사용하여 네트워크 트래픽의 우선 순위를 결정한다. 이러한 동작들은 네트워크 패킷 스케줄링을 매우 높은 CPU 집약적 프로세스로 만든다. 네트워크 패킷 스케줄링 알고리즘들이 병렬 방식으로 동작하도록 설계되지 않기 때문에, 하나 이상의 인스턴스가 동일한 병목 링크를 향해 동시에 패킷들을 송신하는 경우, 다수의 패킷 스케줄러들을 인스턴스화하는 것은 문제들을 야기할 수 있다.
따라서, 본 개시는 네트워크 패킷 스케줄러들의 다수의 인스턴스들을 동기화하기 위한 시스템들 및 방법들에 관한 것이다.
이러한 동기화는 패킷 스케줄러들의 모든 인스턴스들에 브로드캐스팅된 "가상" 패킷들을 통해 수행될 수 있다. 이러한 가상 패킷들은 각각의 병목 링크-트래픽 클래스 쌍에 대한 각각의 인스턴스에 의해 주기적으로 송신된다. 네트워크 패킷 스케줄러가 임의의 트래픽 클래스 계층 구조들을 지원하는 경우, 실제 연결들을 자식으로 갖는 최하위 트래픽 클래스들에 대해서만 정보가 송신되어야 한다. 이러한 가상 패킷의 크기는 마지막 브로드캐스팅으로부터 주기 동안 트래픽 클래스에 큐잉된 바이트 수일 수 있다. 각각의 패킷 스케줄러 인스턴스는 이러한 주기 동안 큐잉된 트래픽을 갖는 모든 트래픽 클래스에 대해 이러한 정보를 브로드캐스팅할 수 있다.
브로드캐스트 정보를 수신하는 다른 패킷 스케줄러 인스턴스들은 수신된 가상 패킷들을 가상 패킷에 의해 식별된 트래픽 클래스에 대응하는 가상 연결에 제공한다(예를 들어, 하나의 가상 연결은 각각의 트래픽 클래스에 대해 생성될 수 있다). 이러한 가상 패킷들은 실제 패킷들과 유사한 방식으로 큐에 배치되며, 큐가 최대 큐 크기에 도달했거나 최대 큐 크기를 초과한 경우들에도 큐에 추가된다. 가상 패킷들이 패킷 스케줄러에 의해 스케줄링 될 때, 이들은 폐기되고 실제 전송을 위해 사용되지 않는다. 따라서, 가상 패킷들은 모든 패킷 스케줄러 인스턴스들에서 패킷 스케줄링 정보를 동기화하고 다수의 패킷 스케줄러 인스턴스들에 걸쳐 고유한 패킷 스케줄링 계층 구조를 유지한다. 가상 패킷들을 브로드캐스팅함에 있어 지연 때문에, 많은 구현들에서, 패킷 스케줄러 인스턴스들은 정확하게 동일한 패킷 스케줄러 정보를 반드시 갖지는 않지만, 이들의 상태들은 트래픽 규제 및 우선 순위 결정을 위한 매우 낮은 에러 마진을 유지하기에 충분히 근접할 수 있다.
분산 패킷 스케줄링은 패킷 처리 및 패킷 스케줄링 기능들이 동일한 바이너리(데몬, 드라이버 또는 다른 실행 가능한 코드) 또는 별도의 바이너리들에 존재하는 경우들에 사용될 수 있다. 상이한 형태들의 프로세스간 통신들(interprocess communications; IPC)을 사용함으로써, 분산 패킷 스케줄링은 상이한 박스들(클러스터 멤버들 또는 로드 밸런싱 피어들)에 존재하는 패킷 스케줄러들에 의해 사용될 수 있다.
이는 외부 로드 밸런서들이 있는 경우와 같이 이전에는 불가능했던 배치들에서, 서비스 품질(Quality of Service; QoS) 제어들을 사용할 수 있게 한다. 분산 패킷 스케줄링은 선형적으로 확장되기 때문에, 스케줄링 처리 전용 CPU들의 수를 단순히 증가시킴으로써 네트워크 패킷 스케줄링 처리 용량을 추가 할 수 있다. 또한, 이는 "가상 QoS"가 클라우드 서비스로서 배치되어, 지리적으로 전혀 다른 임의의 수의 사이트(site)들을 균일한 분산 정책 영역에 결합할 수 있게 한다.
본 발명의 상술한 및 다른 목적들, 양태들, 특징들 및 이점들은 첨부된 도면들과 관련하여 취해지는 다음의 설명들을 참조함으로써 더욱 명백해지고 더 잘 이해될 것이다.
도 1a는 클라이언트가 기기를 통해 서버에 액세스하도록 하기 위한 네트워크 환경의 실시 예의 블록도이다.
도 1b는 기기를 통해 서버로부터 클라이언트로 컴퓨팅 환경을 전달하기 위한 환경의 실시 예의 블록도이다.
도 1c는 기기를 통해 서버로부터 클라이언트로 컴퓨팅 환경을 전달하기 위한 환경의 다른 실시 예의 블록도이다.
도 1d는 기기를 통해 서버로부터 클라이언트로 컴퓨팅 환경을 전달하기 위한 환경의 다른 실시 예의 블록도이다.
도 1e 내지 도 1h는 컴퓨팅 장치의 실시 예들의 블록도들이다.
도 2a는 클라이언트와 서버 사이의 통신을 처리하기 위한 기기의 실시 예의 블록도이다.
도 2b는 클라이언트와 서버 사이의 통신들을 최적화, 가속, 로드-밸런싱 및 라우팅하기 위한 기기의 다른 실시 예의 블록도이다.
도 3은 기기를 통해 서버와 통신하기 위한 클라이언트의 실시 예의 블록도이다.
도 4a는 가상화 환경의 실시 예의 블록도이다.
도 4b는 가상화 환경의 다른 실시 예의 블록도이다.
도 4c는 가상화 기기의 실시 예의 블록도이다.
도 5a는 멀티 코어 시스템에서 병렬 처리를 구현하기 위한 접근들의 실시 예들의 블록도들이다.
도 5b는 멀티 코어 시스템을 사용하는 시스템의 실시 예의 블록도이다.
도 5c는 멀티 코어 시스템의 양태의 다른 실시 예의 블록도이다.
도 6은 클러스터 시스템의 실시 예의 블록도이다.
도 7a는 가상 패킷들을 수신하는 방법의 실시 예의 흐름도이다.
도 7b는 가상 패킷들을 브로드캐스팅하는 방법의 실시 예의 흐름도이다.
도 7c는 네트워크 패킷 스케줄러 및 네트워크 및 가상 패킷들을 보유하는 큐들의 실시 예의 블록도이다.
도 7d는 가상 패킷의 실시 예의 도면이다.
본 발명의 특징들 및 이점들은 도면들과 관련하여 후술될 상세한 설명으로부터 더욱 명확해질 것이며, 도면에서 동일한 참조 문자들은 대응하는 요소들을 식별한다. 도면들에서, 동일한 참조 번호는 일반적으로 동일하고, 기능적으로 유사하고, 및/또는 구조적으로 유사한 요소들을 나타낸다.
이하의 다양한 실시 예들의 설명을 이해하려는 목적들을 위해, 본 명세서의 섹션들 및 각각의 내용들에 대한 다음 설명이 도움이 될 수 있다:
섹션 A는 본 명세서에 설명된 실시 예들을 설명하는데 유용한 네트워크 환경 및 컴퓨팅 환경을 설명한다.
섹션 B는 컴퓨팅 환경을 원격 사용자에게 전달하기 위한 시스템들 및 방법들의 실시 예들을 설명한다.
섹션 C는 클라이언트와 서버 사이의 통신들을 가속화하기 위한 시스템들 및 방법들의 실시 예들을 설명한다.
섹션 D는 애플리케이션 전달 제어기를 가상화 하기 위한 시스템들 및 방법들의 실시 예들을 설명한다.
섹션 E는 멀티 코어 아키텍처 및 환경을 제공하기 위한 시스템들 및 방법들의 실시 예들을 설명한다.
섹션 F는 클러스터 된 기기 아키텍처 환경을 제공하기 위한 시스템들 및 방법들의 실시 예들을 설명한다.
섹션 G는 다수의 네트워크 패킷 스케줄러들을 동기화하기 위한 시스템들 및 방법들의 실시 예들을 설명한다.
A. 네트워크 컴퓨팅 환경
기기 및/또는 클라이언트의 시스템들 및 방법들의 실시 예들의 세부 사항들을 논의하기 이전에, 그러한 실시 예들이 배치될 수 있는 네트워크 및 컴퓨팅 환경들을 논의하는 것이 도움이 될 수 있다. 이제 도 1a를 참조하면, 네트워크 환경의 실시 예가 도시된다. 간단히 요약하면, 네트워크 환경은 하나 이상의 네트워크들(104, 104')(일반적으로 네트워크(104)로 지칭됨)을 통하여 하나 이상의 서버들(106a-106n)(또한 일반적으로 서버(들)(106), 또는 원격 기계(들)(106)로 지칭됨)과 통신하는 하나 이상의 클라이언트들(102a-102n)(또한 일반적으로 로컬 기계(들)(102), 또는 클라이언트(들)(102)로 지칭됨)로 구성된다. 일부 실시 예들에서, 클라이언트(102)는 기기(200)를 통해 서버(106)와 통신한다.
도 1a는 클라이언트들(102)과 서버들(106) 사이에 네트워크(104) 및 네트워크(104')를 도시하지만, 클라이언트들(102) 및 서버들(106)은 동일한 네트워크(104) 상에 있을 수 있다. 네트워크들(104 및 104')은 동일한 유형의 네트워크들 또는 상이한 유형의 네트워크들일 수 있다. 네트워크(104) 및/또는 네트워크(104')는 근거리 통신망(local-area network; LAN), 예를 들어, 회사 인트라넷, 도시권 통신망(Metropolitan Area Network; MAN), 또는 광역망(Wide Area Network; WAN), 예를 들어 인터넷 또는 월드 와이드 웹(World Wide Web)일 수 있다. 일 실시 예에서, 네트워크(104')는 사설망이고 네트워크(104)는 공중망일 수 있다. 일부 실시 예들에서, 네트워크(104)는 사설망이고 네트워크(104')는 공중망일 수 있다. 다른 실시 예에서, 네트워크들(104 및 104')은 모두 사설망일 수 있다. 일부 실시 예들에서, 클라이언트(102)는 기업 데이터 센터에 위치한 서버들(106)과 네트워크(104)를 통하여 WAN 연결을 통해 통신하는 기업의 지사에 위치할 수 있다.
네트워크(104 및/또는 104')는 임의의 유형 및/또는 형태의 네트워크일 수 있고, 다음 중 임의의 것을 포함할 수 있다: 점대 점(point to point) 네트워크, 방송망(broadcast network), 광역망(wide area network), 근거리 통신망(local area network), 전기 통신망(telecommunications network), 데이터 통신망(data communication network), 컴퓨터 네트워크(computer network), ATM(Asynchronous Transfer Mode) 네트워크, SONET(Synchronous Optical Network) 네트워크, SDH(Synchronous Digital Hierarchy) 네트워크, 무선 네트워크 및 유선 네트워크. 일부 실시 예들에서, 네트워크(104)는 무선 링크, 예를 들어 적외선 채널 또는 위성 대역(satellite band)으로 구성될 수 있다. 네트워크(104 및/또는 104')의 토폴로지는 버스(bus), 스타(star), 또는 링(ring) 네트워크 토폴로지일 수 있다. 네트워크(104 및/또는 104') 및 네트워크 토폴로지는 본 명세서에 설명된 동작들을 지원할 수 있는 당업자에게 공지된 임의의 네트워크 또는 네트워크 토폴로지일 수 있다.
도 1A에 도시된 바와 같이, 인터페이스부(200) 또는 게이트웨이(200)라고도 지칭되는 기기(200)는 네트워크들(104 및 104') 사이에 도시된다. 일부 실시 예들에서, 기기(200)는 네트워크(104) 상에 위치할 수 있다. 예를 들어, 기업의 지사는 지사에 기기(200)를 배치할 수 있다. 다른 실시 예들에서, 기기(200)는 네트워크(104') 상에 위치할 수 있다. 예를 들어, 기기(200)는 기업 데이터 센터에 위치할 수 있다. 또 다른 실시 예에서, 복수의 기기들(200)이 네트워크(104) 상에 배치될 수 있다. 일부 실시 예들에서, 복수의 기기들(200)이 네트워크(104') 상에 배치될 수 있다. 일 실시 예에서, 제1 기기(200)는 제2 기기(200')와 통신한다. 다른 실시 예들에서, 기기(200)는 클라이언트(102)와 동일하거나 상이한 네트워크(104, 104') 상의 임의의 클라이언트(102) 또는 서버(106)의 일부일 수 있다. 하나 이상의 기기들(200)은 클라이언트(102)와 서버(106) 사이의 네트워크 또는 네트워크 통신 경로의 임의의 지점에 위치할 수 있다.
일부 실시 예들에서, 기기(200)는 Citrix NetScaler® 장치들로 지칭되는, 플로리다, 로더데일 소재의 Citrix Systems, Inc.에서 제조한 임의의 네트워크 장치들로 구성된다. 다른 실시 예들에서, 기기(200)는 워싱턴, 시애틀 소재의 F5 Networks, Inc.에서 제조한 WebAccelerator 및 BigIP로 지칭되는 임의의 제품 실시 예들을 포함할 수 있다. 또 다른 실시 예에서, 기기(205)는 캘리포니아, 서니베일 소재의 Juniper Networks, Inc.에서 제조한 임의의 DX 가속화 장치 플랫폼들 및/또는 SSL VPN 시리즈 장치들, 예를 들어 SA 700, SA 2000, SA4000, 및 SA6000 장치들을 포함할 수 있다. 또 다른 실시 예에서, 기기(200)는 캘리포니아, 산호세 소재의 Cisco Systems, Inc.에서 제조한 임의의 애플리케이션 가속화 및/또는 보안 관련 기기들 및/또는 소프트웨어, 예를 들어, Cisco ACE 애플리케이션 제어 엔진 모듈 서비스 소프트웨어 및 네트워크 모듈들, 및 Cisco AVS 시리즈 애플리케이션 벨로시티 시스템을 포함한다.
일 실시 예에서, 시스템은 다수의, 논리적으로 그룹화된 서버들(106)을 포함할 수 있다. 이러한 실시 예들에서, 서버들의 논리적 그룹은 서버 팜(38)으로 지칭될 수 있다. 이러한 실시 예들 중 일부에서, 서버들(106)은 지리적으로 분산될 수 있다. 일부 경우들에서, 팜(38)은 단일 엔티티로서 관리될 수 있다. 다른 실시 예들에서, 서버 팜(38)은 복수의 서버 팜들(38)로 구성된다. 일 실시 예에서, 서버 팜은 하나 이상의 클라이언트들(102)을 대신하여 하나 이상의 애플리케이션들을 실행한다.
각각의 팜(38) 내의 서버들(106)은 이기종일 수 있다. 하나 이상의 서버들(106)은 하나의 유형의 운영 체제 플랫폼(예를 들어, 워싱턴, 레드몬드 소재의 Microsoft Corp.에서 제조한 WINDOWS NT)에 따라 동작하고, 하나 이상의 다른 서버들(106)은 다른 유형의 운영 체재 플랫폼(예를 들어, Unix 또는 Linux)에 따라 동작할 수 있다. 각각의 팜(38)의 서버들(106)은 동일한 팜(38) 내의 다른 서버(106)에 물리적으로 근접할 필요는 없다. 따라서, 팜(38)으로서 논리적으로 그룹화된 서버들(106)의 그룹은 광역망(WAN) 연결 또는 중규모 지역 통신망(Medium-Area Network; MAN) 연결을 사용하여 상호 접속될 수 있다. 예를 들어, 팜(38)은 상이한 대륙들 또는 대륙, 국가, 주, 도시, 캠퍼스, 또는 방의 상이한 지역들에 물리적으로 위치한 서버들(106)을 포함할 수 있다. 서버들(106)이 근거리 통신망(LAN) 연결 또는 직접 연결의 일부 형태를 사용하여 연결되면, 팜(38) 내의 서버들(106) 사이의 데이터 전송 속도가 증가될 수 있다.
서버들(106)은 파일 서버, 애플리케이션 서버, 웹 서버, 프록시 서버, 또는 게이트웨이 서버로 지칭될 수 있다. 일부 실시 예들에서, 서버(106)는 애플리케이션 서버 또는 마스터 애플리케이션 서버 모두로서 기능할 수 있는 수용 능력을 가질 수 있다. 일 실시 예에서, 서버(106)는 액티브 디렉토리를 포함할 수 있다. 클라이언트들(102)은 또한 클라이언트 노드들 또는 엔드포인트들로 지칭될 수 있다. 일부 실시 예들에서, 클라이언트(102)는 서버 상의 애플리케이션들에 대한 액세스를 찾는 클라이언트 노드 및 다른 클라이언트들(102a-102n)에 대한 호스팅된 애플리케이션들에 대한 액세스를 제공하는 애플리케이션 서버 모두로서 기능할 수 있는 수용 능력을 갖는다.
일부 실시 예들에서, 클라이언트(102)는 서버(106)와 통신한다. 일 실시 예에서, 클라이언트(102)는 팜(38) 내의 서버들(106) 중 하나와 직접 통신한다. 다른 실시 예에서, 클라이언트(102)는 프로그램 이웃 애플리케이션을 실행하여 팜(38) 내의 서버(106)와 통신할 수 있다. 또 다른 실시 예에서, 서버(106)는 마스터 노드의 기능을 제공한다. 일부 실시 예들에서, 클라이언트(102)는 네트워크(104)를 통해 팜(38) 내의 서버(106)와 통신한다. 네트워크(104)를 통해, 클라이언트(102)는, 예를 들어, 팜(38) 내의 서버들(106a-106n)에 의해 호스팅되는 다양한 애플리케이션들의 실행을 요청할 수 있고 디스플레이를 위해 애플리케이션 실행의 결과들의 출력을 수신할 수 있다. 일부 실시 예들에서, 마스터 노드만이 요청된 애플리케이션을 호스팅하는 서버(106')와 연관된 주소 정보를 식별하고 제공하기 위해 필요한 기능을 제공한다.
일 실시 예에서, 서버(106)는 웹 서버의 기능을 제공한다. 다른 실시 예에서, 서버(106a)는 클라이언트(102)로부터 요청들을 수신하고, 요청들을 제2 서버(106b)로 전달하고, 서버(106b)로부터의 요청에 대한 응답과 함께 클라이언트(102)에 의한 요청에 응답한다. 또 다른 실시 예에서, 서버(106)는 클라이언트(102)가 사용할 수 있는 애플리케이션들의 열거 및 애플리케이션들의 열거에 의해 식별된 애플리케이션을 호스팅하는 서버(106)와 관련된 주소 정보를 획득한다. 또 다른 실시 예에서, 서버(106)는 웹 인터페이스를 사용하여 클라이언트(102)에게 요청에 대한 응답을 제공한다. 일 실시 예에서, 클라이언트(102)는 서버(106)와 직접 통신하여 식별된 애플리케이션에 액세스한다. 다른 실시 예에서, 클라이언트(102)는 서버(106) 상의 식별된 애플리케이션의 실행에 의해 생성된 애플리케이션 출력 데이터, 예를 들어 디스플레이 데이터를 수신한다.
이제 도 1b를 참조하면, 다수의 기기들(200)을 배치하는 네트워크 환경의 실시 예가 도시된다. 제1 기기(200)는 제1 네트워크(104) 상에, 그리고 제2 기기(200')는 제2 네트워크(104') 상에 배치될 수 있다. 예를 들어, 기업은 지사에 제1 기기(200)를 배치할 수 있고 데이터 센터에 제2 기기(200')를 배치할 수 있다. 다른 실시 예에서, 제1 기기(200) 및 제2 기기(200')는 동일한 네트워크(104) 또는 네트워크(104') 상에 배치된다. 예를 들어, 제1 기기(200)는 제1 서버 팜(38)을 위해 배치될 수 있고, 제2 기기(200)는 제2 서버 팜(38')을 위해 배치될 수 있다. 다른 예에서, 제1 기기(200)는 제1 지사에 배치될 수 있고 제2 기기(200')는 제2 지사에 배치될 수 있다. 일부 실시 예들에서, 제1 기기(200) 및 제2 기기(200')는 서로 협력하거나 연계하여 클라이언트와 서버 사이에서 네트워크 트래픽 또는 애플리케이션 및 데이터의 전달을 가속화할 수 있다.
이제 도 1c를 참조하면, 하나 이상의 유형의 기기들과 함께, 예를 들어 하나 이상의 WAN 최적화 기기(205, 205') 사이에 기기(200)를 배치한 네트워크 환경의 다른 실시 예가 도시된다. 예를 들어, 제1 WAN 최적화 기기(205)가 네트워크들(104 및 104') 사이에 도시되고, 제2 WAN 최적화 기기(205')는 기기(200) 및 하나 이상의 서버들(106) 사이에 배치될 수 있다. 예로서, 기업은 지사에 제1 WAN 최적화 기기(205)를 배치할 수 있고 데이터 센터에 제2 WAN 최적화 기기(205')를 배치할 수 있다. 일부 실시 예들에서, 기기(205)는 네트워크(104') 상에 위치할 수 있다. 다른 실시 예들에서, 기기(205')는 네트워크(104) 상에 위치할 수 있다. 일부 실시 예들에서, 기기(205')는 네트워크(104') 또는 네트워크(104'') 상에 위치할 수 있다. 일 실시 예에서, 기기(205 및 205')는 동일한 네트워크 상에 있다. 다른 실시 예에서, 기기(205 및 205')는 상이한 네트워크들 상에 있다. 다른 예에서, 제1 WAN 최적화 기기(205)는 제1 서버 팜(38)에 배치될 수 있고 제2 WAN 최적화 기기(205')는 제2 서버 팜(38')에 배치될 수 있다.
일 실시 예에서, 기기(205)는 임의의 유형 및 형태의 네트워크 트래픽, 예를 들어 WAN 연결로의 및/또는 WAN 연결로부터의 트래픽의 서비스의 성능, 동작 또는 서비스의 품질을 가속화, 최적화 또는 향상시키기 위한 장치이다. 일부 실시 예들에서, 기기(205)는 성능 향상 프록시이다. 다른 실시 예들에서, 기기(205)는 임의의 유형 및 형태의 WAN 최적화 또는 가속화 장치이며 때때로 또한 WAN 최적화 제어기로 지칭된다. 일 실시 예에서, 기기(205)는 플로리다, 로더데일 소재의 Citrix Systems, Inc.에서 제조한 CloudBridge®로 지칭되는 임의의 제품 실시 예들이다. 다른 실시 예들에서, 기기(205)는 워싱턴, 시애틀 소재의 F5 Networks, Inc.에서 제조한 Big-IP 링크 제어기 및 WANjet으로 지칭되는 임의의 제품 실시 예들을 포함한다. 또 다른 실시 예에서, 기기(205)는 캘리포니아, 서니베일 소재의 Juniper Networks, Inc.에서 제조한 WX 및 WXC WAN 가속화 장치 플랫폼들 중 임의의 것을 포함한다. 일부 실시 예들에서, 기기(205)는 캘리포니아, 샌프란시스코 소재의 Riverbed Technology에서 제조한 WAN 최적화 기기들의 스틸헤드(steel head) 라인 중 임의의 것을 포함한다. 다른 실시 예들에서, 기기(205)는 뉴저지, 로즈랜드 소재의 Expand Networks Inc.에서 제조한 WAN 관련 장치들 중 임의의 것을 포함한다. 일 실시 예에서, 기기(205)는 캘리포니아, 쿠퍼티노 소재의 Packeteer Inc.에서 제조한 WAN 관련 기기들의 임의의 것, 예를 들어 Packeteer에 의해 제공되는 PacketShaper, iShared, 및 SkyX 제품 실시 예들을 포함한다. 또 다른 실시 예에서, 기기(205)는 캘리포니아, 산호세 소재의 Cisco Systems, Inc.에서 제조한 임의의 WAN 관련 기기들 및/또는 소프트웨어, 예를 들어 Cisco 광대역 네트워크 애플리케이션 서비스 소프트웨어 및 네트워크 모듈들, 및 광대역 엔진 기기들을 포함한다.
일 실시 예에서, 기기(205)는 지사 또는 원격 사무실들에 애플리케이션 및 데이터 가속화 서비스들을 제공한다. 일 실시 예에서, 기기(205)는 WAFS(Wide Area File Services)의 최적화를 포함한다. 다른 실시 예에서, 기기(205)는 예를 들어 CIFS(Common Internet File System) 프로토콜을 통한 파일들의 전달을 가속화한다. 다른 실시 예들에서, 기기(205)는 메모리 및/또는 스토리지에 캐싱을 제공하여 애플리케이션들 및 데이터의 전달을 가속화한다. 일 실시 예에서, 기기(205)는 네트워크 스택의 임의의 레벨 또는 임의의 프로토콜 또는 네트워크 계층에서 네트워크 트래픽의 압축을 제공한다. 다른 실시 예에서, 기기(205)는 전송 계층 프로토콜 최적화, 흐름 제어, 성능 향상 또는 수정 및/또는 관리를 제공하여 WAN 연결을 통한 애플리케이션들 및 데이터의 전달을 가속화한다. 예를 들어, 일 실시 예에서, 기기(205)는 TCP(Transport Control Protocol) 최적화를 제공한다. 다른 실시 예들에서, 기기(205)는 임의의 세션 또는 애플리케이션 계층 프로토콜에 대한 최적화, 흐름 제어, 성능 향상 또는 수정 및/또는 관리를 제공한다.
다른 실시 예에서, 기기(205)는 임의의 유형 및 형태의 데이터 또는 정보를 네트워크 패킷의 커스텀 또는 표준 TCP 및/또는 IP 헤더 필드들 또는 옵션 필드들로 인코딩하여 존재, 기능 또는 성능을 다른 기기(205')에게 알릴 수 있다. 다른 실시 예에서, 기기(205')는 TCP 및/또는 IP 헤더 필드들 또는 옵션들 모두에서 인코딩된 데이터를 사용하여 다른 기기(205')와 통신할 수 있다. 예를 들어, 기기는 TCP 옵션(들) 또는 IP 헤더 필드들 또는 옵션들을 사용하여 하나 이상의 파라미터들을 통신함으로써, 기기들(205, 205')이 기능, 예를 들어 WAN 가속화를 수행하거나 또는 서로 연계하여 작동하기 위해 사용하게 할 수 있다.
일부 실시 예들에서, 기기(200)는 기기들(205 및 205') 사이에서 통신되는 TCP 및/또는 IP 헤더 및/또는 옵션 필드들에 인코딩된 임의의 정보를 보존한다. 예를 들어, 기기(200)는 기기(200)를 가로지르는 전송 계층 연결, 예를 들어 기기들(205 및 205')을 가로지르는 클라이언트와 서버 사이로부터의 전송 계층 연결을 종료할 수 있다. 일 실시 예에서, 기기(200)는 제1 전송 계층 연결을 통하여 제1 기기(205)에 의해 전송된 전송 계층 패킷 내의 임의의 인코딩된 정보를 식별하고 보존하며, 제2 전송 계층 연결을 통하여 제2 기기(205')로 인코딩된 정보와 함께 전송 계층 패킷을 통신한다.
이제 도 1d를 참조하면, 클라이언트(102) 상에서 컴퓨팅 환경을 전달 및/또는 운영하기 위한 네트워크 환경이 도시된다. 일부 실시 예들에서, 서버(106)는 컴퓨팅 환경 또는 애플리케이션 및/또는 데이터 파일을 하나 이상의 클라이언트들(102)에게 전달하기 위한 애플리케이션 전달 시스템(190)을 포함한다. 간단히 요약하면, 클라이언트(102)는 네트워크(104, 104') 및 기기(200)를 통해 서버(106)와 통신 중일 수 있다. 예를 들어, 클라이언트(102)는 회사의 원격 사무실, 예를 들어 지사에 상주할 수 있고, 서버(106)는 기업 데이터 센터에 상주할 수 있다. 클라이언트(102)는 클라이언트 에이전트(120) 및 컴퓨팅 환경(15)으로 구성된다. 컴퓨팅 환경(15)은 데이터 파일을 액세스, 처리 또는 사용하는 애플리케이션을 실행 또는 동작시킬 수 있다. 컴퓨팅 환경(15), 애플리케이션 및/또는 데이터 파일은 기기(200) 및/또는 서버(106)를 통해 전달될 수 있다.
일부 실시 예들에서, 기기(200)는 컴퓨팅 환경(15), 또는 그의 임의의 부분에 대한 클라이언트(102)로의 전달을 가속화한다. 일 실시 예에서, 기기(200)는 애플리케이션 전달 시스템(190)에 의한 컴퓨팅 환경(15)의 전달을 가속화한다. 예를 들어, 본 명세서에 개시된 실시 예들은 중앙 기업 데이터 센터로부터 원격 사용자 위치, 예를 들어 회사의 지사로의 애플리케이션에 의해 처리 가능한 스트리밍 애플리케이션 및 데이터 파일의 전달을 가속화하기 위해 사용될 수 있다. 다른 실시 예에서, 기기(200)는 클라이언트(102)와 서버(106) 사이의 전송 계층 트래픽을 가속화한다. 기기(200)는 서버(106)로부터 클라이언트(102)로의 임의의 전송 계층 페이로드를 가속화하기 위한 다음과 같은 가속 기술들을 제공할 수 있다: 1) 전송 계층 연결 풀링(pooling), 2) 전송 계층 연결 다중화, 3) 전송 제어 프로토콜 버퍼링, 4) 압축 및 5) 캐싱. 일부 실시 예들에서, 기기(200)는 클라이언트들(102)로부터의 요청들에 응답하여 서버들(106)의 로드 밸런싱을 제공한다. 다른 실시 예들에서, 기기(200)는 프록시 또는 액세스 서버로 동작하여 하나 이상의 서버들(106)에 대한 액세스를 제공한다. 다른 실시 예에서, 기기(200)는 클라이언트(102)의 제1 네트워크(104)로부터 서버(106)의 제2 네트워크(104')로의 보안 가상 사설망 연결, 예를 들어 SSL VPN 연결을 제공한다. 또 다른 실시 예들에서, 기기(200)는 클라이언트(102)와 서버(106) 사이의 연결 및 통신들에 대한 애플리케이션 방화벽 보안, 제어 및 관리를 제공한다.
일부 실시 예들에서, 애플리케이션 전달 관리 시스템(190)은 애플리케이션 전달 기술들을 제공하여, 복수의 실행 방법들을 기초로, 그리고 정책 엔진(195)을 통해 적용된 임의의 인증 및 권한 부여 정책을 기초로, 사용자의 데스크탑 또는 원격 등에 컴퓨팅 환경을 전달한다. 이러한 기술들과 함께, 원격 사용자는 컴퓨팅 환경을 획득하고 임의의 네트워크 연결 장치(100)로부터 애플리케이션들 및 데이터 파일들을 저장한 서버에 액세스할 수 있다. 일 실시 예에서, 애플리케이션 전달 시스템(190)은 서버(106) 상에 상주하거나 실행될 수 있다. 다른 실시 예에서, 애플리케이션 전달 시스템(190)은 복수의 서버들(106a-106n) 상에 상주하거나 실행될 수 있다. 일부 실시 예들에서, 애플리케이션 전달 시스템(190)은 서버 팜(38)에서 실행될 수 있다. 일 실시 예에서, 애플리케이션 전달 시스템(190)을 실행하는 서버(106)는 또한 애플리케이션 및 데이터 파일을 저장 또는 제공할 수 있다. 다른 실시 예에서, 하나 이상의 서버들(106)의 제1 세트는 애플리케이션 전달 시스템(190)을 실행할 수 있고, 다른 서버(106n)는 애플리케이션 및 데이터 파일을 저장 또는 제공할 수 있다. 일부 실시 예들에서, 각각의 애플리케이션 전달 시스템(190), 애플리케이션, 및 데이터 파일은 상이한 서버들 상에 상주하거나 위치할 수 있다. 또 다른 실시 예에서, 애플리케이션 전달 시스템(190)의 임의의 부분은 기기(200) 또는 복수의 기기들 상에 상주, 실행 또는 저장되거나 분배될 수 있다.
클라이언트(102)는 데이터 파일을 사용하거나 처리하는 애플리케이션을 실행하기 위한 컴퓨팅 환경(15)을 포함할 수 있다. 네트워크들(104, 104') 및 기기(200)를 통하는 클라이언트(102)는 서버(106)로부터 애플리케이션 및 데이터 파일을 요청할 수 있다. 일 실시 예에서, 기기(200)는 클라이언트(102)로부터 서버(106)로 요청을 전달할 수 있다. 예를 들어, 클라이언트(102)는 로컬에 저장되거나 액세스 가능한 애플리케이션 및 데이터 파일을 갖지 않을 수 있다. 요청에 응답하여, 애플리케이션 전달 시스템(190) 및/또는 서버(106)는 클라이언트(102)로 애플리케이션 및 데이터 파일을 전달할 수 있다. 예를 들어, 일 실시 예에서, 서버(106)는 클라이언트(102) 상의 컴퓨팅 환경(15)에서 동작하는 애플리케이션 스트림으로서 애플리케이션을 전송할 수 있다.
일부 실시 예들에서, 애플리케이션 전달 시스템(190)은 Citrix Systems, Inc.에 의한 Citrix Workspace Suite의 임의의 부분, 예를 들어 XenApp® 또는 XenDesktop® 및/또는 Microsoft Corporation에 의해 제조된 임의의 Microsoft®Windows Terminal Services로 구성된다. 일 실시 예에서, 애플리케이션 전달 시스템(190)은 원격 디스플레이 프로토콜을 통해 또는 원격 기반 또는 서버 기반 컴퓨팅을 통해 클라이언트들(102) 또는 사용자들에게 하나 이상의 애플리케이션들을 전달할 수 있다. 다른 실시 예에서, 애플리케이션 전달 시스템(190)은 애플리케이션의 스티밍(steaming)통하여 클라이언트들 또는 사용자들에게 하나 이상의 애플리케이션들을 전달할 수 있다.
일 실시 예에서, 애플리케이션 전달 시스템(190)은 애플리케이션 실행 방법들 및 애플리케이션들의 전달에 대한 액세스, 선택을 제어 및 관리하기 위한 정책 엔진(195)을 포함한다. 일부 실시 예들에서, 정책 엔진(195)은 사용자 또는 클라이언트(102)가 액세스할 수 있는 하나 이상의 애플리케이션들을 결정한다. 다른 실시 예에서, 정책 엔진(195)은 애플리케이션이 사용자 또는 클라이언트(102)에게 어떻게 전달되어야 하는지, 예를 들어 실행 방법을 결정한다. 일부 실시 예들에서, 애플리케이션 전달 시스템(190)은 애플리케이션 실행의 방법을 선택하기 위한 복수의 전달 기술들, 예를 들어 서버 기반 컴퓨팅, 로컬 실행을 위해 애플리케이션을 클라이언트(102)에 국부적으로 스트리밍 또는 전달하는 기술들을 제공한다.
일 실시 예에서, 클라이언트(102)는 애플리케이션 프로그램의 실행을 요청하고 서버(106)로 구성되는 애플리케이션 전달 시스템(190)은 애플리케이션 프로그램의 실행 방법을 선택한다. 일부 실시 예들에서, 서버(106)는 클라이언트(102)로부터 자격 증명(credential)들을 수신한다. 다른 실시 예에서, 서버(106)는 클라이언트(102)로부터 사용 가능한 애플리케이션들의 열거에 대한 요청을 수신한다. 일 실시 예에서, 자격 증명들의 요청 또는 수신에 응답하여, 애플리케이션 전달 시스템(190)은 클라이언트(102)에 사용 가능한 복수의 애플리케이션 프로그램들을 열거한다. 애플리케이션 전달 시스템(190)은 열거된 애플리케이션을 실행하기 위한 요청을 수신한다. 애플리케이션 전달 시스템(190)은, 예를 들어, 정책 엔진의 정책에 응답하여, 열거된 애플리케이션을 실행하기 위한 미리 결정된 수의 방법들 중 하나를 선택한다. 애플리케이션 전달 시스템(190)은 클라이언트(102)가 서버(106) 상의 애플리케이션 프로그램의 실행에 의해 생성된 애플리케이션 출력 데이터를 수신할 수 있게 하는 애플리케이션의 실행 방법을 선택할 수 있다. 애플리케이션 전달 시스템(190)은 로컬 기계(10)가 애플리케이션으로 구성되는 복수의 애플리케이션 파일들을 검색한 후에 애플리케이션 프로그램을 국부적으로 실행할 수 있게 하는 애플리케이션의 실행 방법을 선택할 수 있다. 또 다른 실시 예에서, 애플리케이션 전달 시스템(190)은 애플리케이션의 실행 방법을 선택하여 네트워크(104)를 통해 애플리케이션을 클라이언트(102)로 스트리밍 할 수 있다.
클라이언트(102)는 임의의 유형 및/또는 형태의 소프트웨어, 프로그램 또는 실행 가능한 명령들, 예를 들어, 임의의 유형 및/또는 형태의 웹 브라우저, 웹 기반 클라이언트, 클라이언트-서버 애플리케이션, 씬(thin)-클라이언트 컴퓨팅 클라이언트, Active X 컨트롤, 또는 Java applet, 또는 클라이언트(102) 상에서 실행될 수 있는 임의의 다른 유형 및/또는 형태의 실행 가능한 명령들일 수 있는 애플리케이션을 실행, 구동 또는 제공할 수 있다. 일부 실시 예들에서, 애플리케이션은 서버(106) 상에서 클라이언트(102)를 대신하여 실행되는 서버 기반 또는 원격 기반 애플리케이션일 수 있다. 일 실시 예들에서, 서버(106)는 씬-클라이언트 또는 원격 디스플레이 프로토콜, 예를 들어, 플로리다, 로더데일 소재의 Citrix Systems, Inc.에서 제조한 ICA(Independent Computing Architecture) 프로토콜 또는 워싱턴, 레드몬드 소재의 Microsoft Corporation에서 제조한 RDP(Remote Desktop Protocol)를 사용하여 클라이언트(102)에게 출력을 표시할 수 있다. 애플리케이션은 임의의 유형의 프로토콜을 사용할 수 있고, 예를 들어, HTTP 클라이언트, FTP 클라이언트, Oscar 클라이언트 또는 텔넷 클라이언트일 수 있다. 다른 실시 예들에서, 애플리케이션은 VolP 통신, 예를 들어 soft IP telephone과 관련된 임의의 유형의 소프트웨어로 구성된다. 추가적인 실시 예들에서, 애플리케이션은 실시간 데이터 통신, 예를 들어 비디오 및/또는 오디오를 스트리밍하기 위한 애플리케이션들과 연관된 임의의 애플리케이션으로 구성된다.
일부 실시 예들에서, 서버(106) 또는 서버 팜(38)은 하나 이상의 애플리케이션들, 예를 들어 씬-클라이언트 컴퓨팅 또는 원격 디스플레이 프리젠테이션 애플리케이션을 제공하는 애플리케이션을 실행할 수 있다. 일 실시 예에서, 서버(106) 또는 서버 팜(38)은 애플리케이션으로서, Citrix Systems, Inc.의 Citrix Workspace Suite의 임의의 부분, 예를 들어 XenApp® 또는 XenDesktop®, 및/또는 Microsoft Corporation이 제조한 임의의 Microsoft® Windows Terminal Services를 실행할 수 있다. 일 실시 예에서, 애플리케이션은 플로리다, 로더데일 소재의 Citrix Systems, Inc.에 의해 개발된 ICA 클라이언트이다. 다른 실시 예들에서, 애플리케이션은 워싱턴, 레드몬드 소재의 Microsoft Corporation이 개발한 원격 데스크탑(RDP) 클라이언트를 포함한다. 또한, 서버(106)는, 예를 들어, 이메일 서비스들, 예를 들어 워싱턴, 레드몬드 소재의 Microsoft Corporation에서 제조한 Microsoft Exchange를 제공하는 애플리케이션 서버, 웹 또는 인터넷 서버, 또는 데스크탑 공유 서버, 또는 협업 서버(collaboration server)를 위한 애플리케이션을 실행할 수 있다. 일부 실시 예들에서, 임의의 애플리케이션들은 임의의 유형의 호스팅된 서비스 또는 제품들, 예를 들어 캘리포니아, 산타 바바라 소재의 Citrix Systems, Inc.에 의해 제공되는 GoToMeeting, 캘리포니아, 산호세 소재의 Cisco Systems, Inc.에 의해 제공되는 WebEX 또는 워싱턴, 레드몬드 소재의 Microsoft Corporation에 의해 제공되는 Microsoft Office Live Meeting을 포함할 수 있다.
계속해서 도 1d를 참조하면, 네트워크 환경의 실시 예는 모니터링 서버(106A)를 포함할 수 있다. 모니터링 서버(106A)는 임의의 유형 및 형태의 성능 모니터링 서비스(198)를 포함할 수 있다. 성능 모니터링 서비스(198)는 데이터 수집, 집합(aggregation), 분석, 관리 및 보고를 포함하는 모니터링, 측정 및/또는 관리 소프트웨어 및/또는 하드웨어를 포함할 수 있다. 일 실시 예에서, 성능 모니터링 서비스(198)는 하나 이상의 모니터링 에이전트들(197)을 포함한다. 모니터링 에이전트(197)는 장치, 예를 들어 클라이언트(102), 서버(106) 또는 기기(200, 205) 상에서 모니터링, 측정, 및 데이터 수집 활동을 수행하기 위한 임의의 소프트웨어, 하드웨어 또는 이들의 조합을 포함한다. 일부 실시 예들에서, 모니터링 에이전트(197)는 임의의 유형 또는 형태의 스크립트, 예를 들어 Visual Basic script, 또는 Javascript를 포함한다. 일 실시 예에서, 모니터링 에이전트(197)는 장치의 임의의 애플리케이션 및/또는 사용자에게 투명하게 실행된다. 일부 실시 예들에서, 모니터링 에이전트(197)는 애플리케이션 또는 클라이언트에게 드러나지 않게 설치되고 동작된다. 또 다른 실시 예에서, 모니터링 에이전트(197)는 애플리케이션 또는 장치를 위한 임의의 수단없이 설치 및 동작된다.
일부 실시 예들에서, 모니터링 에이전트(197)는 미리 결정된 빈도로 데이터를 모니터링, 측정 및 수집한다. 다른 실시 예들에서, 모니터링 에이전트(197)는 임의의 유형 및 형태의 이벤트의 감지를 기초로 데이터를 모니터링, 측정 및 수집한다. 예를 들어, 모니터링 에이전트(197)는 웹 페이지에 대한 요청 또는 HTTP 응답의 수신이 감지되면 데이터를 수집할 수 있다. 다른 예에서, 모니터링 에이전트(197)는 임의의 사용자 입력 이벤트들, 예를 들어 마우스 클릭이 감지되면 데이터를 수집할 수 있다. 모니터링 에이전트(197)는 임의의 모니터링 된, 측정된 또는 수집된 데이터를 모니터링 서비스(198)에 보고 또는 제공할 수 있다. 일 실시 예에서, 모니터링 에이전트(197)는 예정된 또는 미리 결정된 빈도에 따라 모니터링 서비스(198)에 정보를 전송한다. 다른 실시 예에서, 모니터링 에이전트(197)는 이벤트가 감지되면 모니터링 서비스(198)로 정보를 전송한다.
일부 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 임의의 네트워크 자원 또는 네트워크 기반 시설 요소, 예를 들어 클라이언트, 서버, 서버 팜, 기기(200), 기기(205), 또는 네트워크 연결의 모니터링 및 성능 측정을 수행한다. 일 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 임의의 전송 계층 연결, 예를 들어 TCP 또는 UDP 연결의 모니터링 및 성능 측정을 수행한다. 다른 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 네트워크 레이턴시(latency)를 모니터링하고 측정한다. 또 다른 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 대역폭 사용도(bandwidth utilization)를 모니터링하고 측정한다.
다른 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 최종 사용자(end-user) 응답 시간을 모니터링하고 측정한다. 일부 실시 예들에서, 모니터링 서비스(198)는 애플리케이션의 모니터링 및 성능 측정을 수행한다. 다른 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 애플리케이션에 대한 임의의 세션 또는 연결의 모니터링 및 성능 측정을 수행한다. 일 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 브라우저의 성능을 모니터링하고 측정한다. 다른 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 HTTP 기반 트랜잭션의 성능을 모니터링하고 측정한다. 일부 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 음성 통신(Voice over IP; VoIP) 애플리케이션 또는 세션의 성능을 모니터링하고 측정한다. 다른 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 원격 디스플레이 프로토콜 애플리케이션, 예를 들어 ICA 클라이언트 또는 RDP 클라이언트의 성능을 모니터링하고 측정한다. 또 다른 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 임의의 유형 또는 형태의 스트리밍 미디어의 성능을 모니터링하고 측정한다. 추가적인 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 호스팅된 애플리케이션 또는 SaaS(Software-As-A-Service) 전달 모델의 성능을 모니터링하고 측정한다.
일부 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 애플리케이션과 관련된 하나 이상의 트랜잭션들, 요청들 또는 응답들의 모니터링 및 성능 측정을 수행한다. 다른 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 애플리케이션 계층 스택, 예를 들어 임의의 .NET 또는 J2EE 호출들의 임의의 부분을 모니터링하고 측정한다. 일 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 데이터베이스 또는 SQL 트랜잭션들을 모니터링하고 측정한다. 또 다른 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 임의의 방법, 기능 또는 API(Application Programming Interface) 호출을 모니터링하고 측정한다.
일 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 하나 이상의 기기들, 예를 들어 기기(200) 및/또는 기기(205)를 통한 서버로부터 클라이언트로의 애플리케이션 및/또는 데이터의 전달의 모니터링 및 성능 측정을 수행한다. 일부 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 가상화된 애플리케이션의 전달 성능을 모니터링하고 측정한다. 다른 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 스트리밍 애플리케이션의 전달 성능을 모니터링하고 측정한다. 또 다른 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 클라이언트로의 데스크탑 애플리케이션의 전달 및/또는 클라이언트 상의 데스크탑 애플리케이션의 실행의 성능을 모니터링하고 측정한다. 또 다른 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 클라이언트/서버 애플리케이션의 성능을 모니터링하고 측정한다.
일 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 애플리케이션 전달 시스템(190)에 대한 애플리케이션 성능 관리를 제공하도록 설계 및 구성된다. 예를 들어, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 Citrix Presentation Server를 통해 애플리케이션 전달의 성능을 모니터링, 측정 및 관리할 수 있다. 이러한 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 개별 ICA 세션들을 모니터링한다. 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 애플리케이션 및 네트워킹 성능뿐만 아니라, 전체 또는 세션 당 시스템 자원 사용량을 측정한다. 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 주어진 사용자 및/또는 사용자 세션에 대한 활성 서버들을 식별할 수 있다. 일부 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 애플리케이션 전달 시스템(190)과 애플리케이션 및/또는 데이터베이스 서버 사이의 백-엔드(back-end) 연결들을 모니터링한다. 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 사용자-세션 또는 ICA 세션 당 네트워크 레이턴시, 지연(delay) 및 크기(volume)을 측정할 수 있다.
일부 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 애플리케이션 전달 시스템(190)에 대한 메모리 사용량, 예를 들어 전체 메모리 사용량, 사용자 세션 당 및/또는 프로세스 당 메모리 사용량을 측정하고 모니터링한다. 다른 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 애플리케이션 전달 시스템(190)에 대한 CPU 사용량, 예를 들어 전체 CPU 사용량, 사용자 세션 당 및/또는 프로세스 당 CPU 사용량을 측정하고 모니터링한다. 또 다른 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 애플리케이션, 서버, 또는 애플리케이션 전달 시스템, 예를 들어 Citrix Presentation Server에 로그인하는 데 요구되는 시간을 측정하고 모니터링한다. 일 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 사용자가 애플리케이션, 서버, 또는 애플리케이션 전달 시스템(190)에 로그인한 기간을 측정 및 모니터링한다. 일부 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 애플리케이션, 서버 또는 애플리케이션 전달 시스템 세션에 대한 활성 및 비활성 세션 카운트들을 측정하고 모니터링한다. 또 다른 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 사용자 세션 레이턴시를 측정하고 모니터링한다.
또 다른 추가적인 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 임의의 유형 또는 형태의 서버 매트릭(metric)들을 측정하고 모니터링한다. 일 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 시스템 메모리, CPU 사용량 및 디스크 스토리지와 관련된 메트릭들을 측정하고 모니터링한다. 다른 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 페이지 폴트(page fault)들, 예를 들어 초당 페이지 폴트들에 관한 메트릭들을 측정하고 모니터링한다. 다른 실시 예들에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 왕복 시간(round-trip time) 메트릭들을 측정하고 모니터링한다. 또 다른 실시 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 애플리케이션 충돌들, 에러들 및/또는 정지(hang)들에 관한 메트릭들을 측정하고 모니터링한다.
일부 실시 예들에서, 모니터링 서비스(198) 및 모니터링 에이전트(197)는 플로리다, 로더데일 소재의 Citrix Systems, Inc.에 의해 제조된 EdgeSight로 지칭되는 임의의 제품 실시 예들을 포함한다. 다른 실시 예에서, 성능 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 캘리포니아, 팔로 알토 소재의 Symphoniq Corporation에 의해 제조된 TrueView product suite로 지칭되는 제품의 실시 예들의 임의의 부분을 포함한다. 일 실시 예에서, 성능 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 캘리포니아, 샌프란시스코 소재의 TeaLeaf Technology Inc.에 의해 제조된 TeaLeaf CX product suite로 지칭되는 제품 실시 예들의 임의의 부분을 포함한다. 다른 실시 예들에서, 성능 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 텍사스, 휴스턴 소재의 BMC Software, Inc.에 의해 제조된 비즈니스 서비스 관리 제품들, 예를 들어, BMC Performance Manager 및 Patrol 제품들의 임의의 부분을 포함한다.
클라이언트(102), 서버(106), 및 기기(200)는 임의의 유형 및 형태의 컴퓨팅 장치, 예를 들어, 임의의 유형 및 형태의 네트워크에서 통신할 수 있고 본 명세서에 개시된 동작들을 수행하는 컴퓨터, 네트워크 장치 또는 기기로서 배치되고/되거나 이들 상에서 실행될 수 있다. 도 1e 및 1f는, 클라이언트(102), 서버(106) 또는 기기(200)의 실시 예를 실행하는데 유용한 컴퓨팅 장치(100)의 블록도를 도시한다. 도 1e 및 1f에 도시된 바와 같이, 각각의 컴퓨팅 장치(100)는 중앙 처리부(101), 및 메인 메모리부(122)를 포함한다. 도 1e에 도시된 바와 같이, 컴퓨팅 장치(100)는 시각적 디스플레이 장치(124), 키보드(126) 및/또는 포인팅 장치(127), 예를 들어 마우스를 포함할 수 있다. 각각의 컴퓨팅 장치(100)는 또한 추가적인 선택 요소들, 예를 들어 하나 이상의 입/출력 장치들(130a-130b)(일반적으로 참조 번호 130을 사용하여 지칭됨), 및 중앙 처리부(101)와 통신하는 캐시 메모리(140)를 포함할 수 있다.
중앙 처리부(101)는 메인 메모리부(122)로부터 페치된 명령들에 응답하고 이를 처리하는 임의의 논리 회로이다. 많은 실시 예들에서, 중앙 처리부는 다음과 같은 마이크로프로세서부에 의해 제공된다: 캘리포니아, 마운틴 뷰 소재의 Intel Corporation에 의해 제조된 것들; 일리노이, 샴버그 소재의 Motorola Corporation에 의해 제조된 것들; 캘리포니아, 산타 클라라 소재의 Transmeta Corporation에 의해 제조된 것들; RS/6000 프로세서, 뉴욕, 화이트 플레인즈 소재의 International Business Machines에 의해 제조된 것들; 또는 캘리포니아, 서니베일 소재의 Advanced Micro Devices에 의해 제조된 것들. 컴퓨팅 장치(100)는 이러한 프로세서들 중 임의의 것, 또는 본 명세서에 개시된 바와 같이 동작할 수 있는 임의의 다른 프로세서에 기초할 수 있다.
메인 메모리부(122)는 데이터를 저장할 수 있고 임의의 스토리지 위치가 마이크로프로세서(101)에 의해 직접 액세스 될 수 있게 하는 하나 이상의 메모리 칩들, 예를 들어, SRAM(Static random access memory), Burst SRAM 또는 SynchBurst SRAM (BSRAM), DRAM(Dynamic random access memory), FPM DRAM(Fast Page Mode DRAM), EDRAM(Enhanced DRAM), EDO RAM(Extended Data Output RAM), EDO DRAM(Extended Data Output DRAM), BEDO DRAM(Burst Extended Data Output DRAM), EDRAM(Enhanced DRAM), SDRAM(synchronous DRAM), JEDEC SRAM, PC100 SDRAM, DDR SDRAM(Double Data Rate SDRAM), Enhanced SDRAM (ESDRAM), SLDRAM(SyncLink DRAM), DRDRAM(Direct Rambus DRAM), 또는 FRAM(Ferroelectric RAM)일 수 있다. 메인 메모리부(122)는 상술한 메모리 칩들 중 임의의 것, 또는 본 명세서에 개시된 바와 같이 동작할 수 있는 임의의 다른 사용 가능한 메모리 칩들에 기초할 수 있다. 도 1e에 도시된 실시 예에서, 프로세서(101)는 시스템 버스(150)(이하에서 보다 상세하게 설명됨)를 통해 메인 메모리부(122)와 통신한다. 도 1f는 프로세서가 메모리 포트(103)를 통해 메인 메모리부(122)와 직접 통신하는 컴퓨팅 장치(100)의 실시 예를 도시한다. 예를 들어, 도 1f에서 메인 메모리부(122)는 DRDRAM일 수 있다.
도 1f는 메인 프로세서(101)가 때때로 후면 버스라고 지칭되는 제2 버스를 통해 캐시 메모리(140)와 직접 통신하는 실시 예를 도시한다. 다른 실시 예들에서, 메인 프로세서(101)는 시스템 버스(150)를 사용하여 캐시 메모리(140)와 통신한다. 캐시 메모리(140)는 통상적으로 메인 메모리부(122)보다 빠른 응답 시간을 가지며, 통상적으로 SRAM, BSRAM, 또는 EDRAM에 의해 제공된다. 도 1f에 도시된 실시 예에서, 프로세서(101)는 로컬 시스템 버스(150)를 통하여 다양한 I/O 장치들(130)과 통신한다. 다양한 버스들은 중앙 처리부(101)를 임의의 I/O장치들(130)에 연결하는 데 사용될 수 있으며, VESA VL 버스, ISA 버스, EISA 버스, MCA(MicroChannel Architecture) 버스, PCI 버스, PCI-X 버스, PCI-Express 버스, 또는 NuBUS를 포함한다. I/O 장치가 비디오 디스플레이(124)인 실시 예들에서, 프로세서(101)는 AGP(Advanced Graphics Port)를 사용하여 디스플레이(124)와 통신할 수 있다. 도 1f는 메인 프로세서(101)가 HyperTransport, Rapid I/O, 또는 InfiniBand를 통하여 I/O 장치(130b)와 직접 통신하는 컴퓨터(100)의 실시 예를 도시한다. 도 1f는 또한 로컬 버스들 및 직접 통신이 혼합된: 처리부(101)가 I/O 장치(130a)와 직접 통신하는 동안, 로컬 상호 접속 버스를 사용하여 I/O 장치(130b)와 통신하는 실시 예를 도시한다.
컴퓨팅 장치(100)는 임의의 적합한 설치 장치(116), 예를 들어 3.5인치, 5.25 인지 디스크들 또는 ZIP 디스크들과 같은 플로피 디스크들을 수용하기 위한 플로피 디스크 드라이브, CD-ROM 드라이브, CD-R/RW 드라이브, DVD-ROM 드라이브, 다양한 포맷의 테이프 드라이브, USB 장치, 하드 드라이브 또는 임의의 클라이언트 에이전트(120), 또는 그의 일부와 같은 소프트웨어 및 프로그램들을 설치하기에 적합한 임의의 다른 장치를 지원할 수 있다. 컴퓨팅 장치(100)는 스토리지 장치(128), 예를 들어 하나 이상의 하드 디스크 드라이브들 또는 복수 배열 독립 디스크들(redundant arrays of independent disks)을 더 포함하여, 운영 체제 및 다른 관련된 소프트웨어들을 저장하고, 클라이언트 에이전트(120)에 관련된 임의의 프로그램과 같은 애플리케이션 소프트웨어 프로그램들을 저장할 수 있다. 선택적으로, 임의의 설치 장치들(116)이 또한 스토리지 장치(128)로서 사용될 수 있다. 추가로, 운영 체제 및 소프트웨어는 부팅 가능한 매체, 예를 들어, 부팅 가능한 CD, 예를 들어 KNOPPIX® knoppix.net으로부터 배포된 GNU/Linux distribution으로 사용 가능한 GNU/Linux용 부팅 가능한 CD로부터 실행될 수 있다.
또한, 컴퓨팅 장치(100)는 네트워크 인터페이스(118)를 포함하여, 표준 전화 선로들(standard telephone lines), LAN 또는 WAN 링크들(예를 들어, 802.11, T1, T3, 56kb, X.25), 광대역 연결들(예를 들어, ISDN, 프레임 릴레이, ATM), 무선 연결들, 또는 상술한 것의 임의의 것들의 일부 조합 또는 전부를 포함하는, 그러나 이에 한정되지 않는, 다양한 연결들을 통해 근거리 통신망(LAN), 광역망(WAN) 또는 인터넷에 인터페이스 할 수 있다. 네트워크 인터페이스(118)는 내장형 네트워크 어댑터, 네트워크 인터페이스 카드, PCMCIA 네트워크 카드, 카드 버스 네트워크 어댑터, 무선 네트워크 어댑터, USB 네트워크 어댑터, 모뎀 또는 컴퓨팅 장치(100)를 통신 및 본 명세서에 개시된 동작들의 수행이 가능한 임의의 유형의 네트워크에 인터페이스 하기에 적합한 임의의 다른 장치로 구성될 수 있다.
매우 다양한 I/O 장치들(130a-130n)이 컴퓨팅 장치(100)에 마련될 수 있다. 입력 장치들은 키보드들, 마우스들, 트랙패드들, 트랙볼들, 마이크들, 및 드로잉 태블릿(drawing tablet)들을 포함한다. 출력 장치들은 비디오 디스플레이들, 스피커들, 잉크젯 프린터들, 레이저 프린터들, 및 염료 승화 프린터(dye-sublimation printer)들을 포함한다. I/O 장치들(130)은 도 1e에 도시된 바와 같이 I/O 제어기(123)에 의해 제어될 수 있다. I/O 제어기는 하나 이상의 I/O 장치들, 예를 들어 키보드(126) 및 포인팅 장치(127), 예를 들어 마우스 또는 광학 펜을 제어할 수 있다. 또한, I/O 장치는 컴퓨팅 장치(100)를 위한 스토리지(128) 및/또는 설치 매체(116)를 제공할 수 있다. 또 다른 실시 예들에서, 컴퓨팅 장치(100)는 USB 연결들을 제공하여, 핸드헬드 USB 스토리지 장치들, 예를 들어, 캘리포니아, 로스 알라미토스 소재의 Twintech Industry, Inc.에 의해 제조된 USB 플래시 드라이브 라인을 수신할 수 있다.
일부 실시 예들에서, 컴퓨팅 장치(100)는 각각이 동일하거나 상이한 유형 및/또는 형태일 수 있는 다수의 디스플레이 장치들(124a-124n)로 구성되거나 이들에 연결될 수 있다. 이와 같이, 임의의 I/O 장치들(130a-130n) 및/또는 I/O 제어기(123)는 임의의 유형 및/또는 형태의 적합한 하드웨어, 소프트웨어, 또는 하드웨어와 소프트웨어의 조합으로 구성되어, 컴퓨팅 장치(100)에 의한 다수의 디스플레이 장치들(124a-124n)의 연결 및 사용을 지원, 가능하게 하거나, 또는 제공할 수 있다. 예를 들어, 컴퓨팅 장치(100)는 임의의 유형 및/또는 형태의 비디오 어댑터, 비디오 카드, 드라이버, 및/또는 라이브러리를 포함하여 디스플레이 장치들(124a-124n)의 인터페이스, 통신, 연결 또는 사용할 수 있다. 일 실시 예에서, 비디오 어댑터는 다수의 커넥터들을 포함하여 다수의 디스플레이 장치들(124a-124n)에 인터페이스 할 수 있다. 다른 실시 예들에서, 컴퓨팅 장치(100)는 다수의 비디오 어댑터들을 포함할 수 있고, 각각의 비디오 어댑터는 하나 이상의 디스플레이 장치들(124a-124n)에 연결된다. 일부 실시 예들에서, 컴퓨팅 장치(100)의 운영 체제의 임의의 부분은 다수의 디스플레이들(124a-124n)의 사용을 위해 구성될 수 있다. 다른 실시 예들에서, 하나 이상의 디스플레이 장치들(124a-124n)은 하나 이상의 다른 컴퓨팅 장치들, 예를 들어 네트워크를 통하여, 컴퓨팅 장치(100)에 연결된 컴퓨팅 장치들(100a 및 100b)에 의해 제공될 수 있다. 이러한 실시 예들은 컴퓨팅 장치(100)에 대한 제2 디스플레이 장치(124a)로서 다른 컴퓨터의 디스플레이 장치를 사용하도록 설계되고 구성된 임의의 유형의 소프트웨어를 포함할 수 있다. 당업자는 컴퓨팅 장치(100)가 다수의 디스플레이 장치들(124a-124n)을 갖도록 구성될 수 있는 다양한 방법들 및 실시 예들을 인지하고 인식할 것이다.
추가적인 실시 예들에서, I/O 장치(130)는 시스템 버스(150)와 외부 통신 버스, 예를 들어 USB 버스, Apple Desktop 버스, RS-232 직렬 연결, SCSI 버스, Firewire 버스, Firewire 800 버스, 이더넷 버스, AppleTalk 버스, 기가비트 이더넷 버스, 비동기 전송 모드 버스, HIPPI 버스, 수퍼 HIPPI 버스, SerialPlus 버스, SCI/LAMP 버스, FibreChannel 버스, 또는 Serial Attached small computer system interface 버스 사이의 브릿지(170)일 수 있다.
도 1e 및 1f에 도시된 종류의 컴퓨팅 장치(100)는 통상적으로 태스크 스케줄링 및 시스템 자원들에 대한 액세스를 제어하는 운영 체제들의 제어 하에 동작한다. 컴퓨팅 장치(100)는 임의의 운영 체제, 예를 들어 임의의 버전의 Microsoft® Windows 운영 체제들, Unix 및 Linux 운영 체제들의 상이한 릴리즈들, 매킨토시 컴퓨터를 위한 Mac OS®의 임의의 버전, 임의의 임베디드 운영 체제, 임의의 실시간 운영 체제, 임의의 오픈 소스 운영 체제, 임의의 독점 운영 체제, 모바일 컴퓨팅 장치를 위한 임의의 운영 체제들, 또는 컴퓨팅 장치 상에서 구동될 수 있고 본 명세서에 개시된 동작들을 수행할 수 있는 임의의 다른 운영 체제를 실행할 수 있다. 통상적인 운영 체제들은 다음을 포함한다: WINDOWS 3.x, WINDOWS 95, WINDOWS 98, WINDOWS 2000, WINDOWS NT 3.51, WINDOWS NT 4.0, WINDOWS CE 및 WINDOWS XP, 워싱턴, 레드몬드 소재의 Microsoft Corporation에 의해 제조된 모든 것; 캘리포니아, 쿠퍼티노 소재의 Apple Computer에 의해 제조된 MacOS; 뉴욕, 아몽크 소재의 International Business Machines에 의해 제조된 OS/2; 및 유타, 솔트 레이크 시티 소재의 Caldera Corp.에 의해 배포된 무료로 사용 가능한 Linux, 또는 임의의 유형 및/또는 형태의 Unix 운영 체제.
다른 실시 예들에서, 컴퓨팅 장치(100)는 상이한 프로세서들, 운영 체제들, 및 장치와 일치하는 입력 장치들을 가질 수 있다. 예를 들어, 일 실시 예에서 컴퓨터(100)는 Palm, Inc.에 의해 제조된 Treo 180, 270, 1060, 600 또는 650 스마트 폰이다. 이러한 실시 예에서, 트레오 스마트 폰은 PalmOS 운영 체제의 제어 하에 동작되고, 스타일러스 입력 장치뿐만 아니라 5방향 네비게이터 장치를 포함한다. 또한, 컴퓨팅 장치(100)는 임의의 워크 스테이션, 데스크탑 컴퓨터, 랩탑 또는 노트북 컴퓨터, 서버, 핸드헬드 컴퓨터, 이동 전화, 임의의 다른 컴퓨터, 또는 통신할 수 있고 본 명세서에 개시된 동작을 수행하기에 충분한 프로세서 전력 및 메모리 용량을 갖는 임의의 형태의 컴퓨팅 또는 원격 통신 장치들일 수 있다.
도 1g에 도시된 바와 같이, 컴퓨팅 장치(100)는 다수의 프로세서들로 구성되고 명령들의 동시 실행 또는 하나의 명령을 하나 이상의 데이터 조각에 동시에 실행하는 기능을 제공할 수 있다. 일부 실시 예들에서, 컴퓨팅 장치(100)는 하나 이상의 코어들을 갖는 병렬 프로세서로 구성될 수 있다. 이러한 실시 예들 중 하나에서, 컴퓨팅 장치(100)는 단일의 전역 주소 공간(single global address space)으로써 모든 사용 가능한 메모리들에 액세스하는, 다수의 프로세서들 및/또는 다수의 프로세서 코어들을 갖는 공유 메모리 병렬 장치이다. 이러한 실시 예들 중 다른 실시 예에서, 컴퓨팅 장치(100)는 로컬 메모리에만 각각 액세스하는 다수의 프로세서들을 갖는 분산 메모리 병렬 장치이다. 이러한 실시 예들 중 또 다른 실시 예에서, 컴퓨팅 장치(100)는 공유되는 일부 메모리와 특정 프로세서들 또는 프로세서들의 서브 세트에 의해서만 액세스될 수 있는 일부 메모리를 모두 갖는다. 이러한 실시 예들 중 또 다른 실시 예에서, 멀티코어 마이크로프로세서와 같은 컴퓨팅 장치(100)는 둘 이상의 독립 프로세서들을 단일 패키지, 종종 단일 집적 회로(single integrated circuit; single IC)로 결합한다. 이러한 실시 예들 중 또 다른 실시 예에서, 컴퓨팅 장치(100)는 CELL BROADBAND ENGINE 아키텍처를 가지며 전력 처리 요소 및 복수의 시너지 처리 요소들을 포함하는 칩을 포함하고, 전력 처리 요소 및 복수의 시너지 처리 요소들은 내부 연결 버스(element interconnect bus)로 지칭될 수 있는 내부 고속 버스에 의해 상호 연결된다.
일부 실시 예들에서, 프로세서들은 다수의 데이터 조각들에 단일 명령을 동시에 실행하기 위한 기능(SIMD)을 제공한다. 다른 실시 예들에서, 프로세서들은 다수의 데이터 조각들에 다수의 명령들을 동시에 실행하는 기능(MIMD)을 제공한다. 또 다른 실시 예들에서, 프로세서는 하나의 장치 내에 SIMD 및 MIMD 코어들의 임의의 조합을 사용할 수 있다.
일부 실시 예들에서, 컴퓨팅 장치(100)는 그래픽 처리부로 구성될 수 있다. 도 1h에 도시된 이러한 실시 예들 중 하나에서, 컴퓨팅 장치(100)는 적어도 하나의 중앙 처리부(101) 및 적어도 하나의 그래픽 처리부를 포함한다. 이러한 실시 예들 중 다른 실시 예에서, 컴퓨팅 장치(100)는 적어도 하나의 병렬 처리부 및 적어도 하나의 그래픽 처리부를 포함한다. 이러한 실시 예들 중 또 다른 실시 예에서, 컴퓨팅 장치(100)는 임의의 유형의 복수의 처리부를 포함하고, 복수의 처리부 중 하나는 그래픽 처리부를 포함한다.
일부 실시 예들에서, 제1 컴퓨팅 장치(100a)는 클라이언트 컴퓨팅 장치(100b)의 사용자를 대신하여 애플리케이션을 실행한다. 다른 실시 예들에서, 컴퓨팅 장치(100a)는 클라이언트 컴퓨팅 장치(100b)의 사용자를 대신하여 애플리케이션들을 실행하는 실행 세션을 제공하는 가상 머신을 실행한다. 이러한 실시 예들 중 하나에서, 실행 세션은 호스팅된 데스크탑 세션이다. 이러한 실시 예들 중 다른 하나에서, 컴퓨팅 장치(100)는 단말기 서비스 세션을 실행한다. 단말기 서비스 세션은 호스팅된 데스크탑 환경을 제공할 수 있다. 이러한 실시 예들 중 또 다른 실시 예에서, 실행 세션은 다음 중 하나 이상으로 구성될 수 있는 컴퓨팅 환경에 대한 액세스를 제공한다: 애플리케이션, 복수의 애플리케이션들, 데스크탑 애플리케이션, 및 하나 이상의 애플리케이션들이 실행될 수 있는 데스크탑 세션.
B. 기기 아키텍처
도 2A는 기기(200)의 예시적인 실시 예를 도시한다. 도 2A의 기기(200)의 아키텍처는 단지 설명을 위해 제공되는 것이고 제한하려는 의도가 아니다. 도 2에 도시된 바와 같이, 기기(200)는 하드웨어 계층(206) 및 사용자 영역(202)과 커널 영역(204)으로 분할된 소프트웨어 계층으로 구성된다.
하드웨어 계층(206)은 커널 영역(204) 및 사용자 영역(202) 내의 프로그램들 및 서비스들이 실행되는 하드웨어 요소들을 제공한다. 하드웨어 계층(206)은 또한 커널 영역(204) 및 사용자 영역(202) 내의 프로그램들 및 서비스들이 기기(200)에 대해 내부적으로 및 외부적으로 데이터를 통신할 수 있도록 하는 구조들 및 요소들을 제공한다. 도 2에 도시된 바와 같이, 하드웨어 계층(206)은 소프트웨어 프로그램들 및 서비스들을 실행하는 처리부(262), 소프트웨어 및 데이터를 저장하는 메모리(264), 네트워크를 통하여 데이터를 송신하고 수신하는 네트워크 포트들(266), 및 네트워크를 통해 데이터 송신 및 수신되는 데이터의 보안 소켓 계층 처리와 관련된 기능들을 수행하는 암호화 프로세서(260)를 포함한다. 일부 실시 예들에서, 중앙 처리부(262)는 단일 프로세서 내에서 암호화 프로세서(260)의 기능들을 수행할 수 있다. 또한, 하드웨어 계층(206)은 각각의 처리부(262) 및 암호화 프로세서(260)에 대한 다수의 프로세서들로 구성될 수 있다. 프로세서(262)는 도 1e 및 1f와 관련하여 상술한 프로세서들(101) 중 임의의 것을 포함할 수 있다. 예를 들어, 일 실시 예에서, 기기(200)는 제1 프로세서(262) 및 제2 프로세서(262')로 구성된다. 다른 실시 예들에서, 프로세서(262 또는 262')는 멀티 코어 프로세서로 구성된다.
기기(200)의 하드웨어 계층(206)이 일반적으로 암호화 프로세서(260)와 함께 도시되지만, 프로세서(260)는 임의의 암호화 프로토콜, 예를 들어 보안 소켓 계층(SSL) 또는 전송 계층 보안(Transport Layer Security; TLS) 프로토콜과 관련된 기능들을 수행하는 프로세서일 수 있다. 일부 실시 예들에서, 프로세서(260)는 범용 프로세서(general purpose processor; GPP)일 수 있고, 추가적인 실시 예들에서, 임의의 보안 관련 프로토콜의 처리를 수행하기 위한 실행 가능한 명령들을 가질 수 있다.
도 2에서 기기(200)의 하드웨어 계층(206)이 특정 요소들로 도시되어 있지만, 기기(200)의 하드웨어 부분들 또는 구성 요소들은 컴퓨팅 장치, 예를 들어 도 1e 및 1f와 연계하여 본 명세서에 도시되고 설명된 컴퓨팅 장치(100)의 임의의 유형 및 형태의 요소들, 하드웨어 또는 소프트웨어로 구성될 수 있다. 일부 실시 예들에서, 기기(200)는 서버, 게이트웨이, 라우터, 스위치, 브릿지 또는 다른 유형의 컴퓨터 또는 네트워크 장치로 구성될 수 있고, 이들과 관련된 임의의 하드웨어 및/또는 소프트웨어 요소들을 가질 수 있다.
기기(200)의 운영 체제는 사용 가능한 시스템 메모리를 커널 영역(204) 및 사용자 영역(202)에 할당, 관리 또는 분리한다. 예시적인 소프트웨어 아키텍처(200)에서, 운영 체제는 임의의 유형 및/또는 형태의 Unix 운영 체제일 수 있지만, 본 발명은 이에 한정되지 않는다. 이와 같이, 기기(200)는 임의의 운영 체제, 예를 들어 임의의 버전의 Microsoft® Windows 운영 체제들, Unix 및 Linux 운영 체제의 상이한 릴리스들, 매킨토시 컴퓨터를 위한 Mac OS®의 임의의 버전, 임의의 임베디드 운영 체제, 임의의 네트워크 운영 체제, 임의의 실시간 운영 체제, 임의의 오픈 소스 운영 체제, 임의의 독점 운영 체제, 모바일 컴퓨팅 장치들 또는 네트워크 장치들을 위한 임의의 운영 체제들, 또는 기기(200) 상에서 실행될 수 있고 본 명세서에 개시된 동작들을 수행할 수 있는 임의의 다른 운영 체제를 실행할 수 있다.
커널 영역(204)은 임의의 장치 드라이버들, 커널 확장들 또는 다른 커널 관련 소프트웨어를 포함하여, 커널(230)을 실행하기 위해 예약된다. 당업자에게 알려진 바와 같이, 커널(230)은 운영 체제의 코어이고, 애플리케이션(104)의 자원들 및 하드웨어 관련 요소들의 액세스, 제어 및 관리를 제공한다. 기기(200)의 실시 예에 따르면, 커널 영역(204)은 또한 때때로 통합 캐시라고도 지칭되는 캐시 관리자(232)와 연계하여 동작하는 다수의 네트워크 서비스들 또는 프로세스들을 포함하며, 그 이점들은 본 명세서에서 더 상세히 설명된다. 또한, 커널(230)의 실시 예는 장치(200)에 의해 설치, 구성, 또는 사용되는 운영 체제의 실시 예에 의존할 것이다.
일 실시 예에서, 장치(200)는 하나의 네트워크 스택(267), 예를 들어 TCP/IP 기반 스택으로 구성되어, 클라이언트(102) 및/또는 서버(106)와 통신한다. 일 실시 예에서, 네트워크 스택(267)은 제1 네트워크, 예를 들어 네트워크(108), 및 제2 네트워크(110)와 통신하기 위해 사용된다. 일부 실시 예들에서, 장치(200)는 제1 전송 계층 연결, 예를 들어 클라이언트(102)의 TCP 연결을 종료하고 클라이언트(102)에 의한 사용을 위해 서버(106)로의 제2 전송 계층 연결을 설립하며, 예를 들어, 제2 전송 계층 연결들은 기기(200) 및 서버(106)에서 종료된다. 제1 및 제2 전송 계층 연결들은 단일 네트워크 스택(267)을 통해 설립될 수 있다. 다른 실시 예들에서, 장치(200)는 다수의 네트워크 스택들(예를 들어 267 및 267')로 구성될 수 있고, 제1 전송 계층 연결은 하나의 네트워크 스택(267), 및 제2 네트워크 스택(267') 상의 제2 전송 계층 연결에서 설립되거나 종료될 수 있다. 예를 들어, 하나의 네트워크 스택은 제1 네트워크 상에서 네트워크 패킷을 수신 및 송신하기 위한 것일 수 있고, 다른 네트워크 스택은 제2 네트워크 상에서 네트워크 패킷들을 수신하고 송신하기 위한 것일 수 있다. 일 실시 예에서, 네트워크 스택(267)은 기기(200)에 의한 송신을 위해 하나 이상의 네트워크 패킷들을 큐잉하기 위한 버퍼(243)로 구성된다.
도 2a에 도시된 바와 같이, 커널 영역(204)은 캐시 관리자(232), 고속 계층(2-7) 통합 패킷 엔진(240), 암호화엔진(234), 정책 엔진(236) 및 멀티 프로토콜 압축 로직(238)을 포함한다. 프로세스들(232, 240, 234, 236 및 238)을 사용자 영역(202) 대신에 커널 영역(204) 또는 커널 모드에서 실행하는 것은 이러한 구성 요소들 각각의 성능을 단독으로 및 조합하여 향상시킨다. 커널 동작은 이러한 구성 요소들 또는 프로세스들(232, 240, 234, 236 및 238)이 장치(200)의 운영 체제의 코어 주소 공간에서 실행된다는 것을 의미한다. 예를 들어, 커널 모드에서 암호화 엔진(234)을 구동하는 것은 암호화 및 복호화 동작들을 커널로 이동시킴으로써 암호화 성능을 향상시키고, 그에 따라 커널 모드에서의 메모리 공간 또는 커널 스레드와 사용자 모드에서의 메모리 공간 또는 스레드 간의 전환 횟수를 감소시킨다. 예를 들어, 커널 모드에서 획득된 데이터는 사용자 모드에서 실행되는 프로세스 또는 스레드로, 예를 들어 커널 레벨 데이터 구조로부터 사용자 레벨 데이터 구조로 전달되거나 복사될 필요가 없다. 다른 양태에서, 커널 모드와 사용자 모드 간 문맥 교환(context switch)의 수가 또한 감소한다. 또한, 임의의 구성요소들 또는 프로세스들(232, 240, 235, 236 및 238) 사이의 동기화 및 통신들의 동기화는 커널 영역(204)에서 보다 효율적으로 수행될 수 있다.
일부 실시 예들에서, 구성 요소들(232, 240, 234, 236 및 238)의 임의의 부분은 커널 영역에서 실행되거나 동작하는 반면, 이러한 구성 요소들(232, 240, 234, 236 및 238)의 다른 부분들은 사용자 영역(202)에서 실행되거나 동작할 수 있다. 일 실시 예에서, 기기(200)는 하나 이상의 네트워크 패킷들, 예를 들어, 클라이언트(102)로부터의 요청으로 구성되거나 서버(106)로부터의 응답으로 구성된 네트워크 패킷의 임의의 부분으로의 액세스를 제공하는 커널-레벨 데이터 구조를 사용한다. 일부 실시 예들에서, 커널-레벨 데이터 구조는 전송 계층 드라이버 인터페이스 또는 네트워크 스택(267)에 대한 필터를 통하여 패킷 엔진(240)에 의해 획득될 수 있다. 커널-레벨 데이터 구조는 네트워크 스택(267)과 연관된 커널 영역(204), 네트워크 스택(267)에 의해 수신되거나 송신된 네트워크 트래픽 또는 패킷들을 통해 액세스 가능한 임의의 인터페이스 및/또는 데이터로 구성될 수 있다. 다른 실시 예들에서, 커널-레벨 데이터 구조는 임의의 구성 요소들 또는 프로세스들(232, 240, 234, 236 및 238)에 의해 사용되어 구성 요소 또는 프로세스의 요청된 동작을 수행할 수 있다. 일 실시 예에서, 구성 요소(232, 240, 234, 236 및 238)는 커널-레벨 데이터 구조를 사용할 때 커널 모드(204)에서 실행되고, 다른 실시 예에서, 구성 요소(232, 240, 234, 236 및 238)는 커널-레벨 데이터 구조를 사용할 때 사용자 모드에서 실행될 수 있다. 일부 실시 예들에서, 커널-레벨 데이터 구조는 제2 커널-레벨 데이터 구조, 또는 임의의 요구된 사용자-레벨 데이터 구조로 복사되거나 전달될 수 있다.
캐시 관리자(232)는 소프트웨어, 하드웨어 또는 소프트웨어와 하드웨어의 임의의 조합으로 구성되어 임의의 유형 또는 형태의 컨텐츠, 예를 들어 객체들 또는 원본 서버(106)에 의해 제공된 동적으로 생성되는 객체들의 캐시 액세스, 제어 및 관리를 제공할 수 있다. 캐시 관리자(232)에 의해 처리되고 저장된 데이터, 객체들 또는 컨텐츠는 임의의 포맷, 예를 들어 마크업 언어를 포함하거나 임의의 프로토콜을 통하여 통신될 수 있다. 일부 실시 예들에서, 원본 데이터가 캐시 메모리 요소를 판독하는 것과 관련하여 페치, 계산 또는 획득하기 위해 더 긴 액세스 시간을 요구할 수 있는 경우에, 캐시 관리자(232)는 다른 곳에 저장된 원본 데이터 또는 이전에 계산, 생성 또는 전송된 데이터를 복사한다. 데이터가 캐시 메모리 요소에 저장되고 나면, 원본 데이터를 다시 페치하거나 다시 계산하지 않고 캐시된 복사본에 액세스 함으로써 향후 사용이 가능하고, 따라서 액세스 시간을 줄일 수 있다. 일부 실시 예들에서, 캐시 메모리 요소는 장치(200)의 메모리(264)에 데이터 객체를 포함하여 구성될 수 있다. 다른 실시 예들에서, 캐시 메모리 요소는 메모리(264)보다 더 빠른 액세스 시간을 갖는 메모리로 구성될 수 있다. 다른 실시 예에서, 캐시 메모리 요소는 장치(200)의 임의의 유형 및 형태의 스토리지 요소, 예를 들어 하드 디스크의 일부로 구성될 수 있다. 일부 실시 예들에서, 처리부(262)는 캐시 관리자(232)에 의해 사용되는 캐시 메모리를 제공할 수 있다. 또 다른 추가적인 예들에서, 캐시 관리자(232)는 메모리, 스토리지, 또는 처리부의 임의의 부분 또는 조합을 사용하여 데이터, 객체들, 및 다른 컨텐츠를 캐싱할 수 있다.
또한, 캐시 관리자(232)는 임의의 로직, 기능들, 규칙들, 또는 동작들을 포함하여 본 명세서에 개시된 기기(200)의 기술들의 임의의 실시 예들을 수행할 수 있다. 예를 들어, 캐시 관리자(232)는 무효 시간 기간의 만료 또는 클라이언트(102) 또는 서버(106)로부터 무효화 명령의 수신을 기초로 객체들을 무효화하는 로직 또는 기능을 포함한다. 일부 실시 예들에서, 캐시 관리자(232)는 커널 영역(204), 및 다른 실시 예들에서, 사용자 영역(202)에서 실행되는 프로그램, 서비스, 프로세스 또는 태스크로 동작할 수 있다. 일 실시 예에서, 캐시 관리자(232)의 제1 부분은 사용자 영역(202)에서 실행되고 제2 부분은 커널 영역(204)에서 실행된다. 일부 실시 예들에서, 캐시 관리자(232)는 임의의 유형의 범용 프로세서(GPP), 또는 임의의 다른 유형의 집적 회로, 예를 들어 필드 프로그래머블 게이트 어레이(Field Programmable Gate Array; FPGA), 프로그래머블 논리 소자(Programmable Logic Device; PLD), 또는 주문형 반도체(Application Specific Integrated Circuit; ASIC)로 구성될 수 있다.
정책 엔진(236)은, 예를 들어, 지능형 통계 엔진 또는 다른 프로그램 가능한 애플리케이션(들)을 포함할 수 있다. 일 실시 예에서, 정책 엔진(236)은 사용자가 캐싱 정책을 식별, 지정, 정의 또는 구성할 수 있게 하는 구성 메커니즘을 제공한다. 정책 엔진(236)은, 일부 실시 예들에서, 또한 메모리에 액세스하여 데이터 구조들, 예를 들어 룩업 테이블들 또는 해시 테이블들을 지지하여 사용자가 선택한 캐싱 정책 결정들을 가능하게 한다. 다른 실시 예들에서, 정책 엔진(236)은 임의의 로직, 규칙들, 기능들 또는 동작들을 포함하여 보안, 네트워크 트래픽, 네트워크 액세스, 압축 또는 기기(200)에 의해 수행되는 임의의 다른 기능 또는 동작의 액세스, 제어 및 관리에 더하여, 기기(200)에 의해 캐싱된 객체들, 데이터 또는 컨텐츠의 액세스, 제어 및 관리를 결정하고 제공할 수 있다. 특정 캐싱 정책들의 추가 실시 예들에 본 명세서에서 더 개시된다.
암호화 엔진(234)은 임의의 로직, 비즈니스 규칙들, 기능들 또는 동작들로 구성되어 임의의 보안 관련 프로토콜, 예를 들어 SSL 또는 TLS, 또는 이들에 관련된 임의의 기능의 처리를 조작할 수 있다. 예를 들어, 암호화 엔진(234)은 기기(200)를 통해 통신된 네트워크 패킷들, 또는 이들의 임의의 부분을 암호화하고 복호화한다. 암호화 엔진(234)은 또한 클라이언트(102a-102n), 서버(106a-106n), 또는 기기(200)를 대신하여 SSL 또는 TLS 연결들을 설정 또는 설립할 수 있다. 이와 같이, 암호화 엔진(234)은 SSL 처리의 오프로드 및 가속화를 제공한다. 일 실시 예에서, 암호화 엔진(234)은 터널링 프로토콜을 사용하여 클라이언트(102a-102n)와 서버(106a-106n) 사이에 가상 사설 네트워크를 제공한다. 일부 실시 예들에서, 암호화 엔진(234)은 암호화 프로세서(260)와 통신한다. 다른 실시 예들에서, 암호화 엔진(234)은 암호화 프로세서(260) 상에서 실행되는 실행 가능한 명령들로 구성된다.
멀티 프로토콜 압축 엔진(238)은 임의의 로직, 비즈니스 규칙들, 기능 또는 동작들로 구성되어 하나 이상의 네트워크 패킷의 프로토콜들, 예를 들어 장치(200)의 네트워크 스택(267)에 의해 사용되는 임의의 프로토콜들을 압축한다. 일 실시 예에서, 멀티 프로토콜 압축 엔진(238)은 메시징 애플리케이션 프로그래밍 인터페이스(Messaging Application Programming Interface; MAPI)(이메일), 파일 전송 프로토콜(File Transfer Protocol; FTP). 하이퍼텍스트 전송 프로토콜(HyperText Transfer Protocol; HTTP), 공용 인터넷 파일 시스템(Common Internet File System; CIFS) 프로토콜 (파일 전송), 독립 컴퓨팅 아키텍처(Independent Computing Architecture; ICA) 프로토콜, 원격 데스크탑 프로토콜(Remote Desktop Protocol; RDP), 무선 애플리케이션 프로토콜(Wireless Application Protocol; WAP), 모바일 IP 프로토콜(Mobile IP protocol), 및 음성 통신(Voice over IP; VoIP) 프로토콜을 포함하는 임의의TCP/IP 기반 프로토콜을 클라이언트들(102a-102n)과 서버들(106a-106n) 사이에서 양방향으로 압축한다. 다른 실시 예들에서, 멀티 프로토콜 압축 엔진(238)은 하이퍼텍스트 마크업 언어(Hypertest Markup Language; HTML) 기반 프로토콜들의 압축을 제공하고 일부 실시 예들에서, 임의의 마크업 언어들, 예를 들어 확장성 마크업 언어(Extensible Markup Language; XML)의 압축을 제공한다. 일 실시 예에서, 멀티 프로토콜 압축 엔진(238)은 임의의 고성능 프로토콜, 예를 들어 기기(200) 간 통신을 위해 설계된 임의의 프로토콜의 압축을 제공한다. 다른 실시 예에서, 멀티 프로토콜 압축 엔진(238)은 수정된 전송 제어 프로토콜, 예를 들어 T/TCP(Transaction TCP), TCP-SACK(TCP with selection acknowledgements), TCP-LW(TCP with large windows), TCP-Vegas 프로토콜과 같은 혼잡 예측 프로토콜, 및 TCP 스푸핑 프로토콜을 사용하여 임의의 통신의 임의의 페이로드 또는 임의의 통신을 압축한다.
이와 같이, 멀티 프로토콜 압축 엔진(238)은 데스크탑 클라이언트들, 예를 들어 마이크로소프트 아웃룩 및 non-Web 씬 클라이언트들, 예를 들어, 오라클, SAP 및 Siebel과 같은 대중적인 엔터프라이즈 애플리케이션들에 의해 개시되는 임의의 클라이언트, 및 모바일 클라이언트들, 예를 들어 Pocket PC 또는 안드로이드(Android)를 통해 애플리케이션들에 액세스하는 사용자들을 위해 성능을 가속화한다. 일부 실시 예들에서, 커널 모드(204)에서 실행되고 네트워크 스택(267)에 액세스하는 패킷 처리 엔진(240)과 통합됨으로써 멀티 프로토콜 압축 엔진(238)은 TCP/IP 프로토콜에 의해 수행되는 프로토콜들, 예를 들어 임의의 애플리케이션 계층 프로토콜을 압축할 수 있다.
일반적으로 패킷 처리 엔진 또는 패킷 엔진으로 지칭되는 고속 계층(2-7) 통합 패킷 엔진(240)은 네트워크 포트들(266)을 통해 기기(200)에 의해 수신되고 송신된 패킷들의 커널 레벨 처리를 관리하는 역할을 한다. 고속 계층(2-7) 통합 패킷 엔진(240)은 처리 동안, 예를 들어 네트워크 패킷의 수신 또는 네트워크 패킷의 전송을 위한 처리 동안 하나 이상의 네트워크 패킷들을 큐잉하기 위한 버퍼로 구성될 수 있다. 또한, 고속 계층(2-7) 통합 패킷 엔진(240)은 하나 이상의 네트워크 스택들(267)과 통신하여 네트워크 포트들(266)을 통해 네트워크 패킷들을 송신하고 수신할 수 있다. 고속 계층(2-7) 통합 패킷 엔진(240)은 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 멀티 프로토콜 압축 로직(238)과 연계하여 동작한다. 특히, 암호화 엔진(234)은 패킷들의 SSL 처리를 수행하도록 구성되고, 정책 엔진(236)은 트래픽 관리와 관련된 기능들, 예를 들어 요청 레벨 컨텐츠 스위칭(request-level content switching) 및 요청 레벨 캐시 방향전환(request-level cache redirection)을 수행하도록 구성되며, 멀티 프로토콜 압축 로직(238)은 데이터의 압축 및 압축 해제와 관련된 기능들을 수행하도록 구성된다.
고속 계층(2-7) 통합 패킷 엔진(240)은 패킷 처리 타이머(242)를 포함한다. 일 실시 예에서, 패킷 처리 타이머(242)는 유입되는, 예를 들어, 수신되는, 또는 유출되는, 예를 들어, 송신되는 네트워크 패킷들의 처리를 트리거하기 위한 하나 이상의 시간 간격들을 제공한다. 일부 실시 예들에서, 고속 계층(2-7) 통합 패킷 엔진(240)은 타이머(242)에 응답하여 네트워크 패킷들을 처리한다. 패킷 처리 타이머(242)는 임의의 유형 또는 형태의 신호를 패킷 엔진(240)에 제공하여 시간 관련 이벤트, 간격 또는 발생을 알림, 트리거 또는 통신한다. 많은 실시 예들에서, 패킷 처리 타이머(242)는 예를 들어 100ms, 50ms 또는 25ms와 같은 밀리 초 단위로 동작한다. 예를 들어, 일부 실시 예들에서, 패킷 처리 타이머(242)는 시간 간격들을 제공하거나 네트워크 패킷이 10ms 시간 간격으로 고속 계층(2-7) 통합 패킷 엔진(240)에 의해 처리되게 하고, 다른 실시 예들에서는, 5ms 시간 간격으로, 또는 또 다른 추가적인 실시 예들에서는, 3, 2, 또는 1ms 시간 간격만큼 짧은 시간 간격으로 처리되게 한다. 고속 계층(2-7) 통합 패킷 엔진(240)은 동작 동안 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 다중 프로토콜 압축 엔진(238)과 인터페이스되거나, 통합되거나 또는 통신할 수 있다. 이와 같이, 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 멀티 프로토콜 압축 로직(238)의 임의의 로직, 기능들 또는 동작들은 패킷 처리 타이머(242) 및/또는 패킷 엔진(240)에 응답하여 수행될 수 있다. 따라서, 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 다중 프로토콜 압축 로직(238)의 임의의 로직, 기능들 또는 동작들은, 패킷 처리 타이머(242)를 통해 제공되는 시간 간격, 예를 들어, 10ms 보다 작거나 같은 시간 간격의 단위로 수행될 수 있다. 예를 들어, 일 실시 예에서, 캐시 관리자(232)는 고속 계층(2-7) 통합 패킷 엔진(240) 및/또는 패킷 처리 타이머(242)에 응답하여 임의의 캐시된 객체들의 무효화를 수행할 수 있다. 다른 실시 예에서, 캐시된 객체의 만료 또는 무효화 시간은 패킷 처리 타이머(242)의 시간 간격과 동일한 단위 순서, 예를 들어 매 10ms마다로 설정될 수 있다.
커널 영역(204)과 대조적으로, 사용자 영역(202)은 사용자 모드 애플리케이션들 또는 사용자 모드에서 실행되는 프로그램들에 의해 사용되는 운영 체제의 메모리 영역 또는 부분이다. 사용자 모드 애플리케이션은 커널 영역(204)에 직접 액세스 하지 않고 서비스 호출들을 사용하여 커널 서비스들에 액세스할 수 있다. 도 2에 도시된 바와 같이, 기기(200)의 사용자 영역(202)은 그래픽 사용자 인터페이스(Graphical User Interface; GUI)(210), 명령어 라인 인터페이스(Command Line Interface; CLI)(212), 쉘 서비스들(shell services)(214), 성능 모니터링 프로그램(health monitoring program)(216), 및 데몬 서비스들(218)을 포함한다. GUI(210) 및 CLI(212)는 시스템 관리자 또는 다른 사용자가, 예를 들어, 기기(200)의 운영 체재를 통해서, 기기(200)의 동작과 상호 작용하고 이를 제어할 수 있도록 하는 수단을 제공한다. GUI(210) 또는 CLI(212)는 사용자 영역(202) 또는 커널 영역(204)에서 동작하는 코드를 포함할 수 있다. GUI(210)는 임의의 유형 및 형태의 그래픽 사용자 인터페이스일 수 있고, 임의의 유형의 프로그램 또는 애플리케이션, 예를 들어 브라우저에 의해 텍스트, 그래픽 또는 다른 방식으로 표현될 수 있다. CLI(212)는 임의의 유형 및 형태의 명령어 라인 또는 텍스트 기반 인터페이스, 예를 들어 운영 체제에 의해 제공되는 명령어 라인일 수 있다. 예를 들어, CLI(212)는 사용자가 운영 체제와 상호 작용할 수 있도록 하는 도구인 쉘로 구성될 수 있다. 일부 실시 예들에서, CLI(212)는 bash, csh, tcsh, 또는 ksh 타입 쉘을 통해 제공될 수 있다. 쉘 서비스들(214)은 GUI(210) 및/또는 CLI(212)를 통해 사용자에 의한 기기(200) 또는 운영 체제와의 상호 작용을 지원하기 위한 프로그램들, 서비스들, 태스크들, 프로세스들 또는 실행 가능한 명령들로 구성된다.
성능 모니터링 프로그램(216)은 네트워크 시스템들이 적절하게 기능하고 사용자들이 네트워크를 통해 요청된 컨텐츠를 수신하고 있는지를 모니터링, 검사, 보고 및 보장하는데 사용된다. 성능 모니터링 프로그램(216)은 기기(200)의 임의의 활동을 모니터링하기 위한 로직, 규칙들, 기능들 또는 명령들을 제공하기 위한 하나 이상의 프로그램들, 서비스들, 태스크들, 프로세스들 또는 실행 가능한 명령들로 구성된다. 일부 실시 예들에서, 성능 모니터링 프로그램(216)은 기기(200)를 통해 전달된 임의의 네트워크 트래픽을 가로채고 검사한다. 다른 실시 예들에서, 성능 모니터링 프로그램(216)은 임의의 적합한 수단들 및/또는 메커니즘들에 의해 다음 중 하나 이상과 인터페이스 한다: 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236), 다중 프로토콜 압축 로직(238), 패킷 엔진(240), 데몬 서비스들(218) 및 쉘 서비스들(214). 이와 같이, 성능 모니터링 프로그램(216)은 임의의 애플리케이션 프로그래밍 인터페이스(API)를 호출하여 기기(200)의 임의의 부분의 상태, 상황 또는 성능을 판단할 수 있다. 예를 들어, 성능 모니터링 프로그램(216)은 주기적으로 상황 질의(status inquiry)를 핑 또는 전송하여 프로그램, 프로세서, 서비스 또는 태스크가 활성화되고 현재 실행 중인지를 검사할 수 있다. 다른 실시 예에서, 성능 모니터링 프로그램(216)은 임의의 프로그램, 프로세스, 서비스 또는 태스크에 의해 제공된 임의의 상황, 에러 또는 이력 로그들을 검사하여 기기(200)의 임의의 부분의 임의의 컨디션, 상황 또는 에러를 결정할 수 있다.
데몬 서비스들(218)은 연속적으로 또는 백그라운드에서 실행되고 기기(200)에 의해 수신된 주기적인 서비스 요청들을 처리하는 프로그램들이다. 일부 실시 예들에서, 데몬 서비스는 요청들을 다른 프로그램들 또는 프로세스들, 예를 들어 적절한 다른 데몬 서비스(218)로 전송할 수 있다. 당업자에게 알려진 바와 같이, 데몬 서비스(218)는 연속적인 또는 주기적인 시스템 전체 기능들, 예를 들어 네트워크 제어를 수행하거나, 또는 임의의 요구되는 태스크를 수행하기 위해 무인으로 실행될 수 있다. 일부 실시 예들에서, 하나 이상의 데몬 서비스들(218)은 사용자 영역(202)에서 실행되고, 다른 실시 예들에서, 하나 이상의 데몬 서비스들(218)은 커널 영역에서 실행된다.
이제 도 2b를 참조하면, 기기(200)의 다른 실시 예가 도시된다. 간단히 요약하면, 기기(200)는 하나 이상의 다음의 서비스들, 기능 또는 동작들을 제공한다: SSL VPN 연결(280), 스위칭/로드 밸런싱(284), DNS 처리(DNS resolution)(286), 가속화(288) 및 하나 이상의 클라이언트들(102) 및 하나 이상의 서버들(106) 간의 통신들을 위한 애플리케이션 방화벽(290). 각각의 서버들(106)은 하나 이상의 네트워크 관련 서비스들(270a-270n)(서비스들(270)로 지칭됨)을 제공할 수 있다. 예를 들어, 서버(106)는 http 서비스(270)를 제공할 수 있다. 기기(200)는 vServer, VIP 서버, 또는 VIP(275a-275n)로 지칭되는(또한 본 명세서에서 vServer(275)로 지칭됨) 하나 이상의 가상 서버들 또는 가상 인터넷 프로토콜 서버들로 구성된다. vServer(275)는 기기(200)의 구성 및 동작들에 따른 클라이언트(102)와 서버(106) 간의 통신들을 수신하거나, 가로채거나 또는 처리한다.
vServer(275)는 소프트웨어, 하드웨어 또는 소프트웨어와 하드웨어의 임의의 조합으로 구성될 수 있다. vServer(275)는 기기(200) 내의 사용자 모드(202), 커널 모드(204) 또는 이들의 임의의 조합에서 동작하는 임의의 유형 및 형태의 프로그램, 서비스, 태스크, 프로세스 또는 실행 가능한 명령들로 구성될 수 있다. vServer(275)는 임의의 로직, 기능들, 규칙들, 또는 동작들을 포함하여 본 명세서에 개시된 기술들의 임의의 실시 예들, 예를 들어 SSL VPN(280), 스위칭/로드 밸런싱(284), DNS 처리(286), 가속화(288) 및 애플리케이션 방화벽(290)을 수행할 수 있다. 일부 실시 예들에서, vServer(275)는 서버(106)의 서비스(270)에 대한 연결을 설립한다. 서비스(270)는 기기(200), 클라이언트(102) 또는 vServer(275)에 접속할 수 있고 통신할 수 있는 임의의 프로그램, 애플리케이션, 프로세스, 태스크 또는 실행 가능한 명령들의 세트로 구성될 수 있다. 예를 들어, 서비스(270)는 웹 서버, http 서버, ftp, 이메일 또는 데이터베이스 서버로 구성될 수 있다. 일부 실시 예들에서, 서비스(270)는 애플리케이션을 위한 통신들, 예를 들어 이메일, 데이터베이스 또는 엔터프라이즈 애플리케이션을 청취, 수신 및/또는 송신하기 위한 데몬 프로세스 또는 네트워크 드라이버이다. 일부 실시 예들에서, 서비스(270)는 특정 IP 주소, 또는 IP 주소 및 포트 상에서 통신할 수 있다.
일부 실시 예들에서, vServer(275)는 클라이언트(102)와 서버(106) 사이의 네트워크 통신들에 정책 엔진(236)의 하나 이상의 정책들을 적용한다. 일 실시 예에서, 정책들은 vServer(275)와 관련된다. 다른 실시 예에서, 정책들은 사용자, 또는 사용자들의 그룹에 기초한다. 또 다른 실시 예에서, 정책은 전역적이고 하나 이상의 vServer들(275a-275n), 및 기기(200)를 통해 통신하는 임의의 사용자 또는 사용자들의 그룹에 적용된다. 일부 실시 예들에서, 정책 엔진의 정책들은 정책이 통신의 임의의 컨텐츠, 예를 들어 인터넷 프로토콜 주소, 포트, 프로토콜 유형, 패킷 내의 헤더 또는 필드들, 또는 통신의 문맥들, 예를 들어 사용자, 사용자의 그룹, vServer(275), 전송 계층 연결, 및/또는 클라이언트(102) 또는 서버(106)의 식별 또는 속성들을 기초로 적용되게 하는 조건들을 갖는다.
다른 실시 예들에서, 기기(200)는 정책 엔진(236)과 통신하거나 인터페이스하여 컴퓨팅 환경(15), 애플리케이션, 및/또는 서버(106)로부터의 데이터 파일에 액세스하도록 원격 사용자 또는 원격 클라이언트(102)의 인증 및/또는 권한 부여를 결정한다. 다른 실시 예에서, 기기(200)는 정책 엔진(236)과 통신하거나 인터페이스하여 애플리케이션 전달 시스템(190)이 하나 이상의 컴퓨팅 환경(15), 애플리케이션, 및/또는 데이터 파일을 전달하게 하도록 원격 사용자 또는 원격 클라이언트(102)의 인증 및/또는 권한 부여를 결정할 수 있다. 또 다른 실시 예에서, 기기(200)는 원격 사용자 또는 원격 클라이언트(102)에 대한 정책 엔진(236)의 인증 및/또는 권한 부여를 기초로 VPN 또는 SSL VPN 연결을 설립한다. 일 실시 예에서, 기기(200)는 정책 엔진(236)의 정책을 기초로 네트워크 트래픽 및 통신 세션들의 흐름을 제어한다. 예를 들어, 기기(200)는 정책 엔진(236)을 기초로 컴퓨팅 환경(15), 애플리케이션 또는 데이터 파일에 대한 액세스를 제어할 수 있다.
일부 실시 예들에서, vServer(275)는 전송 계층 연결, 예를 들어 클라이언트 에이전트(120)를 통한 클라이언트(102)와의 TCP 또는 UCP 통신을 설립한다. 일 실시 예에서, vServer(275)는 클라이언트(102)로부터 통신들을 청취하고 수신한다. 다른 실시 예들에서, vServer(275)는 전송 계층 연결, 예를 들어 클라이언트 서버(106)와의 TCP 또는 UCP 통신을 설립한다. 일 실시 예에서, vServer(275)는 서버(106)에서 실행되는 서버(270)의 인터넷 프로토콜 주소 및 포트로의 전송 계층 연결을 설립한다. 다른 실시 예에서, vServer(275)는 클라이언트(102)에 대한 제1 전송 계층 연결을 서버(106)에 대한 제2 전송 계층 연결과 연관시킨다. 일부 실시 예들에서, vServer(275)는 서버(106)에 대한 전송 계층 연결들의 풀을 설립하고, 풀링된 전송 계층 연결들을 통해 클라이언트 요청들을 다중화한다.
일부 실시 예들에서, 기기(200)는 클라이언트(102)와 서버(106) 사이의 SSL VPN 연결(280)을 제공한다. 예를 들어, 제1 네트워크(102) 상의 클라이언트(102)는 제2 네트워크(104') 상의 서버(106)에 연결을 설립하도록 요청한다. 일부 실시 예들에서, 제2 네트워크(104')는 제1 네트워크(104)로부터 라우팅 가능하지 않다. 다른 실시 예들에서, 클라이언트(102)는 공중망(104) 상에 있고 서버(106)는 사설망(104'), 예를 들어 기업 네트워크 상에 있다. 일 실시 예에서, 클라이언트 에이전트(120)는 제1 네트워크(104) 상의 클라이언트(102)의 통신들을 가로채고, 통신들을 암호화하고, 제1 전송 계층 연결을 통해 통신들을 기기(200)로 전송한다. 기기(200)는 제1 네트워크(104) 상의 제1 전송 계층 연결을 제2 네트워크(104) 상의 서버(106)에 대한 제2 전송 계층 연결에 연관시킨다. 기기(200)는 클라이언트 에이전트(102)로부터 가로챈 통신을 수신하고, 통신들을 복호화하고, 제2 전송 계층 연결을 통해 제2 네트워크(104) 상의 서버(106)로 통신을 전송한다. 제2 전송 계층 연결은 풀링된 전송 계층 연결일 수 있다. 이와 같이, 기기(200)는 두 네트워크들(104, 104') 사이에서 클라이언트(102)를 위한 종단 간 보안 전송 계층 연결을 제공한다.
일 실시 예에서, 기기(200)는 가상 사설망(104) 상의 클라이언트(102)의 인트라넷 인터넷 프로토콜 또는 인트라넷 IP(282) 주소를 호스팅한다. 클라이언트(102)는 로컬 네트워크 식별자, 예를 들어 제1 네트워크(104) 상의 IP 주소 및/또는 호스트 이름을 갖는다. 기기(200)를 통하여 제2 네트워크(104')에 연결될 때, 기기(200)는 네트워크 식별자, 예를 들어 IP 주소 및/또는 호스트 이름인 인트라넷 IP 주소(282)를 제2 네트워크(104') 상의 클라이언트(102)를 위하여 설립, 할당 또는 제공한다. 기기(200)는 클라이언트의 설립된 인트라넷 IP(282)를 사용하여 클라이언트(102)를 향하는 임의의 통신을 위해 제2 네트워크 또는 사설망(104')을 청취하고 수신한다. 일 실시 예에서, 기기(200)는 제2 사설망(104) 상의 클라이언트(102)로서 또는 이를 대신하여 동작한다. 예를 들어, 다른 실시 예에서, vServer(275)는 클라이언트(102)의 인트라넷 IP(282)에 대한 통신들을 청취하고 그에 응답한다. 일부 실시 예들에서, 제2 네트워크(104') 상의 컴퓨팅 장치(100)가 요청을 전송하면, 기기(200)는 클라이언트(102)인 것처럼 요청을 처리한다. 예를 들어, 기기(200)는 클라이언트의 인트라넷 IP(282)에 대한 핑에 응답할 수 있다. 다른 실시 예에서, 기기는 클라이언트의 인트라넷 IP(282)와의 연결을 요청하는 제2 네트워크(104) 상의 컴퓨팅 장치(100)와 연결, 예를 들어 TCP 또는 UDP 연결을 설립할 수 있다.
일부 실시 예들에서, 기기(200)는 클라이언트(102)와 서버(106) 간의 통신들에 다음의 가속화 기술들(288) 중 적어도 하나를 제공한다: 1) 압축; 2) 압축 해제; 3) 전송 제어 프로토콜 풀링; 4) 전송 제어 프로토콜 다중화; 5) 전송 제어 프로토콜 버퍼링; 및 6) 캐싱.
일 실시 예에서, 기기(200)는 각각의 서버(106)와의 하나 이상의 전송 계층 연결들을 열고 이러한 연결들을 유지하여 인터넷을 통한 클라이언트들의 반복적인 데이터 액세스들을 가능하게 함으로써 클라이언트들(102)에 대한 전송 계층 연결들을 반복적으로 열고 닫음으로써 발생되는 많은 처리 부하를 서버들(106)로부터 해방시킨다. 본 명세서에서는 이러한 기술을 "연결 풀링"으로 지칭한다.
일부 실시 예들에서, 풀링된 전송 계층 연결을 통한 클라이언트(102)로부터 서버(106)로의 통신들을 끊김없이 연결하기 위해, 기기(200)는 전송 계층 프로토콜 레벨에서 시퀀스 번호 및 확인 응답 번호(acknowledgment number)들을 수정함으로써 통신들을 변환 또는 다중화한다. 이를 "연결 다중화"라고 지칭한다. 일부 실시 예들에서, 애플리케이션 계층 프로토콜 상호 작용은 요구되지 않는다. 예를 들어, 인바운드 패킷(즉, 클라이언트(102)로부터 수신된 패킷)의 경우, 패킷의 소스 네트워크 주소는 기기(200)의 출력 포트의 것으로 변경되고, 목적지 네트워크 주소는 의도된 서버의 것으로 변경된다. 아웃바운드 패킷(즉, 서버(106)로부터 수신된 것)의 경우, 소스 네트워크 주소는 서버(106)의 것으로부터 기기(200)의 출력 포트의 것으로 변경되고 목적지 주소는 기기(200)의 것으로부터 목적지 클라이언트(102)의 것으로 변경된다. 패킷의 시퀀스 번호들 및 확인 응답 번호들은 또한 클라이언트(102)에 대한 기기(200)의 전송 계층 연결 상의 클라이언트(102)에 의해 기대되는 시퀀스 번호들 및 확인 응답 번호들로 변환된다. 일부 실시 예들에서, 전송 계층 프로토콜의 패킷 체크섬(checksum)은 이러한 변환들을 설명하기 위해 다시 계산된다.
다른 실시 예에서, 기기(200)는 클라이언트(102)와 서버(106) 간의 연결들을 위한 스위칭 또는 로드 밸런싱 기능(284)을 제공한다. 일부 실시 예들에서, 기기(200)는 트래픽을 분배하고 계층(4) 또는 애플리케이션 계층 요청 데이터에 기초하여 클라이언트 요청들을 서버(106)에 분배한다. 일 실시 예에서, 네트워크 계층 또는 네트워크 패킷의 계층(2)이 목적지 서버(106)를 식별하지만, 기기(200)는 애플리케이션 정보 및 전송 계층 패킷의 페이로드로서 운반된 데이터에 의해 네트워크 패킷을 분배할 서버(106)를 결정한다. 일 실시 예에서, 기기(200)의 성능 모니터링 프로그램들(216)은 서버들의 성능을 모니터링하여 클라이언트의 요청을 분배할 서버(106)를 결정한다. 일부 실시 예들에서, 기기(200)가 서버(106)가 사용 가능하지 않거나 미리 결정된 임계값을 초과하는 부하를 가진 것을 감지하면, 기기(200)는 클라이언트의 요청들을 다른 서버(106)로 보내거나 분배할 수 있다.
일부 실시 예들에서, 기기(200)는 DNS 처리부(resolver)로 동작하거나 클라이언트들(102)로부터의 DNS 요청의 처리를 제공할 수 있다. 일부 실시 예들에서, 기기는 클라이언트(102)에 의해 전송된 DNS 요청을 가로챈다. 일 실시 예에서, 기기(200)는 기기(200)의 IP 주소를 갖거나 기기(200)에 의해 호스팅된 클라이언트의 DNS 요청에 응답한다. 이러한 실시 예에서, 클라이언트(102)는 도메인 이름에 대한 네트워크 통신들을 기기(200)로 전송한다. 다른 실시 예에서, 기기(200)는 제2 기기(200')의 IP 주소 또는 제2 기기(200')에 의해 호스팅된 IP 주소와 함께 클라이언트의DNS 요청에 응답한다. 일부 실시 예들에서, 기기(200)는 기기(200)에 의해 결정된 서버(106)의 IP 주소를 갖는 클라이언트의 DNS 요청에 응답한다.
또 다른 실시 예에서, 기기(200)는 클라이언트(102)와 서버(106) 간의 통신을 위한 애플리케이션 방화벽 기능(290)을 제공한다. 일 실시 예에서, 정책 엔진(236)은 불법적인 요청들을 감지하고 차단하기 위한 규칙들을 제공한다. 일부 실시 예들에서, 애플리케이션 방화벽(290)은 DoS(Denial of Service) 공격들로부터 보호한다. 다른 실시 예들에서, 기기는 가로챈 요청들의 콘텐츠를 검사하여 애플리케이션 기반 공격들을 식별하고 차단한다. 일부 실시 예들에서, 규칙/정책 엔진(236)은 하나 이상의 방화벽 또는 다음 중 하나 이상과 같은 다양한 클래스들 및 유형들의 웹 또는 인터넷 기반 취약성에 대한 보호를 제공하는 보안 제어 정책으로 구성된다: 1) 버퍼 오버 플로우, 2) CGI-BIN 파라미터 조작, 3) 형식/숨겨진 필드의 조작, 4) 강제 브라우징(forceful browsing), 5) 쿠키 또는 세션 중독(cookie or session poisoning), 6) 깨진 액세스 제어 목록(ACLs) 또는 취약한 패스워드들(weak passwords), 7) 크로스 사이트 스크립팅(cross-site scripting; XSS), 8) 명령어 삽입(command injection), 9) SQL 삽입, 10) 중요한 정보의 유출을 유발하는 오류, 11) 암호화 사용의 불안정, 12) 서버 구성 오류, 13) 백도어 및 디버그 옵션들, 14) 웹 사이트 손상, 15) 플랫폼 또는 운영 체제의 취약성, 및 16) 제로 데이(zero-day) 악용. 일 실시 예에서, 애플리케이션 방화벽(290)은 다음 중 하나 이상에 대한 네트워크 통신을 검사하거나 분석하는 형태의 HTML 형식 필드 보호를 제공한다: 1) 요청된 필드들이 반환됨, 2) 추가된 필드가 허용되지 않음, 3) 읽기 전용 및 숨겨진 필드 강제, 4) 드롭 다운 목록 및 라디오 버튼 필드 준수, 및 5) 형식 필드 최대 길이 강제. 일부 실시 예들에서, 애플리케이션 방화벽(290)은 쿠키들이 수정되지 않도록 보장한다. 다른 실시 예들에서, 애플리케이션 방화벽(290)은 합법적인 URL들을 강요함으로써 강제 브라우징을 방지한다.
또 다른 실시 예들에서, 애플리케이션 방화벽(290)은 네트워크 통신에 포함된 임의의 기밀 정보를 보호한다. 애플리케이션 방화벽(290)은 엔진(236)의 규칙들 또는 정책들에 따라 임의의 네트워크 통신을 검사 또는 분석하여 네트워크 패킷의 임의의 필드 내의 임의의 기밀 정보를 식별할 수 있다. 일부 실시 예들에서, 애플리케이션 방화벽(290)은 네트워크 통신에서 신용 카드 번호, 패스워드, 사회 보장 번호, 이름, 환자 코드, 연락처 정보, 및 연령 중 하나 이상의 발생을 식별한다. 네트워크 통신의 인코딩된 부분은 이러한 발생들 또는 기밀 정보로 구성될 수 있다. 이러한 발생들을 기초로, 일 실시 예에서, 애플리케이션 방화벽(290)은 네트워크 통신에 대한 정책 동작, 예를 들어 네트워크 통신의 전송 방지를 취할 수 있다. 다른 실시 예에서, 애플리케이션 방화벽(290)은 식별된 발생 또는 기밀 정보를 재기록, 제거 또는 마스킹할 수 있다.
계속해서 도 2b를 참조하면, 기기(200)는 도 1d와 연계하여 상술한 성능 모니터링 에이전트(197)을 포함할 수 있다. 일 실시 예에서, 기기(200)는 도 1d에 도시된 바와 같이 모니터링 서비스(198) 또는 모니터링 서버(106)로부터 모니터링 에이전트(197)를 수신한다. 일부 실시 예들에서, 기기(200)는 스토리지, 예를 들어 디스크에 모니터링 에이전트(197)를 저장하여 기기(200)와 통신하는 임의의 클라이언트 또는 서버로 전달한다. 예를 들어, 일 실시 예에서, 기기(200)는 전송 계층 연결을 설립하기 위한 요청을 수신하면 클라이언트에 모니터링 에이전트(197)를 전송한다. 다른 실시 예들에서, 기기(200)는 클라이언트(102)와 전송 계층 연결을 설립하면 모니터링 에이전트(197)를 전송한다. 또 다른 실시 예에서, 기기(200)는 웹 페이지에 대한 요청을 가로채거나 감지하면 클라이언트로 모니터링 에이전트(197)를 전송한다. 또 다른 실시 예에서, 기기(200)는 모니터링 서버(198)로부터의 요청에 응답하여 클라이언트 또는 서버로 모니터링 에이전트(197)를 전송한다. 일 실시 예에서, 기기(200)는 제2 기기(200') 또는 기기(205)로 모니터링 에이전트(197)를 전송한다.
다른 실시 예들에서, 기기(200)는 모니터링 에이전트(197)를 실행한다. 일 실시 예에서, 모니터링 에이전트(197)는 기기(200)에서 실행되는 임의의 애플리케이션, 프로그램, 프로세스, 서비스, 태스크 또는 스레드의 성능을 측정하고 모니터링한다. 예를 들어, 모니터링 에이전트(197)는 vServer들(275A-275N)의 성능 및 동작을 모니터링하고 측정할 수 있다. 다른 실시 예에서, 모니터링 에이전트(197)는 기기(200)의 임의의 전송 계층 연결들의 성능을 측정하고 모니터링한다. 일부 실시 예들에서, 모니터링 에이전트(197)는 기기(200)를 가로지르는 임의의 사용자 세션들의 성능을 측정하고 모니터링한다. 일 실시 예에서, 모니터링 에이전트(197)는 임의의 가상 사설망 연결들 및/또는 기기(200)를 가로지르는 세션들, 예를 들어 SSL VPN 세션의 성능을 측정하고 모니터링한다. 또 다른 추가적인 실시 예들에서, 모니터링 에이전트(197)는 기기(200)의 메모리, CPU 및 디스크 사용 및 성능을 측정하고 모니터링한다. 또 다른 실시 예에서, 모니터링 에이전트(197)는 기기(200)에 의해 수행되는 임의의 가속화 기술(288), 예를 들어 SSL 오프로딩, 연결 풀링 및 다중화, 캐싱, 및 압축의 성능을 측정하고 모니터링한다. 일부 실시 예들에서, 모니터링 에이전트(197)는 기기(200)에 의해 수행되는 임의의 로드 밸런싱 및/또는 콘텐츠 스위칭(284)의 성능을 측정하고 모니터링한다. 다른 실시 예들에서, 모니터링 에이전트(197)는 기기(200)에 의해 수행되는 애플리케이션 방화벽(290) 보호 및 처리의 성능을 측정하고 모니터링한다.
C. 클라이언트 에이전트
이제 도 3을 참조하면, 클라이언트 에이전트(120)의 실시 예가 도시된다. 클라이언트(102)는 네트워크(104)를 통해 기기(200) 및/또는 서버(106)와의 통신을 설립하고 교환하기 위한 클라이언트 에이전트(120)를 포함한다. 간단히 요약하면, 클라이언트(102)는 커널 모드(302) 및 사용자 모드(303)를 갖는 운영 체제, 및 하나 이상의 계층들(310a-310b)을 갖는 네트워크 스택(310)을 갖는 컴퓨팅 장치(100) 상에서 동작한다. 클라이언트(102)는 하나 이상의 애플리케이션들을 설치 및/또는 실행했을 수 있다. 일부 실시 예들에서, 하나 이상의 애플리케이션들은 네트워크 스택(310)을 통하여 네트워크(104)와 통신할 수 있다. 애플리케이션들 중 하나, 예를 들어 웹 브라우저는 또한 제1 프로그램(322)을 포함할 수 있다. 예를 들어, 제1 프로그램(322)은 일부 실시 예들에서 클라이언트 에이전트(120), 또는 그의 임의의 부분을 설치하고/하거나 실행하기 위해 사용될 수 있다. 클라이언트 에이전트(120)는 하나 이상의 애플리케이션들로부터 네트워크 스택(310)으로부터의 네트워크 통신을 가로채기 위한 인터셉션 메커니즘, 또는 인터셉터(350)를 포함한다.
클라이언트(102)의 네트워크 스택(310)은 임의의 유형 및 형태의 소프트웨어, 또는 하드웨어, 또는 이들의 임의의 조합을 포함하여, 네트워크에 대한 연결을 제공하거나 네트워크와 통신할 수 있다. 일 실시 예에서, 네트워크 스택(310)은 네트워크 프로토콜 묶음(suite)을 위한 소프트웨어 구현으로 구성된다. 네트워크 스택(310)은 하나 이상의 네트워크 계층들, 예를 들어 당업자가 인지하고 인식하는 OSI(Open Systems Interconnection) 통신 모델의 임의의 네트워크 계층들로 구성될 수 있다. 이와 같이, 네트워크 스택(310)은 OSI 모델의 다음의 계층들 중 임의의 것을 위한 임의의 유형 및 형태의 프로토콜들로 구성될 수 있다: 1) 물리 링크 계층, 2) 데이터 링크 계층, 3) 네트워크 계층, 4) 전송 계층, 5) 세션 계층, 6), 프리젠테이션 계층, 및 7) 애플리케이션 계층. 일 실시 예에서, 네트워크 스택(310)은 일반적으로 TCP/IP로 지칭되는 인터넷 프로토콜(IP)의 네트워크 계층 프로토콜을 통한 전송 제어 프로토콜(TCP)로 구성될 수 있다. 일부 실시 예들에서, TCP/IP 프로토콜은 IEEE 광역 네트워크(WAN) 또는 근거리 통신망(LAN) 프로토콜들의 임의의 패밀리, 예를 들어 IEEE 802.3에서 다루는 프로토콜들로 구성될 수 있는 이더넷 프로토콜을 통해 운반될 수 있다. 일부 실시 예들에서, 네트워크 스택(310)은 임의의 유형 또는 형태의 무선 프로토콜, 예를 들어 IEEE 802.11 및/또는 모바일 인터넷 프로토콜로 구성될 수 있다.
TCP/IP 기반 네트워크 관점에서, 메시징 애플리케이션 프로그래밍 인터페이스(Messaging Application Programming Interface; MAPI)(이메일), 파일 전송 프로토콜(File Transfer Protocol; FTP). 하이퍼텍스트 전송 프로토콜(HyperText Transfer Protocol; HTTP), 공용 인터넷 파일 시스템(Common Internet File System; CIFS) 프로토콜 (파일 전송), 독립 컴퓨팅 아키텍처(Independent Computing Architecture; ICA) 프로토콜, 원격 데스크탑 프로토콜(Remote Desktop Protocol; RDP), 무선 애플리케이션 프로토콜(Wireless Application Protocol; WAP), 모바일 IP 프로토콜(Mobile IP protocol), 및 음성 통신(Voice over IP; VoIP) 프로토콜을 포함하는 임의의 TCP/IP 기반 프로토콜이 사용될 수 있다. 다른 실시 예에서, 임의의 유형 및 형태의 전송 제어 프로토콜, 예를 들어 수정된 전송 제어 프로토콜, 예를 들어 T/TCP(Transaction TCP), TCP-SACK(TCP with selection acknowledgements), TCP-LW(TCP with large windows), TCP-Vegas 프로토콜과 같은 혼잡 예측 프로토콜, 및 TCP 스푸핑 프로토콜로 구성된다. 다른 실시 예들에서, 임의의 유형 및 형태의 사용자 데이터그램 프로토콜(user datagram protocol; UDP), 예를 들어, UDP over IP 로 구성된 네트워크 스택(310)이, 예를 들어 음성 통신 또는 실시간 데이터 통신을 위해 네트워크 스택(310)에 의해 사용될 수 있다.
또한, 네트워크 스택(310)은 하나 이상의 계층들을 지원하는 하나 이상의 네트워크 드라이버들, 예를 들어 TCP 드라이버 또는 네트워크 계층 드라이버를 포함할 수 있다. 네트워크 드라이버들은 컴퓨팅 장치(100)의 운영 체제의 일부로서 또는 컴퓨팅 장치(100)의 임의의 네트워크 인터페이스 카드들 또는 다른 네트워크 액세스 구성 요소들의 일부로서 포함될 수 있다. 일부 실시 예들에서, 네트워크 스택(310)의 임의의 네트워크 드라이버들은 맞춤화(customized), 수정 또는 적응되어 본 명세서에 개시된 임의의 기술들을 지원하는 네트워크 스택(310)의 맞춤 또는 수정된 부분을 제공할 수 있다. 다른 실시 예들에서, 가속화 프로그램(302)은 클라이언트(102)의 운영 체제에 의해 설치되거나 제공되는 네트워크 스택(310)과 함께 동작하거나 연계하여 동작하도록 설계 및 구성된다.
네트워크 스택(310)은 클라이언트(102)의 네트워크 통신들과 관련된 임의의 정보 및 데이터를 수신, 획득, 제공 또는 액세스하기 위한 임의의 유형 및 형태의 인터페이스들로 구성된다. 일 실시 예에서, 네트워크 스택(310)에 대한 인터페이스는 애플리케이션 프로그래밍 인터페이스(API)로 구성된다. 인터페이스는 또한 임의의 함수 호출, 후킹 또는 필터링 메커니즘, 이벤트 또는 콜 백 메커니즘, 또는 임의의 유형의 인터페이싱 기술로 구성될 수 있다. 인터페이스를 통한 네트워크 스택(310)은 네트워크 스택(310)의 기능 또는 동작과 관련하여, 임의의 유형 및 형태의 데이터 구조, 예를 들어 오브젝트를 수신 또는 제공할 수 있다. 예를 들어, 데이터 구조는 네트워크 패킷 또는 하나 이상의 네트워크 패킷들에 관한 정보 및 데이터로 구성될 수 있다. 일부 실시 예들에서, 데이터 구조는 네트워크 스택(310)의 프로토콜 계층에서 처리되는 네트워크 패킷, 예를 들어 전송 계층의 네트워크 패킷의 부분으로 구성된다. 일부 실시 예들에서, 데이터 구조(325)는 커널 레벨 데이터 구조로 구성되고, 다른 실시 예들에서, 데이터 구조(325)는 사용자 모드 데이터 구조로 구성된다. 커널 레벨 데이터 구조는 커널 모드(302)에서 동작하는 네트워크 스택(310)의 부분, 또는 커널 모드(302)에서 실행되는 네트워크 드라이버 또는 다른 소프트웨어에 의해 획득되거나 관련되는 데이터 구조, 또는 서비스, 프로세스, 태스크, 스레드 또는 운영 체제의 커널 모드에서 실행되거나 동작하는 다른 실행 가능한 명령들에 의해 획득되거나 수신된 임의의 데이터 구조로 구성될 수 있다.
또한, 네트워크 스택(310)의 일부분들은 커널 모드(302), 예를 들어, 데이터 링크 또는 네트워크 계층에서 실행 또는 동작할 수 있고, 다른 부분들은 사용자 모드(303), 예를 들어 네트워크 스택(310)의 애플리케이션 계층에서 실행되거나 동작한다. 예를 들어, 네트워크 스택의 제1 부분(310a)은 애플리케이션에 네트워크 스택(310)에 대한 사용자 모드 액세스를 제공하고, 네트워크 스택(310)의 제2 부분(310a)은 네트워크에 대한 액세스를 제공할 수 있다. 일부 실시 예들에서, 네트워크 스택의 제1 부분(310a)은 네트워크 스택(310)의 하나 이상의 상위 계층들, 예를 들어 계층들(5-7) 중 임의의 것으로 구성될 수 있다. 다른 실시 예들에서, 네트워크 스택(310)의 제2 부분(310b)은 하나 이상의 하위 계층들, 예를 들어 계층들(1-4) 중 임의의 것으로 구성된다. 네트워크 스택(310)의 제1 부분(310a) 및 제2 부분(310b) 각각은 사용자 모드(203), 커널 모드(202), 또는 이들의 조합들에서의, 임의의 하나 이상의 네트워크 계층들, 또는 네트워크 계층 또는 네트워크 계층을 가리키는 인터페이스의 임의의 부분 또는 사용자 모드(202) 및 커널 모드(203)를 가리키는 인터페이스 또는 그의 임의의 부분에서의 네트워크 스택(310)의 임의의 부분으로 구성될 수 있다.
인터셉터(350)는 소프트웨어, 하드웨어, 또는 소프트웨어와 하드웨어의 임의의 조합으로 구성될 수 있다. 일 실시 예에서, 인터셉터(350)는 네트워크 스택(310)의 임의의 지점에서 네트워크 통신을 가로채고, 인터셉터(350) 또는 클라이언트 에이전트(120)에 의해 요구되거나, 관리되거나 또는 제어되는 목적지로 네트워크 통신을 방향 전환 또는 전송한다. 예를 들어, 인터셉터(350)는 제1 네트워크의 네트워크 스택(310)의 네트워크 통신을 가로채고 제2 네트워크(104) 상에서의 전송을 위해 기기(200)로 네트워크 통신을 전송할 수 있다. 일부 실시 예들에서, 인터셉터(350)는 드라이버, 예를 들어 네트워크 스택(310)과 인터페이스하고 동작하도록 구성되고 설계된 네트워크 드라이버로 구성되는 임의의 유형의 인터셉터(350)로 구성된다. 일부 실시 예들에서, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 네트워크 스택(310)의 하나 이상의 계층들, 예를 들어 전송 계층에서 동작한다. 일 실시 예에서, 인터셉터(350)는 필터 드라이버, 후킹 메커니즘, 또는 예를 들어 전송 드라이버 인터페이스(transport driver interface; TDI)를 통해 네트워크 스택의 전송 계층에 인터페이스하는 임의의 형태 및 유형의 적합한 네트워크 드라이버 인터페이스로 구성된다. 일부 실시 예들에서, 인터셉터(350)는 제1 프로토콜 계층, 예를 들어 전송 계층 및 다른 프로토콜 계층, 예를 들어 전송 계층 상의 임의의 계층, 예를 들어, 애플리케이션 프로토콜 계층과 인터페이스한다. 일 실시 예에서, 인터셉터(350)는 네트워크 드라이버 인터페이스 사양(Network Driver Interface Specification; NDIS)를 따르는 드라이버, 또는 NDIS 드라이버로 구성될 수 있다. 다른 실시 예에서, 인터셉터(350)는 미니 필터 또는 미니 포트 드라이버로 구성될 수 있다. 일 실시 예에서, 인터셉터(350), 또는 그의 일부는 커널 모드(202)에서 동작한다. 다른 실시 예에서, 인터셉터(350), 또는 그의 일부는 사용자 모드(203)에서 동작한다. 일부 실시 예들에서, 인터셉터(350)의 일부는 커널 모드(202)에서 동작하고 인터셉트(350)의 다른 부분은 사용자 모드(203)에서 동작한다. 다른 실시 예들에서, 클라이언트 에이전트(120)는 사용자 모드(203)에서 동작하지만 예를 들어 커널 레벨 데이터 구조(225) 획득을 위해, 인터셉터(350)를 통해 커널 모드 드라이버, 프로세스, 서비스, 태스크 또는 운영 체제의 부분에 인터페이스될 수 있다. 추가적인 실시 예들에서, 인터셉터(350)는 사용자 모드 애플리케이션 또는 프로그램, 예를 들어 애플리케이션이다.
일 실시 예에서, 인터셉터(350)는 임의의 전송 계층 연결 요청들을 가로챈다. 이러한 실시 예들에서, 인터셉터(350)는 전송 계층 애플리케이션 프로그래밍 인터페이스(API) 호출들을 실행하여 목적지 정보, 예를 들어 목적지 IP 주소 및/또는 포트를 위치에 대한 요구된 위치로 설정한다. 이러한 방식으로, 인터셉터(350)는 전송 계층 연결을 인터셉터(350) 또는 클라이언트 에이전트(120)에 의해 제어되거나 관리된 IP 주소 및 포트로 가로채고 방향 전환한다. 일 실시 예에서, 인터셉터(350)는 클라이언트 에이전트(120)가 청취하고 있는 클라이언트(102)의 로컬 IP 주소 및 포트로의 연결을 위한 목적지 정보를 설정한다. 예를 들어, 클라이언트 에이전트(120)는 방향 전환된 전송 계층 통신들을 위한 로컬 IP 주소 및 포트를 청취하는 프록시 서비스로 구성될 수 있다. 일부 실시 예들에서, 클라이언트 에이전트(120)는 방향 전환된 전송 계층 통신을 기기(200)에 통신한다.
일부 실시 예들에서, 인터셉터(350)는 도메인 네임 서비스(DNS) 요청을 가로챈다. 일 실시 예에서, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 DNS 요청을 처리한다. 다른 실시 예에서, 인터셉터는 DNS 처리를 위해 가로챈 DNS 요청을 기기(200)로 전송한다. 일 실시 예에서, 기기(200)는 DNS 요청을 처리하고 클라이언트 에이전트(120)로 DNS 응답을 통신한다. 일부 실시 예들에서, 기기(200)는 다른 기기(200') 또는 DNS 서버(106)를 통해 DNS 요청을 처리한다.
또 다른 실시 예에서, 클라이언트 에이전트(120)는 2개의 에이전트들(120 및 120')로 구성될 수 있다. 일 실시 예에서, 제1 에이전트(120)는 네트워크 스택(310)의 네트워크 계층에서 동작하는 인터셉터(350)로 구성될 수 있다. 일부 실시 예들에서, 제1 에이전트(120)는 네트워크 계층 요청들, 예를 들어 인터넷 제어 메시지 프로토콜(ICMP) 요청들(예를 들어, 핑 및 추적 루트(traceroute))을 가로챈다. 다른 실시 예들에서, 제2 에이전트(120')는 전송 계층에서 동작할 수 있고 전송 계층 통신들을 가로챌 수 있다. 일부 실시 예들에서, 제1 에이전트(120)는 네트워크 스택(210)의 하나의 계층에서 통신들을 가로채고 제2 에이전트(120')와 인터페이스하거나 제2 에이전트(120')로 가로챈 통신을 통신한다.
클라이언트 에이전트(120) 및/또는 인터셉터(350)는 네트워크 스택(310)의 임의의 다른 프로토콜 계층에 대해 투명한 방식으로 프로토콜 계층에서 동작하거나 프로토콜 계층과 인터페이스 할 수 있다. 예를 들어, 일 실시 예에서, 인터셉터(350)는 전송 계층 하위의 임의의 프로토콜 계층, 예를 들어 네트워크 계층 및 전송 계층 상위의 임의의 프로토콜 계층, 예를 들어 세션, 프리젠테이션 또는 애플리케이션 계층 프로토콜들에 투명하게 네트워크 스택(310)의 전송 계층과 함께 동작하거나 인터페이스된다. 이는 네트워크 스택(310)의 다른 프로토콜 계층들이 인터셉터(350)를 사용하기 위한 수정 없이 요구된 대로 동작하게 한다. 이와 같이, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 전송 계층과 인터페이스하여 전송 계층에 의해 전달되는 임의의 프로토콜, 예를 들어 TCP/IP를 통한 임의의 애플리케이션 계층 프로토콜을 통해 제공되는 임의의 통신들을 보안, 최적화, 가속화, 라우팅 또는 로드 밸런싱할 수 있다.
또한, 클라이언트 에이전트(120) 및/또는 인터셉터는 임의의 애플리케이션, 클라이언트(102)의 사용자, 및 클라이언트(102)와 통신하는 임의의 다른 컴퓨팅 장치, 예를 들어 서버에 대해 투명한 방식으로 네트워크 스택(310)에서 동작하거나 네트워크 스택(310)과 인터페이스 할 수 있다. 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 애플리케이션의 수정없이 클라이언트(102) 상에 설치 및/또는 실행될 수 있다. 일부 실시 예들에서, 클라이언트(102)의 사용자 또는 클라이언트(102)와 통신하는 컴퓨팅 장치는 클라이언트 에이전트(120) 및/또는 인터셉터(350)의 존재, 실행 또는 동작을 알지 못한다. 이와 같이, 일부 실시 예들에서, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 애플리케이션, 클라이언트(102)의 사용자, 다른 컴퓨팅 장치, 예를 들어 서버, 또는 인터셉터(350)에 의해 인터페이스된 프로토콜 계층의 상위 및/또는 하위의 임의의 프로토콜 계층들에 투명하게 설치되고, 실행되고/되거나 구동된다.
클라이언트 에이전트(120)는 가속화 프로그램(302), 스트리밍 클라이언트(306), 수집 에이전트(304), 및/또는 모니터링 에이전트(197)를 포함한다. 일 실시 예에서, 클라이언트 에이전트(120)는 플로리다, 로더데일 소재의 Citrix Systems, Inc.에 의해 개발되고 또한 ICA 클라이언트로도 지칭되는 독립 컴퓨팅 아키텍처(ICA) 클라이언트, 또는 그의 임의의 부분으로 구성된다. 일부 실시 예들에서, 클라이언트(120)는 서버(106)로부터 클라이언트(102)로 애플리케이션을 스트리밍하기 위한 애플리케이션 스트리밍 클라이언트(306)로 구성된다. 일부 실시 예들에서, 클라이언트 에이전트(120)는 클라이언트(102)와 서버(106) 간의 통신을 가속화하기 위한 가속화 프로그램(302)으로 구성된다. 다른 실시 예에서, 클라이언트 에이전트(120)는 엔드포인트 감지/스캐닝을 수행하고 기기(200) 및/또는 서버(106)를 위한 엔드포인트 정보를 수집하기 위한 수집 에이전트(304)를 포함한다.
일부 실시 예들에서, 가속화 프로그램(302)은 서버(106)와 통신하고/하거나 서버(106)에 액세스하는, 예를 들어 서버(106)에 의해 제공되는 애플리케이션에 액세스하는 클라이언트의 통신들을 가속화, 향상 또는 개선하기 위한 하나 이상의 가속화 기술들을 수행하는 클라이언트 측 가속화 프로그램으로 구성된다. 가속화 프로그램(302)의 로직, 기능들 및/또는 실행 가능한 명령들의 동작들은 다음의 가속화 기술들 중 하나 이상을 수행할 수 있다: 1) 다중 프로토콜 압축, 2) 전송 제어 프로토콜 풀링, 3) 전송 제어 프로토콜 다중화, 4) 전송 제어 프로토콜 버퍼링, 및 5) 캐시 관리자를 통한 캐싱. 또한, 가속화 프로그램(302)은 클라이언트(102)에 의해 수신 및/또는 송신된 임의의 통신들의 암호화 및/또는 복호화를 수행할 수 있다. 일부 실시 예들에서, 가속화 프로그램(302)은 통합 방식 또는 방법(fashion)으로 하나 이상의 가속화 기술들을 수행한다. 또한, 가속화 프로그램(302)은 전송 계층 프로토콜의 네트워크 패킷의 페이로드로 운반된 임의의 프로토콜들, 또는 다중 프로토콜들에 대한 압축을 수행할 수 있다. 스트리밍 클라이언트(306)는 서버(106)로부터 스트리밍된 애플리케이션을 수신하고 실행하기 위한 애플리케이션, 프로그램, 서비스, 태스크 또는 실행 가능한 명령들로 구성된다. 서버(106)는 하나 이상의 애플리케이션 데이터 파일들을 스트리밍 클라이언트(306)로 스트리밍하여 클라이언트(102)에서 애플리케이션이 실행되도록 플레이, 실행 또는 발생될 수 있다. 일부 실시 예들에서, 서버(106)는 스트리밍 클라이언트(306)로 압축 또는 패키징된 애플리케이션 데이터 파일들의 세트를 전송한다. 일부 실시 예들에서, 복수의 애플리케이션 파일들은 압축되고 아카이브 파일, 예를 들어 CAB, ZIP, SIT, TAR, JAR 또는 다른 아카이브 내의 파일 서버에 저장된다. 일 실시 예에서, 서버(106)는 애플리케이션 파일들을 압축 해제, 언패키징 또는 언아카이브(unarchive)하고 클라이언트(102)로 파일들을 전송한다. 다른 실시 예에서, 클라이언트(102)는 애플리케이션 파일들을 압축 해제, 언패키징 또는 언아카이브한다. 스트리밍 클라이언트(306)는 애플리케이션, 또는 그의 일부를 동적으로 설치하고 애플리케이션을 실행한다. 일 실시 예에서, 스트리밍 클라이언트(306)는 실행 가능한 프로그램일 수 있다. 일부 실시 예들에서, 스트리밍 클라이언트(306)는 다른 실행 가능한 프로그램을 개시할 수 있다.
수집 에이전트(304)는 클라이언트(102)에 대한 정보를 식별, 획득, 및/또는 수집하기 위한 애플리케이션, 프로그램, 프로세스, 서비스, 태스크 또는 실행 가능한 명령들로 구성된다. 일부 실시 예들에서, 기기(200)는 수집 에이전트(304)를 클라이언트(102) 또는 클라이언트 에이전트(120)로 전송한다. 수집 에이전트(304)는 기기의 정책 엔진(236)의 하나 이상의 정책들에 따라 구성될 수 있다. 다른 실시 예들에서, 수집 에이전트(304)는 클라이언트(102)에 대해 수집된 정보를 기기(200)로 전송한다. 일 실시 예에서, 기기(200)의 정책 엔진(236)은 수집된 정보를 사용하여 네트워크(104)에 대한 클라이언트의 연결의 액세스, 인증 및 권한 부여를 결정하고 제공한다.
일 실시 예에서, 수집 에이전트(304)는 클라이언트의 하나 이상의 속성 또는 특성을 식별하고 결정하는 엔드포인트 감지 및 스캐닝 메커니즘으로 구성된다. 예를 들어, 수집 에이전트(304)는 다음의 클라이언트 측 속성들 중 임의의 하나 이상을 식별하고 판단할 수 있다: 1) 운영 체제 및/또는 운영 체제의 버전, 2) 운영 체제의 서비스 팩, 3) 실행 중인 서비스, 4) 실행 중인 프로세스, 및 5) 파일. 수집 에이전트(304)는 또한 클라이언트 상에서 다음 중 임의의 하나 이상의 존재 또는 버전들을 식별하고 판단할 수 있다: 1) 안티바이러스 소프트웨어, 2) 개인 방화벽 소프트웨어, 3) 스팸 방지 소프트웨어, 및 4) 인터넷 보안 소프트웨어. 정책 엔진(236)은 클라이언트 또는 클라이언트 측 속성들의 임의의 하나 이상의 속성 또는 특성을 기초로 하나 이상의 정책들을 가질 수 있다.
일부 실시 예들에서, 클라이언트 에이전트(120)는 도 1d 및 2b와 연계하여 설명된 모니터링 에이전트(197)를 포함한다. 모니터링 에이전트(197)는 임의의 유형 및 형태의 스크립트, 예를 들어 Visual Basic 또는 Java 스크립트일 수 있다. 일 실시 예에서, 모니터링 에이전트(197)는 클라이언트 에이전트(120)의 임의의 부분의 성능을 모니터링하고 측정한다. 예를 들어, 일부 실시 예들에서, 모니터링 에이전트(197)는 가속화 프로그램(302)의 성능을 모니터링하고 측정한다. 다른 실시 예에서, 모니터링 에이전트(197)는 스트리밍 클라이언트(306)의 성능을 모니터링하고 측정한다. 다른 실시 예들에서, 모니터링 에이전트(197)는 수집 에이전트(304)의 성능을 모니터링하고 측정한다. 또 다른 실시 예에서, 모니터링 에이전트(197)는 인터셉터(350)의 성능을 모니터링하고 측정한다. 일부 실시 예들에서, 모니터링 에이전트(197)는 클라이언트(102)의 임의의 자원, 예를 들어 메모리, CPU 및 디스크를 모니터링하고 측정한다.
모니터링 에이전트(197)는 클라이언트의 임의의 애플리케이션의 성능을 모니터링하고 측정할 수 있다. 일 실시 예에서, 모니터링 에이전트(197)는 클라이언트(102) 상의 브라우저의 성능을 모니터링하고 측정한다. 일부 실시 예들에서, 모니터링 에이전트(197)는 클라이언트 에이전트(120)를 통해 전달된 임의의 애플리케이션의 성능을 모니터링하고 측정한다. 다른 실시 예들에서, 모니터링 에이전트(197)는 애플리케이션에 대한 최종 사용자 응답 시간, 예를 들어 웹 기반 또는 HTTP 응답 시간을 측정하고 모니터링한다. 모니터링 에이전트(197)는 ICA 또는 RDP 클라이언트의 성능을 모니터링하고 측정할 수 있다. 다른 실시 예에서, 모니터링 에이전트(197)는 사용자 세션 또는 애플리케이션 세션에 대한 메트릭들을 측정하고 모니터링한다. 일부 실시 예들에서, 모니터링 에이전트(197)는 ICA 또는 RDP 세션을 측정하고 모니터링한다. 일 실시 예에서, 모니터링 에이전트(197)는 클라이언트(102)로의 애플리케이션 및/또는 데이터의 전달을 가속화함에 있어서 기기(200)의 성능을 측정 및 모니터링한다.
일부 실시 예들에서, 계속해서 도 3을 참조하면, 제1 프로그램(322)은 클라이언트 에이전트(120), 또는 그의 일부, 예를 들어 인터셉터(350)를 자동으로, 조용히, 투명하게, 또는 이와 유사하게 설치 및/또는 실행하기 위해 사용될 수 있다. 일 실시 예에서, 제1 프로그램(322)은 플러그인 구성 요소, 예를 들어, Active X 컨트롤 또는 Java 컨트롤 또는 애플리케이션 내에 로드되고 그에 의해 실행되는 스크립트로 구성된다. 예를 들어, 제1 프로그램은, 예를 들어 메모리 영역 또는 애플리케이션의 문맥에서 웹 브라우저 애플리케이션에 의해 로드되고 실행된 ActiveX 컨트롤로 구성된다. 다른 실시 예에서, 제1 프로그램(322)은 애플리케이션, 예를 들어 브라우저 내에 로드되고, 그에 의해 실행된 실행 가능한 명령들의 세트로 구성된다. 일 실시 예에서, 제1 프로그램(322)은 클라이언트 에이전트(120)를 설치하기 위해 설계되고 구성된 프로그램으로 구성된다. 일부 실시 예들에서, 제1 프로그램(322)은 다른 컴퓨팅 장치로부터 네트워크를 통해 클라이언트 에이전트(120)를 획득, 다운로드 또는 수신한다. 다른 실시 예에서, 제1 프로그램(322)은 프로그램들, 예를 들어 네트워크 드라이버들을 클라이언트(102)의 운영 체제에 설치하기 위한 설치 프로그램 또는 플러그 앤 플레이 관리자이다.
D. 가상화된 애플리케이션 전달 제어기를 제공하기 위한 시스템들 및 방법들
이제 도 4a를 참조하면, 블록도는 가상화 환경(400)의 일 실시 예를 도시한다. 간단히 요약하면, 컴퓨팅 장치(100)는 하이퍼바이저 계층, 가상화 계층, 및 하드웨어 계층을 포함한다. 하이퍼바이저 계층은 가상화 계층에서 실행되는 적어도 하나의 가상 머신에 의한 하드웨어 계층에서의 다수의 물리적 자원들(예를 들어, 프로세서(들)(421), 디스크(들)(428))에 대한 액세스를 할당하고 관리하는 하이퍼바이저(401)(또한 가상화 관리자라고도 지칭됨)를 포함한다. 가상화 계층은 적어도 하나의 운영 체제(410) 및 적어도 하나의 운영 체제(410)에 할당된 복수의 가상 자원들을 포함한다. 가상 자원들은 가상 자원들, 예를 들어 가상 메모리 및 가상 네트워크 인터페이스들뿐만 아니라 복수의 가상 프로세서들(432a, 432b, 432c(일반적으로 432)), 및 가상 디스크들(442a, 442b, 442c(일반적으로 442))을 포함할 수 있으나 이에 한정되지 않는다. 복수의 가상 자원들 및 운영 체제(410)는 가상 머신(406)으로 지칭될 수 있다. 가상 머신(406)은 하이퍼바이저(401)와 통신하는 제어 운영 체제(405)를 포함할 수 있고 컴퓨팅 장치(100) 상의 다른 가상 머신들을 관리하고 구성하기 위한 애플리케이션들을 실행하는데 사용될 수 있다.
보다 상세하게, 하이퍼바이저(401)는 물리적 장치에 대한 액세스를 갖는 운영 체제를 모방하는 임의의 방식으로 가상 자원들을 운영 체제에 제공할 수 있다. 하이퍼바이저(401)는 임의의 수의 게스트 운영 체제들(410a, 410b(일반적으로 410))에게 가상 자원들을 제공할 수 있다. 일부 실시 예들에서, 컴퓨팅 장치(100)는 하나 이상의 유형의 하이퍼바이저들을 실행한다. 이러한 실시 예들에서, 하이퍼바이저들은 가상 하드웨어를 에뮬레이트하고, 물리적 하드웨어를 분할하고, 물리적 하드웨어를 가상화하고, 컴퓨팅 환경들에 대한 액세스를 제공하는 가상 머신들을 실행하기 위해 사용될 수 있다. 하이퍼바이저들은 캘리포니아, 팔로 알토 소재의 VMWare에 의해 제조된 하이퍼바이저들; XEN 하이퍼바이저, 오픈 소스 Xen.org 커뮤니티가 개발을 감독한 오픈 소스 제품; Microsoft에 의해 제공되는 HyperV, VirtualServer 또는 virtual PC hypervisers, 또는 이와 유사한 것들을 포함할 수 있다. 일부 실시 예들에서, 게스트 운영 체제들이 실행될 수 있는 가상 머신 플랫폼을 생성하는 하이퍼바이저를 실행하는 컴퓨팅 장치(100)는 호스트 서버로 지칭된다. 이러한 실시 예들 중 하나에서, 예를 들어, 컴퓨팅 장치(100)는 플로리다, 포트 로더데일 소재의 Citrix Systems, Inc.에 의해 제공되는 XEN SERVER이다.
일부 실시 예들에서, 하이퍼바이저(401)는 컴퓨팅 장치에서 실행되는 운영 체제 내에서 실행된다. 이러한 실시 예들 중 하나에서, 운영 체제를 실행하는 컴퓨팅 장치 및 하이퍼바이저(401)는 호스트 운영 체제(컴퓨팅 장치에서 실행되는 운영 체제), 및 게스트 운영 체제(하이퍼바이저(401)에 의해 제공되는 컴퓨팅 자원 파티션에서 실행되는 운영 체제)를 갖는다고 말할 수 있다. 다른 실시 예들에서, 하이퍼바이저(401)는 호스트 운영 체제 상에서 실행되는 대신에 컴퓨팅 장치 상의 하드웨어와 직접 상호작용한다. 이러한 실시 예들 중 하나에서, 하이퍼바이저(401)는 컴퓨팅 장치를 구성하는 하드웨어를 참조하는, "베어 메탈(bare metal)" 상에서 실행된다고 말할 수 있다.
일부 실시 예들에서, 하이퍼바이저(401)는 운영 체제(410)가 실행되는 가상 머신(406a-c(일반적으로 406))을 생성할 수 있다. 이러한 실시 예들 중 하나에서, 예를 들어, 하이퍼바이저(401)는 가상 머신 이미지를 로드하여 가상 머신(406)을 생성한다. 이러한 실시 예들 중 다른 실시 예에서, 하이퍼바이저(401)는 가상 머신(406) 내에 운영 체제(410)를 실행한다. 이러한 실시 예들 중 또 다른 실시 예에서, 가상 머신(406)은 운영 체제(410)를 실행한다.
일부 실시 예들에서, 하이퍼바이저(401)는 컴퓨팅 장치(100) 상에서 실행되는 가상 머신(406)에 대한 프로세서 스케줄링 및 메모리 분할을 제어한다. 이러한 실시 예들 중 하나에서, 하이퍼바이저(401)는 적어도 하나의 가상 머신(406)의 실행을 제어한다. 이러한 실시 예들 중 다른 실시 예에서, 하이퍼바이저(401)는 컴퓨팅 장치(100)에 의해 제공되는 적어도 하나의 하드웨어 자원의 추상화를 갖는 적어도 하나의 가상 머신(406)을 제공한다. 다른 실시 예들에서, 하이퍼바이저(401)는 물리적 프로세서 성능들이 가상 머신(406)에 제공되는지 여부 및 그 방법을 제어한다.
제어 운영 체제(405)는 게스트 운영 체제들을 관리하고 구성하기 위한 적어도 하나의 애플리케이션을 실행할 수 있다. 일 실시 예에서, 제어 운영 체제(405)는 관리 애플리케이션, 예를 들어, 가상 머신의 실행, 가상 머신의 실행의 종료, 또는 가상 머신에 할당을 위한 물리적 자원의 유형의 식별을 포함하는, 가상 머신의 실행을 관리하기 위한 기능에 대한 액세스를 관리자에게 제공하는 사용자 인터페이스를 포함하는 애플리케이션을 실행할 수 있다. 다른 실시 예에서, 하이퍼바이저(401)는 하이퍼바이저(401)에 의해 생성된 가상 머신(406) 내에 제어 운영 체제(405)를 실행한다. 또 다른 실시 예에서, 제어 운영 체제(405)는 컴퓨팅 장치(100) 상의 물리적 자원들에 직접 액세스하도록 권한이 부여된 가상 머신(406)에서 실행된다. 일부 실시 예들에서, 컴퓨팅 장치(100a) 상의 제어 운영 체제(405a)는, 하이퍼바이저(401a)와 하이퍼바이저(401b) 사이의 통신들을 통해, 컴퓨팅 장치(100b) 상의 제어 운영 체제(405b)와 데이터를 교환할 수 있다. 이러한 방식으로, 하나 이상의 컴퓨팅 장치(100)들은 자원들의 풀에서 사용 가능한 프로세서들 및 다른 물리적 자원들과 관련하여 하나 이상의 다른 컴퓨팅 장치(100)들과 데이터를 교환할 수 있다. 이러한 실시 예들 중 하나에서, 이러한 기능은 하이퍼바이저가 복수의 물리적 컴퓨팅 장치들에 걸쳐 분산된 자원들의 풀을 관리할 수 있게 한다. 이러한 실시 예들 중 다른 실시 예에서, 다수의 하이퍼바이저들은 컴퓨팅 장치(100)들 중 하나에서 실행되는 하나 이상의 게스트 운영 체제들을 관리한다.
일 실시 예에서, 제어 운영 체제(405)는 적어도 하나의 게스트 운영 체제(410)와 상호 작용하도록 권한이 부여된 가상 머신(406)에서 실행된다. 다른 실시 예에서, 게스트 운영 체제(410)는 하이퍼바이저(401)를 통해 제어 운영 체제(405)와 통신하여 디스크 또는 네트워크로의 액세스를 요청한다. 또 다른 실시 예에서, 게스트 운영 체제(410) 및 제어 운영 체제(405)는 하이퍼바이저(401)에 의해 설립된 통신 채널을 통해, 예를 들어, 하이퍼바이저(401)에 의해 사용 가능하게 된 복수의 공유 메모리 페이지들을 통해 통신할 수 있다.
일부 실시 예들에서, 제어 운영 체제(405)는 컴퓨팅 장치(100)에 의해 제공되는 네트워킹 하드웨어와 직접 통신하기 위한 네트워크 백엔드 드라이버를 포함한다. 이러한 실시 예들 중 하나에서, 네트워크 백엔드 드라이버는 적어도 하나의 게스트 운영 체제(110)로부터의 적어도 하나의 가상 머신 요청을 처리한다. 다른 실시 예들에서, 제어 운영 체제(405)는 컴퓨팅 장치(100) 상의 스토리지 요소와 통신하기 위한 블록 백엔드 드라이버를 포함한다. 이러한 실시 예들 중 하나에서, 블록 백엔드 드라이버는 게스트 운영 체제(410)로부터 적어도 하나의 요청이 수신되는 것을 기초로 스토리지 요소로부터 데이터를 읽고 쓴다.
일 실시 예에서, 제어 운영 체제(405)는 툴 스택(tools stack)(404)을 포함한다. 다른 실시 예에서, 툴 스택(404)은 하이퍼바이저(401)와 상호 작용하거나, 다른 제어 운영 체제들(405)(예를 들어, 제2 컴퓨팅 장치(100b) 상의)과 통신하거나, 또는 컴퓨팅 장치(100) 상의 가상 머신들(406b, 406c)을 관리하기 위한 기능을 제공한다. 다른 실시 예에서, 툴 스택(404)은 가상 머신 팜의 관리자에게 향상된 관리 기능을 제공하기 위한 맞춤화된 애플리케이션들을 포함한다. 일부 실시 예들에서, 툴 스택(404) 및 제어 운영 체제(405) 중 적어도 하나는 컴퓨팅 장치(100) 상에서 실행되는 가상 머신(406)을 원격에서 구성하고 제어하기 위한 인터페이스를 제공하는 관리 API를 포함한다. 다른 실시 예들에서, 제어 운영 체제(405)는 툴 스택(404)을 통하여 하이퍼바이저(401)와 통신한다.
일 실시 예에서, 하이퍼바이저(401)는 하이퍼바이저(401)에 의해 생성된 가상 머신(406) 내의 게스트 운영 체제(410)를 실행한다. 다른 실시 예에서, 게스트 운영 체제(410)는 컴퓨팅 장치(100)의 사용자에게 컴퓨팅 환경 내의 자원들에 대한 액세스를 제공한다. 또 다른 실시 예에서, 자원은 프로그램, 애플리케이션, 문서, 파일, 복수의 애플리케이션들, 복수의 파일들, 실행 가능한 프로그램 파일, 데스크탑 환경, 컴퓨팅 환경, 또는 컴퓨팅 장치(100)의 사용자에게 사용 가능하게 된 다른 자원을 포함한다. 또 다른 실시 예에서, 자원은 컴퓨팅 장치(100) 상에 직접적인 종래의 설치, 애플리케이션 스트리밍 방법을 통한 컴퓨팅 장치(100)로의 전달, 제2 컴퓨팅 장치(100') 상의 자원의 실행에 의해 생성되고 프리젠테이션 계층 프로토콜을 통해 컴퓨팅 장치(100)에 통신된 출력 데이터의 컴퓨팅 장치(100)로의 전달, 제2 컴퓨팅 장치(100')에서 실행되는 가상 머신을 통한 자원의 실행, 또는 컴퓨팅 장치(100)에 연결된 이동식 저장 장치, 예를 들어 USB 장치로부터의 실행, 또는 컴퓨팅 장치(100)에서 실행되고 출력 데이터를 생성하는 가상 머신을 통해 생성된 출력 데이터의 컴퓨팅 장치(100)로의 전달을 포함하는, 그러나 이에 한정되지 않는 복수의 액세스 방법들을 통해 컴퓨팅 장치(100)에 전달될 수 있다. 일부 실시 예들에서, 컴퓨팅 장치(100)는 자원의 실행에 의해 생성된 출력 데이터를 다른 컴퓨팅 장치(100')에 전송한다.
일 실시 예에서, 게스트 운영 체제(410)는, 그것이 실행되는 가상 머신과 연계하여, 그것이 가상 머신임을 인지하지 못하는, 완전히 가상화된(fully-virtualized) 가상 머신을 형성한다; 이러한 머신은 "도메인 U HVM(Hardware Virtual Machine) 가상 머신"으로 지칭될 수 있다. 다른 실시 예에서, 완전 가상화 머신은 BIOS(Basic Input/Output System)을 에뮬레이트하는 소프트웨어를 포함하여 완전 가상화 머신 내에서 운영 체제를 실행한다. 또 다른 실시 예에서, 완전 가상화 머신은 하이퍼바이저(401)와 통신함으로써 기능을 제공하는 드라이버를 포함할 수 있다. 이러한 실시 예에서, 드라이버는 그것이 가상화된 환경 내에서 실행된다는 것을 인지할 수 있다. 다른 실시 예에서, 게스트 운영 체제(410)는, 그것이 실행되는 가상 머신과 연계하여, 그것이 가상 머신임을 인지하는, 반 가상화된(paravirtualized) 가상 머신을 형성한다; 이러한 머신은 "도메인 U PV 가상 머신"으로 지칭될 수 있다. 다른 실시 예에서, 반 가상화 머신은 완전 가상화 머신이 포함하지 않는 추가적인 드라이버들을 포함한다. 또 다른 실시 예에서, 반 가상화 머신은 상술한 바와 같이, 제어 운영 체제(405)에 포함된 네트워크 백엔드 드라이버 및 블록 백엔드 드라이버를 포함한다.
이제 도 4b를 참조하면, 블록도는 적어도 하나의 물리적 호스트가 가상 머신을 실행하는 시스템에서의 복수의 네트워크 컴퓨팅 장치의 일 실시 예를 도시한다. 간단히 요약하면, 시스템은 관리 구성 요소(404) 및 하이퍼바이저(401)를 포함한다. 시스템은 복수의 컴퓨팅 장치들(100), 복수의 가상 머신들(406), 복수의 하이퍼바이저들(401), 툴 스택들(404) 또는 관리 구성 요소들(404)로 다양하게 지칭되는 복수의 관리 구성 요소들, 및 물리적 자원(421, 428)을 포함한다. 복수의 물리 머신들(100)은 각각, 도 1e-1h 및 4a와 관련하여 상술한 컴퓨팅 장치들(100)로서 제공될 수 있다.
보다 상세하게, 물리 디스크(428)는 컴퓨팅 장치(100)에 의해 제공되고 가상 디스크(442)의 적어도 일부분을 저장한다. 일부 실시 예들에서, 가상 디스크(442)는 복수의 물리 디스크들(428)과 연관된다. 이러한 실시 예들 중 하나에서, 하나 이상의 컴퓨팅 장치들(100)은 프로세서들 및 자원들의 풀 내에서 사용 가능한 다른 물리적 자원들에 관한 하나 이상의 다른 컴퓨팅 장치들(100)과 데이터를 교환하여, 하이퍼바이저가 복수의 물리적 컴퓨팅 장치들에 걸쳐 분산된 자원들의 풀을 관리하게 할 수 있다. 일부 실시 예들에서, 가상 머신(406)이 실행되는 컴퓨팅 장치(100)는 물리적 호스트(100) 또는 호스트 머신(100)으로 지칭된다.
하이퍼바이저는 컴퓨팅 장치(100) 상의 프로세서 상에서 실행된다. 하이퍼바이저는, 가상 디스크에게, 물리 디스크에 대한 액세스의 양을 할당한다. 일 실시 예에서, 하이퍼바이저(401)는 물리 디스크 상의 임의의 양의 공간을 할당한다. 다른 실시 예에서, 하이퍼바이저(401)는 물리 디스크 상의 복수의 페이지들을 할당한다. 일부 실시 예들에서, 하이퍼바이저는 가상 머신(450)을 초기화 및 실행하는 프로세스의 일부로서 가상 디스크(442)를 제공한다.
일 실시 예에서, 관리 구성 요소(404a)는 풀 관리 구성 요소(404a)로 지칭된다. 다른 실시 예에서 제어 운영 체제(405a)로 지칭될 수 있는 관리 운영 체제(405a)는 관리 구성 요소를 포함한다. 일부 실시 예들에서, 관리 구성 요소는 툴 스택으로 지칭된다. 이러한 실시 예들 중 하나에서, 관리 구성 요소는 도 4a와 관련하여 상술한 툴 스택(404)이다. 다른 실시 예들에서, 관리 구성 요소(404)는, 사용자 예를 들어 관리자로부터, 제공 및/또는 실행하기 위한 가상 머신(406)의 식별자를 수신하기 위한 사용자 인터페이스를 제공한다. 또 다른 실시 예들에서, 관리 구성 요소(404)는, 사용자 예를 들어 관리자로부터, 하나의 물리 머신(100)으로부터 다른 물리 머신으로 가상 머신(406b)의 이동(migration) 요청을 수신하기 위한 사용자 인터페이스를 제공한다. 추가적인 실시 예들에서, 관리 구성 요소(404a)는 요청된 가상 머신(406d)을 실행할 컴퓨팅 장치(100b)를 식별하고 식별된 컴퓨팅 장치(100b) 상의 하이퍼바이저(401b)에게 식별된 가상 머신을 실행할 것을 지시한다; 이러한 관리 구성 요소는 풀 관리 구성 요소로 지칭될 수 있다.
이제 도 4c를 참조하면, 가상 애플리케이션 전달 제어기 또는 가상 기기(450)의 실시 예들이 도시된다. 간단히 요약하면, 도 2a 및 2b와 관련하여 상술한 기기(200)(예를 들어 애플리케이션 전달 제어기)의 임의의 기능 및/또는 실시 예들이 도 4a 및 4b와 관련하여 상술한 가상화된 환경의 임의의 실시 예에 배치될 수 있다. 기기(200)의 형태로 배치된 애플리케이션 전달 제어기의 기능 대신에, 그러한 기능은 임의의 컴퓨팅 장치(100), 예를 들어 클라이언트(102), 서버(106) 또는 기기(200) 상의 가상화 환경(400)에 배치될 수 있다.
이제 도 4c를 참조하면, 서버(106)의 하이퍼바이저(401) 상에서 동작하는 가상 기기(450)의 실시 예가 도시된다. 도 2a 및 2b의 기기(200)와 같이, 가상 기기(450)는 가용성, 성능, 오프로드 및 보안을 위한 기능을 제공할 수 있다. 가용성을 위하여, 가상 기기는 네트워크의 계층들 4 및 7 간의 로드 밸런싱을 수행할 수 있고, 또한 지능형 서비스 성능 모니터링을 수행할 수 있다. 네트워크 트래픽 가속을 통한 성능 향상을 위해, 가상 기기는 캐싱 및 압축을 수행할 수 있다. 임의의 서버들의 오프로드 처리를 위해, 가상 기기는 연결 다중화 및 풀링 및/또는 SSL 처리를 수행할 수 있다. 보안을 위해, 가상 기기는 기기(200)의 임의의 애플리케이션 방화벽 기능 및 SSL VPN 기능을 수행할 수 있다.
도 2a와 관련하여 상술한 기기(200)의 임의의 모듈들은 임의의 서버 상의 가상화 환경(300) 또는 비 가상화 환경, 예를 들어 쉘프 서버의 오프(off the shelf server)에서 실행 가능한 하나 이상의 소프트웨어 모듈들 또는 구성 요소들로 배치 가능한 가상화 기기 전달 제어기(450)의 형태로 패키징되거나, 결합되거나, 설계되거나 또는 구성될 수 있다. 예를 들어, 가상 기기는 컴퓨팅 장치에 설치하기 위한 설치 패키지 형태로 제공될 수 있다. 도 2a를 참조하면, 임의의 캐시 관리자(232), 정책 엔진(236), 압축(238), 암호화 엔진(234), 패킷 엔진(240), GUI(210), CLI(212), 쉘 서비스들(214) 및 성능 모니터링 프로그램들(216)은 컴퓨팅 장치 및/또는 가상화 환경(300)의 임의의 운영 체제에서 실행되기 위한 소프트웨어 구성 요소 또는 모듈로 설계되고 구성될 수 있다. 기기(200)의 암호화 프로세서(260), 프로세서(262), 메모리(264) 및 네트워크 스택(267)을 사용하는 대신에, 가상화 기기(400)는 가상화 환경(400)에 의해 제공되거나 서버(106) 상에서 사용 가능할 때 이러한 자원들 중 임의의 것을 사용할 수 있다.
계속해서 도 4c를 참조하면, 간단히 요약해서, 임의의 하나 이상의 vServer들(275A-275N)은 임의의 유형의 컴퓨팅 장치(100), 예를 들어 임의의 서버(106)의 가상화 환경(400)에서 동작하거나 실행될 수 있다. 도 2b와 관련하여 설명된 기기(200)의 임의의 모듈들 또는 기능은 서버의 가상화 또는 비 가상화 환경 모두에서 동작하도록 설계되고 구성될 수 있다. vServer(275), SSL VPN(280), 인트라넷 UP(282), 스위칭(284), DNS(286), 가속화(288), App FW(290) 및 모니터링 에이전트 중 임의의 것은 장치 및/또는 가상화 환경(400) 상에서 실행 가능한 하나 이상의 소프트웨어 모듈들 또는 구성 요소들로 배치될 수 있는 애플리케이션 전달 제어기(450)의 형태로 패키징되거나, 결합되거나, 설계되거나 또는 구성될 수 있다.
일부 실시 예들에서, 서버는 가상 애플리케이션 전달 제어부(450)의 동일하거나 상이한 실시 예들을 실행하는 각각의 가상 머신을 포함하는 가상화 환경에서 다수의 가상 머신들(406a-406n)을 실행할 수 있다. 일부 실시 예들에서, 서버는 멀티 코어 프로세싱 시스템의 코어 상의 하나 이상의 가상 머신들 상에서 하나 이상의 가상 기기(450)들을 실행할 수 있다. 일부 실시 예들에서, 서버는 멀티 프로세서 장치의 각각의 프로세서 상의 하나 이상의 가상 머신들 상에서 하나 이상의 가상 기기(450)들을 실행할 수 있다.
E. 멀티 코어 아키텍처를 제공하기 위한 시스템들 및 방법들
무어의 법칙(Moore's Law)에 따르면, 집적 회로 상에 배치될 수 있는 트랜지스터의 수는 대략 2년마다 두 배가 될 수 있다. 그러나 CPU 속도 증가는 정체기에 접어들 수 있으며, 예를 들어 CPU 속도는 2005년 이래로 3.5-4GHz 범위였다. 경우에 따라, CPU 제조업체들은 추가 성능을 얻기 위해 CPU 속도 증가에 의존하지 않을 수 있다. 일부 CPU 제조 업체들은 추가 성능을 제공하기 위해 프로세서들에 추가적인 코어들을 부가할 수 있다. 성능 향상을 위해 CPU들에 의존하는 제품들, 예를 들어 소프트웨어 및 네트워킹 공급자들의 제품들은 이러한 멀티 코어 CPU들을 활용하여 성능을 향상시킬 수 있다. 단일 CPU를 위해 설계되고 구성된 소프트웨어는 멀티 스레드, 병렬 아키텍처 또는 멀티 코어 아키텍처의 이점을 취하기 위해 재설계 및/또는 재작성될 수 있다.
nCore 또는 멀티 코어 기술이라고 지칭되는 기기(200)의 멀티 코어 아키텍처는 기기가 일부 실시 예들에서 단일 코어 성능 장벽을 깨고 멀티 코어 CPU들의 성능을 활용할 수 있게 한다. 도 2a와 관련하여 설명된 이전 아키텍처에서, 단일 네트워크 또는 패킷 엔진이 실행된다. nCore 기술 및 아키텍처의 다수 코어들은 다수의 패킷 엔진들이 동시에 및/또는 병렬로 실행될 수 있도록 한다. 각 코어에서 실행되는 패킷 엔진을 통해, 기기 아키텍처는 추가 코어들의 처리 용량을 활용한다. 일부 실시 예들에서 이는 최대 7배 향상된 성능 및 확장성을 제공한다.
도 5a에 도시된 것은 병렬 처리 또는 병렬 컴퓨팅 방식(scheme)의 유형, 예를 들어 기능적 병렬 처리, 데이터 병렬 처리 또는 흐름 기반 데이터 병렬 처리에 따라 하나 이상의 프로세서 코어들에 걸쳐 분산된 작업, 태스크, 부하 또는 네트워크 트래픽의 일부 실시 예들이다. 간단히 요약하면, 도 5a는 멀티 코어 시스템, 예를 들어 n-코어들, 1 내지 N의 전체 코어들의 번호를 갖는 기기(200')의 실시 예들을 도시한다. 일 실시 예에서, 작업, 부하 또는 네트워크 트래픽은 제1 코어(505A), 제2 코어(505B), 제3 코어(505C), 제4 코어(505D), 제5 코어(505E), 제6 코어(505F), 제7 코어(505G) 등 사이에 분배되어, 그 분배가 n개의 코어들(505N)(이하에서 총괄적으로 코어들(505)이라 함)의 모두 또는 둘 이상에 걸쳐 이루어질 수 있다. 복수의 코어들의 각각의 코어 상에서 각각 실행되는 다수의 가상 인터넷 프로토콜 서버들(VIPs)(275)이 있을 수 있다. 복수의 코어들의 각각의 코어 상에서 각각 실행되는 다수의 패킷 엔진들(240)이 있을 수 있다. 사용된 접근 방식들 중 임의의 것이 상이하거나, 다양하거나 또는 유사한 작업 부하 또는 임의의 코어들에 걸친 성능 레벨(515)을 유발할 수 있다. 기능적 병렬 처리 접근을 위해, 각각의 코어는 패킷 엔진, VIP(275) 또는 기기(200)에 의해 제공되는 기능들의 상이한 기능을 실행할 수 있다. 데이터 병렬 처리 접근에서, 데이터는 데이터를 수신하는 네트워크 인터페이스 카드(NIC) 또는 VIP(275)를 기초로 병렬 처리되거나 코어들에 걸쳐 분배될 수 있다. 다른 데이터 병렬 처리 접근에서, 처리는 각각의 코어에 데이터 흐름들을 분산시킴으로써 코어들에 걸쳐 분배될 수 있다.
도 5a를 더 상세하게 설명하면, 일부 실시 예들에서, 부하, 작업 또는 네트워크 트래픽은 기능적 병렬 처리(500)에 따라 코어들(505) 사이에 분산될 수 있다. 기능적 병렬 처리는 하나 이상의 각각의 기능들을 수행하는 각각의 코어에 기초할 수 있다. 일부 실시 예들에서, 제1 코어는 제1 기능을 수행할 수 있고 제2 코어는 제2 기능을 수행할 수 있다. 기능적 병렬 처리 접근에서, 멀티 코어 시스템에 의해 수행되어야 하는 기능들은 기능에 따라 분할되고 각각의 코어에 분산되도록 한다. 일부 실시 예들에서, 기능적 병렬 처리는 태스크 병렬 처리로 지칭될 수 있고, 각각의 프로세서 또는 코어가 상이한 프로세스 또는 기능을 동일 또는 상이한 데이터에 대해 실행할 때 달성될 수 있다. 코어 또는 프로세서는 동일 또는 상이한 코드를 실행할 수 있다. 경우에 따라, 상이한 실행 스레드들 또는 코드는 작동하는 동안 서로 통신할 수 있다. 통신은 워크플로우의 일부로 한 스레드로부터 다음으로 데이터를 전달함으로써 이루어질 수 있다.
일부 실시 예들에서, 기능적 병렬 처리(500)에 따른 코어들(505)에 걸친 작업 분배는, 특정 기능, 예를 들어 네트워크 입력/출력 관리(NW I/O)(510A), 보안 소켓 계층(SSL) 암호화 및 복호화(510B) 및 전송 제어 프로토콜(TCP) 기능들(510C)에 따라 네트워크 트래픽을 분배하는 것을 포함할 수 있다. 이는 사용되는 기능의 볼륨 또는 레벨을 기초로 작업, 성능 또는 컴퓨팅 부하(515)를 유발할 수 있다. 일부 실시 예들에서, 데이터 병렬 처리(540)에 따른 코어들(505)에 걸친 작업 분산은, 특정 하드웨어 또는 소프트웨어 구성 요소와 관련된 데이터를 분배하는 것에 기초하여 작업(515)의 양을 분산하는 것을 포함할 수 있다. 일부 실시 예들에서, 흐름 기반 데이터 병렬 처리(520)에 따른 코어들(505)에 걸친 작업 분산은, 문맥 또는 흐름을 기초로 데이터를 분산하여 각 코어의 작업(515A-N)의 양이 유사하거나, 실질적으로 동일하거나 또는 비교적 균등하게 분산될 수 있도록 하는 것을 포함할 수 있다.
기능적 병렬 처리 접근의 경우에, 각각의 코어는 기기의 패킷 엔진 또는 VIP에 의해 제공되는 복수의 기능들 중 하나 이상을 실행하도록 구성될 수 있다. 예를 들어, 코어 1은 기기(200')를 위한 네트워크 I/O 처리를 수행하고 코어 2는 기기를 위한 TCP 연결 관리를 수행할 수 있다. 마찬가지로, 코어 3은 SSL 오프로딩을 수행하고 코어 4는 계층 7 또는 애플리케이션 계층 처리 및 트래픽 관리를 수행할 수 있다. 각각의 코어들은 동일한 기능 또는 상이한 기능들을 수행할 수 있다. 각각의 코어들은 하나 이상의 기능을 수행할 수 있다. 임의의 코어들은 도 2a 및 2b와 연계하여 식별 및/또는 설명된 임의의 기능 또는 그의 부분들을 실행할 수 있다. 이러한 접근에서, 코어들에 걸친 작업은 기능별로 거칠게(coarse-grained) 또는 세밀하게(fine-grained) 분할될 수 있다. 경우에 따라, 도 5a에 도시된 바와 같이, 기능에 의한 분할은 성능 또는 부하(515)의 상이한 레벨들에서 실행되는 상이한 코어들을 유발할 수 있다.
기능적 병렬 처리 접근의 경우에, 각각의 코어는 기기의 패킷 엔진에 의해 제공되는 복수의 기능들 중 하나 이상을 실행하도록 구성될 수 있다. 예를 들어, 코어 1은 기기(200')를 위한 네트워크 I/O 처리를 수행할 수 있고, 코어 2는 기기를 위한 TCP 연결 관리를 수행할 수 있다. 마찬가지로, 코어 3은 SSL 오프로딩을 수행할 수 있고 코어 4는 계층 7 또는 애플리케이션 계층 처리 및 트래픽 관리를 수행할 수 있다. 각각의 코어들은 동일한 기능 또는 상이한 기능들을 수행할 수 있다. 각각의 코어들은 하나 이상의 기능을 수행할 수 있다. 임의의 코어들은 도 2a 및 2b와 연계하여 식별 및/또는 설명된 임의의 기능 또는 그의 부분들을 실행할 수 있다. 이러한 접근에서, 코어들에 걸친 작업은 기능별로 거칠게 또는 세밀하게 분할될 수 있다. 경우에 따라, 도 5a에 도시된 바와 같이 기능에 의한 분할은 부하 또는 성능의 상이한 레벨들에서 실행되는 상이한 코어들을 유발할 수 있다.
기능 또는 태스크들은 임의의 배치 및 방식으로 분배될 수 있다. 예를 들어, 도 5b는 네트워크 I/O 기능(510A)과 관련된 애플리케이션들 및 프로세스들을 처리하는 제1 코어, 코어 1(505A)을 도시한다. 네트워크 I/O와 관련된 네트워크 트래픽은, 일부 실시 예들에서, 특정 포트 번호와 연관될 수 있다. 따라서, NW I/O(510A)와 연관된 포트 목적지를 갖는 유출 및 유입 패킷들은 NW I/O 포트와 연관된 모든 네트워크 트래픽 처리를 전담하는 코어 1(505A)을 향한다. 유사하게, 코어 2(505B)는 SSL 처리와 연관된 기능 처리를 전담하고 코어 4(505D)는 모든 TCP 레벨 처리 및 기능 처리를 전담한다.
도 5a는 기능들, 예를 들어 network I/O, SSL 및 TCP를 도시하지만, 다른 기능들이 코어들에 할당될 수 있다. 이러한 다른 기능들은 본 명세서에 개시된 기능들 또는 동작들의 임의의 하나 이상을 포함할 수 있다. 예를 들어, 도 2a 및 2b와 연계하여 설명된 임의의 기능들이 기능을 기반으로 코어들에 걸쳐 분산될 수 있다. 경우에 따라, 제1 VIP(275A)는 제1 코어 상에 실행되고 상이한 구성을 갖는 제2 VIP(275B)는 제2 코어 상에 실행될 수 있는다. 일부 실시 예들에서, 각각의 코어(505)는 특정 기능을 처리하여, 각각의 코어(505)가 특정 기능에 연관된 프로세싱을 처리할 수 있다. 예를 들어, 코어 2(505B)는 SSL 오프로딩을 처리할 수 있고 코어 4(505D)는 애플리케이션 계층 처리 및 트래픽 관리를 처리할 수 있다.
다른 실시 예들에서, 작업, 부하 또는 네트워크 트래픽은 임의의 유형 및 형태의 데이터 병렬 처리(540)에 따라 코어들(505) 사이에 분산될 수 있다. 일부 실시 예들에서, 데이터 병렬 처리는 분산된 데이터의 상이한 조각들에 대한 동일한 태스크 또는 기능을 수행하는 각각의 코어에 의해 멀티 코어 시스템에서 달성될 수 있다. 일부 실시 예들에서, 단일 실행 스레드 또는 코드는 데이터의 모든 조각들에 대한 동작을 제어한다. 다른 실시 예들에서, 상이한 스레드들 또는 명령들은 동작을 제어하지만, 동일한 코드를 실행할 수 있다. 일부 실시 예들에서, 데이터 병렬 처리는 패킷 엔진, vServer들(VIPs)(275A-C), 네트워크 인터페이스 카드들(NIC)(542D-E) 및/또는 기기(200)에 포함되거나 그와 연관된 임의의 다른 네트워킹 하드웨어 또는 소프트웨어의 관점으로 달성된다. 예를 들어, 각각의 코어는 동일한 패킷 엔진 또는 VIP 코드 또는 구성을 실행할 수 있지만 분산된 데이터의 상이한 세트들 상에서 동작할 수 있다. 각각의 네트워킹 하드웨어 또는 소프트웨어 구성은 상이한, 다양한 또는 실질적으로 동일한 양의 데이터를 수신할 수 있고, 결과적으로 다양한, 상이한 또는 실질적으로 동일한 양의 부하(515)를 가질 수 있다.
데이터 병렬 처리 접근의 경우, 작업은 VIP들, NIC들 및/또는 VIP들 또는 NIC들의 데이터 흐름들을 기초로 분할되고 분산될 수 있다. 이러한 접근들 중 하나에서, 멀티 코어 시스템의 작업은 데이터의 분산된 세트에서 작업하는 각각의 VIP를 가짐으로써 VIP들 사이에 분할되거나 분산될 수 있다. 예를 들어, 각각의 코어는 하나 이상의 VIP들을 실행하도록 구성될 수 있다. 네트워크 트래픽은 각각의 VIP가 해당 트래픽을 처리할 수 있도록 코어에 분산될 수 있다. 이러한 접근들 중 다른 하나에서, 기기의 작업은 NIC가 네트워크 트래픽을 수신하는 것을 기초로 분할되거나 코어들 사이에 분산될 수 있다. 예를 들어, 제1 NIC의 네트워크 트래픽은 제1 코어에 분배될 수 있고 제2 NIC의 네트워크 트래픽은 제2 코어에 분배될 수 있다. 경우에 따라, 코어는 다수의 NIC들로부터의 데이터를 처리할 수 있다.
도 5a는 VIP1(275A), VIP2(275B) 및 VIP3(275C)의 경우에서와 같이, 단일 코어(505)와 연관된 단일 vServer를 도시한다. 일부 실시 예들에서, 단일 vServer는 하나 이상의 코어들(505)과 연관될 수 있다. 대조적으로, 하나 이상의 vServer들은 단일 코어(505)와 연관될 수 있다. vServer를 코어(505)와 연관시키는 것은 특정 vServer와 관련된 모든 기능들을 처리하기 위한 코어(505)를 포함할 수 있다. 일부 실시 예들에서, 각각의 코어는 동일한 코드 및 구성을 갖는 VIP를 실행한다. 다른 실시 예들에서, 각각의 코어는 동일한 코드를 갖지만 상이한 구성을 갖는 VIP를 실행한다. 일부 실시 예들에서, 각각의 코어는 상이한 코드 및 동일하거나 상이한 구성을 갖는 VIP를 실행한다.
vServer와 마찬가지로, NIC들은 또한 특정 코어들(505)과 연관될 수 있다. 많은 실시 예들에서, NIC들은 하나 이상의 코어들(505)에 연결되어, NIC가 데이터 패킷들을 수신하거나 송신할 때, 특정 코어(505)가 데이터 패킷들을 수신하고 송신하는 것과 관련된 프로세싱을 처리하게 한다. 일 실시 예에서, NIC1(542D) 및 NIC2(542E)의 경우와 같이, 단일 NIC가 단일 코어(505)와 연관될 수 있다. 다른 실시 예들에서, 하나 이상의 NIC들이 단일 코어(505)와 연관될 수 있다. 다른 실시 예들에서, 단일 NIC는 하나 이상의 코어들(505)과 연관될 수 있다. 이러한 실시 예들에서, 부하는 하나 이상의 코어들(505) 사이에 분배되어 각각의 코어(505)가 실질적으로 유사한 양의 부하를 처리할 수 있다. NIC와 연관된 코어(505)는 그 특정 NIC와 관련된 모든 기능들 및/또는 데이터를 처리할 수 있다.
VIP들 또는 NIC들의 데이터를 기초로 코어들에 걸쳐 작업을 분산시키는 것은 독립 레벨을 가질 수 있지만, 일부 실시 예들에서는, 이는 도 5a의 가변 부하들(515)에 의해 도시된 바와 같이 코어들의 불평형 사용을 유발할 수 있다.
일부 실시 예들에서, 부하, 작업 또는 네트워크 트래픽은 임의의 유형 및 형태의 데이터 흐름을 기초로 코어들(505) 사이에 분배될 수 있다. 이러한 접근들 중 다른 하나에서, 작업은 데이터 흐름들을 기초로 분할되거나 코어들 사이에 분산될 수 있다. 예를 들어, 기기를 가로지르는 클라이언트와 서버 간의 네트워크 트래픽은 복수의 코어들 중 하나의 코어에 분배되고 그에 의해 처리될 수 있다. 경우에 따라, 최초로 세션 또는 연결을 설립한 코어는 해당 세션 또는 연결에 대한 네트워크 트래픽이 분산되는 코어일 수 있다. 일부 실시 예들에서, 데이터 흐름은 네트워크 트래픽의 임의의 단위 또는 부분, 예를 들어 트랜잭션, 요청/응답 통신 또는 클라이언트 상의 애플리케이션으로부터 시작된 트래픽에 기초한다. 이러한 방식 및 일부 실시 예들에서, 기기(200')를 가로지르는 클라이언트들 및 서버들 간의 데이터 흐름들은 다른 접근들보다 균형 잡힌 방식으로 분산될 수 있다.
흐름 기반 데이터 병렬 처리(520)에서, 데이터의 분배는 임의의 유형의 데이터 흐름, 예를 들어 요청/응답 쌍들, 트랜잭션들, 세션들, 연결들 또는 애플리케이션 통신들과 관련된다. 예를 들어, 기기를 가로지르는 클라이언트와 서버 간의 네트워크 트래픽은 복수의 코어들의 하나의 코어에 분배되고 그에 의해 처리될 수 있다. 경우에 따라, 최초로 세션 또는 연결을 설립한 코어는 해당 세션 또는 연결에 대한 네트워크 트래픽이 분배된 코어일 수 있다. 데이터 흐름의 분배는 각각의 코어(505)가 실질적으로 동일하거나 대체로 균등하게 분산된 양의 부하, 데이터 또는 네트워크 트래픽을 운반하게 할 수 있다.
일부 실시 예들에서, 데이터 흐름은 네트워크 트래픽의 임의의 단위 또는 부분, 예를 들어 트랜잭션, 요청/응답 통신 또는 클라이언트 상의 애플리케이션으로부터 시작된 트래픽에 기초한다. 일부 실시 예들에서, 기기(200')를 가로지르는 클라이언트들과 서버들 간의 데이터 흐름들은 다른 접근들보다 균형 잡힌 방식으로 분산될 수 있다. 일 실시 예에서, 데이터 흐름은 트랜잭션 또는 일련의 트랜잭션들에 기초하여 분산될 수 있다. 이러한 트랜잭션은, 일부 실시 예들에서, 클라이언트와 서버 사이에 있을 수 있고 IP 주소 또는 다른 패킷 식별자에 의해 특정될 수 있다. 예를 들어, 코어 1(505A)은 특정 클라이언트 및 특정 서버 사이의 트랜잭션을 전담할 수 있고, 그에 따라 코어 1(505A)의 부하(515A)는 특정 클라이언트 및 서버 간의 트랜잭션과 연관된 네트워크 트래픽으로 구성될 수 있다. 코어 1(505A)에 네트워크 트래픽을 할당하는 것은 특정 클라이언트 또는 서버 모두로부터 시작된 모든 데이터 패킷들을 코어 1(505A)로 라우팅함으로써 달성될 수 있다.
작업 또는 부하는 트랜잭션들의 부분을 기초로 코어들에 분배되고, 다른 실시 예들에서 로드 또는 작업은 패킷 단위로 할당될 수 있다. 이러한 실시 예들에서, 기기(200)는 데이터 패킷들을 가로채고 이들을 가장 적은 양의 부하를 갖는 코어(505)에 할당할 수 있다. 예를 들어, 코어 1의 부하(515A)가 나머지 코어들(505B-N) 상의 부하(515B-N)보다 적기 때문에, 기기(200)는 제1 유입 데이터 패킷을 코어 1(505A)에 할당할 수 있다. 제1 데이터 패킷이 코어 1(505A)에 할당되고 나면, 코어 1(505A)의 부하(515A)의 양은 제1 데이터 패킷을 처리하기 위해 필요한 처리 자원들의 양에 비례하여 증가한다. 기기(200)가 제2 데이터 패킷을 가로채면, 코어 4(505D)가 두 번째로 적은 양의 부하를 갖기 때문에, 기기(200)는 부하를 코어 4(505D)에 할당할 것이다. 데이터 패킷들을 가장 적은 양의 로드에 따라 코어에 분배하는 것은, 일부 실시 예들에서, 각각의 코어(505)에 분배된 부하(515A-N)가 실질적으로 동일하게 유지되는 것을 보장할 수 있다.
다른 실시 예들에서, 부하는 네트워크 트래픽의 섹션이 특정 코어(505)에 할당되는 단위로 할당될 수 있다. 상기한 예는 패킷 단위 로드 밸런싱을 도시한다. 다른 실시 예들에서, 부하는 패킷들의 수를 기초로 할당될 수 있고, 그에 따라 모든 10, 100 또는 1000개의 패킷들이 가장 적은 양의 부하를 갖는 코어(505)에 할당될 수 있다. 코어(505)에 할당되는 패킷들의 수는 애플리케이션, 사용자 또는 관리자에 의해 결정될 수 있고, 0보다 큰 임의의 수일 수 있다. 또 다른 실시 예들에서, 부하는 시간 매트릭을 기초로 할당될 수 있고, 그에 따라 패킷들은 미리 결정된 양의 시간 동안 특정 코어(505)에 분배될 수 있다. 이러한 실시 예들에서, 패킷들은 5밀리초 동안 또는 사용자, 프로그램, 시스템, 관리자 또는 이와 유사한 것에 의해 결정된 임의의 시간 주기 동안 특정 코어(505)에 분배될 수 있다. 미리 결정된 시간 주기가 경과한 후에, 데이터 패킷들은 미리 결정된 주기의 시간 동안 다른 코어(505)로 전송된다.
하나 이상의 코어들(505) 사이의 작업, 부하 또는 네트워크 트래픽의 분배를 위한 흐름 기반 데이터 병렬 처리 방법들은 상술한 실시 예들의 임의의 조합을 포함할 수 있다. 이러한 방법들은 기기(200)의 임의의 부분에 의해, 애플리케이션 또는 코어들(505) 중 하나, 예를 들어 패킷 엔진에서 실행 가능한 명령들의 세트에 의해, 또는 기기(200)와 통신하는 컴퓨팅 장치 상에서 실행되는 임의의 애플리케이션, 프로그램 또는 에이전트에 의해 수행될 수 있다.
도 5a에 도시된 기능적 및 데이터 병렬 처리 컴퓨터 방식들은 임의의 방식으로 조합되어 기능적 병렬 처리(500), 데이터 병렬 처리(540), 흐름 기반 데이터 병렬 처리(520) 또는 이들의 임의의 부분을 아우르는 하이브리드 병렬 처리 또는 분산 처리 방식을 생성할 수 있다. 경우에 따라, 멀티 코어 시스템은 임의의 유형 또는 형태의 로드 밸런싱 방식들을 사용하여 하나 이상의 코어들(505) 사이에 부하를 분산시킬 수 있다. 로드 밸런싱 방식은 임의의 기능적 및 데이터 병렬 처리 방식들 또는 이들의 조합들과 함께 사용될 수 있다.
도 5b에 도시된 것은 임의의 유형 및 형태의 하나 이상의 시스템들, 기기들, 장치들 또는 구성 요소들일 수 있는 멀티 코어 시스템(545)의 실시 예이다. 이러한 시스템(545)은, 일부 실시 예들에서, 하나 이상의 처리 코어들(505A-N)을 갖는 기기(200) 내에 포함될 수 있다. 시스템(545)은 메모리 버스(556)와 통신하는 하나 이상의 패킷 엔진들(PE) 또는 패킷 처리 엔진들(PPE)(548A-N)을 더 포함할 수 있다. 메모리 버스는 하나 이상의 처리 코어들(505A-N)과 통신하기 위해 사용될 수 있다. 또한 시스템(545) 내에는 하나 이상의 처리 코어들(505A-N)과 더 통신할 수 있는 하나 이상의 네트워크 인터페이스 카드들(NIC)(552) 및 흐름 분배기(550)가 포함될 수 있다. 흐름 분배기(550)는 RSS(Receive Side Scaler) 또는 RSS 모듈(560)로 구성될 수 있다.
도 5b를 더 참조하면, 보다 상세하게, 일 실시 예에서 패킷 엔진(들)(548A-N)은 본 명세서에 개시된 기기(200)의 임의의 부분, 예를 들어 도 2a 및 2b에 개시된 기기의 임의의 부분으로 구성될 수 있다. 패킷 엔진(들)(548A-N)은, 일부 실시 예들에서, 다음의 요소들 중 임의의 것으로 구성될 수 있다: 패킷 엔진(240), 네트워크 스택(267); 캐시 관리자(232); 정책 엔진(236); 압축 엔진(238); 암호화 엔진(234), GUI(210); CLI(212); 쉘 서비스들(214); 모니터링 프로그램들(216); 및 메모리 버스(556) 또는 하나 이상의 코어들(505A-N) 중 하나로부터 데이터 패킷들을 수신할 수 있는 임의의 다른 소프트웨어 또는 하드웨어 요소. 일부 실시 예들에서, 패킷 엔진(들)(548A-N)은 하나 이상의 vServer들(275A-N), 또는 그들의 임의의 부분으로 구성될 수 있다. 다른 실시 예들에서, 패킷 엔진(들)(548A-N)은 다음의 기능들의 임의의 조합을 제공할 수 있다: SSL VPN(280); 인트라넷 UP(282); 스위칭(284); DNS(286); 패킷 가속화(288); App FW(290); 모니터링, 예를 들어 모니터링 에이전트(197)에 의해 제공되는 모니터링; TCP 스택으로서의 기능과 관련된 기능; 로드 밸런싱; SSL 오프로드 및 처리; 콘텐츠 스위칭; 정책 평가; 캐싱; 압축; 인코딩; 압축 해제; 디코딩; 애플리케이션 방화벽 기능들; XML 처리 및 가속화; 및 SSL VPN 연결.
패킷 엔진(들)(548A-N)은, 일부 실시 예들에서, 특정 서버, 사용자, 클라이언트 또는 네트워크와 연관될 수 있다. 패킷 엔진(548)이 특정 엔티티와 연관될 때, 패킷 엔진(548)은 해당 엔티티와 관련된 데이터 패킷들을 처리할 수 있다. 예를 들어, 패킷 엔진(548)이 제1 사용자와 연관되어야 하면, 해당 패킷 엔진(548)은 제1 사용자에 의해 생성된 패킷들, 또는 제1 사용자와 연관된 목적지 주소를 갖는 패킷들을 처리하고 그에 대해 동작할 것이다. 유사하게, 패킷 엔진(548)은 특정 엔티티와 연관되지 않도록 선택할 수 있고, 그에 따라 패킷 엔진(548)은 해당 엔티티에 의해 생성되지 않고 해당 엔티티로 예정되지 않은 임의의 데이터 패킷들을 처리하고 그에 대해 동작할 수 있다.
일부 예들에서, 패킷 엔진(들)(548A-N)은 도 5a에 도시된 기능적 및/또는 데이터 병렬 처리 방식들 중 임의의 것을 수행하도록 구성될 수 있다. 이러한 예들에서, 패킷 엔진(들)(548A-N)은 처리 코어들(505A-N) 사이에 기능들 또는 데이터를 분배하고, 그에 따라 분배가 병렬 처리 또는 분배 방식을 따르도록 할 수 있다. 일부 실시 예들에서, 단일 패킷 엔진(들)(548A-N)이 로드 밸런싱 방식을 수행하고, 다른 실시 예들에서, 하나 이상의 패킷 엔진(들)(548A-N)이 로드 밸런싱 방식을 수행한다. 각각의 코어(505A-N)는, 일 실시 예에서, 특정 패킷 엔진(548)과 연관되고, 그에 따라 로드 밸런싱이 패킷 엔진에 의하여 수행될 수 있다. 로드 밸런싱은 이러한 실시 예에서, 코어(505)와 연관된 각각의 패킷 엔진(548A-N)이 코어들과 연관된 다른 패킷 엔진들과 통신하고, 그에 따라 패킷 엔진들(548A-N)이 부하를 어디에 분배할 것인지 총괄하여 결정할 수 있을 것을 요구할 수 있다. 이러한 프로세스의 일 실시 예는 부하를 위해 각각의 패킷 엔진으로부터 투표를 수신하는 중재자(arbiter)를 포함할 수 있다. 중재자는 엔진의 투표의 나이 및 일부의 경우들에 엔진의 연관된 코어(505) 상의 현재 부하의 양과 관련된 우선 순위 값에 부분적으로 기초하여 각각의 패킷 엔진(548A-N)에 부하를 분배할 수 있다.
코어 상에서 동작하는 임의의 패킷 엔진들은 사용자 모드, 커널 또는 이들의 임의의 조합에서 실행될 수 있다. 일부 실시 예들에서, 패킷 엔진은 애플리케이션 또는 프로그램 실행이 사용자 또는 애플리케이션 영역일 때 동작한다. 이러한 실시 예들에서, 패킷 엔진은 임의의 유형 또는 형태의 인터페이스를 사용하여 커널에 의해 제공되는 임의의 기능에 액세스할 수 있다. 일부 실시 예들에서, 패킷 엔진은 커널 모드 또는 커널의 일부로서 동작한다. 일부 실시 예들에서, 패킷 엔진의 제1 부분은 사용자 모드로 동작하고 패킷 엔진의 제2 부분은 커널 모드로 동작한다. 일부 실시 예들에서, 제1 코어 상의 제1 패킷 엔진은 커널 모드에서 실행되고 제2 코어 상의 제2 패킷 엔진은 사용자 모드에서 실행된다. 일부 실시 예들에서, 패킷 엔진 또는 그의 임의의 부분들은 NIC 또는 그의 임의의 드라이버들 상에 또는 그와 연계하여 동작한다.
일부 실시 예들에서, 메모리 버스(556)는 임의의 유형 또는 형태의 메모리 또는 컴퓨터 버스일 수 있다. 단일 메모리 버스(556)가 도 5b에 도시되어 있지만, 시스템(545)은 다수의 메모리 버스(556)로 구성될 수 있다. 일 실시 예에서, 각각의 패킷 엔진(548)은 개별 메모리 버스들(556)과 연관될 수 있다.
NIC(552)는 일부 실시 예들에서 본 명세서에 개시된 임의의 네트워크 인터페이스 카드들 또는 방식들일 수 있다. NIC(552)는 다수의 포트들을 가질 수 있다. NIC는 임의의 유형 및 형태의 네트워크(104)에 연결되도록 설계되고 구성될 수 있다. 단일 NIC(552)가 도시되어 있지만, 시스템(545)은 임의의 수의 NIC들(552)로 구성될 수 있다. 일부 실시 예들에서, 각각의 코어(505A-N)는 하나 이상의 단일 NIC들(552)과 연관될 수 있다. 따라서, 각각의 코어(505)는 특정 코어(505)를 전담하는 단일 NIC(552)에 연관될 수 있다.
코어들(505A-N)은 본 명세서에 개시된 임의의 프로세서들로 구성될 수 있다. 또한, 코어들(505A-N)은 본 명세서에 개시된 임의의 코어(505) 구성들에 따라 구성될 수 있다. 또한, 코어들(505A-N)은 본 명세서에 개시된 임의의 코어(505) 기능을 가질 수 있다. 도 5b는 7개의 코어들(505A-G)을 도시하지만, 임의의 수의 코어들(505)이 시스템(545) 내에 포함될 수 있다. 특히, 시스템(545)은 "N"개의 코어들로 구성될 수 있고, 여기서 "N"은 0보다 큰 정수이다.
코어는 해당 코어가 사용되기 위해 할당되거나 배당된 메모리를 갖거나 사용할 수 있다. 메모리는 해당 코어의 전용(private) 또는 로컬 메모리로 간주될 수 있고 해당 코어에 의해서만 액세스될 수 있다. 코어는 여러 코어들에 공유되거나 할당된 메모리를 갖거나 사용할 수 있다. 메모리는 하나 이상의 코어들에 의해 액세스 가능한 공용(public) 또는 공유 메모리로 간주될 수 있다. 코어는 전용 또는 공용 메모리의 임의의 조합을 사용할 수 있다. 각각의 코어에 대한 각각의 주소 영역들을 사용하여, 동일한 주소 영역을 사용하는 경우로부터 일부 조정 레벨이 제거된다. 각각의 주소 영역을 사용하여, 코어는 다른 코어들과의 충돌에 대한 걱정 없이 코어의 소유 주소 영역에서 정보 및 데이터에 대한 작업을 수행할 수 있다. 각각의 패킷 엔진은 TCP 및/또는 SSL 연결들을 위한 별도의 메모리 풀을 가질 수 있다.
도 5b를 더 참조하면, 도 5a와 관련하여 상술한 코어들(505)의 임의의 기능 및/또는 실시 예들이 도 4a 및 4b와 관련하여 상술한 가상화된 환경의 임의의 실시 예에 배치될 수 있다. 물리적 프로세서(505)의 형태로 배치되는 코어들(505)의 기능 대신에, 이러한 기능은 임의의 컴퓨팅 장치(100), 예를 들어 클라이언트(102), 서버(106) 또는 기기(200) 상의 가상화 환경(400)에 배치될 수 있다. 다른 실시 예들에서, 기기 또는 단일 장치의 형태로 배치되는 코어들(505)의 기능 대신에, 기능은 임의의 배열로 다수의 장치들에 걸쳐 배치될 수 있다. 예를 들어, 하나의 장치는 2개 이상의 코어들로 구성될 수 있고 다른 장치는 2개 이상의 코어들로 구성될 수 있다. 예를 들어, 멀티 코어 시스템은 컴퓨팅 장치들의 클러스터, 서버 팜 또는 컴퓨팅 장치들의 네트워크를 포함할 수 있다. 일부 실시 예들에서, 코어들의 형태로 배치되는 코어들(505)의 기능 대신에, 기능은 복수의 프로세서들, 예를 들어 복수의 단일 코어 프로세서들 상에 배치될 수 있다.
일 실시 예에서, 코어들(505)은 임의의 유형 및 형태의 프로세서일 수 있다. 일부 실시 예들에서, 코어는 본 명세서에 개시된 임의의 프로세서 또는 중앙 처리부와 실질적으로 유사한 기능을 수행할 수 있다. 일부 실시 예에서, 코어들(505)은 본 명세서에 개시된 임의의 프로세서의 임의의 부분으로 구성될 수 있다. 도 5a는 7개의 코어들을 도시하지만, 기기(200) 내에 임의의 "N"개의 코어들이 존재할 수 있으며, 여기서 "N"은 1보다 큰 임의의 정수이다. 일부 실시 예들에서, 코어들(505)은 공통 기기(200) 내에 설치될 수 있고, 다른 실시 예들에서, 코어들(505)은 서로 통신 가능하게 연결된 하나 이상의 기기(들)(200) 내에 설치될 수 있다. 코어들(505)은 일부 실시 예들에서 그래픽 처리 소프트웨어로 구성될 수 있고, 다른 실시 예들에서, 코어들(505)은 일반적인 처리 능력들을 제공할 수 있다. 코어들(505)은 물리적으로 서로 인접하게 설치될 수 있고/있거나 서로 통신 가능하게 연결될 수 있다. 코어들은 물리적으로 및/또는 통신 가능하게 코어들에 연결된 임의의 유형 및 형태의 버스 또는 서브 시스템에 의해 연결되어 코어들로의, 코어들로부터 및/또는 코어들 사이에서 데이터를 전송할 수 있다.
각각의 코어(505)는 다른 코어들과 통신하기 위한 소프트웨어를 포함할 수 있고, 일부 실시 예들에서 코어 관리자(도시되지 않음)는 각각의 코어(505) 간의 통신을 용이하게 할 수 있다. 일부 실시 예들에서, 커널은 코어 관리를 제공할 수 있다. 코어들은 다양한 인터페이스 방식들을 사용하여 서로 인터페이스하거나 통신할 수 있다. 일부 실시 예들에서, 코어 간 메시지 전달은 코어들 사이의 통신, 예를 들어 코어들을 연결하는 버스 또는 서브시스템을 통해 제2 코어로 메시지 또는 데이터를 전송하는 제1 코어에 사용될 수 있다. 일부 실시 예들에서, 코어들은 임의의 유형 또는 형태의 공유 메모리 인터페이스를 통해 통신할 수 있다. 일 실시 예에서, 모든 코어들 사이에서 공유되는 하나 이상의 메모리 위치들이 있을 수 있다. 일부 실시 예들에서, 각각의 코어는 서로 다른 코어와 공유되는 개별적인 메모리 위치들을 가질 수 있다. 예를 들어, 제1 코어는 제2 코어와의 제1 공유 메모리 및 제3 코어와의 제2 공유 메모리를 가질 수 있다. 일부 실시 예들에서, 코어들은 임의의 유형의 프로그래밍 또는 API, 예를 들어 커널을 통한 함수 호출들을 통해 통신할 수 있다. 일부 실시 예들에서, 운영 체제는 다수의 코어 장치들을 인식하고 지원할 수 있으며 코어 간 통신들을 위한 인터페이스들 및 API를 제공할 수 있다.
흐름 분배기(550)는 임의의 애플리케이션, 프로그램, 라이브러리, 스크립트, 태스크, 서비스, 프로세스 또는 임의의 유형 및 형태의 하드웨어 상에서 실행되는 임의의 유형 및 형태의 실행 가능한 명령들일 수 있다. 일부 실시 예들에서, 흐름 분배기(550)는 본 명세서에 개시된 임의의 동작들 및 기능들을 수행하기 위한 회로의 임의의 설계 및 구성일 수 있다. 일부 실시 예들에서, 흐름 분배기는 코어들(505) 및/또는 코어들에서 실행되는 패킷 엔진 또는 VIP들 사이에서 데이터 패킷들의 분배를 분배, 전달, 라우팅, 제어 및/또는 관리한다. 흐름 분배기(550)는, 일부 실시 예들에서, 인터페이스 마스터 또는 관리자로 지칭될 수 있다. 일 실시 예에서, 흐름 분배기(550)는 기기(200)의 코어 또는 프로세서 상에서 실행되는 실행 가능한 명령들의 세트로 구성된다. 다른 실시 예에서, 흐름 분배기(550)는 기기(200)와 통신하는 컴퓨팅 머신 상에서 실행되는 실행 가능한 명령들의 세트로 구성된다. 일부 실시 예들에서, 흐름 분배기(550)는 NIC, 예를 들어 펌웨어 상에서 실행되는 실행 가능한 명령들의 세트로 구성된다. 또 다른 실시 예들에서, 흐름 분배기(550)는 코어들 또는 프로세서들 사이에 데이터 패킷들을 분배하기 위한 소프트웨어 및 하드웨어의 임의의 조합으로 구성된다. 일 실시 예에서, 흐름 분배기(550)는 코어들(505A-N) 중 적어도 하나에서 실행되고, 다른 실시 예들에서 각각의 코어(505A-N)에 할당된 개별 흐름 분배기(550)는 연관된 코어(505A-N) 상에서 실행된다. 흐름 분배기는 임의의 유형 및 형태의 통계적 또는 확률적 알고리즘들 또는 의사 결정을 사용하여 코어들에 걸친 흐름들의 균형을 맞출 수 있다. 기기의 하드웨어, 예를 들어 NIC, 또는 커널은 NIC들 및/또는 코어들에 걸친 순차적인 동작들을 지원하도록 설계 및 구성될 수 있다.
시스템(545)이 하나 이상의 흐름 분배기들(550)로 구성되는 실시 예들에서, 각각의 흐름 분배기(550)는 프로세서(505) 또는 패킷 엔진(548)과 연관될 수 있다. 흐름 분배기(550)는 각각의 흐름 분배기(550)가 시스템(545) 내에서 실행되는 다른 흐름 분배기들(550)과 통신하도록 하는 인터페이스 메커니즘으로 구성될 수 있다. 일 예에서, 하나 이상의 흐름 분배기들(550)는 서로 통신함으로써 부하의 균형을 맞추는 방법을 결정할 수 있다. 이러한 프로세스는 어떤 흐름 분배기(550)가 부하를 수신해야 하는지를 결정하는 중재자에게 투표를 제출하기 위한 상술한 프로세스와 실질적으로 유사하게 동작할 수 있다. 다른 실시 예들에서, 제1 흐름 분배기(550')는 연관된 코어상의 부하를 식별할 수 있고 다음의 기준들 중 임의의 것을 기초로 제1 데이터 패킷을 연관된 코어로 전달할지 여부를 결정할 수 있다: 연관된 코어의 부하가 미리 결정된 임계값 이상이다; 연관된 코어의 부하가 미리 결정된 임계값 이하이다; 연관된 코어의 부하가 다른 코어들의 부하보다 적다; 또는 프로세서상의 부하의 양에 부분적으로 기초하여 데이터 패킷들을 어디로 전달할지를 결정하기 위해 사용할 수 있는 임의의 다른 매트릭.
흐름 분배기(550)는 본 명세서에 개시된 것과 같은 분배, 컴퓨팅 또는 로드 밸런싱 방식에 따라 코어들(505) 사이에 네트워크 트래픽을 분배할 수 있다. 일 실시 예에서, 흐름 분배기는 기능적 병렬 처리 분배 방식(550), 데이터 병렬 처리 부하 분배 방식(540), 흐름 기반 데이터 병렬 처리 분배 방식(520), 또는 이들 분배 구조 또는 다수의 프로세서들 사이에 부하를 분배하기 위한 임의의 로드 밸런싱 방식 중 임의의 하나에 따라 네트워크 트래픽을 분배할 수 있다. 흐름 분배기(550)는 데이터 패킷들을 취하고 동작 로드 밸런싱 또는 분배 방식에 따라 프로세서들에 걸쳐 이들을 분배함으로써 부하 분배기로서 동작할 수 있다. 일 실시 예에서, 흐름 분배기(550)는 하나 이상의 동작들, 기능들 또는 로직으로 구성될 수 있고, 그에 따라 패커들(packers), 작업 또는 부하를 어떻게 분배할 것인지를 결정할 수 있다. 또 다른 실시 예에서, 흐름 분배기(550)는 데이터 패킷과 관련된 소스 주소 및 목적지 주소를 식별할 수 있는 하나 이상의 서브 동작들, 기능들 또는 로직으로 구성될 수 있고, 그에 따라 패킷들을 분배할 수 있다.
일부 실시 예들에서, 흐름 분배기(550)는 RSS 네트워크 드라이버, 모듈(560) 또는 하나 이상의 코어들(505) 사이에서 데이터 패킷들을 분배하는 임의의 유형 및 형태의 실행 가능한 명령들로 구성될 수 있다. RSS 모듈(560)은 하드웨어 및 소프트웨어의 임의의 조합으로 구성될 수 있다. 일부 실시 예들에서, RSS 모듈(560)은 흐름 분배기(550)와 연계하여 작동함으로써 코어들(505A-N)에 걸쳐 또는 멀티 프로세서 네트워크의 다수의 프로세서들 사이에 데이터 패킷들을 분배한다. RSS 모듈(560)은 일부 실시 예들에서 NIC(552) 내에서 실행될 수 있고, 다른 실시 예들에서 코어들(505) 중 임의의 하나에서 실행될 수 있다.
일부 실시 예들에서, RSS 모듈(560)은 MICROSOFT RSS 방식을 사용한다. 일 실시 예에서, RSS는 데이터의 순차적 전달을 유지하면서 시스템 내의 다수의 프로세서들에 걸쳐 수신 프로세싱을 균등하게 하는, 마이크로 소프트 스케일러블 네트워킹(Scalable Networking) 이니셔티브 기술이다. RSS는 임의의 유형 및 형태의 해싱(hashing) 방식을 사용하여 네트워크 패킷을 처리하기 위한 코어 또는 프로세서를 결정할 수 있다.
RSS 모듈은 임의의 유형 및 형태의 해시 함수, 예를 들어 토플리츠(Toeplitz) 해시 함수를 적용할 수 있다. 해시 함수는 해시 유형 또는 임의의 값들의 시퀀스에 적용될 수 있다. 해시 함수는 임의의 보안 레벨의 보안 해시이거나 또는 암호로 보안될 수 있다. 해시 함수는 해시 키를 사용할 수 있다. 키의 크기는 해시 함수에 의존한다. 토플리츠 해시의 경우, 크기는 IPv6의 경우 40바이트, IPv4의 경우 16바이트일 수 있다.
해시 함수는 임의의 하나 이상의 기준 또는 설계 목표들을 기초로 설계되고 구성될 수 있다. 일부 실시 예들에서, TCP/IPv4, TCP/IPv6, IPv4 및 IPv6 헤더들을 포함하는 상이한 해시 입력들 및 상이한 해시 유형들에 대한 해시 결과의 균등한 분배를 제공하는 해시 함수가 사용될 수 있다. 일부 실시 예들에서, 해시 함수는 소수의 버킷들이 존재할 때(예를 들어, 2개 또는 4개) 균등하게 분배되는 해시 결과를 제공하는 해시 함수가 사용될 수 있다. 일부 실시 예들에서, 많은 수의 버킷들이 존재할 때(예를 들어, 64개의 버킷들) 무작위로 분배되는 해시 결과를 제공하는 해시 함수가 사용될 수 있다. 일부 실시 예들에서, 해시 함수는 컴퓨터를 사용한(computational) 또는 자원을 사용한 레벨을 기초로 결정된다. 일부 실시 예들에서, 해시 함수는 하드웨어에서 해시를 구현하는 용이성 또는 어려움을 기초로 결정된다. 일부 실시 예들에서, 해시 함수는 모두 동일한 버킷으로 해시되는 패킷들을 전송하기 위해 악의적 원격 호스트의 용이성 또는 어려움을 기초로 결정된다.
RSS 모듈은 임의의 유형 및 형태의 입력, 예를 들어 일련의 값들로부터 해시들을 생성할 수 있다. 이러한 일련의 값들은 네트워크 패킷의 임의의 부분, 예를 들어 임의의 헤더, 필드 또는 네트워크 패킷의 페이로드 또는 그들의 부분들을 포함할 수 있다. 일부 실시 예들에서, 해시로의 입력은 해시 타입으로 지칭될 수 있고 네트워크 패킷 또는 데이터 흐름과 관련된 임의의 튜플 정보, 예를 들어 다음 중 하나를 포함할 수 있다: 적어도 2개의 IP 주소 및 2개의 포트들을 포함하는 4 튜플; 임의의 4 세트의 값들을 포함하는 4 튜플; 6 튜플; 2 튜플; 및/또는 임의의 다른 일련의 수 또는 값들. 다음은 RSS에 의해 사용될 수 있는 해시 유형들의 예이다:
소스 TCP 포트, 소스 IP 버전 4(IPv4) 주소, 목적지 TCP 포트 및 목적지 IPv4 주소의 4-튜플.
소스 TCP 포트, 소스 IP 버전 6(IPv6) 주소, 목적지 TCP 포트 및 목적지 IPv6 주소의 4-튜플.
소스 IPv4 주소 및 목적지 IPv4주소의 2-튜플.
소스 IPv6 주소 및 목적지 IPv6 주소의 2-튜플.
IPv6 확장 헤더들을 파싱하기 위한 지원을 포함하는, 소스 IPv6 주소 및 목적지 IPv6 주소의 2-튜플.
해시 결과 또는 그의 임의의 부분은 네트워크 패킷을 분배하기 위해 코어 또는 엔티티, 예를 들어 패킷 엔진 또는 VIP를 식별하기 위해 사용될 수 있다. 일부 실시 예들에서, 하나 이상의 해시 비트들 또는 마스크가 해시 결과에 적용된다. 해시 비트 또는 마스크는 임의의 수의 비트 또는 바이트일 수 있다. NIC는 임의의 수의 비트, 예를 들어 7 비트를 지원할 수 있다. 네트워크 스택은 초기화 중에 사용될 실제 비트 수를 설정할 수 있다. 수는 1에서 7 사이에 포함될 것이다.
해시 결과는 임의의 유형 및 형태의 테이블, 예를 들어 버킷 테이블 또는 간접 테이블을 통해 코어 또는 엔티티를 식별하는데 사용될 수 있다. 일부 실시 예들에서, 해시 결과 비트의 수는 테이블에 색인하기 위해 사용된다. 해시 마스크의 범위는 간접 테이블의 크기를 효과적으로 정의할 수 있다. 해시 결과의 임의의 부분 또는 해시 결과 자체는 간접 테이블을 색인하는 데 사용될 수 있다. 테이블 내의 값들은, 예를 들어 코어 또는 프로세서 식별자에 의해, 임의의 코어들 또는 프로세서를 식별할 수 있다. 일부 실시 예들에서, 멀티 코어 시스템의 모든 코어들이 테이블 내에서 식별된다. 다른 실시 예들에서, 멀티 코어 시스템의 코어들의 포트가 테이블 내에서 식별된다. 간접 테이블은 해시 마스크에 의해 색인되는 임의의 수의 버킷들, 예를 들어 2 내지 128개의 버킷들로 구성될 수 있다. 각각의 버킷은 코어 또는 프로세서를 식별하는 색인 값들의 범위로 구성될 수 있다. 일부 실시 예들에서, 흐름 제어부 및/또는 RSS 모듈은 간접 테이블을 변경함으로써 네트워크 부하를 재밸런싱할 수 있다.
일부 실시 예들에서, 멀티 코어 시스템(575)은 RSS 드라이버 또는 RSS 모듈(560)을 포함하지 않는다. 이러한 실시 예들 중 일부에서, 소프트웨어 조종 모듈(도시되지 않음) 또는 시스템 내의 RSS 모듈의 소프트웨어 실시 예는 멀티 코어 시스템(575) 내의 코어들(505)로 패킷들을 조종하도록 흐름 분배기(550)와 연계하여 또는 그의 일부로서 동작할 수 있다.
흐름 분배기(550)는 일부 실시 예들에서, 임의의 하나의 코어들(505) 상에서 및 멀티 코어 시스템(575) 내에 포함된 장치들 또는 구성 요소들 중 임의의 하나 상에서, 기기(200) 상의 임의의 모듈 또는 프로그램 내에서 실행된다. 일부 실시 예들에서, 흐름 분배기(550')는 제1 코어(505A) 상에서 실행될 수 있고, 다른 실시 예들에서 흐름 분배기(550'')는 NIC(552) 상에서 실행될 수 있다. 또 다른 실시 예들에서, 흐름 분배기(550')의 인스턴스는 멀티 코어 시스템(575)에 포함된 각각의 코어(505) 상에서 실행될 수 있다. 이러한 실시 예에서, 흐름 분배기(550')의 각각의 인스턴스는 흐름 분배기(550')의 다른 인스턴스들과 통신하여 코어들(505)에 걸쳐 패킷들을 앞뒤로 전달할 수 있다. 요청 패킷에 대한 응답이 동일한 코어에 의해 처리되지 않는 상황, 예를 들어 제2 코어가 응답을 처리하는 동안 제1 코어가 요청을 처리하는 상황이 존재한다. 이러한 상황들에서, 흐름 분배기(550')의 인스턴스들은 패킷을 가로채고 요구된 또는 올바른 코어(505)로 전달할 수 있다. 즉, 흐름 분배기 인스턴스(550')는 응답을 제1 코어로 전달할 수 있다. 흐름 분배기(550')의 다수의 인스턴스들은 임의의 수의 코어들(505) 및 코어들(505)의 임의의 조합 상에서 실행될 수 있다.
흐름 분배기는 임의의 하나 이상의 규칙들 또는 정책들에 응답하여 동작할 수 있다. 규칙들은 코어 또는 패킷 처리 엔진을 식별하여 네트워크 패킷, 데이터 또는 데이터 흐름을 수신할 수 있다. 규칙들은 네트워크 패킷에 관련된 임의의 유형 및 형태, 예를 들어 소스 및 목적지 IP 주소 및 소스 및 목적지 포트들의 4 튜플의 튜플 정보를 식별할 수 있다. 규칙에 의해 지정된 튜플과 일치하는 수신된 패킷을 기초로, 흐름 분배기는 패킷을 코어 또는 패킷 엔진으로 전달할 수 있다. 일부 실시 예들에서, 패킷은 공유 메모리 및/또는 코어 간 메시징을 통해 코어로 전달된다.
도 5b에는 멀티 코어 시스템(575) 내에서 실행되는 흐름 분배기(550)를 도시하지만, 일부 실시 예들에서 흐름 분배기(550)는 멀티 코어 시스템(575)으로부터 원격에 위치한 컴퓨팅 장치 또는 기기 상에서 실행될 수 있다. 이러한 실시 예에서, 흐름 분배기(550)는 멀티 코어 시스템(575)과 통신하여 데이터 패킷들을 취하고 하나 이상의 코어들(505)에 걸쳐 패킷들을 분배할 수 있다. 흐름 분배기(550)는, 일 실시 예에서, 기기(200)로 향하는 데이터 패킷들을 수신하고, 수신된 데이터 패킷들에 분배 방식을 적용하고 멀티 코어 시스템(575)의 하나 이상의 코어들(505)에 데이터 패킷들을 분배할 수 있다. 일 실시 예에서, 흐름 분배기(550)는 라우터 또는 다른 기기에 포함되어, 라우터가 각 패킷과 연관된 메타데이터를 변경함으로써 특정 코어들(505)을 타겟하여 각 패킷이 멀티 코어 시스템(575)의 서브 노드를 향하여 타겟되도록 할 수 있다. 이러한 실시 예에서, CISCO의 vn-tag 방식이 각 패킷을 적절한 메타데이터로 변경 또는 태그하는데 사용될 수 있다.
도 5c에 도시된 것은 하나 이상의 처리 코어들(505A-N)로 구성되는 멀티 코어 시스템(575)의 실시 예이다. 간단히 요약하면, 코어들(505) 중 하나는 제어 코어(505A)로 설계될 수 있고 다른 코어들(505)에 대한 제어 평면(570)으로 사용될 수 있다. 다른 코어들은 제어 코어가 제어 평면을 제공하는 동안 데이터 평면에서 동작하는 2차 코어들일 수 있다. 코어들(505A-N)은 글로벌 캐시(580)를 공유할 수 있다. 제어 코어가 제어 평면을 제공하는 동안, 멀티 코어 시스템 내의 다른 코어들은 데이터 평면을 형성하거나 제공한다. 제어가 멀티 코어 시스템의 초기화, 구성 및 제어를 제공하는 동안 이러한 코어들은 네트워크 트래픽에 대한 데이터 처리 기능을 수행한다.
도 5c를 더 참조하면, 보다 상세하게, 코어들(505A-N) 및 제어 코어(505A)는 본 명세서에 기재된 임의의 프로세서일 수 있다. 또한, 코어들(505A-N) 및 제어 코어(505A)는 도 5c에 도시된 시스템(575) 내에서 기능할 수 있는 임의의 프로세서일 수 있다. 또한, 코어들(505A-N) 및 제어 코어(505A)는 본 명세서에 개시된 임의의 코어 또는 코어들의 그룹일 수 있다. 제어 코어는 다른 코어들과 다른 유형의 코어 또는 프로세서일 수 있다. 일부 실시 예들에서, 제어는 상이한 패킷 엔진을 동작시키거나 다른 코어들의 패킷 엔진들과 상이하게 구성된 패킷 엔진을 가질 수 있다.
각각의 코어들의 메모리의 임의의 부분은 코어들에 의해 공유되는 글로벌 캐시에 할당되거나 글로벌 캐시를 위해 사용될 수 있다. 간단히 요약하면, 각각의 코어의 각각의 메모리의 미리 결정된 백분율 또는 미리 결정된 양이 글로벌 캐시를 위해 사용될 수 있다. 예를 들어, 각각의 코드의 각각의 메모리의 50%는 공유 글로벌 캐시에 전담 또는 할당될 수 있다. 즉, 도시된 실시 예에서, 제어 평면 코어 또는 코어 1을 제외한 2GB의 각각의 코어는 28GB의 공유 글로벌 캐시를 형성하는데 사용될 수 있다. 예를 들어 구성 서비스들을 통한 제어 평면의 구성은 공유 글로벌 캐시를 위해 사용되는 메모리의 양을 결정할 수 있다. 일부 실시 예들에서, 각각의 코어는 글로벌 캐시에 의한 사용을 위해 상이한 양의 메모리를 제공할 수 있다. 다른 실시 예들에서, 어떠한 코어도 임의의 메모리를 제공하지 않거나 글로벌 캐시를 사용하지 않을 수 있다. 일부 실시 예들에서, 코어들 중 어느 것도 글로벌 공유 메모리에 할당되지 않은 메모리의 로컬 캐시를 갖지 않을 수 있다. 각각의 코어들은 글로벌 공유 캐시에 네트워크 트래픽의 임의의 부분을 저장할 수 있다. 각각의 코어들은 요청 또는 응답에서 사용할 임의의 콘텐츠를 위한 캐시를 확인할 수 있다. 임의의 코어들은 글로벌 공유 캐시로부터 콘텐츠를 획득하여 데이터 흐름, 요청 또는 응답에 사용할 수 있다.
글로벌 캐시(580)는 임의의 유형 및 형태의 메모리 또는 스토리지 요소, 예를 들어 본 명세서에 개시된 임의의 메모리 또는 스토리지일 수 있다. 일부 실시 예들에서, 코어들(505)은 미리 결정된 양의 메모리(즉, 32GB 또는 시스템(575)에 비례하는 임의의 메모리 양)에 대한 액세스를 가질 수 있다. 글로벌 캐시(580)는 기설정된 양의 메모리로부터 할당될 수 있고 사용 가능한 메모리의 나머지는 코어들(505) 사이에 할당될 수 있다. 다른 실시 예들에서, 각각의 코어(505)는 미리 결정된 양의 메모리를 가질 수 있다. 글로벌 캐시(580)는 각각의 코어(505)에 할당된 양의 메모리로 구성될 수 있다. 이러한 메모리의 양은 바이트 단위로 측정되거나, 각 코어(505)에 할당된 메모리의 백분율로 측정될 수 있다. 따라서, 글로벌 캐시(580)는 각각의 코어(505)와 연관된 메모리로부터의 1GB로 구성되거나, 각각의 코어(505)와 연관된 메모리의 20% 또는 1/2로 구성될 수 있다. 일부 실시 예들에서, 코어들(505)의 일부만이 글로벌 캐시(580)에 메모리를 제공하고, 다른 실시 예들에서 글로벌 캐시(580)는 코어들(505)에 할당되지 않은 메모리로 구성될 수 있다.
각각의 코어(505)는 글로벌 캐시(580)를 사용하여 네트워크 트래픽 또는 캐시 데이터를 저장할 수 있다. 일부 실시 예들에서, 코어의 패킷 엔진들은 글로벌 캐시를 사용하여 복수의 패킷 엔진들에 의해 저장된 데이터를 캐싱하고 사용한다. 예를 들어, 도 2a의 캐시 관리자 및 도 2b의 캐시 기능은 글로벌 캐시를 사용하여 가속화를 위한 데이터를 공유할 수 있다. 예를 들어, 각각의 패킷 엔진들은 응답들, 예를 들어 HTML 데이터를 글로벌 캐시에 저장할 수 있다. 코어에서 동작하는 임의의 캐시 관리자들은 글로벌 캐시에 액세스하여 클라이언트 요청들에 대해 응답할 수 있다.
일부 실시 예들에서, 코어들(505)은 글로벌 캐시(580)를 사용하여 부분적으로 포트들에 기초하여 데이터 흐름을 결정하는데 사용될 수 있는 포트 할당 테이블을 저장할 수 있다. 다른 실시 예들에서, 코어들(505)은 흐름 분배기에 의해 사용될 수 있는 주소 검색 테이블 또는 임의의 다른 테이블 또는 목록을 저장하여 글로벌 캐시(580)를 사용하여 유입 및 유출 데이터 패킷들을 어디로 향하게 할지를 결정할 수 있다. 코어들(505)은, 일부 실시 예들에서, 캐시(580)로부터 리드하고 캐시(580)에 기록할 수 있고, 다른 실시 예들에서 코어들(505)은 캐시(580)로부터 리드만하거나 캐시(580)에 기록만할 수 있다. 코어들은 글로벌 캐시를 사용하여 코어 간 통신들을 수행할 수 있다.
글로벌 캐시(580)는 각각의 섹션이 특정 코어(505)를 전담할 수 있는 개별 메모리 섹션들로 섹션화될 수 있다. 일 실시 예에서, 제어 코어(505A)는 보다 많은 양의 사용 가능한 캐시를 수신할 수 있고, 다른 코어들(505)은 글로벌 캐시(580)로의 가변량 또는 액세스를 수신할 수 있다.
일부 실시 예들에서, 시스템(575)은 제어 코어(505A)로 구성될 수 있다. 도 5c는 제어 코어로서 코어 1(505A)을 도시하지만, 제어 코어는 기기(200) 또는 멀티 코어 시스템 내의 임의의 코어일 수 있다. 또한, 단지 하나의 제어 코어가 도시되어 있지만, 시스템(575)은 시스템에 대한 제어 레벨을 각각 갖는 하나 이상의 제어 코어들로 구성될 수 있다. 일부 실시 예들에서, 하나 이상의 제어 코어들은 각각 시스템(575)의 특정 양태를 제어할 수 있다. 예를 들어, 하나의 코어가 어느 분배 방식을 사용할지를 결정하고, 다른 코어가 글로벌 캐시(580)의 크기를 결정할 수 있다.
멀티 코어 시스템의 제어 평면은 전담 관리 코어 또는 마스터 코어로서의 코어의 설계 및 구성일 수 있다. 이러한 제어 평면 코어는 멀티 코어 시스템에서 복수의 코어들의 동작 및 기능의 제어, 관리 및 조정을 제공할 수 있다. 이러한 제어 평면 코어는 멀티 코어 시스템에서 복수의 코어들 사이에 시스템의 메모리의 할당 및 사용의 제어, 관리, 조정을 제공할 수 있으며, 이는 동일한 것의 초기화 및 구성을 포함한다. 일부 실시 예들에서, 제어 평면은 코어들에 대한 데이터 흐름의 할당 및 데이터 흐름에 기초한 코어들에 대한 네트워크 패킷들의 분배를 제어하기 위한 흐름 분배기를 포함한다. 일부 실시 예들에서, 제어 평면 코어는 패킷 엔진을 실행하고 다른 실시 예들에서, 제어 평면 코어는 시스템의 다른 코어들의 관리 및 제어를 전담한다.
제어 코어(505A)는 다른 코어들(505)에 대한 제어 레벨, 예를 들어 얼마나 많은 메모리가 각각의 코어(505)에 할당되어야 하는지에 대한 결정 또는 어떤 코어(505)가 특정 기능 또는 하드웨어/소프트웨어 엔티티를 처리하도록 할당되어야 하는지에 대한 결정을 행사할 수 있다. 제어 코어(505A)는, 일부 실시 예들에서, 제어 평면(570) 내의 그의 코어들(505)에 대한 제어를 수행할 수 있다. 따라서, 제어 코어(505A)에 의해 제어되지 않는 제어 평면(570) 외부의 프로세서들이 존재할 수 있다. 제어 평면(570)의 경계를 결정하는 것은 제어 코어(505A) 또는 시스템(575) 내에서 실행되는 에이전트에 의해, 제어 코어(505A)에 의해 제어되는 코어들(505)의 목록을 유지하는 것을 포함할 수 있다. 제어 코어(505A)는 다음 중 임의의 것을 제어할 수 있다: 코어의 초기화; 코어가 사용 불가능할 때의 결정; 하나의 코어가 고장나면 다른 코어들(505)에 부하를 재분배; 구현할 분배 방식 결정; 어느 코어가 네트워크 트래픽을 수신해야 하는지의 결정; 각각의 코어에 얼마나 많은 캐시가 할당되어야 하는지의 결정; 특정 기능 또는 요소를 특정 코어에 할당할 지의 결정; 코어가 서로 통신하는 것을 허용할 지의 결정; 글로벌 캐시(580)의 크기의 결정; 및 시스템(575) 내의 코어들의 기능, 구성 및 동작의 임의의 다른 결정.
F. 분산 클러스터 아키텍처를 제공하기 위한 시스템들 및 방법들
이전 섹션에서 논의된 바와 같이, 트랜지스터 간격 및 CPU 속도 증가에 대한 한계를 극복하기 위해, 많은 CPU 제조 업체들이 멀티 코어 CPU들을 통합하여 단일의 고속 CPU의 성능을 능가하여 성능을 향상시켰다. 분산 또는 클러스터 된 기기로서 복수의 기기들, 단일 또는 멀티 코어 모두를 함께 동작시킴으로써 유사하거나 추가적인 성능 이득을 얻을 수 있다. 개별 컴퓨팅 장치들 또는 기기들은 클러스터의 노드들로 지칭될 수 있다. 중앙 집중식 관리 시스템은 로드 밸런싱, 분산, 구성, 또는 다른 태스크들을 수행하여 노드들이 단일 컴퓨팅 시스템과 연계하여 동작할 수 있게 한다. 외부적으로 또는 서버들 및 클라이언트들을 포함하는 다른 장치들로, 많은 실시 예들에서, 클러스터는 비록 전형적인 개별 기기의 성능을 초과하는 성능을 갖는 것이라도, 단일 가상 기기 또는 컴퓨팅 장치로 간주될 수 있다.
이제 도 6을 참조하면, 컴퓨팅 장치 클러스터 또는 기기 클러스터(600)의 실시 예가 도시된다. 지칭되는 복수의 기기들(200a-200n), 또는 때때로 노드들로 지칭되는 다른 컴퓨팅 장치들, 예를 들어, 데스크탑 컴퓨터들, 서버들, 랙 마운트 서버들, 블레이드 서버들, 또는 임의의 다른 유형 및 형태의 컴퓨팅 장치가 단일 기기 클러스터(600) 내에 결합될 수 있다. 비록 기기 클러스터라고 지칭하지만, 많은 실시 예들에서, 클러스터는 제한없이 애플리케이션 서버, 네트워크 스토리지 서버, 백업 서비스, 또는 임의의 다른 유형의 컴퓨팅 장치로서 동작할 수 있다. 많은 실시 예들에서, 기기 클러스터(600)는 기기(200), WAN 최적화 장치들, 네트워크 가속화 장치들, 또는 상술한 다른 장치들의 많은 기능들을 수행하기 위해 사용될 수 있다.
일부 실시 예들에서, 기기 클러스터(600)는 컴퓨팅 장치들의 동종의 세트, 예를 들어 동일한 기기들, 하나 이상의 샤시(chassis) 내의 블레이드 서버들, 데스크탑 또는 랙 마운트 컴퓨팅 장치들, 또는 다른 장치들로 구성될 수 있다. 다른 실시 예들에서, 기기 클러스터(600)는 기기들의 상이한 모델들, 혼합된 기기들 및 서버들, 또는 컴퓨팅 장치들의 임의의 다른 세트를 포함하는 장치들의 이종 또는 혼합된 세트로 구성될 수 있다. 이는 예를 들어, 기기 클러스터(600)가 시간 경과에 따라 새로운 모델들 또는 장치들로 확장되거나 업그레이드될 수 있게 한다.
일부 실시 예들에서, 기기 클러스터(600)의 각각의 컴퓨팅 장치 또는 기기(200)는 상술한 바와 같이 멀티 코어 기기로 구성될 수 있다. 그러한 많은 실시 예들에서, 상술한 코어 관리 및 흐름 분배 방법들은 본 명세서에서 논의된 노드 관리 및 분배 방법들에 더하여, 각각의 개별 기기에 의해 사용될 수 있다. 이는 다수의 노드들로 데이터를 구성하고 분배하는 하나의 기기, 및 다수의 코어들로 처리를 위해 데이터를 구성하고 분배하는 각각의 노드를 포함하는 2계층 분산 시스템(two-tier distributed system)으로 생각될 수 있다. 따라서, 이러한 실시 예들에서, 상술한 바와 같이 플로우 분배가 마스터 또는 제어 코어에 의해 처리될 수 있으므로, 노드 분배 시스템은 개별 코어들로의 플로우 분배를 관리할 필요가 없다.
많은 실시 예에서, 기기 클러스터(600)는 예를 들어, 샤시 내의 복수의 블레이드 서버들 또는 단일 랙의 복수의 랙 마운트 장치들과 같이 물리적으로 그룹화될 수 있으나, 다른 실시 예들에서, 기기 클러스터(600)는 복수의 샤시들, 복수의 랙들, 데이터 센터 내의 복수의 방들, 복수의 데이터 센터들 또는 다른 임의의 물리적 배치에 분산될 수 있다. 따라서, 기기 클러스터(600)는 물리적 그룹 보다는 공통 구성, 관리, 및 목적을 통해 그룹화된 가상의 기기로 간주될 수 있다.
일부 실시 예들에서, 기기 클러스터(600)는 하나 이상의 네트워크들(104, 104')에 연결될 수 있다. 예를 들어, 도 1a를 간단히 참조하면, 일부 실시 예들에서, 기기(200)는 하나 이상의 클라이언트들(102)에 결합된 네트워크(104), 및 하나 이상의 서버들(106)에 결합된 네트워크(104') 사이에 배치될 수 있다. 기기 클러스터(600)는 단일 기기로서 동작하도록 유사하게 배치될 수 있다. 많은 실시 예들에서, 이는 기기 클러스터(600)의 외부에서 어떠한 네트워크 토폴로지 변화도 요구하지 않을 수 있으며, 단일 기기 시나리오로부터의 설치 및 확장성을 용이하게 한다. 다른 실시 예들에서, 기기 클러스터(600)는 도 1b-1d 또는 상술한 것과 유사하게 배치될 수 있다. 또 다른 실시 예들에서, 기기 클러스터는 하나 이상의 서버들에 의해 실행되는 복수의 가상 머신들 또는 프로세스들로 구성될 수 있다. 예를 들어, 이러한 실시 예에서, 서버 팜은 복수의 가상 머신들을 실행할 수 있고, 각각의 가상 머신은 기기(200)로 구성되며, 복수의 가상 머신들은 기기 클러스터(600)로서 함께 동작할 수 있다. 또 다른 실시 예들에서, 기기 클러스터(600)는 기기들(200)의 혼합 또는 기기(200)들로 구성된 가상 머신으로 구성될 수 있다. 일부 실시 예들에서, 기기 클러스터(600)는 복수의 기기(200)가 공존하지 않고 지리적으로 분산될 수 있다. 예를 들어, 도 6을 다시 참조하면, 이러한 실시 예 중 하나에서, 제1 기기(200a)는 제1 사이트, 예를 들어 데이터 센터에 위치하고, 제2 기기(200b)는 제2 사이트, 예를 들어 중앙 사무실 또는 본사들에 위치할 수 있다. 추가적인 실시 예에서, 이러한 지리적으로 멀리 떨어진 기기들은 전용 네트워크, 예를 들어, T1 또는 T3 점대 점 연결; VPN; 또는 임의의 다른 유형 및 형태의 네트워크에 의해 결합될 수 있다. 따라서, 동일한 위치에 있는 기기들(200a-200b)과 비교하여 추가적인 통신 레이턴시가 있을 수 있더라도, 사이트 전원 장애 또는 통신 중단의 경우에서 신뢰성의 이점, 확장성 또는 다른 이점들의 있을 수 있다. 일부 실시 예들에서, 레이턴시 문제들은 데이터 흐름들의 지리적 또는 네트워크 기반 분배를 통해 감소될 수 있다. 예를 들어, 기기 클러스터(600)로서 구성되더라도, 기업 본사의 클라이언트들 및 서버들로부터의 통신들은 사이트에 배치된 기기(200b)를 향할 수 있고, 로드 밸런싱은 위치에 따라 가중치가 적용되거나, 또는 임의의 레이턴시를 완화하기 위한 유사한 단계들이 취해질 수 있다.
계속해서 도 6을 참조하면, 기기 클러스터(600)는 클라이언트 데이터 평면(602)을 통해 네트워크에 연결될 수 있다. 일부 실시 예들에서, 클라이언트 데이터 평면(602)은 클라이언트들과 기기 클러스터(600) 사이에서 데이터를 운반하는 통신 네트워크, 예를 들어 네트워크(104)로 구성될 수 있다. 일부 실시 예들에서, 클라이언트 데이터 평면(602)은 스위치, 허브, 라우터, 또는 외부 네트워크(104)와 기기 클러스터(600)의 복수의 기기들(200a-200n)을 연결하는 다른 네트워크 장치들로 구성될 수 있다. 예를 들어, 이러한 실시 예들 중 하나에서, 라우터는 외부 네트워크(104)에 연결될 수 있고, 각각의 기기(200a-200n)의 네트워크 인터페이스에 연결될 수 있다. 일부 실시 예들에서, 이러한 라우터 또는 스위치는 인터페이스 관리자 또는 마스터로 지칭될 수 있고, 기기 클러스터(600) 내의 노드들에 걸쳐 트래픽을 고르게 분배하도록 더 구성될 수 있다. 따라서, 많은 실시 예들에서, 인터페이스 마스터는 기기 클러스터(600) 외부의 흐름 분배기로 구성될 수 있다. 다른 실시 예들에서, 인터페이스 마스터는 기기들(200a-200n) 중 하나로 구성될 수 있다. 예를 들어, 제1 기기(200a)는 기기 클러스터(600)에 대한 유입 트래픽을 수신하고 각각의 기기들(200b-200n)에 걸쳐 트래픽을 분배하는 인터페이스 마스터로서 기능할 수 있다. 일부 실시 예들에서, 리턴 트래픽은 인터페이스 마스터로서 기능하는 제1 기기(200a)를 통해 각각의 기기들(200b-200n)로부터 유사하게 흐를 수 있다. 다른 실시 예들에서, 각각의 기기들(200b-200n)로부터의 리턴 트래픽은 네트워크(104, 104')에 직접, 또는 외부 라우터, 스위치 또는 다른 장치를 통해 전송될 수 있다. 일부 실시 예들에서, 인터페이스 마스터로 기능하지 않는 기기 클러스터의 기기들(200)은 인터페이스 슬레이브들(610A-610N)로 지칭될 수 있다.
인터페이스 마스터는 임의의 다양한 방식들로 로드 밸런싱 또는 트래픽 흐름 분배를 수행할 수 있다. 예를 들어, 일부 실시 예들에서, 인터페이스 마스터는 클러스터의 기기들 또는 노드들로 구성된 넥스트홉(nexthop)들을 포함하는 등가 다중 라우팅(equal-cost multi-path routing; ECMP routing)을 수행하는 라우터로 구성될 수 있다. 인터페이스 마스터는 최단 경로 우선 프로토콜(open-shortest path first; OSPF)을 사용할 수 있다. 일부 실시 예들에서, 인터페이스 마스터는 상술한 바와 같이, 트래픽 분배를 위한 상태 비보존형(stateless) 해시 기반 메커니즘, 예를 들어 IP 주소들 또는 다른 패킷 정보 튜플들에 기초한 해시들 사용할 수 있다. 해시 키들 및/또는 솔트(salt)는 노드들에 걸쳐 균일하게 분배되도록 선택될 수 있다. 다른 실시 예들에서, 인터페이스 마스터는 링크 집적(link aggregation; LAG) 프로토콜들, 또는 임의의 다른 유형 또는 형태의 흐름 분배, 로드 밸런싱 및 라우팅을 통해 흐름 분배를 수행할 수 있다.
일부 실시 예들에서, 기기 클러스터(600)는 서버 데이터 평면(604)을 통해 네트워크에 연결될 수 있다. 클라이언트 데이터 평면(602)과 유사하게, 서버 데이터 평면(604)은 통신 네트워크, 예를 들어 서버들과 기기 클러스터(600) 사이에서 데이터를 운반하는 네트워크(104')로 구성될 수 있다. 일부 실시 예들에서, 서버 데이터 평면(604)은 스위치, 허브, 라우터, 또는 외부 네트워크(104')와 기기 클러스터(600)의 복수의 기기들(200a-200n)을 연결하는 다른 네트워크 장치들로 구성될 수 있다. 예를 들어, 이러한 실시 예들 중 하나에서, 라우터는 외부 네트워크(104')에 연결될 수 있고, 각각의 기기(200a-200n)의 네트워크 인터페이스에 연결될 수 있다. 많은 실시 예들에서, 각각의 기기(200a-200n)는 클라이언트 데이터 평면(602)에 연결된 제1 네트워크 인터페이스 및 서버 데이터 평면(604)에 연결된 제2 네트워크 인터페이스를 갖는 다수의 네트워크 인터페이스들로 구성될 수 있다. 이는 추가적인 보안을 제공하고 기기 클러스터(600) 서버를 중개 장치로 사용하여 클라이언트 및 서버 네트워크들의 직접 인터페이스를 방지할 수 있다. 다른 실시 예들에서, 클라이언트 데이터 평면(602) 및 서버 데이터 평면(604)은 병합되거나 결합될 수 있다. 예를 들어, 기기 클러스터(600)는 클라이언트들(102) 및 서버들(106)을 갖는 네트워크 상에 비 중개 노드로서 배치될 수 있다. 상술한 바와 같이, 많은 실시 예들에서, 인터페이스 마스터는 서버 데이터 평면(604) 상에 배치되어, 서버들 및 네트워크(104')로부터 기기 클러스터의 각각의 기기로의 통신들을 라우팅하고 분배할 수 있다. 많은 실시 예들에서, 클라이언트 데이터 평면(602)에 대한 인터페이스 마스터 및 서버 데이터 평면(604)에 대한 인터페이스 마스터는 유사하게 구성되어, 상술한 ECMP 또는 LAG 프로토콜들을 수행할 수 있다.
일부 실시 예들에서, 기기 클러스터(600)의 각각의 기기(200a-200n)는 내부 통신 네트워크 또는 백 플레인(back plane)(606)을 통해 연결될 수 있다. 백 플레인(606)은 노드 간 또는 기기 간 제어 및 구성 메시지들, 및 트래픽의 노드 간 전달을 위한 통신 네트워크로 구성될 수 있다. 예를 들어, 제1 기기(200a)가 네트워크(104)를 통해 클라이언트와 통신하고, 제2 기기(200b)가 네트워크(104')를 통해 서버와 통신하는 일 실시 예에서, 클라이언트와 서버 간의 통신들은 클라이언트로부터 제1 기기로, 백 플레인(606)을 통해 제1 기기로부터 제2 기기로, 및 제2 기기로부터 서버로, 및 그 반대의 흐름일 수 있다. 다른 실시 예들에서, 백 플레인(606)은 구성 메시지들, 예를 들어 인터페이스 일시 정지 또는 리셋 명령들; 정책 업데이터들, 예를 들어 필터링 또는 압축 정책들; 상태 메시지들, 예를 들어 버퍼 상황, 처리량(throughput), 또는 에러 메시지들; 또는 임의의 다른 유형 또는 형태의 노드 간 통신을 운반할 수 있다. 일부 실시 예들에서, RSS 키들 또는 해시 키들은 클러스터 내의 모든 노드들에 의해 공유될 수 있고, 백 플레인(606)을 통해 통신될 수 있다. 예를 들어, 제1 노드 또는 마스터 노드는 예를 들어 시작 또는 부팅 시에, RSS 키를 선택할 수 있고, 다른 노드들에서 사용할 수 있도록 배포할 수 있다. 일부 실시 예들에서, 백 플레인(606)은 각각의 기기(200)의 네트워크 인터페이스들 간의 네트워크로 구성될 수 있고, 라우터, 스위치, 또는 다른 네트워크 장치(도시되지 않음)로 구성될 수 있다. 따라서, 일부 실시 예들에서 및 상술한 바와 같이, 클라이언트 데이터 평면(602)에 대한 라우터는 기기 클러스터(600) 및 네트워크(104) 사이에 배치될 수 있고, 서버 데이터 평면(604)에 대한 라우터는 기기 클러스터(600) 및 네트워크(104') 사이에 배치될 수 있으며, 백 플레인(606)을 위한 라우터는 기기 클러스터(600)의 일부로서 배치될 수 있다. 각각의 라우터는 각각의 기기(200)의 상이한 네트워크 인터페이스에 연결될 수 있다. 다른 실시 예들에서, 하나 이상의 평면들(602-606)이 결합되거나, 또는 라우터 또는 스위치가 다수의 LAN들 또는 VLAN들로 분할되어 기기들(200a-200n)의 상이한 인터페이스들에 연결되고 다수의 라우팅 기능들을 동시에 제공하여, 복잡성을 감소시키거나 시스템으로부터의 여분의 장치들을 제거할 수 있다.
일부 실시 예들에서, 제어 평면(도시되지 않음)은 관리자 또는 사용자로부터 기기 클러스터(600)로 구성 및 제어 트래픽을 통신할 수 있다. 일부 실시 예들에서, 제어 평면은 제4 물리적 네트워크일 수 있고, 다른 실시 예들에서, 제어 평면은 VPN, 터널, 또는 평면들(602-606) 중 하나를 통한 통신으로 구성될 수 있다. 따라서, 제어 평면은, 일부 실시 예들에서, 가상 통신 평면으로 간주될 수 있다 다른 실시 예들에서, 관리자는 별도의 인터페이스, 예를 들어 직렬 통신 인터페이스, 예를 들어 RS-232; USB 통신 인터페이스; 또는 다른 유형 및 형태의 통신을 통해 구성 및 제어를 제공할 수 있다. 일부 실시 예들에서, 기기(200)는 관리자를 위한 인터페이스, 예를 들어 버튼들 및 디스플레이를 갖는 전면 패널; 네트워크(104, 104') 또는 백 플레인(606)을 통한 구성을 위한 웹 서버; 또는 임의의 다른 유형 및 형태의 인터페이스로 구성될 수 있다.
일부 실시 예들에서, 상술한 바와 같이, 기기 클러스터(600)는 내부 흐름 분배를 포함할 수 있다. 예를 들어, 이는 노드들이 외부 장치들에 투명하게 접속(join)/해제(leave)되도록 허용할 수 있다. 외부 흐름 분배기가 이러한 변경에 대해 반복적으로 재구성될 필요가 없게 하기 위해, 노드 또는 기기는 클러스터(600) 내의 정확한 노드로 네트워크 패킷들을 조정하기 위한 인터페이스 마스터 또는 분배기로서 동작할 수 있다. 예를 들어, 일부 실시 예들에서, 노드가 클러스터로부터 해제될 때(예를 들어, 실패, 리셋 또는 유사한 경우들), 외부 ECMP 라우터는 노드들에서의 변화를 식별할 수 있고, 모든 흐름들을 다시 해싱하여 트래픽을 재분배할 수 있다. 이로 인해 모든 연결들이 끊어지고 재설정될 수 있다. 노드가 다시 결합될 때 동일한 끊김 및 리셋이 발생할 수 있다. 일부 실시 예들에서, 신뢰성을 위해, 기기 클러스터(600) 내의 2개의 기기들 또는 노드들은 연결 미러링을 통해 외부 라우터들로부터 통신들을 수신할 수 있다.
많은 실시 예들에서, 기기 클러스터(600)의 노드들 사이의 흐름 분배는 기기의 코어들 사이의 흐름 분배에 대한 상술한 임의의 방법들을 사용할 수 있다. 예를 들어, 일 실시 예에서, 마스터 기기, 마스터 노드, 또는 인터페이스 마스터는, RSS 해시, 예를 들어 유입되는 트래픽에 대한 토플리츠 해시를 계산하고 해시에 대한 선호도 목록 또는 분배 테이블을 참조할 수 있다. 많은 실시 예들에서, 흐름 분배기는 트래픽을 포워딩할 때 수신 기기에 해시를 제공할 수 있다. 이는 노드가 코어로드 흐름 분배를 위해 해시를 재계산할 필요를 제거할 수 있다. 이러한 많은 실시 예들에서, 기기들 사이의 분배를 위한 해시들을 계산하기 위해 사용되는 RSS 키는 공용 RSS 키라고 지칭될 수 있는, 코어들 사이의 분배를 위한 해시들을 계산하는 데 사용되는 것과 동일한 키로 구성될 수 있으며, 이는 계산된 해시의 재사용을 허용할 수 있다. 일부 실시 예들에서, 해시는 포트 번호들, IP 주소들을 포함하는 인터넷 계층 헤더들을 포함하는 전송 계층 헤더들의 입력 튜플들; 또는 임의의 다른 패킷 헤더 정보들로 계산될 수 있다. 일부 실시 예들에서, 패킷 바디 정보가 해시를 위해 사용될 수 있다. 예를 들어, 하나의 프로토콜의 트래픽이 다른 프로토콜의 트래픽 내에 캡슐화되는 실시 예, 예를 들어 무손실 TCP 헤더를 통해 캡슐화된 손실 UDP 트래픽에서, 흐름 분배기는 캡슐화 프로토콜(예를 들어, TCP 헤더들)보다는 캡슐화된 프로토콜(예를 들어, UDP 헤더들)의 헤더들을 기초로 해시를 계산할 수 있다. 유사하게, 패킷들이 캡슐화되고 암호화되거나 압축되는 일부 실시 예들에서, 흐름 분배기는 복호화 또는 압축 해제 후에 페이로드 패킷의 헤더들을 기초로 해시를 계산할 수 있다. 또 다른 실시 예들에서, 노드들은 예를 들어 구성 또는 관리 목적들을 위해 내부 IP 주소들을 가질 수 있다. 이러한 IP 주소들로의 트래픽은 해시 및 분산될 필요는 없지만, 목적지 주소들을 소유한 노드로 전달될 수 있다. 예를 들어, 기기는 IP 주소 1.2.3.4에서 구성 또는 관리 목적들을 위해 실행 중인 웹 서버 또는 다른 서버를 가질 수 있으며, 일부 실시 예들에서 이러한 주소를 그의 내부 IP 주소로 흐름 분배기에 등록할 수 있다. 다른 실시 예들에서, 흐름 분배기는 내부 IP 주소를 기기 클러스터(600) 내의 각 노드에 할당할 수 있다. 외부 클라이언트들 또는 서버들, 예를 들어 관리자가 사용하는 워크 스테이션으로부터 도착한, 기기의 내부 IP 주소(1.2.3.4)를 향하는 트래픽은 해시를 요구하지 않고 직접 전달될 수 있다.
G. 다중 네트워크 패킷 스케줄러들을 동기화하기 위한 시스템들 및 방법들
이전 섹션들에서 설명한 바와 같이, nCore 기술 및 아키텍처의 다수의 코어들은 다수의 패킷 엔진들을 동시에 및/또는 병렬로 실행할 수 있게 한다. 하나 이상의 프로세서 코어들에 걸친 작업, 태스크, 부하 또는 네트워크 트래픽 분산은 병렬 처리 또는 병렬 컴퓨팅 방식의 유형, 예를 들어 기능적 병렬 처리, 데이터 병렬 처리 또는 흐름 기반 데이터 병렬 처리에 따라 수행될 수 있다. 네트워크 패킷 스케줄러들은 패킷들의 분산을 관리하기 위해 사용될 수 있다. 네트워크 패킷 스케줄러들은 종종 더미(heap)/스택 동작들을 사용하여 네트워크 트래픽의 우선 순위를 결정하기 위해 구현되기 때문에, 단일 스케줄러가 관리해야 하는 패킷들의 수를 감소시키면 더미/스택의 크기가 감소되고, CPU 집약이 감소된다. 다수의 네트워크 패킷 스케줄러들을 사용하여 동일한 수의 패킷들을 관리하면 더미들/스택들이 작아지고, 따라서 CPU 사용량이 감소한다. 그러나 이는 다중 네트워크 패킷 스케줄러들이 동기화되도록 보장할 필요성을 야기한다.
패킷 스케줄러들의 동기화는 실제 패킷을 수신하는 스케줄러에 의해 다른 스케줄러들에 제공되는 브로드캐스트 가상 패킷들의 사용을 통해 구현될 수 있다. 각각의 스케줄러는 패킷을 큐에 추가한다(예를 들어, 실제 패킷을 수신하는 스케줄러는 실제 패킷을 큐에 추가하고, 각각의 다른 스케줄러는 가상 패킷을 대응하는 큐에 추가한다). 각각의 스케줄러의 큐는 실제 패킷이 출력 버퍼 또는 네트워크 인터페이스에 제공되고, 가상 패킷들이 폐기됨으로써 동기화를 진행할 수 있다. 따라서 충돌 및 혼잡을 회피하면서, 임의의 시간에 하나의 "실제" 패킷만 동기화된 큐들로부터 출력된다.
도 7a를 참조하면, 일 실시 예에 따라 가상 패킷들을 수신하기 위한 방법(700)의 흐름도가 도시된다. 일부 실시 예들에서, 방법(700)은 단계 702에서 패킷을 수신하는 단계 및 단계 704에서 패킷이 가상 패킷인지 또는 네트워크 패킷인지를 결정하는 단계를 포함한다. 패킷이 가상 패킷인 경우(단계 704, 가상), 일부 실시 예들에서, 방법(700)은 단계 706에서 가상 패킷을 가상 연결로 전송하는 단계 및 단계 708에서 가상 패킷을 큐잉하는 단계를 포함한다. 패킷이 네트워크 패킷인 경우(단계 704, 네트워크), 일부 실시 예들에서, 방법(700)은 단계 710에서 네트워크 패킷을 큐잉하는 단계를 포함한다. 일부 실시 예들에서, 방법(700)은 단계 712에서 가상 패킷 또는 네트워크 패킷을 송신을 위한 버퍼 내에 다음 패킷으로 스케줄링하는 단계, 및 단계 714에서 다음 패킷이 가상 패킷인지 또는 네트워크 패킷인지를 결정하는 단계를 포함한다. 다음 패킷이 가상 패킷인 경우(단계 714, 가상), 일부 실시 예들에서, 방법(700)은 단계 716에서 가상 패킷을 폐기하는 단계를 포함한다. 다음 패킷이 네트워크 패킷인 경우(단계 714, 네트워크), 일부 실시 예들에서, 방법(700)은 단계 718에서 네트워크 패킷을 전송하는 단계를 포함한다. 일부 실시 예들에서, 방법(700)은 단계 720에서 패킷들이 더 존재하는지를 결정하는 단계 및 패킷들이 더 존재하는 것으로 결정한 것에 응답하여 단계 712에서의 다음 패킷 스케줄링으로 회귀하고, 패킷들이 더 존재하지 않는 것으로 결정한 것에 응답하여 단계 722에서 종료하는 단계를 포함한다.
단계 702에서 패킷을 수신하는 단계는, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러에 의해, 하나 이상의 다른 네트워크 패킷 스케줄러들로부터, 복수의 트래픽 클래스들의 각각의 트래픽 클래스에 대한 가상 패킷을 수신하는 단계 - 복수의 트래픽 클래스들은 네트워크 패킷들의 상대적인 전송 우선 순위를 정의하고 상기 하나 이상의 다른 네트워크 패킷 스케줄러들에 의해 수신된 네트워크 패킷들에 대응함 - , 또는 제1 네트워크 패킷 스케줄러에 의해, 복수의 트래픽 클래스들의 제1 트래픽 클래스에 대한 네트워크 패킷을 수신하는 단계를 포함할 수 있다. 예를 들어, 하나의 구현에서, 2개의 트래픽 클래스들(예를 들어, C1, C2) 및 3개의 네트워크 패킷 스케줄러들(예를 들어, S1, S2, S3)이 존재하는 경우, 스케줄러 S1은 스케줄러 S2 및 S3가 각각의 클래스에 대한 네트워크 패킷을 수신한 것에 응답하여, 스케줄러 S2 및 스케줄러 S3의 각각으로부터 클래스 C1에 대한 가상 패킷을 수신하고, 스케줄러들 S2 및 S3의 각각으로부터 클래스 C2에 대한 가상 패킷을 수신하여, 총 4개의 가상 패킷들(예를 들어, C1-S2, C1-S3, C2-S2, C2-S3)을 수신할 것이다. 스케줄러들S2 및 S3는 유사하게 S1(예를 들어, C1-S1, C2-S1)뿐만 아니라 다른 스케줄러(예를 들어, C1-S3, C2-S3; 또는 C1-S2, C2-S2)로부터 가상 패킷들을 수신할 것이다. 가상 패킷들은 다수의 네트워크 패킷 스케줄러들을 동기화하여 각각의 네트워크 패킷 스케줄러에 각각의 다른 네트워크 패킷 스케줄러가 처리하는 네트워크 패킷들의 수의 카운트) 또는 총계(tally)를 제공하기 위해 사용된다. 이는 네트워크 패킷들의 트래픽 클래스들이 상이한 경우에 특히 중요하다. 일부 네트워크 패킷들은 높은 전송 우선 순위를 갖기 때문에, 얼마나 많은 네트워크 패킷들이 어떤 우선 순위를 가지고 있는지 아는 것은 패킷들이 우선 순위에 따라 전송되는 것을 보장할 수 있게 한다. 일부 실시 예들에서, 가상 패킷을 수신하는 단계는, 제1 네트워크 패킷 스케줄러에 의해, 각각의 다른 네트워크 패킷 스케줄러로부터, 트래픽 클래스의 각각의 쌍에 대한 가상 패킷을 수신하는 단계 - 트래픽 클래스는 트래픽 클래스의 전송들에 대한 절대 대역폭 제한 및 트래픽 클래스에 대한 절대 대역폭 제한을 전송하는 네트워크 링크를 더 정의함 - 를 더 포함한다. 즉, 각각의 가상 패킷은 병목 링크 트래픽 클래스 쌍을 나타낸다.
단계 704에서 패킷이 가상 패킷인지 또는 네트워크 패킷인지를 결정하는 단계는, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러에 의해, 수신된 패킷이 가상 패킷인지 또는 네트워크 패킷인지를 결정하는 단계를 포함한다. 가상 패킷들은 네트워크 패킷 스케줄러들을 동기화하기 위해 사용되고 실제 전송을 위한 것이 아니기 때문에, 가상 패킷들은 전송을 위한 네트워크 패킷들과 구별된다. 또한, 가상 패킷들은 프로세스 또는 애플리케이션이 아닌, 다른 네트워크 패킷 스케줄러들로부터 송신되기 때문에, 가상 패킷들은 다르게 처리된다.
패킷이 가상 패킷인 것으로 결정한 것에 응답하여, 단계 706에서 패킷은 가상 연결로 전송 또는 제공될 수 있고, 일부 실시 예들에서, 이는 제1 네트워크 패킷 스케줄러에 의해, 각각의 가상 패킷을 각각의 트래픽 클래스에 대해 생성된 복수의 가상 연결들의 임의의 가상 연결로 전송하는 단계를 포함한다. 가상 패킷들이 다른 네트워크 패킷 스케줄러들로부터 수신되면, 연결들은 가상 패킷들을 배치하기 위해 설립되어야 한다. 일부 실시 예들에서, 이러한 연결들은 가상이고, 상이한 트래픽 클래스들의 수신된 가상 패킷들은 상이한 트래픽 클래스들 각각에 대한 대응하는 가상 연결들로 전송된다. 예를 들어, 스케줄러 S1은 C1 및 C2의 가상 패킷들을 수신하기 위한 가상 연결 VC1 및 VC2를 각각 생성할 것이다.
단계 708에서 가상 패킷을 큐잉하는 단계 및 단계 710에서 네트워크 패킷을 큐잉하는 단계는, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러에 의해, 가상 패킷 또는 네트워크 패킷을 복수의 트래픽 클래스들에 대응하는 복수의 큐들 중 제1 큐에 큐잉하는 단계를 각각 포함할 수 있다. 일부 실시 예들에서, 단계 708에서 가상 패킷을 큐잉하는 단계는, 제1 네트워크 패킷 스케줄러에 의해, 큐 내의 네트워크 패킷들의 수 및 큐의 최대 크기를 초과하는 제1 트래픽 클래스의 가상 패킷들의 수의 합에 응답하여, 제1 트래픽 클래스에 대한 각각의 가상 패킷을 제1 큐로 큐잉하는 단계를 포함할 수 있다. 예를 들어, 스케줄러 S1은 트래픽 클래스들 C1 및 C2의 큐잉된 패킷들에 대한 큐들 Q1 및 Q2를 각각 가질 수 있다. 최대 큐 크기에 도달했을 때, 가상 패킷은 여전히 큐잉되어 있다. 예를 들어, 스케줄러 S1이 가상 패킷들 C1-S2, C1-S3, 및 C1의 네트워크 패킷을 수신하여, 총 3개의 클래스 C1의 패킷들을 함께 만든다고 가정한다. 큐 Q1의 크기가 3이고, 큐에 이미 하나의 네트워크 패킷이 존재하며, 2개의 추가 패킷들을 위한 영역이 남아있다고 가정한다. 스케줄러 S1은 큐 Q1에 C1의 새로운 네트워크 패킷을 저장할 수 있고, 하나의 추가 패킷을 위한 영역을 남길 수 있다. 그러나 2개의 남은 패킷들이 가상이기 때문에, 이들은 모두 큐잉된다. 가상 패킷들은 기본적으로 작은 자리 표시자들(placeholders)이고, 중요한 처리 시간 또는 임의의 전송 시간을 요구하지 않으므로, 이러한 문제에서 큐의 오버플로잉은 스케줄러의 동작들에 불리한 영향을 미치지 않는다.
단계 712에서 다음 패킷을 스케줄링하는 단계는, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러에 의해, 네트워크 패킷 또는 가상 패킷을 전송을 위한 버퍼 내에 다음 패킷으로 스케줄링하는 단계를 포함할 수 있다. 다양한 스케줄링 알고리즘들, 예를 들어 라운드 로빈 알고리즘, 가중치 라운드 로빈(weighted round robin), FIFO, 최단 잔여 시간 알고리즘, 또는 임의의 다른 유형 및 형태의 스케줄링 알고리즘이 복수의 패킷들 중에서 어느 패킷이 다음에 전송되는지를 결정하기 위해 사용될 수 있다. 단일 큐의 경우, 송신을 위한 다음 패킷이 큐 내의 다음 패킷이므로 스케줄링이 용이하다. 그러나 다수의 큐들이 존재하는 경우, 큐들의 앞쪽들 또는 아래쪽들에서 패킷들의 어느 것이 전송을 위한 다음 패킷이 되어야 하는지에 대한 선택이 이루어져야 한다. 예를 들어, 스케줄러 S1이 2개의 큐들 Q1 및 Q2를 갖고, 각각의 큐 내에 패킷들을 가지면, 전송을 위한 다음 패킷의 스케줄링은, 구현된 알고리즘에 따라, 큐 Q1의 앞쪽에 있는 패킷 또는 큐 Q2의 앞쪽에 있는 패킷 중 하나를 선택할 수 있다. 예를 들어, 가중치 페어 큐잉 구현에서, 다음 패킷의 스케줄링은 다음 패킷 전송을 위한 기준에 알맞는 패킷을 스케줄링할 것이다. 이러한 스케줄링은 패킷의 유형과 독립적이다; 다음 패킷의 스케줄링은 앞쪽에 있는 패킷이 가상 패킷인지 또는 네트워크 패킷인지를 상관하지 않는다.
단계 714에서, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러는 버퍼 내의 다음 패킷이 가상 패킷인지 또는 네트워크 패킷인지를 결정할 수 있다. 가상 패킷들은 네트워크 패킷 스케줄러들을 동기화하기 위해 사용되고 실제 전송을 위한 것이 아니기 때문에, 가상 패킷들은 전송을 위한 네트워크 패킷들과 구별된다. 그러나, 그럼에도 불구하고, 단계 712에서 다음 패킷의 스케줄링은 일부 구현들에 따라 가상 패킷들을 스케줄링하며, 따라서 다음 스케줄링 된 패킷이 가상 패킷인지 또는 네트워크 패킷인지에 대한 결정이 이루어진다.
단계 716에서, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러는 버퍼 내의 다음 패킷이 가상 패킷인 것으로 결정할 수 있고, 버퍼 내의 다음 패킷이 가상 패킷이라는 결정에 응답하여, 제1 네트워크 패킷 스케줄러에 의해, 가상 패킷을 폐기할 수 있다. 가상 패킷은 이러한 구현들에서 오로지 동기화 목적들을 위해 사용되기 때문에, 폐기될 수 있다. 가상 패킷은 스케줄링 알고리즘에 따라 스케줄링 되었기 때문에, 우선 순위가 낮은 트래픽 클래스의 네트워크 패킷 전에 다음 패킷으로 스케줄링 되었을 수도 있다. 예를 들어, 스케줄러 S1이 클래스 C2의 네트워크 패킷(P-C2)을 수신하고, 스케줄러 S2가 클래스 C1의 네트워크 패킷(P-C1)을 수신하며, 트래픽 클래스 C1이 클래스 C2보다 높은 우선 순위를 갖는다고 가정한다. 스케줄러 S1은, 스케줄러 S2가 P-C1을 갖는다는 것을 나타내기 위해 스케줄러 S2로부터 가상 패킷 C1-S2를 수신하고, 스케줄러 S2는, 스케줄러 S1이 네트워크 패킷 P-C2를 갖는다는 것을 나타내기 위해 스케줄러 S1으로부터 가상 패킷 C2-S1을 수신한다. 단계 712에서 다음 패킷을 스케줄링 하는 동안, 가상 패킷 C1-S2, 네트워크 패킷 P-C2, 가상 패킷 C2-S1 및 네트워크 패킷 P-C1이 그들 각각의 큐들 내의 유일한 패킷들이라고 가정하면, 가상 패킷 C1-S2는 스케줄러 S1에 대한 다음 패킷으로 스케줄링 될 것이고, 네트워크 패킷 P-C1은 스케줄러 S2에 대한 다음 패킷으로 스케줄링 될 것이다. 단계 714에서, 스케줄러 S1은 다음 패킷이 가상 패킷 C1-S2인 것으로 결정하고, 가상 패킷 C1-S2을 폐기하여 어떠한 데이터도 전송하지 않을 수 있다. 동시에, 스케줄러 S2는 다음 패킷이 네트워크 패킷 P-C1인 것으로 결정하고, 스케줄러 S1의 전송들로부터 어떠한 충돌 가능성도 없이 네트워크 패킷 P-C1을 전송한다.
단계 718에서, 일부 실시 예들에서, 제 1 네트워크 패킷 스케줄러는 버퍼 내의 다음 패킷이 네트워크 패킷인 것으로 결정할 수 있고, 다음 패킷이 네트워크 패킷인 것으로 결정한 것에 응답하여, 제 1 네트워크 패킷 스케줄러에 의해, 버퍼로부터 네트워크 패킷을 버퍼로부터 전송할 수 있다. 네트워크 패킷은 스케줄링 알고리즘에 따라 스케줄링 되었기 때문에, 우선 순위가 낮은 트래픽 클래스에 대한 가상 패킷 전에 다음 패킷으로 스케줄링 되어야 한다. 예를 들어, 스케줄러 S1이 클래스 C1의 네트워크 패킷(예를 들어, 네트워크 패킷 P-C1)을 수신하고, 스케줄러 S2가 클래스 C2의 네트워크 패킷(예를 들어, 네트워크 패킷 P-C2)를 수신하며, 트래픽 클래스 C1이 클래스 C2보다 높은 우선 순위를 갖는다고 가정한다. 스케줄러 S1은, 스케줄러 S2가 네트워크 패킷 P-C2를 갖는다는 것을 나타내기 위해 스케줄러 S2로부터 가상 패킷 C2-S2를 수신하고, 스케줄러 S2는, 스케줄러 S1이 네트워크 패킷 P-C1을 갖는다는 것을 나타내기 위해 스케줄러 S1으로부터 가상 패킷 C1-S1을 수신한다. 단계 712에서 다음 패킷을 스케줄링 하는 동안, 가상 패킷 C1-S1, 네트워크 패킷 P-C1, 가상 패킷 C2-S2 및 네트워크 패킷 P-C2가 그들 각각의 큐들 내의 유일한 패킷들이라고 가정하면, 네트워크 패킷 P-C1은 스케줄러 S1에 대한 다음 패킷으로 스케줄링 될 것이고, 가상 패킷 C1-S1은 스케줄러 S2에 대한 다음 패킷으로 스케줄링 될 것이다. 단계 714가 수행될 때, 스케줄러 S1은 다음 패킷이 네트워크 패킷 P-C1인 것으로 결정하고, 네트워크 패킷 P-C1을 전송할 수 있다. 동시에, 스케줄러 S2는 다음 패킷이 가상 패킷 C1-S1인 것으로 결정하고, 가상 패킷 C1-S1을 폐기하여 어떠한 데이터도 전송하지 않을 수 있다.
단계 720에서, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러는 큐들 내에 남아있는 추가 패킷들이 존재하는지 결정할 수 있다. 큐들에 남아있는 패킷들이 여전히 존재하면, 단계 712에서, 다음 패킷이 스케줄링 될 수 있다. 패킷들이 더 이상 존재하지 않으면, 단계 702에서 패킷이 다시 수신될 때까지 방법(700)은 종료된다.
도 7b를 참조하면, 일 실시 예에 따라, 가상 패킷들을 브로드캐스팅하기 위한 방법(730)의 흐름도가 도시된다. 가상 패킷들을 브로드캐스팅하는 제1 네트워크 패킷 스케줄러는 네트워크 패킷 스케줄러가 전송할 네트워크 패킷들을 갖는지를 다른 네트워크 패킷 스케줄러들이 알 수 있게 하여, 네트워크 패킷 전송의 동기화를 허용한다. 일부 실시 예들에서, 방법 730은 단계 732에서 네트워크 패킷들을 큐잉하는 단계, 단계 734에서 노드를 선택하는 단계, 단계 736에서 노드에 대한 바이트 카운트를 결정하는 단계 및 단계 738에서 노드에 대한 바이트 카운트가 논제로(non-zero)인지를 결정하는 단계를 포함한다. 노드에 대한 바이트 카운트가 논제로가 아닌 경우 - 예를 들어, 바이트 카운트가 0인 경우 - 방법(730)은 단계 734에서 노드를 선택하기 위해 귀환하는 단계를 포함한다. 노드에 대한 바이트 카운트가 논제로인 경우, 방법(730)은 가상 패킷을 생성하는 단계(740), 가상 패킷을 브로드캐스팅하는 단계(742), 및 단계 734로 복귀하는 단계를 포함한다.
단계 732에서, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러는 각각의 트래픽 클래스에 대한 복수의 노드들에서 상이한 트래픽 클래스들의 유입 네트워크 패킷들을 큐잉할 수 있다. 네트워크 패킷 스케줄러는 네트워크 패킷들의 스케줄링 및 전송을 수행할 수 있다. 예를 들어, 3개의 네트워크 패킷들, 즉 클래스들 C1, C2 및 C3 각각에 대한 하나의 패킷(예를 들어, 네트워크 패킷들 P-C1, P-C2, P-C3)에 대해, 단계 732는 노드 N1에서 네트워크 패킷 P-C1을, 노드 N2에서 네트워크 패킷 P-C2를, 및 노드 N3에서 네트워크 패킷 P-C3를 큐잉하는 단계를 포함할 수 있다. 트래픽 클래스들, 및 그에 따라 노드들은, 다양한 파라미터들, 예를 들어, 포트, 인터페이스, 또는 시작 프로그램, 또는 임의의 다른 파라미터들에 기초하여 분산되거나 선택될 수 있다.
단계 734에서, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러는 각각의 트래픽 클래스에 대한 복수의 노드들 중 제 1 노드를 선택할 수 있다. 일부 실시 예들에서, 단계 734는, 제1 네트워크 패킷 스케줄러에 의해, 제1 네트워크 스케줄러가 임의의 트래픽 클래스 계층 구조들을 지원하는 것에 응답하여, 최하위 트래픽 클래스에 대응하는 노드를 선택하는 단계 - 트래픽 클래스는 트래픽 클래스의 전송들에 대한 절대 대역폭 제한을 더 정의함 - 를 포함할 수 있다. 예를 들어, 계층 구조는 IP 주소들, 프로토콜들 및 애플리케이션 유형들의 조합에 기초할 수 있다. 예를 들어, 트래픽 클래스 계층 구조는 트래픽 클래스들 C1, C1.1, C1.2, C2, C2.1, C2.2를 가질 수 있으며, 여기서 클래스들 C1.1 및 C1.2는 C1의 서브 클래스들이고, 클래스들 C2.1및 2.2는 C2의 서브 클래스들이다. 노드들 N1.1, N1.2, N2.1 및 N2.2는 최하위 트래픽 클래스들 C1.1, C1.2, C2.1, C2.2에 대응하는 노드들일 수 있으며, 노드들 N1 및 N2는 내부 노드들이다. 이러한 구현에서, 최하위 트래픽 클래스들에 대응하는 노드들(예를 들어, N1.1, N1.2, N2.1 및 N2.2)에서 큐잉이 발생할 수 있으며, 단계 734에서, 제1 노드, 예를 들어, 노드 N1.1이 선택될 수 있다.
단계 736에서, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러는 제 1 노드가 복수의 트래픽 클래스들의 제1 트래픽 클래스의 수신된 네트워크 패킷들의 전체 크기의 논제로 바이트 카운트를 갖는 것으로 결정할 수 있다. 예를 들어, 스케줄러 S1이 크기 1의 네트워크 패킷 P-C1, 크기 2의 네트워크 패킷 P-C1 및 크기 3의 네트워크 패킷 P-C1을 수신한다고 가정한다(크기들은 바이트, 킬로바이트, 블록, 최대 전송 단위, 또는 다른 단위들일 수 있으며, 특정 단위를 참조하지 않고 일반적인 설명을 위해 본 명세서에 사용된다). 수신된 네트워크 패킷들의 전체 크기가 6(1 + 2 + 3 = 6)이기 때문에, 단계 736에서, 스케줄러는 노드 N1에 대해 논제로 바이트 카운트를 식별할 수 있다. 노드들이 트래픽 클래스들에 대응하기 때문에, 노드 N1에 대한 바이트 카운트를 결정할 때, 제1 트래픽 클래스의 네트워크 패킷들만이 고려된다. 일부 실시 예들에서, 단계 736는, 제1 네트워크 패킷 스케줄러에 의해, 제1 네트워크 패킷 스케줄러가 임의의 트래픽 클래스 계층 구조들을 지원하는 것에 응답하여, 최하위 트래픽 클래스에 대응하는 노드가 최하위 트래픽 클래스의 수신된 네트워크 패킷들의 전체 크기의 논제로 바이트 카운트를 갖는 것으로 결정하는 단계를 더 포함한다.
단계 738에서, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러는 단계 736에서 결정된 바이트 카운트가 논제로인지 또는 아닌지를 결정할 수 있다. 바이트 카운트가 논제로인 경우, 방법(730)은 단계 740에서 가상 패킷을 생성하도록 진행할 수 있다. 바이트 카운트가 논제로가 아닌 경우 - 예를 들어, 바이트 카운트가 0인 경우 - 방법(730)은 단계 734로 회귀하여 복수의 노드들 중 다음 노드를 선택할 수 있다. 예를 들어, 노드 N1이 네트워크 패킷들을 갖지 않으면, 단계 736에서, 스케줄러는 N1에 대한 바이트 카운트를 0으로 결정하고, 단계 734로 회귀할 수 있다(예를 들어, 다음 노드 N2, 및 클래스 C2의 네트워크 패킷들의 전체 크기의 노드에 대한 바이트 카운트를 결정한다).
단계 740에서, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러는 제1 트래픽 클래스에 대한 가상 패킷을 생성할 수 있고, 가상 패킷은 제1 트래픽 클래스에 대한 가상 패킷의 마지막 브로드캐스팅으로부터 또는 제1 노드의 마지막 결정(단계 734)으로부터 임의의 주기 동안 큐잉된 제1 트래픽 클래스의 유입 네트워크 패킷들의 바이트 수의 식별자를 포함한다. 예를 들어, 시간 T1에서, 제1 네트워크 패킷 스케줄러 S1은 크기 1 킬로바이트의 하나의 네트워크 패킷 P1-C1을 가질 수 있고, 1 킬로바이트의 식별자를 갖는 트래픽 클래스 C1에 대한 가상 패킷을 브로드캐스팅한다(이러한 식별자는 그것이 나타내는 데이터의 1 킬로바이트보다 상당히 작을 수 있고, 예를 들어 10비트 숫자일 수 있다). T1 이후의 시간 T2에서, 스케줄러 S1은 크기 2 킬로바이트의 하나의 네트워크 패킷 P2-C1을 큐잉할 수 있다. 단계 740에서, 가상 패킷이 제1 트래픽 클래스에 대해 생성될 수 있고, 가상 패킷은 2 킬로바이트의 식별자(예를 들어, 11비트 숫자)로 구성되어 마지막 브로드캐스팅 이후에 큐잉된 클래스 C1의 유입 네트워크 패킷들의 바이트 수(예를 들어, 네트워크 패킷 P2-C1의 크기)를 나타낼 수 있다. 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러는, 제1 네트워크 패킷 스케줄러가 임의의 트래픽 클래스 계층 구조들을 지원하는 것에 응답하여, 최하위 트래픽 클래스에 대한 가상 패킷을 생성할 수 있고, 가상 패킷은 최하위 트래픽 클래스에 대한 가상 패킷의 마지막 브로드캐스팅으로부터 또는 최하위 트래픽 클래스에 대응하는 노드의 마지막 결정으로부터 임의의 주기 동안 큐잉된 최하위 트래픽 클래스의 유입 네트워크 패킷들의 바이트 수의 식별자를 포함한다.
단계 742에서, 일부 실시 예들에서, 제1 네트워크 패킷 스케줄러는 제 1 노드가 논제로 바이트 카운트를 갖는 것으로 결정한 것에 응답하여, 제1 트래픽 클래스에 대한 가상 패킷을 복수의 네트워크 패킷 스케줄러들의 각각의 다른 네트워크 패킷 스케줄러들로 브로드캐스팅할 수 있다. 예를 들어, 이전의 예에 계속해서, 제1 네트워크 패킷 스케줄러는 2 킬로바이트의 식별자(예를 들어, 11 비트 값)를 갖는 클래스 C1에 대한 가상 패킷을 각각의 다른 네트워크 패킷 스케줄러 S2 및 S3에 브로드캐스팅할 수 있다. 방법(734)은 단계 734로 회귀하여 다음 노드를 결정할 수 있다. 예를 들어, 트래픽 클래스 C1에 대한 가상 패킷을 브로드캐스팅한 후에, 단계 734에서 제1 네트워크 패킷 스케줄러는 다음 노드(예를 들어, 노드 N2)를 선택하고, 단계 736에서 노드에 대한 바이트 카운트를 결정할 수 있다.
일부 실시 예들에서, 단계 742에서, 제1 네트워크 패킷 스케줄러는, 제 1 네트워크 패킷 스케줄러에 의해, 마지막 브로드캐스팅으로부터 임의의 주기 동안 제1 트래픽 클래스의 유입 네트워크 패킷을 큐잉한 것에 응답하여, 가상 패킷을 브로드캐스팅할 수 있다. 예를 들어, T2 이후의 시간 T3에서, 제1 네트워크 패킷 스케줄러는 크기 3 킬로바이트의 클래스 C1의 네트워크 패킷, 및 크기 4 킬로바이트의 클래스 C1의 네트워크 패킷을 큐잉할 수 있다. 스케줄러는 단계 734에서 제1 노드 N1을 선택하고; 단계 736에서 노드 N1에 대한 바이트 카운트(예를 들어, 7 킬로바이트)를 결정하고; 단계 738에서 바이트 카운트가 논제로인 것으로 결정하고; 단계 740에서 7 킬로바이트의 식별자를 갖는 클래스 C1에 대한 가상 패킷을 생성할 수 있다. 가상 패킷은 다른 네트워크 패킷 스케줄러들로 브로드캐스팅될 수 있다.
일부 실시 예들에서, 단계 742에서, 제1 네트워크 패킷 스케줄러는, 제1 네트워크 패킷 스케줄러가 임의의 트래픽 클래스 계층 구조들을 지원하는 것에 응답하여, 최하위 트래픽 클래스들에 대한 가상 패킷들을 브로드캐스팅할 수 있다. 예를 들어, 제1 네트워크 패킷 스케줄러는 네트워크 패킷들이 대응하는 노드 N1.1에서 큐잉될 때 트래픽 클래스 C1.1에 대한 가상 패킷을 브로드캐스팅할 수 있다.
이제 도 7c를 참조하면, 상술한 방법들에 따라, 네트워크 패킷 스케줄러 및 네트워크 및 가상 패킷들을 보유하는 큐들의 실시 예의 블록도가 도시된다. 2개의 패킷 엔진들 A-B(548A-548B)가 예시적인 목적들을 위해 도시되지만, 많은 실시 예들에서, 더 많은 패킷 엔진들이 시스템 상에 존재할 수 있고, 각각은 상술한 바와 같이 멀티 코어 기기의 코어에 의해 실행될 수 있다. 이러한 패킷 엔진들 및 코어들은 상술한 바와 같이 공유 메모리 버스(556)를 통해 연결될 수 있고/있거나 공유된 글로벌 캐시(580)를 사용할 수 있다. 다른 구현들에서, 패킷 엔진들(548A 및 548B)은 상술한 바와 같이 멀티 기기 클러스터(600)에서와 같이 상이한 기기들 상에 존재할 수 있다. 이러한 패킷 엔진들은 통신 백 플레인(606)을 통해 통신할 수 있다. 또한, 클러스터 내의 각각의 기기는 복수의 코어들 및 복수의 패킷 엔진들을 포함할 수 있다. 따라서, 도 7c에 도시된 패킷 엔진들(548A-548B)은 동일한 장치 또는 상이한 장치들 상에 존재할 수 있다.
각각의 패킷 엔진(548)은 일반적으로 패킷 스케줄러(750), 스케줄러, 네트워크 스케줄러, 또는 임의의 다른 용어로 지칭되는 패킷 스케줄러(750A-750B)를 실행할 수 있다. 스케줄러(750)는 큐들(752-756) 내에 패킷들을 스케줄링하고, 상술한 바와 같이 가상 패킷들(760)을 생성 및 다른 패킷 엔진들에 브로드캐스팅하기 위한 애플리케이션, 데몬, 서비스, 서버, 루틴, 또는 다른 실행 가능 논리일 수 있다. 패킷 엔진(548)의 일부로서 도시되지만, 많은 구현들에서, 스케줄러(750)는 별도의 프로세스 또는 스레드로서 실행될 수 있다.
각각의 패킷 엔진(548)은 하나 이상의 패킷 큐들(752-756)을 유지할 수 있다. 각각의 큐는 네트워크 인터페이스에 의한 전송을 위해 네트워크 패킷들 및/또는 가상 패킷들을 저장하는FIFO 버퍼 또는 유사한 메모리 스토리지로 구성될 수 있다. 패킷 엔진(548)의 일부로서 도시되지만, 많은 구현들에서, 각각의 큐(752-756)는 장치의 공유 메모리의 일부, 네트워크 인터페이스의 메모리의 일부, 또는 다른 이러한 저장 위치들로 구성될 수 있다. 큐들은 설정되거나 고정된 크기를 갖거나, 가변하는 크기들을 가질 수 있다. 도시된 바와 같이, 다수의 큐들이 상술한 바와 같이 상이한 트래픽 클래스들 또는 유형들에 대해 존재할 수 있다. 각각의 패킷 엔진 상에 3개의 큐들이 도시되지만, 많은 구현들에서 각각의 패킷 엔진은 더 많거나 더 적은 큐들을 가질 수 있다.
상술한 바와 같이, 각각의 큐는 네트워크 패킷들(758A-758C) 및/또는 대응하는 가상 패킷들(760A-760C)을 보유할 수 있다. 일반적으로 네트워크 패킷들(758)로 지칭되는 네트워크 패킷들(758A-758C)은 임의의 크기, 유형, 또는 프로토콜일 수 있고, 이메일(예를 들어, SMTP/TCP/IP), 웹 브라우징(예를 들어, HTTP/TCP/IP), 음성 통신(예를 들어, RTP/UDP/IP) 또는 다른 이와 같은 목적을 위한 패킷들을 포함할 수 있다. 각각의 큐는 대응하는 우선 순위의 패킷들을 저장할 수 있고, 패킷들은 각각의 큐에 대한 우선 순위에 따라 큐들로부터 네트워크 인터페이스로 제공될 수 있다. 예를 들어, 큐 A가 큐 B보다 높은 우선 순위이고, 큐 B가 큐 C보다 높은 우선 순위인 구현에서, 최대 4개의 패킷들이 큐 A로부터, 다음으로 최대 2개의 패킷들이 큐 B로부터, 다음으로 최대 1개의 패킷이 큐 C로부터 전송될 수 있다. 우선 순위 및 트래픽 클래스들에 따라 다른 우선 순위 밸런싱 방법들이 사용될 수 있다.
도시된 바와 같이, 각각의 네트워크 패킷(758A-758C)에 대해, 대응하는 가상 패킷(760A-760C)은 다른 패킷 스케줄러의 큐들에 저장된다. 예를 들어, 네트워크 패킷 A(758A)는 패킷 스케줄러(750A)의 큐 A(752A)에 저장된다. 대응하는 가상 패킷 A(760A)는 패킷 스케줄러(750B)의 큐 A(752B)에 저장된다. 도 7a와 관련하여 상술한 바와 같이, 가상 패킷(760A)은 네트워크 패킷 A(758A)가 수신되면 패킷 스케줄러(750A)에 의해 생성되고, 다른 패킷 엔진들의 큐들에 배치되기 위해 다른 패킷 엔진들로 브로드캐스팅된다.
상술한 바와 같이, 도 7d를 간단히 참조하면, 가상 패킷(760A)의 실시 예의 도면이 도시되어있다. 패킷은 헤더, 예를 들어 TCP/IP 헤더, UDP/IP 헤더 또는 유사한 헤더를 포함할 수 있거나, (가상 패킷들이 어디에도 전송되지 않기 때문에, 오버 헤드를 제거하기 위해) 가상 패킷들에만 사용되는 경량 헤더를 가질 수 있다. 예를 들어, 이러한 구현에서, 헤더는 패킷을 가상 패킷으로서 식별하고, 선택적으로 가상 패킷을 생성하거나 시작한 패킷 스케줄러를 식별하는 문자열일 수 있다. 가상 패킷(760A)은 클래스 또는 타입 식별자를 포함하여, 큐 내에 적절한 배치를 허용할 수 있다. 가상 패킷(760A)은 또한 대응하는 네트워크 패킷(758A)의 크기 또는 길이를 포함할 수 있다. 일부 구현들에서, 크기 또는 길이는 네트워크 패킷의 길이를 식별하는 비트 스트링 또는 필드일 수 있다. 예를 들어, 1MB의 네트워크 패킷이 주어진다면, 가상 패킷은 길이를 10 비트 수로 식별할 수 있다. 다른 구현들에서, 크기 또는 길이는 대응하는 네트워크 패킷의 길이와 동일한 길이의 필드 또는 페이로드일 수 있다. 예를 들어, 1MB의 네트워크 패킷이 주어진다면, 가상 패킷은 1MB의 널(null) 또는 랜덤 데이터의 페이로드를 가질 수 있다. 이는 가상 패킷이 큐 내에 동일한 양의 영역을 "채우도록(fill up)"함으로써 구현될 수 있다. 또 다른 구현에서, 가상 패킷의 페이로드의 길이는 헤더 및 페이로드를 포함하는 네트워크 패킷의 전체 길이로부터 가상 패킷의 헤더의 길이(상술한 바와 같이, 더 짧을 수 있다)를 뺀 것과 동일할 수 있다. 예를 들어, 64 비트 헤더와 500 비트 페이로드를 갖는 네트워크 패킷이 주어진다면, 경량 16 비트 헤더를 갖는 가상 패킷은 548 비트의 '널' 페이로드를 가질 수 있다. 이러한 구현들에서, 각각의 패킷 스케줄러는, 큐잉된 패킷이 네트워크 패킷인지(비트들이 실제로 네트워크 인터페이스에 제공되는 케이스) 또는 가상 패킷인지(비트들이 폐기되는 케이스)에 관계 없이, 동일한 비트 전송률로 그들의 큐로부터 네트워크 인터페이스로 비트들을 "전송"할 수 있다. 따라서, 각각의 스케줄러 및 큐는 동일한 비트 전송률로 동작할 수 있고, 완벽한 동기화가 가능하다. 가상 패킷들이 널 페이로드들이 아닌 길이 식별자들만을 갖는 유사한 구현에서, 스케줄러는 길이 식별자에서 식별된 다수의 비트 전송 주기들을 단순히 대기할 수 있고, 다른 스케줄러는 대응하는 실제 네트워크 패킷을 네트워크 인터페이스로 제공하여, 동기화를 다시 보증한다.
다시 도 7c로 돌아가서, 도시된 바와 같이, 각각의 큐(752A-756B)는 네트워크 패킷 또는 가상 패킷 중 하나를 큐의 임의의 위치에 저장하고, 다른 패킷 엔진은 네트워크 패킷 또는 가상 패킷 중 다른 하나를 동일한 위치에 저장한다. 예를 들어, 네트워크 패킷 A(758A)는 큐 A(752A)의 아래에 있다. 큐 A(752A)에서 그 위에는 가상 패킷 및 다른 네트워크 패킷이 있다(크기가 구별되도록 도시되었지만, 상술한 바와 같이, 몇몇 구현들에서 이들은 동일한 크기일 수 있다). 따라서, 대응하는 가상 패킷 A(760A)는 큐 A(752B)의 아래에 있고, 그 위에는 큐 A(752A)의 가상 패킷 및 네트워크 패킷에 대응하는 네트워크 패킷 및 다른 가상 패킷이 있다. 따라서, 각각의 스케줄러는 그것의 큐로부터 동시에 패킷을 "제공"하되, 하나의 실제 네트워크 패킷만을 네트워크 인터페이스에 제공하여, 충돌 가능성을 회피할 수 있다.
상술한 시스템들은 그 구성 요소들 중 임의의 것 또는 각각의 구성 요소들 중 다수를 제공할 수 있고, 이들 구성 요소들은 독립형 기계 또는, 일부 실시 예들에서, 분산 시스템의 복수의 기계들 상에 제공될 수 있음이 이해되어야 한다. 상술한 시스템들 및 방법들은 소프트웨어, 펌웨어, 하드웨어 또는 이들의 임의의 조합을 생성하기 위한 프로그래밍 및/또는 엔지니어링 기술을 사용하는 방법, 장치 또는 제조물로 구현될 수 있다. 또한, 상술한 시스템들 및 방법들은 하나 이상의 제조 물품 상에 또는 하나 이상의 제조 물품으로 구현된 하나 이상의 컴퓨터 판독 가능 프로그램들로서 제공될 수 있다. 본 명세서에 사용된 "제조 물품"이라는 용어는 하나 이상의 컴퓨터 판독 가능 장치, 펌웨어, 프로그래머블 로직, 메모리 장치들(예를 들어, EEPROM들, ROM들, PROM들, RAM들, SRAM들 등), 하드웨어(예를 들어, 집적 회로 칩, 필드 프로그래머블 게이트 어레이(Field Programmable Gate Array; FPGA), 주문형 반도체(Application Specific Integrated Circuit; ASIC), 전자 장치들, 컴퓨터 판독 가능 비휘발성 저장 장치(예를 들어, CD-ROM, 플로피 디스크, 하드 디스크 드라이브 등)로부터 액세스 가능하고 이들이 내장된 코드 또는 로직을 포함하는 것으로 의도된다. 제조 물품은 네트워크 전송 라인, 무선 전송 매체, 공간을 통해 전파되는 신호들, 전파(radio wave), 적외선 신호 등을 통해 컴퓨터 판독 가능 프로그램들에 대한 액세스를 제공하는 파일 서버로부터 액세스 가능할 수 있다. 제조물은 플래시 메모리 카드 또는 자기 테이프일 수 있다. 제조 물품은 프로세서에 의해 실행되는 컴퓨터 판독 가능 매체에 내장된 소프트웨어 또는 프로그래머블 코드뿐만 아니라 하드웨어 로직을 포함한다. 일반적으로, 컴퓨터 판독 가능 프로그램들은 LISP, PERL, C, C ++, C #, PROLOG와 같은 임의의 프로그래밍 언어로, 또는 JAVA와 같은 임의의 바이트 코드 언어로 구현될 수 있다. 소프트웨어 프로그램들은 객체 코드로서 하나 이상의 제조 물품에 저장될 수 있다.
방법 및 시스템들의 다양한 실시 예들이 설명되었지만, 이러한 실시 예들은 예시적인 것이며, 설명된 방법들 또는 시스템들의 범위를 결코 제한하지 않는다. 당업자는 설명된 방법들 및 시스템들의 가장 넓은 범위를 벗어나지 않고 설명된 방법들 및 시스템들의 형태 및 세부 사항들을 변경할 수 있다. 따라서, 본 명세서에 설명된 방법들 및 시스템들의 범위는 임의의 예시적인 실시 예들에 의해 제한되어서는 안되며, 첨부된 청구 범위 및 그 균등물에 따라 정의되어야 한다.

Claims (20)

  1. 네트워크 패킷 스케줄러들의 다수의 인스턴스들을 동기화하기 위한 방법으로,
    제1 네트워크 패킷 스케줄러에 의해, 복수의 네트워크 패킷 스케줄러들의 각각의 다른 네트워크 패킷 스케줄러로부터, 네트워크 패킷들의 상대적인 전송 우선 순위를 정의하는 복수의 트래픽 클래스들의 각각의 트래픽 클래스에 대한 가상 패킷을 수신하는 단계;
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 복수의 트래픽 클래스들의 제1 트래픽 클래스의 네트워크 패킷을 수신하는 단계;
    상기 제1 네트워크 패킷 스케줄러에 의해, 각각의 가상 패킷을 각각의 트래픽 클래스에 대해 생성된 복수의 가상 연결들의 임의의 가상 연결로 전송하는 단계;
    상기 제1 네트워크 패킷 스케줄러에 의해, 네트워크 패킷 또는 가상 패킷을 전송을 위한 버퍼 내의 다음 패킷으로 스케줄링하는 단계;
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 버퍼 내의 상기 다음 패킷이 가상 패킷인 것으로 결정하는 단계; 및
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 버퍼 내의 상기 다음 패킷이 가상 패킷인 것으로 결정한 것에 응답하여, 상기 가상 패킷을 폐기하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 가상 패킷을 수신하는 단계는,
    상기 제1 네트워크 패킷 스케줄러에 의해, 각각의 다른 네트워크 패킷 스케줄러로부터, 상기 트래픽 클래스의 전송들에 대한 절대 대역폭 제한 및 상기 트래픽 클래스에 대한 상기 절대 대역폭 제한을 전송하는 네트워크 링크를 더 정의하는 트래픽 클래스의 각각의 쌍에 대한 가상 패킷을 수신하는 단계를 더 포함하는, 방법.
  3. 제1항에 있어서,
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 제1 트래픽 클래스에 대한 상기 네트워크 패킷 및 각각의 가상 패킷을 상기 복수의 트래픽 클래스들에 대응하는 복수의 큐들의 제1 큐에 큐잉하는 단계를 더 포함하는, 방법.
  4. 제3항에 있어서, 상기 제1 트래픽 클래스에 대한 상기 네트워크 패킷 및 각각의 가상 패킷을 큐잉하는 단계는,
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 제1 큐 내의 네트워크 패킷들의 수 및 상기 제1 큐의 최대 크기를 초과하는 상기 제1 트래픽 클래스에 대한 가상 패킷의 수의 합에 응답하여, 상기 제1 트래픽 클래스에 대한 각각의 가상 패킷을 상기 제1 큐로 큐잉하는 단계를 더 포함하는, 방법.
  5. 제1항에 있어서,
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 버퍼 내의 제2 다음 패킷이 네트워크 패킷인 것으로 결정하는 단계; 및
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 제2 다음 패킷이 네트워크 패킷인 것으로 결정한 것에 응답하여, 상기 버퍼로부터 상기 네트워크 패킷을 전송하는 단계를 더 포함하는, 방법.
  6. 네트워크 패킷 스케줄러들의 다수의 인스턴스들을 동기화하기 위한 방법으로,
    제1 네트워크 패킷 스케줄러에 의해, 네트워크 패킷들의 상대적인 전송 우선 순위를 정의하는 복수의 트래픽 클래스들의 각각의 트래픽 클래스에 대한 복수의 노드들의 제1 노드를 선택하는 단계;
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 제1 노드가 상기 복수의 트래픽 클래스들의 제1 트래픽 클래스의 수신된 네트워크 패킷들의 전체 크기의 논제로(non-zero) 바이트 카운트를 갖는 것으로 결정하는 단계; 및
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 제1 노드가 논제로 바이트 카운트를 갖는 것으로 결정한 것에 응답하여, 상기 제1 트래픽 클래스에 대한 가상 패킷을 복수의 네트워크 패킷 스케줄러들의 각각의 다른 네트워크 패킷 스케줄러들로 브로드캐스팅하는 단계를 포함하는, 방법.
  7. 제6항에 있어서,
    상기 복수의 노드들의 제2 노드를 선택하는 단계;
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 제2 노드가 상기 복수의 트래픽 클래스들의 제2 트래픽 클래스의 수신된 네트워크 패킷들의 전체 크기의 논제로 바이트 카운트를 갖는 것으로 결정하는 단계;
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 제2 노드가 논제로 바이트 카운트를 갖는 것으로 결정한 것에 응답하여, 상기 제2 트래픽 클래스에 대한 가상 패킷을 각각의 다른 네트워크 패킷 스케줄러들로 브로드캐스팅하는 단계를 더 포함하는, 방법.
  8. 제7항에 있어서,
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 제1 트래픽 클래스에 대한 상기 가상 패킷을 생성하는 단계 - 상기 가상 패킷은 상기 제1 트래픽 클래스에 대한 가상 패킷의 마지막 브로드캐스팅으로부터 임의의 주기 동안 큐잉된 상기 제1 트래픽 클래스의 유입 네트워크 패킷들의 바이트 수의 식별자를 포함함 - 를 더 포함하는, 방법.
  9. 제8항에 있어서,
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 제1 노드에서 상기 제1 트래픽 클래스의 유입 네트워크 패킷들을 큐잉하는 단계를 더 포함하고,
    상기 제1 트래픽 클래스에 대한 상기 가상 패킷을 브로드캐스팅하는 단계는,
    상기 제1 네트워크 패킷 스케줄러가, 상기 마지막 브로드캐스팅으로부터 상기 주기 동안 상기 제1 트래픽 클래스의 유입 네트워크 패킷들을 큐잉한 것에 응답하여, 상기 제1 네트워크 패킷 스케줄러에 의해, 상기 가상 패킷을 브로드캐스팅하는 단계를 포함하는, 방법.
  10. 제7항에 있어서, 상기 노드를 선택하고, 논제로 바이트 카운트를 결정하고, 가상 패킷을 브로드캐스팅하는 단계는, 상기 제1 네트워크 패킷 스케줄러가 임의의 트래픽 클래스 계층 구조들을 지원하는 것에 응답하여,
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 트래픽 클래스의 전송들에 대한 절대 대역폭 제한을 더 정의하는 최하위 트래픽 클래스에 대응하는 노드를 선택하는 단계;
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 최하위 트래픽 클래스에 대응하는 상기 노드가 상기 최하위 트래픽 클래스의 수신된 네트워크 패킷들의 전체 크기의 논제로 바이트 카운트를 갖는 것으로 결정하는 단계; 및
    상기 제1 네트워크 패킷 스케줄러에 의해, 상기 최하위 트래픽 클래스에 대한 가상 패킷을 브로드캐스팅하는 단계를 더 포함하는, 방법.
  11. 복수의 네트워크 패킷 스케줄러들로 구성된 시스템에 있어서, 상기 복수의 네트워크 패킷 스케줄러들의 제1 네트워크 패킷 스케줄러는,
    상기 복수의 네트워크 패킷 스케줄러의 각각의 다른 네트워크 패킷 스케줄러로부터, 네트워크 패킷들의 상대적인 전송 우선 순위를 정의하는 복수의 트래픽 클래스들의 각각의 트래픽 클래스에 대한 가상 패킷을 수신하고;
    상기 복수의 트래픽 클래스들의 제1 트래픽 클래스의 네트워크 패킷을 수신하고;
    각각의 가상 패킷을 각각의 트래픽 클래스에 대해 생성된 복수의 가상 연결들의 임의의 가상 연결로 전송하고;
    네트워크 패킷 또는 가상 패킷을 송신을 위한 버퍼 내에 다음 패킷으로 스케줄링하고;
    상기 버퍼 내의 다음 패킷이 가상 패킷인 것으로 결정하고; 및
    상기 버퍼 내의 상기 다음 패킷이 가상 패킷인 것으로 결정한 것에 응답하여, 상기 가상 패킷을 폐기하도록 구성되는, 시스템.
  12. 제11항에 있어서, 상기 제1 네트워크 패킷 스케줄러는,
    각각의 다른 네트워크 패킷 스케줄러로부터, 상기 트래픽 클래스의 전송들에 대한 절대 대역폭 제한 및 상기 트래픽 클래스에 대한 상기 절대 대역폭 제한을 전송하는 네트워크 링크를 더 정의하는 트래픽 클래스의 각각의 쌍에 대한 가상 패킷을 수신하도록 더 구성되는, 시스템.
  13. 제11항에 있어서, 상기 제1 네트워크 패킷 스케줄러는,
    상기 제1 트래픽 클래스에 대한 상기 네트워크 패킷 및 각각의 가상 패킷을 상기 복수의 트래픽 클래스들에 대응하는 복수의 큐들의 제1 큐에 큐잉하도록 더 구성되는, 시스템.
  14. 제13항에 있어서, 상기 제1 네트워크 패킷 스케줄러는,
    상기 제1 큐 내의 네트워크 패킷들의 수 및 상기 제1 큐의 최대 크기를 초과하는 상기 제1 트래픽 클래스에 대한 가상 패킷의 수의 합에 응답하여, 상기 제1 트래픽 클래스에 대한 각각의 가상 패킷을 상기 제1 큐로 큐잉하도록 더 구성되는, 시스템.
  15. 제11항에 있어서, 상기 제1 네트워크 패킷 스케줄러는,
    상기 버퍼 내의 제2 다음 패킷이 네트워크 패킷인 것으로 결정하고; 및
    상기 버퍼 내의 상기 제2 다음 패킷이 네트워크 패킷인 것으로 결정한 것에 응답하여, 상기 네트워크 패킷을 전송하도록 더 구성되는, 시스템.
  16. 제15항에 있어서, 상기 제1 네트워크 패킷 스케줄러는,
    네트워크 패킷들의 상대적인 전송 우선 순위를 정의하는 복수의 트래픽 클래스들의 각각의 트래픽 클래스에 대한 복수의 노드들의 제1 노드를 선택하고;
    상기 제1 노드가 상기 복수의 트래픽 클래스들의 제1 트래픽 클래스의 수신된 네트워크 패킷의 전체 크기의 논제로 바이트 카운트를 갖는 것으로 결정하고; 및
    상기 제1 노드가 논제로 바이트 카운트를 갖는 것으로 결정한 것에 응답하여, 상기 제1 트래픽 클래스에 대한 가상 패킷을 상기 복수의 네트워크 패킷 스케줄러들의 각각의 다른 네트워크 패킷 스케줄러들로 브로드캐스팅하도록 더 구성되는, 시스템.
  17. 제16항에 있어서, 상기 제1 네트워크 패킷 스케줄러는,
    네트워크 패킷들의 상대적인 우선 순위를 정의하는 복수의 트래픽 클래스들의 각각의 트래픽 클래스에 대한 복수의 노드들의 제2 노드를 선택하고;
    상기 제2 노드가 상기 복수의 트래픽 클래스들의 제2 트래픽 클래스의 수신된 네트워크 패킷들의 전체 크기의 논제로 바이트 카운트를 갖는 것으로 결정하고; 및
    상기 제2 노드가 논제로 바이트 카운트를 갖는 것으로 결정한 것에 응답하여, 상기 제2 트래픽 클래스에 대한 가상 패킷을 상기 복수의 네트워크 패킷 스케줄러들의 각각의 다른 네트워크 패킷 스케줄러들로 브로드캐스팅하도록 더 구성되는, 시스템.
  18. 제17항에 있어서, 상기 제1 네트워크 패킷 스케줄러는,
    상기 제1 트래픽 클래스에 대한 상기 가상 패킷을 생성 - 상기 가상 패킷은 상기 제1 트래픽 클래스에 대한 가상 패킷의 마지막 브로드캐스팅으로부터 임의의 주기 동안 큐잉된 상기 제1 트래픽 클래스의 유입 네트워크 패킷들의 바이트 수의 식별자를 포함함 - 하도록 더 구성되는, 시스템.
  19. 제18항에 있어서, 상기 제1 네트워크 패킷 스케줄러는,
    상기 제1 노드에서 상기 제1 트래픽 클래스의 유입 네트워크 패킷들을 큐잉하고; 및
    상기 마지막 브로드캐스팅으로부터 상기 주기 동안 상기 제1 트래픽 클래스의 유입 네트워크 패킷들을 큐잉한 것에 응답하여, 상기 제1 트래픽 클래스에 대한 가상 패킷을 브로드캐스팅하도록 더 구성되는, 시스템.
  20. 제17항에 있어서, 상기 제1 네트워크 패킷 스케줄러는, 상기 네트워크 패킷 스케줄러가 임의의 트래픽 클래스 계층 구조들을 지원하는 것에 응답하여:
    상기 트래픽 클래스의 전송들에 대한 절대 대역폭 제한을 더 정의하는 최하위 트래픽 클래스에 대응하는 노드를 선택하고,
    상기 최하위 트래픽 클래스에 대응하는 상기 노드가 상기 최하위 트래픽 클래스의 수신된 네트워크 패킷들의 전체 크기의 논제로 바이트 카운트를 갖는 것으로 결정하고; 및
    상기 최하위 트래픽 클래스에 대한 가상 패킷을 브로드캐스팅하도록 더 구성되는, 시스템.
KR1020187011258A 2015-10-30 2016-10-19 분산 패킷 스케줄링을 위한 시스템들 및 방법들 KR102059284B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/927,867 2015-10-30
US14/927,867 US9871610B2 (en) 2015-10-30 2015-10-30 Method for packet scheduling using multiple packet schedulers
PCT/US2016/057719 WO2017074763A1 (en) 2015-10-30 2016-10-19 Systems and methods for distributed packet scheduling

Publications (2)

Publication Number Publication Date
KR20180055882A KR20180055882A (ko) 2018-05-25
KR102059284B1 true KR102059284B1 (ko) 2019-12-24

Family

ID=57219042

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187011258A KR102059284B1 (ko) 2015-10-30 2016-10-19 분산 패킷 스케줄링을 위한 시스템들 및 방법들

Country Status (6)

Country Link
US (2) US9871610B2 (ko)
EP (1) EP3369224B1 (ko)
JP (1) JP6594540B2 (ko)
KR (1) KR102059284B1 (ko)
CN (1) CN108353040B (ko)
WO (1) WO2017074763A1 (ko)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10826841B2 (en) * 2016-12-06 2020-11-03 Microsoft Technology Licensing, Llc Modification of queue affinity to cores based on utilization
US20190319933A1 (en) * 2018-04-12 2019-10-17 Alibaba Group Holding Limited Cooperative tls acceleration
US10917323B2 (en) * 2018-10-31 2021-02-09 Nutanix, Inc. System and method for managing a remote office branch office location in a virtualized environment
CN109885550B (zh) * 2018-12-28 2022-09-13 安徽维德工业自动化有限公司 一种基于全联通路由层的文件存储系统
CN109698795B (zh) * 2019-02-19 2022-06-14 贵州电网有限责任公司 基于大数据流式技术业务系统间权限交互监控系统及方法
KR102123476B1 (ko) * 2019-06-25 2020-06-16 상명대학교 산학협력단 확률적 성능이 개선된 레귤레이션 기능을 수행하는 스케줄러
CN111163058B (zh) * 2019-12-09 2021-11-02 京信网络系统股份有限公司 Dpdk数据加密处理方法、装置和网络设备
CN112988367B (zh) * 2019-12-12 2024-05-28 中科寒武纪科技股份有限公司 资源的分配方法、装置、计算机设备及可读存储介质
US11353855B1 (en) * 2019-12-13 2022-06-07 Amazon Technologies, Inc. Configuring and deploying gateway connectors and workflows for data sources at client networks
KR20210078174A (ko) * 2019-12-18 2021-06-28 주식회사 쏠리드 네트워크 관리 시스템 및 통신 네트워크의 동기화 방법
US11418940B1 (en) * 2020-06-03 2022-08-16 T-Mobile Innovations Llc Mitigation of denial of service attacks on emergency services
KR102340895B1 (ko) * 2020-08-28 2021-12-20 고려대학교 산학협력단 양자 근사법을 이용한 네트워크 스케줄링 장치 및 방법
CN116438787A (zh) * 2020-12-22 2023-07-14 华为技术有限公司 低延迟软件定义广域网架构
CN113038530B (zh) * 2021-03-22 2021-09-28 军事科学院系统工程研究院网络信息研究所 卫星移动通信系统QoS保障的分组业务高效传输方法
CN114422447B (zh) * 2021-12-25 2024-05-17 中国海洋大学 多业务多网络融合通信调度方法及系统、介质、终端、应用
US11937279B2 (en) * 2022-06-21 2024-03-19 Skyworks Solutions, Inc. Systems, devices, and methods related to configuring a multi-stream network with a messaging schedule
CN115580611B (zh) * 2022-12-07 2023-06-02 广东信通通信有限公司 一种微波自组网下监控设备图片数据抽取及回传方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060056406A1 (en) 2004-09-10 2006-03-16 Cavium Networks Packet queuing, scheduling and ordering

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000083068A (ja) * 1998-06-09 2000-03-21 Matsushita Electric Ind Co Ltd デ―タ出力装置
US6735679B1 (en) * 1998-07-08 2004-05-11 Broadcom Corporation Apparatus and method for optimizing access to memory
US6580721B1 (en) * 1998-08-11 2003-06-17 Nortel Networks Limited Routing and rate control in a universal transfer mode network
US20050058149A1 (en) * 1998-08-19 2005-03-17 Howe Wayne Richard Time-scheduled and time-reservation packet switching
US6185221B1 (en) * 1998-11-09 2001-02-06 Cabletron Systems, Inc. Method and apparatus for fair and efficient scheduling of variable-size data packets in an input-buffered multipoint switch
US6493120B1 (en) * 1999-02-17 2002-12-10 Alcatel Optical fiber-delay line buffers with void filling
US6600744B1 (en) * 1999-03-23 2003-07-29 Alcatel Canada Inc. Method and apparatus for packet classification in a data communication system
US6728212B1 (en) * 2000-06-23 2004-04-27 Alcatel Asymmetric void filling scheduler with bandwidth grabbing
JP3584859B2 (ja) * 2000-06-29 2004-11-04 日本電気株式会社 パケットスケジューリング装置
JP3526269B2 (ja) * 2000-12-11 2004-05-10 株式会社東芝 ネットワーク間中継装置及び該中継装置における転送スケジューリング方法
US7203193B2 (en) * 2001-07-17 2007-04-10 Alcatel Lucent In-band message synchronization for distributed shared memory packet switch
FR2854018A1 (fr) * 2003-04-18 2004-10-22 France Telecom Procede et dispositif de controle d'un trafic de paquets de donnees en entree d'un reseau, programme d'ordinateur et equipement reseau correspondants
US8533716B2 (en) 2004-03-31 2013-09-10 Synopsys, Inc. Resource management in a multicore architecture
US7742486B2 (en) * 2004-07-26 2010-06-22 Forestay Research, Llc Network interconnect crosspoint switching architecture and method
CN1780193B (zh) * 2004-11-25 2010-08-11 华为技术有限公司 一种基于通用成帧规程的分插复用方法、装置及系统
US7535907B2 (en) * 2005-04-08 2009-05-19 Oavium Networks, Inc. TCP engine
EP1952586B1 (en) * 2005-11-18 2012-04-11 Telefonaktiebolaget LM Ericsson (publ) A method and base station for schedulin hsdpa
US7742413B1 (en) * 2006-02-01 2010-06-22 Sprint Communications Company, L.P. Utilizing a null jitter buffer to monitor session traffic
US8477673B2 (en) * 2006-06-09 2013-07-02 Qualcomm Incorporated Cell specific retransmission of single frequency network MBMS data
US7675919B2 (en) * 2006-08-02 2010-03-09 Honeywell International Inc. End system scheduling for switched networks
US8718065B2 (en) * 2006-08-15 2014-05-06 Broadcom Corporation Transmission using multiple physical interface
US7636317B2 (en) * 2006-11-20 2009-12-22 Veriwave, Inc. Communications test system with multilevel scheduler
CN101212389B (zh) * 2006-12-30 2010-06-23 华为技术有限公司 一种突发汇聚控制方法及相应的装置、通信设备
JP5087985B2 (ja) * 2007-04-27 2012-12-05 ソニー株式会社 データ処理装置、データ処理方法、及びプログラム
US8305899B2 (en) * 2008-05-28 2012-11-06 Microsoft Corporation Pull-based data transmission approach
US7826469B1 (en) * 2009-03-09 2010-11-02 Juniper Networks, Inc. Memory utilization in a priority queuing system of a network device
WO2011143094A2 (en) * 2010-05-09 2011-11-17 Citrix Systems, Inc. Systems and methods for allocation of classes of service to network connections corresponding to virtual channels
WO2012019114A1 (en) * 2010-08-06 2012-02-09 Citrix Systems, Inc. Systems and methods for a para-virtualized driver in a multi-core virtual packet engine device
US9008113B2 (en) * 2010-12-20 2015-04-14 Solarflare Communications, Inc. Mapped FIFO buffering
US20130204965A1 (en) * 2012-02-03 2013-08-08 Cahya Masputra Packet transmission on a client using implicit enabling of features based on service classifications
US9450881B2 (en) * 2013-07-09 2016-09-20 Intel Corporation Method and system for traffic metering to limit a received packet rate
US9720742B2 (en) * 2014-05-15 2017-08-01 GM Global Technology Operations LLC Service and system supporting coherent data access on multicore controller
US20160044393A1 (en) * 2014-08-08 2016-02-11 Futurewei Technologies, Inc. System and Method for Photonic Networks
FR3042087B1 (fr) * 2015-10-02 2017-12-01 Thales Sa Procede de transmission de paquets de donnees commutes entre un canal a contention (rach) et un canal reserve sur demande (dama)

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060056406A1 (en) 2004-09-10 2006-03-16 Cavium Networks Packet queuing, scheduling and ordering

Also Published As

Publication number Publication date
US9871610B2 (en) 2018-01-16
KR20180055882A (ko) 2018-05-25
CN108353040A (zh) 2018-07-31
CN108353040B (zh) 2022-01-07
US20170126345A1 (en) 2017-05-04
EP3369224A1 (en) 2018-09-05
US10164726B2 (en) 2018-12-25
JP2019500767A (ja) 2019-01-10
WO2017074763A1 (en) 2017-05-04
JP6594540B2 (ja) 2019-10-23
US20180123715A1 (en) 2018-05-03
EP3369224B1 (en) 2019-07-31

Similar Documents

Publication Publication Date Title
US11843575B2 (en) Systems and methods to run user space network stack inside docker container while bypassing container linux network stack
KR102059284B1 (ko) 분산 패킷 스케줄링을 위한 시스템들 및 방법들
US11394682B2 (en) Method for DNS response reordering based on path quality and connection priority for better QoS
US10686707B2 (en) Method to remap high priority connection with large congestion window to high latency link to achieve better performance
KR102083105B1 (ko) 중개 장치를 통해 세션을 유지하기 위한 시스템들 및 방법
US10361972B2 (en) Systems and methods to support VXLAN in partition environment where a single system acts as multiple logical systems to support multitenancy
US9749148B2 (en) Systems and methods for load balancing non-IP devices
US9866475B2 (en) Systems and methods for forwarding traffic in a cluster network
KR20190126143A (ko) 대체 링크 상의 패킷의 적응형 복제에 의한 하이브리드 wan 링크의 자동 튜닝
US9652514B2 (en) Systems and methods for redirect handling
US10200447B2 (en) FTP load balancing support for cluster
US9923818B2 (en) Systems and methods of achieving equal distribution of packets in a multicore system which acts as a tunnel end point
WO2016028852A1 (en) Systems and methods for implementation of jumbo frame over existing network stack
WO2013188658A1 (en) Systems and methods for distributing traffic across cluster nodes
EP3183867B1 (en) Systems and methods for providing fine grained control over mss values of transport layer connections
US10375212B2 (en) Systems and methods for improving the performance of a computer network using multiplexed application layer streams of network traffic
US10021018B2 (en) Systems and methods for associating multiple transport layer hops between clients and servers

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant