KR102304416B1 - 대체 링크 상의 패킷의 적응형 복제에 의한 하이브리드 wan 링크의 자동 튜닝 - Google Patents

대체 링크 상의 패킷의 적응형 복제에 의한 하이브리드 wan 링크의 자동 튜닝 Download PDF

Info

Publication number
KR102304416B1
KR102304416B1 KR1020197030214A KR20197030214A KR102304416B1 KR 102304416 B1 KR102304416 B1 KR 102304416B1 KR 1020197030214 A KR1020197030214 A KR 1020197030214A KR 20197030214 A KR20197030214 A KR 20197030214A KR 102304416 B1 KR102304416 B1 KR 102304416B1
Authority
KR
South Korea
Prior art keywords
link
network
packet
packets
rate
Prior art date
Application number
KR1020197030214A
Other languages
English (en)
Other versions
KR20190126143A (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 KR20190126143A publication Critical patent/KR20190126143A/ko
Application granted granted Critical
Publication of KR102304416B1 publication Critical patent/KR102304416B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/16Threshold monitoring
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/64Hybrid switching systems
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0876Network utilisation, e.g. volume of load or congestion level
    • H04L43/0894Packet rate
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/24Multipath
    • H04L67/322
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/61Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources taking into account QoS or priority requirements
    • 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/14Multichannel or multilink protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W72/00Local resource management
    • H04W72/04Wireless resource allocation
    • H04W72/044Wireless resource allocation based on the type of the allocated resource
    • H04W72/0453Resources in frequency domain, e.g. a carrier in FDMA
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0823Errors, e.g. transmission errors
    • H04L43/0829Packet loss
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0852Delays

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Environmental & Geological Engineering (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

본 개시의 실시예는 네트워크 패킷을 신뢰성 있는 링크 상으로 동적으로 복제하기 위한 시스템 및 방법을 설명한다. 네트워크 디바이스는 1차 링크와 2차 링크에 의해 접속될 수 있다. 1차 링크의 네트워크 품질이 저하됨에 따라, 시스템은 네트워크 패킷을 2차 링크에 적응적으로 복제할 수 있다. 높은 우선 순위의 링크로서 2차 링크는 1차 링크와 비교할 때 더 적은 총 대역폭을 가질 수 있다. 따라서, 1차 링크를 횡단하는 모든 트래픽이 1차 링크의 품질이 저하될 때 네트워크 신뢰성을 유지하기 위해 2차 링크에 복제될 수 없을 수 있다. 본 해결책은 2차 링크의 대역폭을 효과적으로 관리할 수 있고 2차 링크로의 패킷의 복제를 제어하는 복제 레이트를 설정할 수 있다.

Description

대체 링크 상의 패킷의 적응형 복제에 의한 하이브리드 WAN 링크의 자동 튜닝
관련 출원
본 특허 출원은 2017년 3월 20일자로 출원된 "대체 링크 상의 패킷의 적응형 복제에 의한 하이브리드 WAN 링크의 자동 튜닝"이라는 제목의 미국 특허 출원 번호 15/463,635호에 대해 우선권을 주장하며, 그 내용이 본원에 전체로 모든 목적을 위해 참조로 통합된다.
개시 분야
본 출원은 일반적으로 데이터 통신 네트워크에 관한 것이다. 특히, 본 출원은 네트워크 패킷을 동적으로 복제하기 위한 시스템 및 방법에 관한 것이다.
네트워크 디바이스는 복수의 가상 광역 네트워크(WAN) 또는 다른 네트워크를 통해 접속될 수 있다. 네트워크 디바이스 간의 다양한 접속은 패킷 손실 및 패킷 대기 시간 증가를 초래할 수 있는 네트워크 성능 저하 및 다른 네트워크 문제를 경험할 수 있다. 패킷 손실 및 패킷 대기 시간은 네트워크 디바이스 간 네트워크 중단을 초래할 수 있다.
본 해결책은 네트워크 패킷을 신뢰성 있는 링크로 동적으로 복제하기 위한 시스템 및 방법을 설명한다. 네트워크 디바이스는 1차 링크와 2차 링크에 의해 접속될 수 있다. 일부 경우에, 2차 링크는 높은 우선 순위의 링크일 수 있다. 1차 링크의 네트워크 품질이 저하됨에 따라, 시스템은 네트워크 패킷을 2차 링크에 적응적으로 복제할 수 있다. 높은 우선 순위의 링크로서 2차 링크는 1차 링크와 비교할 때 더 적은 총 대역폭을 가질 수 있다. 따라서, 1차 링크를 횡단하는 모든 트래픽이 1차 링크의 품질이 저하될 때 네트워크 신뢰성을 유지하기 위해 2차 링크에 복제될 수 없을 수 있다. 본 해결책은 2차 링크의 대역폭을 효과적으로 관리할 수 있고 2차 링크로의 패킷의 복제를 제어하는 복제 레이트를 설정할 수 있다. 복제 레이트는 수신 디바이스에서의 유효 패킷 손실 레이트(또는 패킷 지연 레이트)가 임계값 초과로 유지되도록 하는 1차 링크의 링크 품질에 기초하여 설정될 수 있다.
본 개시의 일 양태에 따르면, 네트워크 상태에 기초하여 복제 패킷을 송신하기 위한 방법은, 제1 디바이스에 의해, 제1 디바이스와 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태의 메트릭이 임계값 내에 있는지를 결정하는 단계를 포함한다. 본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태의 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여, 제1 링크를 통해 제1 디바이스로부터 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크 상에서 제1 디바이스로부터 제2 디바이스로 송신될 패킷들을 송신하는 단계를 포함할 수 있다. 본 방법은 디바이스에 의해, 제1 디바이스와 제2 디바이스 사이에 확립된 제2 링크 상에서 복제 패킷들을 송신하는 단계를 포함할 수 있다.
본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태의 메트릭과 임계값 사이의 차이에 기초하여 패킷 복제 레이트를 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 결정된 패킷 복제 레이트에 기초하여 복제 패킷들을 생성하는 단계를 포함할 수 있다. 임계값은 제1 임계값일 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태를 모니터링하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 네트워크 상태의 메트릭이 제2 임계값 내에 있는지 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태의 메트릭이 제2 임계값 내에 있는 것으로 결정하는 것에 응답하여, 복제 패킷들이 생성되어 제2 링크 상에서 송신되는 레이트에 대응할 수 있는 패킷 복제 레이트를 수정하는 단계를 포함할 수 있다.
본 방법은 제1 디바이스에 의해, 제2 링크의 대역폭을 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 결정된 제2 링크의 대역폭 및 제1 링크의 네트워크 상태의 메트릭에 기초하여 패킷 복제 레이트를 결정하는 단계를 포함할 수 있다. 제1 링크를 통해 제1 디바이스로부터 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하는 단계는 패킷 복제 레이트에 기초하여 복제 패킷들을 생성하는 단계를 포함할 수 있다.
일부 실시예에서, 제1 디바이스와 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태의 메트릭을 결정하는 단계는 제1 링크의 패킷 손실 레이트 또는 제1 링크의 패킷 지연 레이트 중 하나를 결정하는 단계를 포함할 수 있다.
일부 실시예에서, 제1 링크는 인터넷 광대역 링크일 수 있고, 제2 링크는 멀티프로토콜 라벨(multiprotocol label) 스위칭 링크일 수 있다. 제1 디바이스 및 제2 디바이스는 가상 광역 네트워크 디바이스일 수 있다.
본 방법은 제1 디바이스에 의해, 제1 링크 상에서 손실된 패킷들의 수에 대응하는 제1 링크의 제1 패킷 손실 레이트를 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크 상의 손실된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 제2 링크의 패킷 수용 레이트를 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 패킷 손실 레이트와 패킷 수용 레이트 사이의 차이에 기초하여 제1 링크의 유효 패킷 손실 레이트를 결정하는 단계를 포함할 수 있다. 제1 링크의 네트워크 상태의 메트릭은 제1 링크의 유효 패킷 손실 레이트일 수 있다.
본 방법은 제1 디바이스에 의해, 제1 링크 상에서 지연된 패킷들의 수에 대응하는 제1 링크의 제1 패킷 지연 레이트를 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크 상의 지연된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 제2 링크의 패킷 수용 레이트를 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 패킷 지연 레이트와 패킷 수용 레이트 사이의 차이에 기초하여 제1 링크의 유효 패킷 지연 레이트를 결정하는 단계를 포함할 수 있다. 제1 링크의 네트워크 상태의 메트릭은 제1 링크의 유효 패킷 지연 레이트이다.
본 방법은 제1 디바이스에 의해, 네트워크 상태의 메트릭을 업데이트하기 위해 제1 링크의 네트워크 상태를 모니터링하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제2 링크 상에서 복제 패킷들을 송신하는 것에 응답하여, 제1 링크의 네트워크 상태의 업데이트된 메트릭이 임계값 내에 있는지 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 네트워크 상태의 업데이트된 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여 패킷 복제 레이트를 증가시키는 단계를 포함할 수 있다.
본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태의 현재 메트릭이 임계값 내에 있는지 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제2 링크의 대역폭 이용 메트릭이 제2 링크에 할당된 미리 정해진 최대 대역폭 이용값 내에 있는지 결정하는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제1 링크의 네트워크 상태의 현재 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여, 단위 시간 당 생성되는 복제된 패킷들의 수를 증가시키기 위해 패킷 복제 레이트를 증가시키는 단계를 포함할 수 있다. 본 방법은 제1 디바이스에 의해, 제2 링크의 대역폭 이용 메트릭이 미리 정해진 최대 대역폭 이용값 내에 있는 것으로 결정하는 것에 응답하여, 제1 링크 상의 복제 패킷들의 일부를 송신하는 단계를 포함할 수 있다.
본 개시의 다른 양태에 따르면, 네트워크 상태에 기초하여 복제 패킷들을 송신하기 위한 시스템은 제1 디바이스를 포함한다. 제1 디바이스는 제2 디바이스와의 제1 링크를 확립하고 제2 디바이스와의 제2 링크를 확립하도록 구성될 수 있다. 제1 디바이스는 제1 디바이스와 상기 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태의 메트릭을 결정하도록 구성될 수 있다. 제1 디바이스는 제1 링크의 네트워크 상태의 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여, 제1 링크를 통해 제1 디바이스로부터 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성할 수 있다. 제1 디바이스는 제1 링크 상에서 제1 디바이스로부터 제2 디바이스로 송신될 패킷들을 송신할 수 있다. 제1 디바이스는 제1 디바이스와 제2 디바이스 사이에 확립된 제2 링크 상에서 복제 패킷들을 송신할 수 있다.
일부 실시예에서, 제1 디바이스는 제1 링크의 네트워크 상태의 메트릭과 임계값 사이의 차이에 기초하여 패킷 복제 레이트를 결정할 수 있다. 제1 디바이스는 또한 결정된 패킷 복제 레이트에 기초하여 복제 패킷들을 생성할 수 있다.
일부 실시예에서, 임계값은 제1 임계값일 수 있다. 제1 디바이스는 제1 링크의 네트워크 상태를 모니터링하도록 구성될 수 있다. 제1 디바이스는 네트워크 상태의 메트릭이 제2 임계값 내에 있는지 결정하도록 구성될 수 있다. 제1 디바이스는 제1 링크의 네트워크 상태의 메트릭이 제2 임계값 내에 있는 것으로 결정하는 것에 응답하여, 복제 패킷들이 생성되어 제2 링크 상에서 송신되는 레이트에 대응하는 패킷 복제 레이트를 수정하도록 구성될 수 있다.
제1 디바이스는 제2 링크의 대역폭을 결정하도록 구성될 수 있다. 제1 디바이스는 결정된 제2 링크의 대역폭 및 제1 링크의 네트워크 상태의 메트릭에 기초하여 패킷 복제 레이트를 결정하도록 구성될 수 있다. 제1 디바이스는 패킷 복제 레이트에 기초하여 복제 패킷들을 생성하도록 구성될 수 있다.
제1 디바이스와 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태의 메트릭을 결정하기 위해, 제1 디바이스는 제1 링크의 패킷 손실 레이트 또는 제1 링크의 패킷 지연 레이트 중 하나를 결정하도록 구성된다. 제1 링크는 인터넷 광대역 링크일 수 있고, 제2 링크는 멀티프로토콜 라벨 스위칭 링크일 수 있다. 제1 디바이스 및 제2 디바이스는 가상 광역 네트워크 디바이스일 수 있다.
제1 디바이스는 제1 링크 상에서 손실된 패킷들의 수에 대응할 수 있는 제1 링크의 제1 패킷 손실 레이트를 결정하도록 구성될 수 있다. 제1 디바이스는 제1 링크 상의 손실된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 제2 링크의 패킷 수용 레이트를 결정할 수 있다. 제1 디바이스는 제1 패킷 손실 레이트와 패킷 수용 레이트 사이의 차이에 기초하여 제1 링크의 유효 패킷 손실 레이트를 결정할 수 있다. 제1 링크의 네트워크 상태의 메트릭은 제1 링크의 유효 패킷 손실 레이트일 수 있다.
제1 디바이스는 제1 링크 상에서 지연된 패킷들의 수에 대응하는 제1 링크의 제1 패킷 지연 레이트를 결정하도록 구성될 수 있다. 제1 디바이스는 제1 링크 상의 지연된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 제2 링크의 패킷 수용 레이트를 결정하도록 구성될 수 있다. 제1 디바이스는 제1 패킷 지연 레이트와 패킷 수용 레이트 사이의 차이에 기초하여 제1 링크의 유효 패킷 지연 레이트를 결정하도록 구성될 수 있다. 제1 링크의 네트워크 상태의 메트릭은 제1 링크의 유효 패킷 지연 레이트이다.
제1 디바이스는 네트워크 상태의 메트릭을 업데이트하기 위해 제1 링크의 네트워크 상태를 모니터링할 수 있다. 제1 디바이스는 제2 링크 상에서 복제 패킷들을 송신하는 것에 응답하여, 제1 링크의 네트워크 상태의 업데이트된 메트릭이 임계값 내에 있는지 결정할 수 있다. 제1 디바이스는 네트워크 상태의 업데이트된 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여 패킷 복제 레이트를 증가시킬 수 있다.
제1 디바이스는 제1 링크의 네트워크 상태의 현재 메트릭이 임계값 내에 있는지 결정할 수 있다. 제1 디바이스는 제2 링크의 대역폭 이용 메트릭이 제2 링크에 할당된 미리 정해진 최대 대역폭 이용값 내에 있는지 결정할 수 있다. 제1 디바이스는 제1 링크의 네트워크 상태의 현재 메트릭이 임계값 내에 있는 것으로 결정하는 것에 응답하여, 단위 시간 당 생성되는 복제된 패킷들의 수를 증가시키기 위해 패킷 복제 레이트를 증가시킬 수 있다. 제1 디바이스는 제2 링크의 대역폭 이용 메트릭이 미리 정해진 최대 대역폭 이용값 내에 있는 것으로 결정하는 것에 응답하여, 제1 링크 상의 복제 패킷들의 일부를 송신하도록 구성될 수 있다.
본 해결책의 상술한 그리고 다른 목적, 양태, 특징 및 이점은 첨부 도면과 관련하여 취해진 다음의 설명을 참조함으로써 보다 명백해지고 더 잘 이해될 것이다.
도 1a는 클라이언트가 기기를 통해 서버에 액세스하기 위한 네트워크 환경의 실시예의 블록도이다.
도 1b는 기기를 통해 서버로부터 클라이언트로 컴퓨팅 환경을 전달하기 위한 환경의 실시예의 블록도이다.
도 1c는 기기를 통해 서버로부터 클라이언트로 컴퓨팅 환경을 전달하기 위한 환경의 다른 실시예의 블록도이다.
도 1d는 기기를 통해 서버로부터 클라이언트로 컴퓨팅 환경을 전달하기 위한 환경의 다른 실시예의 블록도이다.
도 1e 내지 도 1h는 컴퓨팅 디바이스의 실시예의 블록도이다.
도 2a는 클라이언트와 서버 사이의 통신을 프로세싱하기 위한 기기의 실시예의 블록도이다.
도 2b는 클라이언트와 서버 사이의 통신을 최적화, 가속화, 부하-밸런싱 및 라우팅하기 위한 기기의 다른 실시예의 블록도이다.
도 3은 기기를 통해 서버와 통신하기 위한 클라이언트의 실시예의 블록도이다.
도 4a는 가상화 환경의 실시예의 블록도이다.
도 4b는 가상화 환경의 다른 실시예의 블록도이다.
도 4c는 가상화된 기기의 실시예의 블록도이다.
도 5a는 멀티-코어 시스템에서 병렬 처리(parallelism)를 구현하기 위한 접근법의 실시예의 블록도이다.
도 5b는 멀티-코어 시스템을 이용하는 시스템의 실시예의 블록도이다.
도 5c는 멀티-코어 시스템의 양태의 다른 실시예의 블록도이다.
도 6은 클러스터 시스템의 실시예의 블록도이다.
도 7은 예시적인 중간 디바이스의 블록도를 나타낸다.
도 8a는 유효 패킷 손실 레이트에 기초한 패킷의 복제를 나타낸다.
도 8b는 유효 패킷 지연 레이트에 기초한 패킷의 복제를 나타낸다.
도 9는 네트워크 상태에 기초하여 복제 패킷을 송신하기 위한 예시적인 방법의 예시적인 흐름도를 나타낸다.
본 발명의 특징 및 이점은 도면과 관련하여 후술될 상세한 설명으로부터 보다 명백해질 것이며, 도면에서 유사한 참조 문자는 전체에 걸쳐 대응하는 요소를 식별한다. 도면에서, 유사한 참조 번호는 일반적으로 동일하고, 기능적으로 유사하고 및/또는 구조적으로 유사한 요소를 나타낸다.
이하의 다양한 실시예의 설명을 읽기 위해, 본 명세서의 섹션 및 그 각각의 내용에 대한 다음의 설명이 도움이 될 수 있다:
섹션 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')는 회사 인트라넷, 메트로폴리탄 영역 네트워크(MAN)와 같은 근거리 네트워크(LAN) 또는 인터넷 또는 월드 와이드 웹(World Wide Web)과 같은 광역 네트워크(WAN)일 수 있다. 일 실시예에서, 네트워크(104')는 사설 네트워크일 수 있고 네트워크(104)는 공용 네트워크일 수 있다. 일부 실시예에서, 네트워크(104)는 사설 네트워크일 수 있고 네트워크(104')는 공용 네트워크일 수 있다. 다른 실시예에서, 네트워크(104 및 104')는 모두 사설 네트워크일 수 있다. 일부 실시예에서, 클라이언트(102)는 네트워크(104)를 통해 회사 데이터 센터에 위치한 서버(106)와 WAN 접속을 통해 통신하는 회사 기업의 지점에 위치될 수 있다.
네트워크(104 및/또는 104')는 임의의 유형 및/또는 형태의 네트워크일 수 있으며, 포인트 대 포인트 네트워크, 브로드캐스트 네트워크, 광역 네트워크, 근거리 네트워크, 원격 통신 네트워크, 데이터 통신 네트워크, 컴퓨터 네트워크, ATM(Asynchronous Transfer Mode) 네트워크, SONET(Synchronous Optical Network) 네트워크, SDH(Synchronous Digital Hierarchy) 네트워크, 무선 네트워크 및 유선 네트워크 중 임의의 것을 포함할 수 있다. 일부 실시예에서, 네트워크(104)는 적외선 채널 또는 위성 대역과 같은 무선 링크를 포함할 수 있다. 네트워크(104 및/또는 104')의 토폴로지는 버스, 스타(star) 또는 링 네트워크 토폴로지일 수 있다. 네트워크(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)는 NetScaler® 디바이스로 지칭되는, Ft. Lauderdale Florida의 Citrix Systems, Inc.에 의해 제조된 임의의 네트워크 디바이스를 포함한다. 다른 실시예에서, 기기(200)는 Seattle, Washington의 F5 Networks, Inc.에 의해 제조된 WebAccelerator 및 BigIP로 지칭되는 임의의 제품 실시예를 포함한다. 다른 실시예에서, 기기(200)는 Sunnyvale, California의 Juniper Networks, Inc.에 의해 제조된 SA 700, SA 2000, SA 4000 및 SA 6000 디바이스와 같은 임의의 DX 가속 디바이스 플랫폼 및/또는 SSL VPN 디바이스 시리즈를 포함한다. 또 다른 실시예에서, 기기(200)는 Cisco ACE Application Control Engine Module 서비스 소프트웨어 및 네트워크 모듈 및 Cisco AVS Series Application Velocity System과 같은, San Jose, California의 Cisco Systems, Inc.에 의해 제조된 임의의 어플리케이션 가속화 및/또는 보안 관련 기기 및/또는 소프트웨어를 포함한다.
일 실시예에서, 시스템은 복수의 논리적으로-그룹화된 서버(106)를 포함할 수 있다. 이들 실시예에서, 서버의 논리적 그룹은 서버 팜(farm)(38)으로 지칭될 수 있다. 이들 실시예 중 일부에서, 서버(106)는 지리적으로 분산될 수 있다. 일부 경우에, 팜(38)은 단일 엔티티로서 관리될 수 있다. 다른 실시예에서, 서버 팜(38)은 복수의 서버 팜(38)을 포함한다. 일 실시예에서, 서버 팜은 하나 이상의 클라이언트(102)를 대신해서 하나 이상의 어플리케이션을 실행한다.
각 팜(38) 내의 서버(106)는 이종(heterogeneous)일 수 있다. 하나 이상의 서버(106)는 하나의 유형의 운영 체제 플랫폼(예를 들어, Redmond, Washington의 Microsoft Corp.에 의해 제조된 WINDOWS NT)에 따라 동작할 수 있는 반면, 다른 서버(106) 중 하나 이상은 다른 유형의 운영 체제 플랫폼(예를 들어, Unix 또는 Linux)에 따라 동작할 수 있다. 각 팜(38)의 서버(106)는 동일한 팜(38)의 다른 서버(106)에 물리적으로 근접할 필요는 없다. 따라서, 팜(38)으로서 논리적으로 그룹화된 서버(106)의 그룹은 광역 네트워크(wide-area network: WAN) 접속 또는 중간 영역 네트워크(medium-area network: MAN) 접속을 사용하여 상호 접속될 수 있다. 예를 들어, 팜(38)은 상이한 대륙 또는 대륙, 국가, 주, 도시, 캠퍼스 또는 룸의 상이한 지역에 물리적으로 위치한 서버(106)를 포함할 수 있다. 서버(106)가 근거리 네트워크(local-area network: LAN) 접속 또는 어떤 형태의 직접 접속을 사용하여 접속되는 경우, 팜(38) 내에서의 서버(106) 사이의 데이터 송신 속도가 증가될 수 있다.
서버(106)는 파일 서버, 어플리케이션 서버, 웹 서버, 프록시 서버 또는 게이트웨이 서버로 지칭될 수 있다. 일부 실시예에서, 서버(106)는 어플리케이션 서버 또는 마스터 어플리케이션 서버로서 기능하는 능력을 가질 수 있다. 일 실시예에서, 서버(106)는 액티브 디렉토리(Active Directory)를 포함할 수 있다. 클라이언트(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)로 전달하고 제2 서버(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)는 Ft. Lauderdale, Florida의 Citrix Systems, Inc.에 의해 제조된 CloudBridge®로 지칭되는 임의의 제품 실시예이다. 다른 실시예에서, 기기(205)는 Seattle, Washington의 F5 Networks, Inc.에 의해 제조된 BIG-IP 링크 제어기 및 WANjet으로 지칭되는 임의의 제품 실시예를 포함한다. 다른 실시예에서, 기기(205)는 Sunnyvale, California의 Juniper Networks, Inc.에 의해 제조된 WX 및 WXC WAN 가속 디바이스 플랫폼 중 임의의 것을 포함한다. 일부 실시예에서, 기기(205)는 San Francisco, California의 Riverbed Technology에 의해 제조된 임의의 WAN 최적화 기기의 스틸헤드 라인 중 임의의 것을 포함한다. 다른 실시예에서, 기기(205)는 Roseland, New Jersey의 Expand Networks Inc.에 의해 제조된 WAN 관련 디바이스 중 임의의 것을 포함한다. 일 실시예에서, 기기(205)는 Packeteer가 제공하는 PacketShaper, iShared 및 SkyX 제품 실시예와 같은, Cupertino, California의 Packeteer Inc.에 의해 제조된 임의의 WAN 관련 기기를 포함한다. 또 다른 실시예에서, 기기(205)는 Cisco Wide Area Network Application services 소프트웨어 및 네트워크 모듈 및 Wide Area Network 엔진 기기와 같은, San Jose, California의 Cisco Systems, Inc.에 의해 제조된 임의의 WAN 관련 기기 및/또는 소프트웨어를 포함한다.
일 실시예에서, 기기(205)는 지점 또는 원격 사무소에 어플리케이션 및 데이터 가속 서비스를 제공한다. 일 실시예에서, 기기(205)는 WAFS(Wide Area File Services)의 최적화를 포함한다. 다른 실시예에서, 기기(205)는 CIFS(Common Internet File System) 프로토콜을 통하는 것과 같이 파일의 전달을 가속화한다. 다른 실시예에서, 기기(205)는 어플리케이션 및 데이터의 전달을 가속화하기 위해 메모리 및/또는 저장소에 캐싱(cashing)을 제공한다. 일 실시예에서, 기기(205)는 임의의 레벨의 네트워크 스택 또는 임의의 프로토콜 또는 네트워크 계층에서 네트워크 트래픽의 압축을 제공한다. 다른 실시예에서, 기기(205)는 WAN 접속을 통한 어플리케이션 및 데이터의 전달을 가속화하기 위해 전송 계층 프로토콜 최적화, 흐름 제어, 성능 향상 또는 수정 및/또는 관리를 제공한다. 예를 들어, 일 실시예에서, 기기(205)는 TCP(Transport Control Protocol) 최적화를 제공한다. 다른 실시예에서, 기기(205)는 임의의 세션 또는 어플리케이션 계층 프로토콜에 대한 최적화, 흐름 제어, 성능 향상 또는 수정 및/또는 관리를 제공한다.
다른 실시예에서, 기기(205)는 임의의 유형 및 형태의 데이터 또는 정보를 다른 기기(205')에 존재, 기능 또는 능력을 알리기 위해 네트워크 패킷의 커스텀 또는 표준 TCP 및/또는 IP 헤더 필드 또는 옵션 필드로 인코딩하였다. 다른 실시예에서, 기기(205')는 TCP 및/또는 IP 헤더 필드 또는 옵션 모두에서 인코딩된 데이터를 사용하여 다른 기기(205')와 통신할 수 있다. 예를 들어, 기기는 TCP 옵션(들) 또는 IP 헤더 필드 또는 옵션을 사용하여 WAN 가속과 같은 기능을 수행하거나 서로 연계하여 동작하기 위해 기기(205, 205')에 의해 사용될 하나 이상의 파라미터를 전달할 수 있다.
일부 실시예에서, 기기(200)는 기기(205 및 205') 사이에서 전달되는 TCP 및/또는 IP 헤더 및/또는 옵션 필드로 인코딩된 정보 중 임의의 것을 보존한다. 예를 들어, 기기(200)는 클라이언트와 서버 횡단 기기(205 및 205') 사이의 전송 계층 접속과 같이, 기기(200)를 횡단하는 전송 계층 접속을 종료할 수 있다. 일 실시예에서, 기기(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)는 클라이언트(102)에 대한 컴퓨팅 환경(15) 또는 그 임의의 일부의 전달을 가속화한다. 일 실시예에서, 기기(200)는 어플리케이션 전달 시스템(190)에 의해 컴퓨팅 환경(15)의 전달을 가속화한다. 예를 들어, 본원에 설명되는 실시예는 중앙 회사 데이터 센터로부터 회사의 지점과 같은 원격 사용자 위치로 어플리케이션에 의해 프로세싱 가능한 스트리밍 어플리케이션 및 데이터 파일의 전달을 가속화하는 데 사용될 수 있다. 다른 실시예에서, 기기(200)는 클라이언트(102)와 서버(106) 사이의 전송 계층 트래픽을 가속화한다. 기기(200)는 1) 전송 계층 접속 풀링(pooling), 2) 전송 계층 연결 다중화(multiplexing), 3) 전송 제어 프로토콜 버퍼링, 4) 압축 및 5) 캐싱과 같이, 서버(106)로부터 클라이언트(102)로의 임의의 전송 계층 페이로드를 가속화하기 위한 가속 기술을 제공할 수 있다. 일부 실시예에서, 기기(200)는 클라이언트(102)로부터의 요청에 응답하여 서버(106)의 부하 밸런싱을 제공한다. 다른 실시예에서, 기기(200)는 하나 이상의 서버(106)에 대한 액세스를 제공하기 위해 프록시 또는 액세스 서버로서 작용한다. 다른 실시예에서, 기기(200)는 SSL VPN 접속과 같이, 클라이언트(102)의 제1 네트워크(104)로부터 서버(106)의 제2 네트워크(104')로의 안전한 가상 사설 네트워크 접속을 제공한다. 또 다른 실시예에서, 기기(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)은 XenApp® 또는 XenDesktop®과 같은 Citrix Systems, Inc.의 Citrix Workspace Suite™의 임의의 부분 및/또는 Microsoft Corporation에 의해 제조된 Microsoft® Windows Terminal Services 중 임의의 것을 포함한다. 일 실시예에서, 어플리케이션 전달 시스템(190)은 원격-디스플레이 프로토콜 또는 이와 다르게 원격-기반 또는 서버-기반 컴퓨팅을 통해 하나 이상의 어플리케이션을 클라이언트(102) 또는 사용자에게 전달할 수 있다. 다른 실시예에서, 어플리케이션 전달 시스템(190)은 어플리케이션의 스트리밍을 통해 하나 이상의 어플리케이션을 클라이언트 또는 사용자에게 전달할 수 있다.
일 실시예에서, 어플리케이션 전달 시스템(190)은 어플리케이션 실행 방법에 대한 액세스 선택 및 어플리케이션의 전달을 제어 및 관리하기 위한 정책 엔진(195)을 포함한다. 일부 실시예에서, 정책 엔진(195)은 사용자 또는 클라이언트(102)가 액세스할 수 있는 하나 이상의 어플리케이션을 결정한다. 다른 실시예에서, 정책 엔진(195)은, 어플리케이션이 어떻게 사용자 또는 클라이언트(102)에게 전달되어야 하는지, 예를 들어 실행 방법을 결정한다. 일부 실시예에서, 어플리케이션 전달 시스템(190)은 로컬 실행을 위해 서버-기반 컴퓨팅, 어플리케이션을 로컬로 클라이언트(120)에 스트리밍 또는 전달하는 것과 같은 어플리케이션 실행 방법을 선택하기 위한 복수의 전달 기술을 제공한다.
일 실시예에서, 클라이언트(102)는 어플리케이션 프로그램의 실행을 요청하고, 서버(106)를 포함하는 어플리케이션 전달 시스템(190)은 어플리케이션 프로그램을 실행하는 방법을 선택한다. 일부 실시예에서, 서버(106)는 클라이언트(102)로부터 인증서를 수신한다. 다른 실시예에서, 서버(106)는 클라이언트(102)로부터 이용 가능한 어플리케이션의 목록에 대한 요청을 수신한다. 일 실시예에서, 인증서의 요청 또는 수신에 응답하여, 어플리케이션 전달 시스템(190)은 클라이언트(102)에 이용 가능한 복수의 어플리케이션 프로그램을 열거한다. 어플리케이션 전달 시스템(190)은 열거된 어플리케이션을 실행하라는 요청을 수신한다. 어플리케이션 전달 시스템(190)은 예를 들어, 정책 엔진(195)의 정책에 응답하여 열거된 어플리케이션을 실행하기 위한 미리 정해진 수의 방법 중 하나를 선택한다. 어플리케이션 전달 시스템(190)은 클라이언트(102)가 서버(106) 상에서 어플리케이션 프로그램의 실행에 의해 생성된 어플리케이션 출력 데이터를 수신할 수 있게 하는 어플리케이션의 실행 방법을 선택할 수 있다. 어플리케이션 전달 시스템(190)은 어플리케이션을 포함하는 복수의 어플리케이션 파일을 검색한 후에 로컬 머신(10)이 어플리케이션 프로그램을 로컬로 실행할 수 있게 하는 어플리케이션의 실행 방법을 선택할 수 있다. 또 다른 실시예에서, 어플리케이션 전달 시스템(190)은 어플리케이션을 네트워크(104)를 통해 클라이언트(102)로 스트리밍하기 위한 어플리케이션의 실행 방법을 선택할 수 있다.
클라이언트(102)는 임의의 유형 및/또는 형태의 소프트웨어, 프로그램, 또는 임의의 유형 및/또는 형태의 웹 브라우저, 웹-기반 클라이언트, 클라이언트-서버 어플리케이션, 씬(thin)-클라이언트 컴퓨팅 클라이언트, ActiveX 컨트롤 또는 Java 애플릿과 같은 실행 가능 명령, 또는 클라이언트(102) 상에서 실행될 수 있는 임의의 다른 유형 및/또는 형태의 실행 가능 명령일 수 있는 어플리케이션을 실행, 동작 또는 다르게 제공할 수 있다. 일부 실시예에서, 어플리케이션은 서버(106) 상에서 클라이언트(102)를 대신하여 실행되는 서버-기반 또는 원격-기반 어플리케이션일 수 있다. 일 실시예에서, 서버(106)는 Ft. Lauderdale, Florida의 Citrix Systems, Inc.에 의해 제조된 ICA(Independent Computing Architecture) 프로토콜 또는 Redmond, Washington의 Microsoft Corporation에 의해 제조된 RDP(Remote Desktop Protocol)와 같은 임의의 씬-클라이언트 또는 원격-디스플레이 프로토콜을 사용하여 클라이언트(102)에 출력을 표시할 수 있다. 어플리케이션은 임의의 유형의 프로토콜을 사용할 수 있으며, 예를 들어, 이는 HTTP 클라이언트, FTP 클라이언트, Oscar 클라이언트 또는 Telnet 클라이언트일 수 있다. 다른 실시예에서, 어플리케이션은 소프트 IP 전화와 같은 VoIP 통신과 관련된 임의의 유형의 소프트웨어를 포함한다. 다른 실시예에서, 어플리케이션은 비디오 및/또는 오디오 스트리밍을 위한 어플리케이션과 같은 실시간 데이터 통신과 관련된 임의의 어플리케이션을 포함한다.
일부 실시예에서, 서버(106) 또는 서버 팜(38)은 씬-클라이언트 컴퓨팅 또는 원격 디스플레이 프리젠테이션 어플리케이션을 제공하는 어플리케이션과 같은 하나 이상의 어플리케이션을 실행할 수 있다. 일 실시예에서, 서버(106) 또는 서버 팜(38)은 어플리케이션으로서 XenApp®또는 XenDesktop®과 같은 Citrix Systems, Inc.의 Citrix Workspace Suite™의 임의의 부분 및/또는 Microsoft Corporation에 의해 제조된 Microsoft®Windows Terminal Services 중 임의의 것을 실행한다. 일 실시예에서, 어플리케이션은 Fort Lauderdale, Florida의 Citrix Systems, Inc.에 의해 개발된 ICA 클라이언트이다. 다른 실시예에서, 어플리케이션은 Redmond, Washington의 Microsoft Corporation에 의해 개발된 RDP(Remote Desktop) 클라이언트를 포함한다. 또한, 서버(106)는 어플리케이션을 실행할 수 있으며, 이는 예를 들어, Redmond, Washington의 Microsoft Corporation에 의해 제조된 Microsoft Exchange와 같은 이메일 서비스를 제공하는 어플리케이션 서버, 웹 또는 인터넷 서버, 또는 데스크탑 공유 서버 또는 협업 서버일 수 있다. 일부 실시예에서, 임의의 어플리케이션은 Fort Lauderdale, Florida의 Citrix Systems, Inc.에 의해 제공되는 GoToMeeting™, San Jose, California의 Cisco Systems, Inc.에 의해 제공되는 WebEx™ 또는 Redmond, Washington의 Microsoft Corporation에 의해 제공되는 Microsoft Office Live Meeting과 같은 임의의 유형의 호스팅된 서비스 또는 제품을 포함할 수 있다.
여전히 도 1d를 참조하면, 네트워크 환경의 실시예는 모니터링 서버(106A)를 포함할 수 있다. 모니터링 서버(106A)는 임의의 유형 및 형태의 성능 모니터링 서비스(198)를 포함할 수 있다. 성능 모니터링 서비스(198)는 모니터링, 측정 및/또는 관리 소프트웨어 및/또는 데이터 수집, 집계, 분석, 관리 및 보고를 포함하는 하드웨어를 포함할 수 있다. 일 실시예에서, 성능 모니터링 서비스(198)는 하나 이상의 모니터링 에이전트(197)를 포함한다. 모니터링 에이전트(197)는 클라이언트(102), 서버(106) 또는 기기(200, 205)와 같은 디바이스 상에서 모니터링, 측정 및 데이터 수집 활동을 수행하기 위한 임의의 소프트웨어, 하드웨어 또는 이들의 조합을 포함한다. 일부 실시예에서, 모니터링 에이전트(197)는 Visual Basic 스크립트 또는 Javascript와 같은 임의의 유형 및 형태의 스크립트를 포함한다. 일 실시예에서, 모니터링 에이전트(197)는 디바이스의 임의의 어플리케이션 및/또는 사용자에게 투명하게 실행된다. 일부 실시예에서, 모니터링 에이전트(197)는 어플리케이션 또는 클라이언트(102)에 눈에 띄지 않게 설치 및 동작된다. 또 다른 실시예에서, 모니터링 에이전트(197)는 어플리케이션 또는 디바이스에 대한 어떠한 계측 없이 설치 및 동작된다.
일부 실시예에서, 모니터링 에이전트(197)는 미리 정해진 빈도로 데이터를 모니터링, 측정 및 수집한다. 다른 실시예에서, 모니터링 에이전트(197)는 임의의 유형 및 형태의 이벤트의 검출에 기초하여 데이터를 모니터링, 측정 및 수집한다. 예를 들어, 모니터링 에이전트(197)는 웹 페이지에 대한 요청 또는 HTTP 응답의 수신을 탐지할 때 데이터를 수집할 수 있다. 다른 예에서, 모니터링 에이전트(197)는 마우스 클릭과 같은 임의의 사용자 입력 이벤트의 검출시에 데이터를 수집할 수 있다. 모니터링 에이전트(197)는 임의의 모니터링, 측정 또는 수집된 데이터를 모니터링 서비스(198)에 보고하거나 제공할 수 있다. 일 실시예에서, 모니터링 에이전트(197)는 스케줄 또는 미리 정해진 빈도에 따라 모니터링 서비스(198)에 정보를 송신한다. 다른 실시예에서, 모니터링 에이전트(197)는 이벤트의 검출시에 정보를 모니터링 서비스(198)로 송신한다.
일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 클라이언트(102), 서버(106), 서버 팜(38), 기기(200), 기기(205) 또는 네트워크 접속과 같은 임의의 네트워크 자원 또는 네트워크 인프라스트럭처 요소의 모니터링 및 성능 측정을 수행한다. 일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 TCP 또는 UDP 접속과 같은 임의의 전송 계층 접속의 모니터링 및 성능 측정을 수행한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 네트워크 대기 시간을 모니터링하고 측정한다. 또 하나의 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 대역폭 이용을 모니터링하고 측정한다.
다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 최종-사용자 응답 시간을 모니터링하고 측정한다. 일부 실시예에서, 모니터링 서비스(198)는 어플리케이션의 모니터링 및 성능 측정을 수행한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션에 대한 임의의 세션 또는 접속의 모니터링 및 성능 측정을 수행한다. 일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 브라우저의 성능을 모니터링하고 측정한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 HTTP 기반 트랜잭션의 성능을 모니터링하고 측정한다. 일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 VoIP(Voice over IP) 어플리케이션 또는 세션의 성능을 모니터링하고 측정한다. 다른 실시예에서, 모니터링 서비스(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)와 같은 하나 이상의 기기를 통해 서버(106)로부터 클라이언트로(102)의 어플리케이션 및/또는 데이터의 전달의 모니터링 및 성능 측정을 수행한다. 일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 가상화된 어플리케이션의 전달 성능을 모니터링하고 측정한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 스트리밍 어플리케이션의 전달 성능을 모니터링하고 측정한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 클라이언트(102)로의 데스크탑 어플리케이션의 전달 및/또는 클라이언트(102) 상의 데스크탑 어플리케이션의 실행의 성능을 모니터링하고 측정한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 클라이언트/서버 어플리케이션의 성능을 모니터링하고 측정한다.
일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션 전달 시스템(190)에 대한 어플리케이션 성능 관리를 제공하도록 설계 및 구성된다. 예를 들어, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 Citrix Presentation Server를 통해 어플리케이션의 전달 성능을 모니터링, 측정 및 관리할 수 있다. 이 예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 개별 ICA 세션을 모니터링한다. 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션 및 네트워킹 성능뿐만 아니라 전체 및 세션 당 시스템 자원 사용량을 측정할 수 있다. 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 주어진 사용자 및/또는 사용자 세션에 대한 활성 서버를 식별할 수 있다. 일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션 전달 시스템(190)과 어플리케이션 및/또는 데이터베이스 서버 사이의 백-엔드 접속을 모니터링한다. 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 사용자-세션 또는 ICA 세션 당 네트워크 대기 시간, 지연 및 볼륨을 측정할 수 있다.
일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 총 메모리 사용량, 사용자 세션 당 및/또는 프로세스 당과 같은 어플리케이션 전달 시스템(190)에 대한 메모리 사용량을 측정하고 모니터링한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 총 CPU 사용량, 사용자 세션 당 및/또는 프로세스 당과 같은 어플리케이션 전달 시스템(190)의 CPU 사용량을 측정하고 모니터링한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션, 서버(106), 또는 Citrix Presentation Server와 같은 어플리케이션 전달 시스템(190)에 로그-인하는 데 필요한 시간을 측정하고 모니터링한다. 일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 사용자가 어플리케이션, 서버(106) 또는 어플리케이션 전달 시스템(190)에 로그인한 기간을 측정하고 모니터링한다. 일부 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션, 서버(106) 또는 어플리케이션 전달 시스템(190) 세션에 대한 활성 및 비활성 세션 카운트를 측정하고 모니터링한다. 또 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 사용자 세션 대기 시간을 측정 및 모니터링한다.
또 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 임의의 유형 및 형태의 서버 메트릭(metric)을 측정 및 모니터링한다. 일 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 시스템 메모리, CPU 사용량 및 디스크 저장과 관련된 메트릭을 측정 및 모니터링한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 초 당 페이지 결함과 같은 페이지 결함과 관련된 메트릭을 측정 및 모니터링한다. 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 왕복 시간 메트릭을 측정 및 모니터링한다. 또 다른 실시예에서, 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 어플리케이션 충돌, 오류 및/또는 정지와 관련된 메트릭을 측정 및 모니터링한다.
일부 실시예에서, 모니터링 서비스(198) 및 모니터링 에이전트(197)는 Ft. Lauderdale, Florida의 Citrix Systems, Inc.에 의해 제조된 EdgeSight로 지칭되는 임의의 제품 실시예를 포함한다. 다른 실시예에서, 성능 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 Palo Alto, California의 Symphoniq Corporation에 의해 제조된 True View 제품군으로 지칭되는 제품 실시예의 임의의 부분을 포함한다. 일 실시예에서, 성능 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 San Francisco, California의 TeaLeaf Technology Inc.에 의해 제조된 TeaLeaf CX 제품군으로 지칭되는 제품 실시예의 임의의 부분을 포함한다. 다른 실시예에서, 성능 모니터링 서비스(198) 및/또는 모니터링 에이전트(197)는 Houston, Texas의 BMC Software, Inc.에 의해 제조된 BMC Performance Manager and 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)으로부터 페칭(fetching)된 명령에 응답하고 이를 프로세싱하는 임의의 로직 회로이다. 많은 실시예에서, 중앙 처리 장치(101)는 Mountain View, California의 Intel Corporation에 의해 제조된 것; Schaumburg, Illinois의 Motorola Corporation에 의해 제조된 것; Santa Clara, California의 Transmeta Corporation에 의해 제조된 것; White Plains, New York의 International Business Machines에 의해 제조된 RS/6000 프로세서; 또는 Sunnyvale, California의 Advanced Micro Devices에 의해 제조된 것과 같은 마이크로프로세서 유닛에 의해 제공된다. 컴퓨팅 디바이스(100)는 이들 프로세서 중 임의의 것 또는 본원에 설명되는 바와 같이 동작할 수 있는 임의의 다른 프로세서에 기초할 수 있다.
메인 메모리 유닛(122)은 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), ESDRAM(Enhanced SDRAM), SLDRAM(SyncLink DRAM), DRDRAM(Direct Rambus DRAM) 또는 FRAM(Ferroelectric RAM)과 같이 데이터를 저장할 수 있고 임의의 저장 위치가 마이크로프로세서(101)에 의해 직접 액세스될 수 있게 하는 하나 이상의 메모리 칩일 수 있다. 메인 메모리(122)는 상술한 메모리 칩 중 임의의 것 또는 본원에 설명되는 바와 같이 동작할 수 있는 임의의 다른 이용 가능한 메모리 칩에 기초할 수 있다. 도 1e에 나타낸 실시예에서, 프로세서(101)는 시스템 버스(150)를 통해 메인 메모리(122)와 통신한다(아래에 보다 상세히 설명됨). 도 1f는 프로세서(101)가 메모리 포트(103)를 통해 메인 메모리(122)와 직접 통신하는 컴퓨팅 디바이스(100)의 실시예를 도시한다. 예를 들어, 도 1f에서 메인 메모리(122)는 DRDRAM일 수 있다.
도 1f는 메인 프로세서(101)가 때로는 후측 버스라고도 칭해지는 2차 버스를 통해 캐시 메모리(140)와 직접 통신하는 실시예를 도시한다. 다른 실시예에서, 메인 프로세서(101)는 시스템 버스(150)를 사용하여 캐시 메모리(140)와 통신한다. 캐시 메모리(140)는 통상적으로 메인 메모리 유닛(122)보다 빠른 응답 시간을 가지며 통상적으로 SRAM, BSRAM 또는 EDRAM에 의해 제공된다. 도 1f에 나타낸 실시예에서, 프로세서(101)는 로컬 시스템 버스(150)를 통해 다양한 I/O 디바이스(130)와 통신한다. VESA VL 버스, ISA 버스, EISA 버스, MCA(MicroChannel Architecture) 버스, PCI 버스, PCI-X 버스, PCI-Express 버스 또는 NuBus를 포함하는 다양한 버스가 중앙 처리 장치(101)를 임의의 I/O 디바이스(130)에 접속하는 데 사용될 수 있다. I/O 디바이스(130)가 비디오 디스플레이(124)인 실시예에서, 프로세서(101)는 디스플레이(124)와 통신하기 위해 AGP(Advanced Graphics Port)를 사용할 수 있다. 도 1f는 메인 프로세서(101)가 하이퍼트랜스포트(HyperTransport), 래피드(Rapid) I/O 또는 인피니밴드(InfiniBand)를 통해 I/O 디바이스(130b)와 직접 통신하는 컴퓨팅 디바이스(100)의 실시예를 도시한다. 도 If는 또한 로컬 버스와 직접 통신이 혼합되는 실시예를 도시하며: 프로세서(101)는 I/O 디바이스(130a)와 직접 통신하면서 로컬 인터커넥트 버스를 사용하여 I/O 디바이스(130b)와 통신한다.
컴퓨팅 디바이스(100)는 3.5 인치, 5.25 인치 디스크 또는 ZIP 디스크와 같은 플로피 디스크를 수용하기 위한 플로피 디스크 드라이브, CD-ROM 드라이브, CD-R/RW 드라이브, DVD-ROM 드라이브, 다양한 포맷의 테이프 드라이브, USB 디바이스, 하드-드라이브 또는 임의의 클라이언트 에이전트(120) 또는 그 일부와 같은 소프트웨어 및 프로그램을 설치하기에 적절한 임의의 다른 디바이스와 같은 임의의 적절한 설치 디바이스(116)를 지원할 수 있다. 컴퓨팅 디바이스(100)는 운영 체제 및 다른 관련 소프트웨어를 저장하고 클라이언트 에이전트(120)와 관련된 임의의 프로그램과 같은 어플리케이션 소프트웨어 프로그램을 저장하기 위한 하나 이상의 하드 디스크 드라이브 또는 독립 디스크의 리던던트 어레이와 같은 저장 디바이스(128)를 추가로 포함할 수 있다. 선택적으로, 임의의 설치 디바이스(116)는 또한 저장 디바이스(128)로서 사용될 수 있다. 또한, 운영 체제 및 소프트웨어는 부팅 가능한 매체, 예를 들어 KNOPPIX®와 같은 부팅 가능한 CD, knoppix.net에서 GNU/Linux 배포판으로 이용가능한 GNU/Linux용 부팅 가능 CD로부터 실행될 수 있다.
또한, 컴퓨팅 디바이스(100)는 표준 전화선, LAN 또는 WAN 링크(예를 들어, 802.11, T1, T3, 56kb, X.25), 광대역 접속(예를 들어, ISDN, 프레임 릴레이(Frame Relay), ATM), 무선 접속 또는 상술한 것의 임의의 것 또는 전부의 일부 조합에 제한되지는 않지만 이를 포함하는 다양한 접속을 통해 LAN(Local Area Network), WAN(Wide Area Network) 또는 인터넷에 인터페이싱하기 위한 네트워크 인터페이스(118)를 포함할 수 있다. 네트워크 인터페이스(118)는 내장형 네트워크 어댑터, 네트워크 인터페이스 카드, PCMCIA 네트워크 카드, 카드 버스 네트워크 어댑터, 무선 네트워크 어댑터, USB 네트워크 어댑터, 모뎀 또는 컴퓨팅 디바이스(100)를 본원에 설명되는 동작을 수행하고 통신할 수 있는 임의의 유형의 네트워크에 인터페이싱하기에 적절한 임의의 다른 디바이스를 포함할 수 있다.
광범위하게 다양한 I/O 디바이스(130a-130n)가 컴퓨팅 디바이스(100)에 존재할 수 있다. 입력 디바이스는 키보드, 마우스, 트랙패드, 트랙볼, 마이크로폰 및 드로잉 태블릿(drawing tablet)을 포함한다. 출력 디바이스는 비디오 디스플레이, 스피커, 잉크젯 프린터, 레이저 프린터 및 염료-승화(dye-sublimation) 프린터를 포함한다. I/O 디바이스(130)는 도 1e에 나타낸 바와 같이 I/O 제어기(123)에 의해 제어될 수 있다. I/O 제어기(123)는 키보드(126) 및 포인팅 디바이스(127), 예를 들어, 마우스 또는 광학 펜과 같은 하나 이상의 I/O 디바이스를 제어할 수 있다. 또한, I/O 디바이스는 또한 컴퓨팅 디바이스(100)를 위한 저장소(128) 및/또는 설치 매체(116)를 제공할 수 있다. 또 다른 실시예에서, 컴퓨팅 디바이스(100)는 Los Alamitos, California의 Twintech Industry, Inc.에 의해 제조된 디바이스의 USB Flash Drive line과 같은 휴대용 USB 저장 디바이스를 수용하도록 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)는 USB 버스, 애플 데스크탑(Apple Desktop) 버스, RS-232 직렬 연결, SCSI 버스, FireWire 버스, FireWire 800 버스, 이더넷(Ethernet) 버스, 애플토크(AppleTalk) 버스, 기가비트 이더넷(Gigabit Ethernet) 버스, 비동기 전송 모드(Asynchronous Transfer Mode) 버스, HIPPI 버스, Super HIPPI 버스, SerialPlus 버스, SCI/LAMP 버스, FibreChannel 버스 또는 Serial Attached 소형 컴퓨터 시스템 인터페이스 버스와 같이, 외부 통신 버스와 시스템 버스(150) 사이의 브릿지(170)일 수 있다.
도 1e 및 도 1f에 도시된 종류의 컴퓨팅 디바이스(100)는 시스템 자원에 대한 작업 및 액세스의 스케줄링을 제어하는 운영 체제의 제어 하에서 통상적으로 동작한다. 컴퓨팅 디바이스(100)는 임의의 버전의 Microsoft® Windows 운영 체제, Unix 및 Linux 운영 체제의 다른 릴리스, 임의의 버전의 Macintosh 컴퓨터용 Mac OS®, 임의의 내장형 운영 체제, 임의의 실시간 운영 체제, 임의의 개방 소스 운영 체제, 임의의 독점 운영 체제, 모바일 컴퓨팅 디바이스용 임의의 운영 체제 또는 컴퓨팅 디바이스에서 실행되고 본원에 설명되는 동작을 수행할 수 있는 임의의 다른 운영 체제와 같은 임의의 운영 체제를 실행할 수 있다. 통상적인 운영 체제는 그 중에서, Redmond, Washington의 Microsoft Corporation에 의해 모두 제조된 WINDOWS 3.x, WINDOWS 95, WINDOWS 98, WINDOWS 2000, WINDOWS NT 3.51, WINDOWS NT 4.0, WINDOWS CE 및 WINDOWS XP; Cupertino, California의 Apple Computer에 의해 제조된 MacOS; Armonk, New York의 International Business Machines에 의해 제조된 OS/2; 및 Salt Lake City, Utah의 Caldera Corp.에 의해 배포된 무료 이용 가능 운영 체제인 Linux, 또는 임의의 유형 및/또는 형태의 UNIX 운영 체제를 포함한다.
다른 실시예에서, 컴퓨팅 디바이스(100)는 상이한 프로세서, 운영 체제 및 디바이스와 일치하는 입력 디바이스를 가질 수 있다. 예를 들어, 일 실시예에서, 컴퓨터(100)는 Palm, Inc.에 의해 제조된 Treo 180, 270, 1060, 600 또는 650 스마트 폰이다. 이 실시예에서, Treo 스마트 폰은 PalmOS 운영 체제의 제어 하에 동작되며 스타일러스 입력 디바이스뿐만 아니라 5-방향 내비게이터 디바이스를 포함한다. 또한, 컴퓨팅 디바이스(100)는 통신이 가능하고 본원에 설명되는 동작을 수행하기에 충분한 프로세스 능력 및 메모리 용량을 갖는 임의의 워크스테이션, 데스크탑 컴퓨터, 랩탑 또는 노트북 컴퓨터, 서버, 핸드헬드 컴퓨터, 모바일 전화, 임의의 다른 컴퓨터, 또는 다른 형태의 컴퓨팅 또는 원격 통신 디바이스일 수 있다.
도 1g에 나타낸 바와 같이, 컴퓨팅 디바이스(100)는 복수의 프로세서를 포함할 수 있고, 명령의 동시 실행 또는 한 피스보다 많은 데이터에 대한 하나의 명령의 동시 실행을 위한 기능을 제공할 수 있다. 일부 실시예에서, 컴퓨팅 디바이스(100)는 하나 이상의 코어를 갖는 병렬 프로세서를 포함할 수 있다. 이들 실시예 중 하나에서, 컴퓨팅 디바이스(100)는 복수의 프로세서 및/또는 복수의 프로세서 코어를 갖는 공유 메모리 병렬 디바이스이며, 단일 글로벌 주소 공간으로서 모든 가용 메모리에 액세스한다. 이들 실시예들 중 다른 실시예에서, 컴퓨팅 디바이스(100)는 각각 로컬 메모리에만 액세스하는 복수의 프로세서를 갖는 분산 메모리 병렬 디바이스이다. 이들 실시예 중 또 다른 실시예에서, 컴퓨팅 디바이스(100)는 공유되는 일부 메모리 및 특정 프로세서 또는 프로세서의 서브세트에 의해서만 액세스될 수 있는 일부 메모리를 모두 갖는다. 이들 실시예 중 또 다른 실시예에서, 멀티-코어 마이크로 프로세서와 같은 컴퓨팅 디바이스(100)는 둘 이상의 독립 프로세서를 단일 패키지, 종종 단일 집적 회로(IC)로 조합한다. 이들 실시예 중 또 다른 실시예에서, 컴퓨팅 디바이스(100)는 CELL BROADBAND ENGINE 아키텍처를 가지며 전력 프로세서 요소 및 복수의 시너지 프로세싱 요소, 요소 인터커넥트 버스로 지칭될 수 있는 내부 고속 버스에 의해 함께 링크되는 전력 프로세서 요소 및 복수의 시너지 프로세싱 요소를 포함하는 칩을 포함한다.
일부 실시예에서, 프로세서는 복수의 데이터(SIMD) 상에서 단일 명령을 동시에 실행하기 위한 기능을 제공한다. 다른 실시예에서, 프로세서는 복수의 데이터(MIMD) 상에서 복수의 명령을 동시에 실행하기 위한 기능을 제공한다. 또 다른 실시예에서, 프로세서는 단일 디바이스에서 SIMD 및 MIMD 코어의 임의의 조합을 사용할 수 있다.
일부 실시예에서, 컴퓨팅 디바이스(100)는 그래픽 프로세싱 유닛을 포함할 수 있다. 도 1h에 나타낸 이들 실시예 중 하나에서, 컴퓨팅 디바이스(100)는 적어도 하나의 중앙 처리 장치(101) 및 적어도 하나의 그래픽 프로세싱 유닛(101')을 포함한다. 이들 실시예 중 다른 실시예에서, 컴퓨팅 디바이스(100)는 적어도 하나의 병렬 프로세싱 유닛 및 적어도 하나의 그래픽 프로세싱 유닛(101')을 포함한다. 이들 실시예 중 또 다른 실시예에서, 컴퓨팅 디바이스(100)는 임의의 유형의 복수의 프로세싱 유닛을 포함하고, 복수의 프로세싱 유닛 중 하나는 그래픽 프로세싱 유닛(101')을 포함한다.
일부 실시예에서, 제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) 및 네트워크를 통해 송신 및 수신된 데이터의 보안 소켓 계층(Secure Socket Layer) 프로세싱과 관련된 기능을 수행하기 위한 암호화 프로세서(260)를 포함한다. 일부 실시예에서, 중앙 처리 장치(262)가 단일 프로세서에서 암호화 프로세서(260)의 기능을 수행할 수 있다. 부가적으로, 하드웨어 계층(206)은 프로세싱 유닛(262) 및 암호화 프로세서(260) 각각에 대해 복수의 프로세서를 포함할 수 있다. 프로세서(262)는 도 1e 및 도 1f와 관련하여 상술한 프로세서(101) 중 임의의 것을 포함할 수 있다. 예를 들어, 일 실시예에서, 기기(200)는 제1 프로세서(262) 및 제2 프로세서(262')를 포함한다. 다른 실시예에서, 프로세서(262 또는 262')는 멀티-코어 프로세서를 포함한다.
기기(200)의 하드웨어 계층(206)은 일반적으로 암호화 프로세서(260)로 나타내어지지만, 프로세서(260)는 SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security) 프로토콜과 같은 임의의 암호화 프로토콜과 관련된 기능을 수행하기 위한 프로세서일 수 있다. 일부 실시예에서, 프로세서(260)는 범용 프로세서(GPP)일 수 있고, 추가의 실시예에서, 임의의 보안 관련 프로토콜의 프로세싱을 수행하기 위한 실행 가능한 명령을 가질 수 있다.
기기(200)의 하드웨어 계층(206)이 도 2에서 특정 요소를 갖는 것으로 나타내어져 있지만, 기기(200)의 하드웨어 부분 또는 구성 요소는 도 1e 및 도 1f와 관련하여 본원에서 나타내어지고 논의된 컴퓨팅 디바이스(100)와 같은 컴퓨팅 디바이스의 임의의 유형 및 형태의 요소, 하드웨어 또는 소프트웨어를 포함할 수 있다. 일부 실시예에서, 기기(200)는 서버, 게이트웨이, 라우터, 스위치, 브리지 또는 다른 유형의 컴퓨팅 또는 네트워크 디바이스를 포함할 수 있으며, 이와 연관된 임의의 하드웨어 및/또는 소프트웨어 요소를 가질 수 있다.
기기(200)의 운영 체제는 이용 가능한 시스템 메모리를 커널 공간(204) 및 사용자 공간(202)으로 할당, 관리 또는 이와 다르게 분리한다. 예시적인 소프트웨어 아키텍처(200)에서, 운영 체제는 임의의 유형 및/또는 형태의 UNIX 운영 체제일 수 있지만, 설명된 실시예는 제한되지 않는다. 이와 같이, 기기(200)는 임의의 버전의 Microsoft® Windows 운영 체제, Unix 및 Linux 운영 체제의 다른 릴리스, 임의의 버전의 Macintosh 컴퓨터용 Mac OS®, 임의의 내장형 운영 체제, 임의의 네트워크 운영 체제, 임의의 실시간 운영 체제, 임의의 개방 소스 운영 체제, 임의의 독점 운영 체제, 모바일 컴퓨팅 디바이스 또는 네트워크 디바이스용의 임의의 운영 체제 또는 기기(200) 상에서 실행되고 본원에 설명되는 동작을 수행할 수 있는 임의의 다른 운영 체제와 같은 임의의 운영 체제를 실행할 수 있다.
커널 공간(204)은 임의의 디바이스 드라이버, 커널 확장 또는 다른 커널 관련 소프트웨어를 포함하여 커널(230)을 실행하기 위해 예약되어 있다. 본 기술 분야의 통상의 기술자에게 알려진 바와 같이, 커널(230)은 운영 체제의 코어이며, 어플리케이션(104)의 자원 및 하드웨어-관련 요소의 액세스, 제어 및 관리를 제공한다. 기기(200)의 실시예에 따르면, 커널 공간(204)은 또한 때로 통합 캐시라고도 지칭되는 캐시 관리자(232)와 연계하여 동작하는 다수의 네트워크 서비스 또는 프로세스를 포함하며, 그 이점은 본원에 더욱 상세히 설명된다. 또한, 커널(230)의 실시예는 디바이스(200)에 의해 설치, 구성 또는 달리 사용되는 운영 체제의 실시예에 따를 것이다.
일 실시예에서, 디바이스(200)는 클라이언트(102) 및/또는 서버(106)와 통신하기 위해 TCP/IP 기반 스택과 같은 하나의 네트워크 스택(267)을 포함한다. 일 실시예에서, 네트워크 스택(267)은 네트워크(108)와 같은 제1 네트워크 및 제2 네트워크(110)와 통신하기 위해 사용된다. 일부 실시예에서, 디바이스(200)는 클라이언트(102)의 TCP 접속과 같은 제1 전송 계층 접속을 종단하고, 클라이언트(102)에 의해 사용하기 위해 서버(106)에 대한 제2 전송 계층 접속을 확립하며, 예를 들어, 제2 전송 계층 접속은 기기(200) 및 서버(106)에서 종단된다. 제1 및 제2 전송 계층 접속은 단일 네트워크 스택(267)을 통해 확립될 수 있다. 다른 실시예에서, 디바이스(200)는 예를 들어, 267 및 267'와 같은 복수의 네트워크 스택을 포함할 수 있으며, 제1 전송 계층 접속은 하나의 네트워크 스택(267)에서, 그리고 제2 전송 계층 접속은 제2 네트워크 스택(267')에서 확립 또는 종단될 수 있다. 예를 들어, 하나의 네트워크 스택은 제1 네트워크 상에서 네트워크 패킷을 수신 및 송신하기 위한 것일 수 있고, 다른 네트워크 스택은 제2 네트워크 상에서 네트워크 패킷을 수신 및 송신하기 위한 것일 수 있다. 일 실시예에서, 네트워크 스택(267)은 기기(200)에 의한 송신을 위해 하나 이상의 네트워크 패킷을 큐잉(queuing)하기 위한 버퍼(243)를 포함한다.
도 2에 나타낸 바와 같이, 커널 공간(204)은 캐시 관리자(232), 고속 계층 2-7 통합 패킷 엔진(240), 암호화 엔진(234), 정책 엔진(236) 및 멀티-프로토콜 압축 로직(238)을 포함한다. 사용자 공간(202) 대신 커널 공간(204) 또는 커널 모드에서 이들 구성 요소 또는 프로세스(232, 240, 234, 236 및 238)를 실행하는 것은 단독으로 그리고 조합하여 이들 구성 요소 각각의 성능을 향상시킨다. 커널 동작은 이들 구성 요소 또는 프로세스(232, 240, 234, 236 및 238)가 디바이스(200)의 운영 체제의 코어 주소 공간에서 실행됨을 의미한다. 예를 들어, 커널 모드에서 암호화 엔진(234)을 실행하는 것은 암호화 및 복호화 동작을 커널로 이동시킴으로써 암호화 성능을 향상시키고, 이에 의해 커널 모드에서의 메모리 공간 또는 커널 스레드와 사용자 모드에서의 메모리 공간 또는 스레드 사이의 천이의 수를 감소시킨다. 예를 들어, 커널 모드에서 얻은 데이터는 커널 레벨 데이터 구조에서 사용자 레벨 데이터 구조로 사용자 모드에서 실행되는 프로세스 또는 스레드로 전달되거나 복사될 필요가 없을 수 있다. 다른 양태에서, 커널 모드와 사용자 모드 사이의 컨텍스트 전환의 수가 또한 감소된다. 또한, 커널 공간(204)에서 임의의 구성 요소 또는 프로세스(232, 240, 235, 236 및 238) 사이의 동기화 및 통신이 보다 효율적으로 수행될 수 있다.
일부 실시예에서, 구성 요소(232, 240, 234, 236 및 238)의 임의의 부분은 커널 공간(204)에서 실행되거나 동작할 수 있는 반면, 이들 구성 요소(232, 240, 234, 236 및 238)의 다른 부분은 사용자 공간(202)에서 실행되거나 동작할 수 있다. 일 실시예에서, 기기(200)는 하나 이상의 네트워크 패킷, 예를 들어, 클라이언트(102)로부터의 요청 또는 서버(106)로부터의 응답을 포함하는 네트워크 패킷의 임의의 부분에 대한 액세스를 제공하는 커널-레벨 데이터 구조를 사용한다. 일부 실시예에서, 커널-레벨 데이터 구조는 전송 계층 드라이버 인터페이스 또는 네트워크 스택(267)으로의 필터를 통해 패킷 엔진(240)에 의해 획득될 수 있다. 커널-레벨 데이터 구조는 네트워크 스택(267), 네트워크 트래픽 또는 네트워크 스택(267)에 의해 수신 또는 송신된 패킷과 관련된 커널 공간(204)을 통해 액세스 가능한 임의의 인터페이스 및/또는 데이터를 포함할 수 있다. 다른 실시예에서, 커널-레벨 데이터 구조는 임의의 구성 요소 또는 프로세스(232, 240, 234, 236 및 238)에 의해 사용되어, 구성 요소 또는 프로세스의 원하는 동작을 수행할 수 있다. 일 실시예에서, 구성 요소(232, 240, 234, 236 및 238)는 커널-레벨 데이터 구조를 사용할 때 커널 모드에서 실행되는 반면, 다른 실시예에서, 구성 요소(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), 또는 FPGA(Field Programmable Gate Array), PLC(Programmable Logic Device) 또는 ASIC(Application Specific Integrated Circuit)와 같은 임의의 다른 유형의 집적 회로를 포함할 수 있다.
정책 엔진(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)은 클라이언트(102a-102n)와 서버(106a-106n) 사이에서 양방향으로 MAPI(Messaging Application Programming Interface)(이메일), FTP(File Transfer Protocol), HTTP(HyperText Transfer Protocol), CIFS(Common Internet File System) 프로토콜(파일 전송), ICA(Independent Computing Architecture) 프로토콜, RDP(Remote Desktop Protocol), WAP(Wireless Application Protocol), 모바일 IP 프로토콜 및 VoIP(Voice over IP) 프로토콜을 포함하여 임의의 TCP/IP 기반 프로토콜을 압축한다. 다른 실시예에서, 멀티-프로토콜 압축 엔진(238)은 HTML(Hypertext Markup Language) 기반 프로토콜의 압축을 제공하고, 일부 실시예에서, XML(Extensible Markup Language)과 같은 임의의 마크 업 언어의 압축을 제공한다. 일 실시예에서, 멀티-프로토콜 압축 엔진(238)은 기기(200) 대 기기(200) 통신을 위해 설계된 임의의 프로토콜과 같은 임의의 고성능 프로토콜의 압축을 제공한다. 다른 실시예에서, 멀티-프로토콜 압축 엔진(238)은 트랜잭션 TCP(T/TCP), 선택 확인 응답(acknowledgement)을 가진 TCP(TCP-SACK), 큰 윈도우를 가진 TCP(TCP-LW), TCP-Vegas 프로토콜과 같은 혼잡 예측 프로토콜 및 TCP 스푸핑(spoofing) 프로토콜과 같은 수정된 전송 제어 프로토콜을 사용하여 임의의 페이로드 또는 임의의 통신을 압축한다.
이와 같이, 멀티-프로토콜 압축 엔진(238)은 데스크톱 클라이언트, 예를 들어, Microsoft Outlook 및 Oracle, SAP 및 Siebel과 같은 널리 사용되는 기업 어플리케이션에 의해 론칭되는 임의의 클라이언트와 같은 논(non)-웹 씬 클라이언트, 심지어는 Pocket PC와 같은 모바일 클라이언트를 통해 어플리케이션에 액세스하는 사용자에 대한 성능을 가속화한다. 일부 실시예에서, 커널 모드에서 실행되고 네트워크 스택(267)에 액세스하는 패킷 프로세싱 엔진(240)과 통합함으로써 멀티-프로토콜 압축 엔진(238)은 임의의 어플리케이션 계층 프로토콜과 같은 TCP/IP 프로토콜에 의해 운반되는 임의의 프로토콜을 압축할 수 있다.
일반적으로 패킷 프로세싱 엔진 또는 패킷 엔진으로도 지칭되는 고속 계층 2-7 통합 패킷 엔진(240)은 네트워크 포트(266)를 통해 기기(200)에 의해 수신 및 송신되는 패킷의 커널-레벨 프로세싱을 관리하는 역할을 한다. 고속 계층 2-7 통합 패킷 엔진(240)은 네트워크 패킷의 수신 또는 네트워크 패킷의 송신과 같은 프로세싱 동안 하나 이상의 네트워크 패킷을 큐잉하기 위한 버퍼(243)를 포함할 수 있다. 또한, 고속 계층 2-7 통합 패킷 엔진(240)은 하나 이상의 네트워크 스택(267)과 통신하여 네트워크 포트(266)를 통해 네트워크 패킷을 전송 및 수신한다. 고속 계층 2-7 통합 패킷 엔진(240)은 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 멀티-프로토콜 압축 로직(238)과 연계하여 동작한다. 특히, 암호화 엔진(234)은 패킷의 SSL 프로세싱을 수행하도록 구성되고, 정책 엔진(236)은 요청-레벨 컨텐츠 스위칭 및 요청-레벨 캐시 리디렉션과 같은 트래픽 관리와 관련된 기능을 수행하도록 구성되고, 멀티-프로토콜 압축 로직(238)은 데이터의 압축 및 압축 해제와 관련된 기능을 수행하도록 구성된다.
고속 계층 2-7 통합 패킷 엔진(240)은 패킷 프로세싱 타이머(242)를 포함한다. 일 실시예에서, 패킷 프로세싱 타이머(242)는 진입, 즉, 수신 또는 진출, 즉 송신되는 네트워크 패킷의 프로세싱을 트리거링하기 위한 하나 이상의 시간 간격을 제공한다. 일부 실시예에서, 고속 계층 2-7 통합 패킷 엔진(240)은 타이머(242)에 응답하여 네트워크 패킷을 프로세싱한다. 패킷 프로세싱 타이머(242)는 시간 관련 이벤트, 간격 또는 발생을 통지, 트리거링 또는 전달하기 위해 패킷 엔진(240)에 임의의 유형 및 형태의 신호를 제공한다. 많은 실시예에서, 패킷 프로세싱 타이머(242)는 예를 들어, 100 ms, 50 ms 또는 25 ms와 같은 대략 밀리초로 동작한다. 예를 들어, 일부 실시예에서, 패킷 프로세싱 타이머(242)는 시간 간격을 제공하거나 다른 방식으로 네트워크 패킷이 10 ms 시간 간격으로 고속 계층 2-7 통합 패킷 엔진(240)에 의해 프로세싱되도록 하며, 다른 실시예에서는 5 ms 시간 간격이고, 또 다른 실시예에서는 3, 2 또는 1 ms 시간 간격만큼 짧다. 고속 계층 2-7 통합 패킷 엔진(240)은 동작 동안 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 멀티-프로토콜 압축 엔진(238)과 인터페이싱하거나 통합되거나 통신할 수 있다. 이와 같이, 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 멀티-프로토콜 압축 로직(238)의 임의의 로직, 기능 또는 동작은 패킷 프로세싱 타이머(242) 및/또는 패킷 엔진(240)에 응답하여 수행될 수 있다. 따라서, 암호화 엔진(234), 캐시 관리자(232), 정책 엔진(236) 및 멀티-프로토콜 압축 로직(238)의 임의의 로직, 기능 또는 동작은 패킷 프로세싱 타이머(242)를 통해 제공되는 시간 간격의 세분화 정도, 예를 들어, 10 ms 이하의 시간 간격으로 수행될 수 있다. 예를 들어, 일 실시예에서, 캐시 관리자(232)는 고속 계층 2-7 통합 패킷 엔진(240) 및/또는 패킷 프로세싱 타이머(242)에 응답하여 임의의 캐싱된 객체의 무효화를 수행할 수 있다. 다른 실시예에서, 캐싱된 객체의 만료 또는 무효화 시간은 매 10 ms와 같이 패킷 프로세싱 타이머(242)의 시간 간격과 동일한 세분화 정도로 설정될 수 있다.
커널 공간(204)과 대조적으로, 사용자 공간(202)은 사용자 모드에서 달리 실행되는 사용자 모드 어플리케이션 또는 프로그램에 의해 사용되는 운영 체제의 메모리 영역 또는 부분이다. 사용자 모드 어플리케이션은 커널 공간(204)에 직접 액세스할 수 없을 수 있고 커널 서비스에 액세스하기 위해 서비스 호출을 사용한다. 도 2에 나타낸 바와 같이, 기기(200)의 사용자 공간(202)은 GUI(graphical user interface)(210), CLI(command line interface)(212), 쉘(shell) 서비스(214), 건강 모니터링 프로그램(216) 및 데몬(daemon) 서비스(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)은 기기(200)의 임의의 부분의 상태, 상황 또는 건강을 결정하기 위해 임의의 API(application programming interface)를 호출할 수 있다. 예를 들어, 건강 모니터링 프로그램(216)은 프로그램, 프로세스, 서비스 또는 작업이 활성화되어 있고 현재 실행되고 있는지 확인하기 위해 주기적으로 상태 조회를 핑(ping)하거나 전송할 수 있다. 다른 예에서, 건강 모니터링 프로그램(216)은 임의의 프로그램, 프로세스, 서비스 또는 작업에 의해 제공된 임의의 상태, 오류 또는 이력 로그를 확인하여 기기(200)의 임의의 부분의 임의의 상태, 상황 또는 오류를 결정할 수 있다.
데몬 서비스(218)는 연속적으로 또는 백그라운드에서 실행되고 기기(200)에 의해 수신된 주기적 서비스 요청을 취급하는 프로그램이다. 일부 실시예에서, 데몬 서비스는 적절한 다른 데몬 서비스(218)와 같은 다른 프로그램 또는 프로세스로 요청을 전달할 수 있다. 본 기술 분야의 통상의 기술자에게 알려진 바와 같이, 데몬 서비스(218)는 네트워크 제어와 같은 연속적 또는 주기적인 시스템 전체 기능을 수행하거나 임의의 원하는 작업을 수행하기 위해 무인으로 실행될 수 있다. 일부 실시예에서, 하나 이상의 데몬 서비스(218)는 사용자 공간(202)에서 실행되는 반면, 다른 실시예에서, 하나 이상의 데몬 서비스(218)는 커널 공간(204)에서 실행된다.
이하 도 2b를 참조하면, 기기(200)의 다른 실시예가 도시되어 있다. 간략한 개요에서, 기기(200)는 SSL VPN 접속(280), 스위칭/부하 밸런싱(284), 도메인 이름 서비스 해상도(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)에서 사용자 모드, 커널 모드 또는 이들의 임의의 조합으로 동작하는 임의의 유형 및 형태의 프로그램, 서비스, 작업, 프로세스 또는 실행 가능 명령을 포함할 수 있다. vServer(275)는 임의의 로직, 기능, 규칙 또는 SSL VPN(280), 스위칭/부하 밸런싱(284), 도메인 이름 서비스 해상도(286), 가속(288) 및 어플리케이션 방화벽(290)과 같은 본원에 설명되는 기술의 임의의 실시예를 수행하는 동작을 포함한다. 일부 실시예에서, vServer(275)는 서버(106)의 서비스(270)에 대한 접속을 확립한다. 서비스(270)는 기기(200), 클라이언트(102) 또는 vServer(275)에 접속하고 통신할 수 있는 임의의 프로그램, 어플리케이션, 프로세스, 작업 또는 실행 가능한 명령의 세트를 포함할 수 있다. 예를 들어, 서비스(270)는 웹 서버, http 서버, ftp, 이메일 또는 데이터베이스 서버를 포함할 수 있다. 일부 실시예에서, 서비스(270)는 이메일, 데이터베이스 또는 기업 어플리케이션과 같은 어플리케이션에 대한 통신을 청취, 수신 및/또는 전송하기 위한 데몬 프로세스 또는 네트워크 드라이버이다. 일부 실시예에서, 서비스(270)는 특정 IP 주소, 또는 IP 주소 및 포트 상에서 통신할 수 있다.
일부 실시예에서, vServer(275)는 정책 엔진(236)의 하나 이상의 정책을 클라이언트(102)와 서버(106) 사이의 네트워크 통신에 적용한다. 일 실시예에서, 정책은 vServer(275)와 연관된다. 다른 실시예에서, 정책은 사용자 또는 사용자 그룹에 기초한다. 또 다른 실시예에서, 정책은 글로벌이며 하나 이상의 vServer(275a-275n) 및 기기(200)를 통해 통신하는 임의의 사용자 또는 사용자 그룹에 적용된다. 일부 실시예에서, 정책 엔진(236)의 정책은 인터넷 프로토콜 주소, 포트, 프로토콜 유형, 패킷의 헤더 또는 필드, 또는 사용자, 사용자 그룹, vServer(275), 전송 계층 접촉, 및/또는 클라이언트(102) 또는 서버(106)의 식별 또는 속성과 같은 통신의 컨텐츠와 같은 통신의 임의의 컨텐츠에 기초하여 정책이 적용되는 상태를 갖는다.
다른 실시예에서, 기기(200)는 서버(106)로부터 컴퓨팅 환경(15), 어플리케이션 및/또는 데이터 파일에 액세스하기 위해 원격 사용자 또는 원격 클라이언트(102)의 인증 및/또는 허가를 결정하기 위해 정책 엔진(236)과 통신하거나 인터페이싱한다. 다른 실시예에서, 기기(200)는 어플리케이션 전달 시스템(190)이 하나 이상의 컴퓨팅 환경(15), 어플리케이션 및/또는 데이터 파일을 전달하도록 원격 사용자 또는 원격 클라이언트(102)의 인증 및/또는 허가를 결정하기 위해 정책 엔진(236)과 통신하거나 인터페이싱한다. 또 다른 실시예에서, 기기(200)는 원격 사용자 또는 원격 클라이언트(102)의 정책 엔진(236)의 인증 및/또는 허가에 기초하여 VPN 또는 SSL VPN 접속을 확립한다. 일 실시예에서, 기기(200)는 정책 엔진(236)의 정책에 기초하여 네트워크 트래픽의 흐름 및 통신 세션을 제어한다. 예를 들어, 기기(200)는 정책 엔진(236)에 기초하여 컴퓨팅 환경(15), 어플리케이션 또는 데이터 파일에 대한 액세스를 제어할 수 있다.
일부 실시예에서, vServer(275)는 클라이언트 에이전트(120)를 통해 클라이언트(102)와의 TCP 또는 UDP 접속과 같은 전송 계층 접속을 확립한다. 일 실시예에서, vServer(275)는 클라이언트(102)로부터 통신을 청취하고 수신한다. 다른 실시예에서, vServer(275)는 클라이언트 서버(106)와의 TCP 또는 UDP 접속과 같은 전송 계층 접속을 확립한다. 일 실시예에서, vServer(275)는 서버(106) 상에서 실행되는 서버(270)의 인터넷 프로토콜 주소 및 포트에 대한 전송 계층 접속을 확립한다. 다른 실시예에서, vServer(275)는 클라이언트(102)에 대한 제1 전송 계층 접속을 서버(106)에 대한 제2 전송 계층 접속과 연관시킨다. 일부 실시예에서, vServer(275)는 서버(106)에 대한 전송 계층 접속의 풀(pool)을 확립하고 풀링(pooling)된 전송 계층 접속을 통한 클라이언트 요청을 다중화한다.
일부 실시예에서, 기기(200)는 클라이언트(102)와 서버(106) 사이에 SSL VPN 접속(280)을 제공한다. 예를 들어, 제1 네트워크(104) 상의 클라이언트(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)는 2개의 네트워크(104, 104') 사이에서 클라이언트(102)에 대한 종단 간 보안 전송 계층 접속을 제공한다.
일 실시예에서, 기기(200)는 가상 사설 네트워크(104) 상의 클라이언트(102)의 인트라넷 인터넷 프로토콜 또는 IntranetIP(282) 주소를 호스팅한다. 클라이언트(102)는 인터넷 프로토콜(IP) 주소 및/또는 제1 네트워크(104) 상의 호스트 이름과 같은 로컬 네트워크 식별자를 갖는다. 기기(200)를 통해 제2 네트워크(104')에 접속될 때, 기기(200)는 제2 네트워크(104') 상의 클라이언트(102)에 대해 IP 주소 및/또는 호스트 이름과 같은 네트워크 식별자인 IntranetIP 주소(282)를 확립, 할당 또는 이와 다르게 제공한다. 기기(200)는 클라이언트의 확립된 IntranetIP(282)를 사용하여 클라이언트(102)를 향해 지향된 임의의 통신에 대해 제2 또는 사설 네트워크(104') 상에서 청취하고 수신한다. 일 실시예에서, 기기(200)는 제2 사설 네트워크(104) 상의 클라이언트(102)로서 또는 클라이언트(102)를 대신하여 작용한다. 예를 들어, 다른 실시예에서, vServer(275)는 클라이언트(102)의 IntranetIP(282)에 대한 통신을 청취하고 이에 응답한다. 일부 실시예에서, 제2 네트워크(104') 상의 컴퓨팅 디바이스(100)가 요청을 송신하면, 기기(200)는 클라이언트(102)인 것처럼 요청을 프로세싱한다. 예를 들어, 기기(200)는 클라이언트의 IntranetIP(282)에 대한 핑에 응답할 수 있다. 다른 예에서, 기기는 TCP 또는 UDP 접속과 같은 접속을 확립할 수 있으며, 제2 네트워크(104') 상의 컴퓨팅 디바이스(100)는 클라이언트의 IntranetIP(282)와의 접속을 요청한다.
일부 실시예에서, 기기(200)는 1) 압축; 2) 압축 해제; 3) 전송 제어 프로토콜 풀링; 4) 전송 제어 프로토콜 다중화; 5) 전송 제어 프로토콜 버퍼링; 및 6) 캐싱과 같은 가속 기술(288) 중 하나 이상을 클라이언트(102)와 서버(106) 사이의 통신에 제공한다.
일 실시예에서, 기기(200)는 각각의 서버(106)와 하나 이상의 전송 계층 접속을 개방하고 이들 접속을 유지함으로써 인터넷을 통해 클라이언트에 의한 반복되는 데이터 액세스를 허용함으로써 클라이언트(102)에 대한 전송 계층 접속을 반복적으로 개방 및 폐쇄함으로써 야기되는 프로세싱 부하의 많은 부분을 서버(106)에서 경감시킨다. 이 기술은 본원에서 "접속 풀링"으로 지칭된다.
일부 실시예에서, 풀링된 전송 계층 접속을 통해 클라이언트(102)로부터 서버(106)로의 통신을 끊김 없이 스플라이싱하기 위해, 기기(200)는 전송 계층 프로토콜 레벨에서 시퀀스 번호 및 확인 응답 번호를 수정함으로써 통신을 트랜슬레이팅하거나 다중화한다. 이를 "접속 다중화"로 칭한다. 일부 실시예에서, 어플리케이션 계층 프로토콜 상호 작용은 필요하지 않다. 예를 들어, 인-바운드(in-bound) 패킷(즉, 클라이언트(102)로부터 수신된 패킷)의 경우, 패킷의 소스 네트워크 주소는 기기(200)의 출력 포트의 주소로 변경되고, 착신 네트워크 주소는 의도한 서버의 주소로 변경된다. 아웃바운드(outbound) 패킷(즉, 서버(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)에 의해 호스팅된 IP 주소로 클라이언트의 DNS 요청에 응답한다. 이 실시예에서, 클라이언트(102)는 도메인 이름에 대한 네트워크 통신을 기기(200)에 송신한다. 다른 실시예에서, 기기(200)는 제2 기기(200')의 IP 주소 또는 제2 기기(200')에 의해 호스팅된 IP 주소로 클라이언트의 DNS 요청에 응답한다. 일부 실시예에서, 기기(200)는 기기(200)에 의해 결정된 서버(106)의 IP 주소로 클라이언트의 DNS 요청에 응답한다.
또 다른 실시예에서, 기기(200)는 클라이언트(102)와 서버(106) 사이의 통신을 위한 어플리케이션 방화벽 기능(290)을 제공한다. 일 실시예에서, 정책 엔진(236)은 위법 요청을 검출 및 차단하기 위한 규칙을 제공한다. 일부 실시예에서, 어플리케이션 방화벽(290)은 서비스 거부(DoS) 공격으로부터 보호한다. 다른 실시예에서, 기기(200)는 어플리케이션-기반 공격을 식별하고 차단하기 위해 인터셉팅된 요청의 컨텐츠를 검사한다. 일부 실시예에서, 규칙/정책 엔진(236)은 다음 중 하나 이상과 같은 다양한 클래스 및 유형의 웹 또는 인터넷 기반 취약성에 대한 보호를 제공하기 위한 하나 이상의 어플리케이션 방화벽 또는 보안 제어 정책을 포함한다: 1) 버퍼 오버플로우, 2) CGI-BIN 파라미터 조작, 3) 폼(form)/숨겨진 필드 조작, 4) 강력한 브라우징, 5) 쿠키 또는 세션 중독, 6) 고장난 액세스 제어 목록(ACL) 또는 취약한 패스워드, 7) 크로스-사이트 스크립팅(XSS), 8) 커맨드 주입, 9) SQL 주입, 10) 민감한 정보 유출을 트리거링하는 오류, 11) 암호화의 안전하지 않은 사용, 12) 서버 구성 오류, 13) 백도어(backdoor) 및 디버그 옵션, 14) 웹 사이트 손상, 15) 플랫폼 또는 운영 체제 취약성 및 16) 제로-데이 익스플로잇(zero-day exploit). 일 실시예에서, 어플리케이션 방화벽(290)은 다음 중 하나 이상에 대한 네트워크 통신을 검사 또는 분석하는 형태로 HTML 폼 필드 보호를 제공한다: 1) 요청된 필드가 리턴됨, 2) 추가된 필드가 허용되지 않음, 3) 판독-전용 및 숨겨진 필드 시행, 4) 드롭-다운 리스트 및 라디오 버튼 필드 적합성 및 5) 폼-필드 최대-길이 시행. 일부 실시예에서, 어플리케이션 방화벽(290)은 쿠키가 수정되지 않도록 보장한다. 다른 실시예에서, 어플리케이션 방화벽(290)은 법적 URL을 시행함으로써 강력한 브라우징을 방지한다.
또 다른 실시예에서, 어플리케이션 방화벽(290)은 네트워크 통신에 포함된 임의의 기밀 정보를 보호한다. 어플리케이션 방화벽(290)은 엔진(236)의 규칙 또는 정책에 따라 네트워크 패킷의 임의의 필드에서 임의의 기밀 정보를 식별하기 위해 임의의 네트워크 통신을 검사 또는 분석할 수 있다. 일부 실시예에서, 어플리케이션 방화벽(290)은 네트워크 통신에서 신용 카드 번호, 패스워드, 주민등록번호, 이름, 환자 코드, 연락처 정보 및 연령의 하나 이상의 발생을 식별한다. 네트워크 통신의 인코딩된 부분은 이러한 발생 또는 기밀 정보를 포함할 수 있다. 이러한 발생에 기초하여, 일 실시예에서, 어플리케이션 방화벽(290)은 네트워크 통신의 송신을 방지하는 것과 같이, 네트워크 통신에 대한 정책 조치를 취할 수 있다. 다른 실시예에서, 어플리케이션 방화벽(290)은 이러한 식별된 발생 또는 기밀 정보를 재기록, 제거 또는 이와 다르게 마스킹(masking)할 수 있다.
여전히 도 2b를 참조하면, 기기(200)는 도 1d와 관련하여 상술한 바와 같은 성능 모니터링 에이전트(197)를 포함할 수 있다. 일 실시예에서, 기기(200)는 도 1d에 도시된 바와 같이, 모니터링 서비스(198) 또는 모니터링 서버(106)로부터 모니터링 에이전트(197)를 수신한다. 일부 실시예에서, 기기(200)는 기기(200)와 통신하는 임의의 클라이언트(102) 또는 서버(106)로 전달하기 위해 디스크와 같은 저장소에 모니터링 에이전트(197)를 저장한다. 예를 들어, 일 실시예에서, 기기(200)는 전송 계층 접속을 확립하라는 요청을 수신할 시에 모니터링 에이전트(197)를 클라이언트(102)로 송신한다. 다른 실시예에서, 기기(200)는 클라이언트(102)와의 전송 계층 접속을 확립할 시에 모니터링 에이전트(197)를 송신한다. 다른 실시예에서, 기기(200)는 웹 페이지에 대한 요청을 인터셉팅하거나 검출할 시에 클라이언트(102)에 모니터링 에이전트(197)를 송신한다. 또 다른 실시예에서, 기기(200)는 모니터링 서버(198)로부터의 요청에 응답하여 모니터링 에이전트(197)를 클라이언트(102) 또는 서버(106)로 송신한다. 일 실시예에서, 기기(200)는 모니터링 에이전트(197)를 제2 기기(200') 또는 기기(205)로 송신한다.
다른 실시예에서, 기기(200)는 모니터링 에이전트(197)를 실행한다. 일 실시예에서, 모니터링 에이전트(197)는 기기(200) 상에서 실행되는 임의의 어플리케이션, 프로그램, 프로세스, 서비스, 작업 또는 스레드의 성능을 측정 및 모니터링한다. 예를 들어, 모니터링 에이전트(197)는 vServer(275A-275N)의 성능 및 동작을 모니터링하고 측정할 수 있다. 다른 실시예에서, 모니터링 에이전트(197)는 기기(200)의 임의의 전송 계층 접속의 성능을 측정 및 모니터링한다. 일부 실시예에서, 모니터링 에이전트(197)는 기기(200)를 횡단하는 임의의 사용자 세션의 성능을 측정 및 모니터링한다. 일 실시예에서, 모니터링 에이전트(197)는 SSL VPN 세션과 같은 기기(200)를 횡단하는 임의의 가상 사설 네트워크 접속 및/또는 세션의 성능을 측정 및 모니터링한다. 또 다른 실시예에서, 모니터링 에이전트(197)는 기기(200)의 메모리, CPU 및 디스크 사용량 및 성능을 측정 및 모니터링한다. 또 다른 실시예에서, 모니터링 에이전트(197)는 SSL 오프로딩, 접속 풀링 및 다중화, 캐싱 및 압축과 같이 기기(200)에 의해 수행되는 임의의 가속 기술(288)의 성능을 측정 및 모니터링한다. 일부 실시예에서, 모니터링 에이전트(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)은 네트워크 프로토콜 스위트를 위한 소프트웨어 실시예를 포함한다. 네트워크 스택(310)은 본 기술 분야의 통상의 기술자가 인식하고 이해하는 OSI(Open Systems Interconnection) 통신 모델의 임의의 네트워크 계층과 같은 하나 이상의 네트워크 계층을 포함할 수 있다. 이와 같이, 네트워크 스택(310)은 OSI 모델의 다음 계층 중 임의의 계층에 대한 임의의 유형 및 형태의 프로토콜을 포함할 수 있다: 1) 물리적 링크 계층, 2) 데이터 링크 계층, 3) 네트워크 계층, 4) 전송 계층, 5) 세션 계층, 6) 프리젠테이션 계층 및 7) 어플리케이션 계층. 일 실시예에서, 네트워크 스택(310)은 일반적으로 TCP/IP로 지칭되는 인터넷 프로토콜(IP)의 네트워크 계층 프로토콜을 통한 전송 제어 프로토콜(TCP)을 포함할 수 있다. 일부 실시예에서, TCP/IP 프로토콜은 이더넷 프로토콜을 통해 전달될 수 있으며, 이는 IEEE 802.3에 의해 커버되는 이러한 프로토콜과 같은 IEEE WAN(wide-area-network) 또는 LAN(local-area-network) 프로토콜의 패밀리 중 임의의 것을 포함할 수 있다. 일부 실시예에서, 네트워크 스택(310)은 IEEE 802.11 및/또는 모바일 인터넷 프로토콜과 같은 임의의 유형 및 형태의 무선 프로토콜을 포함한다.
TCP/IP 기반 네트워크의 관점에서, MAPI(Messaging Application Programming Interface)(이메일), FTP(File Transfer Protocol), HTTP(HyperText Transfer Protocol), CIFS(Common Internet File System) 프로토콜(파일 전송), ICA(Independent Computing Architecture) 프로토콜, RDP(Remote Desktop Protocol), WAP(Wireless Application Protocol), 모바일 IP 프로토콜 및 VoIP(Voice over IP) 프로토콜을 포함하여 임의의 TCP/IP 기반 프로토콜이 사용될 수 있다. 다른 실시예에서, 네트워크 스택(310)은 수정된 전송 제어 프로토콜, 예를 들어, 트랜잭션 TCP(T/TCP), 선택 확인 응답을 갖는 TCP(TCP-SACK), 큰 윈도우를 가진 TCP(TCP-LW), TCP-Vegas 프로토콜과 같은 혼잡 예측 프로토콜 및 TCP 스푸핑 프로토콜과 같은 임의의 유형 및 형태의 전송 제어 프로토콜을 포함한다. 다른 실시예에서, UDP over IP와 같은 임의의 유형 및 형태의 사용자 데이터그램 프로토콜(UDP)이 음성 통신 또는 실시간 데이터 통신에 대해서와 같이 네트워크 스택(310)에 의해 사용될 수 있다.
또한, 네트워크 스택(310)은 TCP 드라이버 또는 네트워크 계층 드라이버와 같은 하나 이상의 계층을 지원하는 하나 이상의 네트워크 드라이버를 포함할 수 있다. 네트워크 드라이버는 컴퓨팅 디바이스(100)의 운영 체제의 일부로서 또는 컴퓨팅 디바이스(100)의 임의의 네트워크 인터페이스 카드 또는 다른 네트워크 액세스 구성 요소의 일부로서 포함될 수 있다. 일부 실시예에서, 네트워크 스택(310)의 임의의 네트워크 드라이버는 본원에 설명된 임의의 기술을 지원하는 네트워크 스택(310)의 커스텀 또는 수정된 부분을 제공하도록 맞춤화, 수정 또는 적응될 수 있다. 다른 실시예에서, 가속 프로그램(302)은 클라이언트(102)의 운영 체제에 의해 설치되거나 이와 다르게 제공되는 네트워크 스택(310)과 함께 동작하거나 이와 연계하여 작동하도록 설계 및 구성된다.
네트워크 스택(310)은 클라이언트(102)의 네트워크 통신과 관련된 임의의 정보 및 데이터를 수신, 획득, 제공 또는 이와 다르게 액세스하기 위한 임의의 유형 및 형태의 인터페이스를 포함한다. 일 실시예에서, 네트워크 스택(310)에 대한 인터페이스는 어플리케이션 프로그래밍 인터페이스(API)를 포함한다. 인터페이스는 또한 임의의 함수 호출, 후킹(hooking) 또는 필터링 메커니즘, 이벤트 또는 콜 백 메커니즘, 또는 임의의 유형의 인터페이스 기술을 포함할 수 있다. 인터페이스를 통한 네트워크 스택(310)은 네트워크 스택(310)의 기능 또는 동작과 관련된 객체와 같은 임의의 유형 및 형태의 데이터 구조를 수신하거나 제공할 수 있다. 예를 들어, 데이터 구조는 네트워크 패킷 또는 하나 이상의 네트워크 패킷과 관련된 정보 및 데이터를 포함할 수 있다. 일부 실시예에서, 데이터 구조는 전송 계층의 네트워크 패킷과 같은 네트워크 스택(310)의 프로토콜 계층에서 프로세싱되는 네트워크 패킷의 일부를 포함한다. 일부 실시예에서, 데이터 구조(325)는 커널-레벨 데이터 구조를 포함하는 반면, 다른 실시예에서, 데이터 구조(325)는 사용자-모드 데이터 구조를 포함한다. 커널-레벨 데이터 구조는 커널 모드(302)에서 동작하는 네트워크 스택(310)의 일부와 관련되거나 획득된 데이터 구조, 또는 커널-모드(302)에서 실행되는 네트워크 드라이버 또는 다른 소프트웨어, 또는 운영 체제의 커널-모드에서 실행 또는 동작되는 서비스, 프로세스, 작업, 스레드 또는 다른 실행 가능 명령에 의해 획득 또는 수신되는 임의의 데이터 구조를 포함할 수 있다.
또한, 네트워크 스택(310)의 일부 부분은 커널 모드(302), 예를 들어, 데이터 링크 또는 네트워크 계층에서 실행 또는 동작할 수 있는 반면, 다른 부분은 네트워크 스택(310)의 어플리케이션 계층과 같은 사용자-모드(303)에서 실행 또는 동작할 수 있다. 예를 들어, 네트워크 스택(310)의 제1 부분(310a)은 네트워크 스택(310)의 사용자-모드 액세스를 어플리케이션에 제공하는 한편, 네트워크 스택(310)의 제2 부분(310a)은 네트워크에 액세스를 제공한다. 일부 실시예에서, 네트워크 스택(310)의 제1 부분(310a)은 임의의 계층 5-7과 같은 네트워크 스택(310)의 하나 이상의 상위 계층을 포함할 수 있다. 다른 실시예에서, 네트워크 스택(310)의 제2 부분(310b)은 임의의 계층 1-4와 같은 하나 이상의 하위 계층을 포함한다. 네트워크 스택(310)의 제1 부분(310a) 및 제2 부분(310b) 각각은 사용자-모드(303), 커널-모드(302) 또는 이들의 조합에서의 임의의 하나 이상의 네트워크 계층에서, 또는 네트워크 계층의 임의의 부분에서 또는 네트워크 계층에 대한 인터페이스 지점 또는 사용자-모드(303) 및 커널-모드(302)의 임의의 부분 또는 이에 대한 인터페이스 지점에서 네트워크 스택(310)의 임의의 부분을 포함할 수 있다.
인터셉터(350)는 소프트웨어, 하드웨어, 또는 소프트웨어 및 하드웨어의 임의의 조합을 포함할 수 있다. 일 실시예에서, 인터셉터(350)는 네트워크 스택(310)의 임의의 지점에서 네트워크 통신을 인터셉팅하고, 인터셉터(350) 또는 클라이언트 에이전트(120)에 의해 원하거나 관리되거나 제어되는 착신지로 네트워크 통신을 리디렉팅 또는 송신한다. 예를 들어, 인터셉터(350)는 제1 네트워크의 네트워크 스택(310)의 네트워크 통신을 인터셉팅하고 제2 네트워크(104) 상의 송신을 위해 기기(200)로 네트워크 통신을 송신할 수 있다. 일부 실시예에서, 임의의 유형의 인터셉터(350)를 포함하는 인터셉터(350)는 네트워크 스택(310)과 인터페이싱 및 작동하도록 구성 및 설계된 네트워크 드라이버와 같은 드라이버를 포함한다. 일부 실시예에서, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 전송 계층에서와 같이 네트워크 스택(310)의 하나 이상의 계층에서 동작한다. 일 실시예에서, 인터셉터(350)는 필터 드라이버, 후킹 메커니즘, 또는 전송 드라이버 인터페이스(TDI)를 통해서와 같이, 네트워크 스택의 전송 계층에 인터페이싱하는 임의의 형태 및 유형의 적절한 네트워크 드라이버 인터페이스를 포함한다. 일부 실시예에서, 인터셉터(350)는 전송 프로토콜 계층 위의 임의의 계층, 예를 들어, 어플리케이션 프로토콜 계층과 같은 전송 계층 및 다른 프로토콜 계층과 같은 제1 프로토콜 계층에 인터페이싱한다. 일 실시예에서, 인터셉터(350)는 NDIS(Network Driver Interface Specification)를 따르는 드라이버 또는 NDIS 드라이버를 포함할 수 있다. 다른 실시예에서, 인터셉터(350)는 미니-필터 또는 미니-포트 드라이버를 포함할 수 있다. 일 실시예에서, 인터셉터(350) 또는 그 일부는 커널-모드(302)에서 동작한다. 다른 실시예에서, 인터셉터(350) 또는 그 일부는 사용자-모드(303)에서 동작한다. 일부 실시예에서, 인터셉터(350)의 일부는 커널-모드(302)에서 동작하는 반면, 인터셉터(350)의 다른 부분은 사용자-모드(303)에서 동작한다. 다른 실시예에서, 클라이언트 에이전트(120)는 사용자 모드(303)에서 동작하지만 인터셉터(350)를 통해 커널-레벨 데이터 구조(225)를 획득하기 위해서와 같이, 커널-모드 드라이버, 프로세스, 서비스, 작업 또는 운영 체제의 일부에 인터페이싱한다. 추가의 실시예에서, 인터셉터(350)는 어플리케이션과 같은 사용자-모드 어플리케이션 또는 프로그램이다.
일 실시예에서, 인터셉터(350)는 임의의 전송 계층 접속 요청을 인터셉팅한다. 이들 실시예에서, 인터셉터(350)는 착신 IP 주소 및/또는 포트와 같은 착신 정보를 그 위치에 대해 원하는 위치로 설정하기 위해 전송 계층 어플리케이션 프로그래밍 인터페이스(API) 호출을 실행한다. 이러한 방식으로, 인터셉터(350)는 전송 계층 접속을 인터셉터(350) 또는 클라이언트 에이전트(120)에 의해 제어 또는 관리되는 IP 주소 및 포트로 인터셉팅 및 리디렉팅한다. 일 실시예에서, 인터셉터(350)는 접속을 위한 착신 정보를 클라이언트 에이전트(120)가 청취하고 있는 클라이언트(102)의 로컬 IP 주소 및 포트로 설정한다. 예를 들어, 클라이언트 에이전트(120)는 리디렉팅된 전송 계층 통신을 위해 로컬 IP 주소 및 포트 상에서 청취하는 프록시 서비스를 포함할 수 있다. 일부 실시예에서, 클라이언트 에이전트(120)는 그 후 리디렉팅된 전송 계층 통신을 기기(200)에 전달한다.
일부 실시예에서, 인터셉터(350)는 DNS(Domain Name Service) 요청을 인터셉팅한다. 일 실시예에서, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 DNS 요청을 분석한다. 다른 실시예에서, 인터셉터는 인터셉팅된 DNS 요청을 DNS 분석을 위해 기기(200)에 송신한다. 일 실시예에서, 기기(200)는 DNS 요청을 분석하고 DNS 응답을 클라이언트 에이전트(120)에 전달한다. 일부 실시예에서, 기기(200)는 다른 기기(200') 또는 DNS 서버(106)를 통해 DNS 요청을 분석한다.
또 다른 실시예에서, 클라이언트 에이전트(120)는 2개의 에이전트(120 및 120')를 포함할 수 있다. 일 실시예에서, 제1 에이전트(120)는 네트워크 스택(310)의 네트워크 계층에서 동작하는 인터셉터(350)를 포함할 수 있다. 일부 실시예에서, 제1 에이전트(120)는 ICMP(Internet Control Message Protocol) 요청(예를 들어, 핑 및 추적 루트(traceroute))과 같은 네트워크 계층 요청을 인터셉팅한다. 다른 실시예에서, 제2 에이전트(120')는 전송 계층에서 동작하고 전송 계층 통신을 인터셉팅할 수 있다. 일부 실시예에서, 제1 에이전트(120)는 네트워크 스택(210)의 하나의 계층에서의 통신을 인터셉팅하고 인터셉팅된 통신을 제2 에이전트(120')에 전달하거나 이와 인터페이싱한다.
클라이언트 에이전트(120) 및/또는 인터셉터(350)는 네트워크 스택(310)의 임의의 다른 프로토콜 계층에 투명한 방식으로 프로토콜 계층에서 동작하거나 이와 인터페이싱할 수 있다. 예를 들어, 일 실시예에서, 인터셉터(350)는 네트워크 계층과 같은 전송 계층 아래의 임의의 프로토콜 계층 및 세션, 프리젠테이션 또는 어플리케이션 계층 프로토콜과 같은 전송 계층 위의 임의의 프로토콜 계층에 투명하게 네트워크 스택(310)의 전송 계층과 인터페이싱하거나 동작한다. 이것은 네트워크 스택(310)의 다른 프로토콜 계층이 원하는 대로 그리고 인터셉터(350)를 사용하기 위해 수정 없이 동작할 수 있게 한다. 이와 같이, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 전송 계층과 인터페이싱하여 TCP/IP를 통한 임의의 어플리케이션 계층 프로토콜과 같이 전송 계층에 의해 전달되는 임의의 프로토콜을 통해 제공되는 임의의 통신을 보안화, 최적화, 가속화, 라우팅 또는 부하-밸런싱할 수 있다.
또한, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 임의의 어플리케이션, 클라이언트(102)의 사용자 및 클라이언트(102)와 통신하는 서버와 같은 임의의 다른 컴퓨팅 디바이스에 투명한 방식으로 네트워크 스택(310)에서 동작하거나 이와 인터페이싱할 수 있다. 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 어플리케이션의 수정 없이 클라이언트(102) 상에 설치 및/또는 실행될 수 있다. 일부 실시예에서, 클라이언트(102) 또는 클라이언트(102)와 통신하는 컴퓨팅 디바이스의 사용자는 클라이언트 에이전트(120) 및/또는 인터셉터(350)의 존재, 실행 또는 동작을 인식하지 못한다. 이와 같이, 일부 실시예에서, 클라이언트 에이전트(120) 및/또는 인터셉터(350)는 어플리케이션, 클라이언트(102)의 사용자, 서버와 같은 다른 컴퓨팅 디바이스, 또는 인터셉터(350)에 의해 인터페이싱되는 프로토콜 계층 위 및/또는 아래의 임의의 프로토콜 계층에 투명하게 설치, 실행 및/또는 동작된다.
클라이언트 에이전트(120)는 가속 프로그램(302), 스트리밍 클라이언트(306), 수집 에이전트(304) 및/또는 모니터링 에이전트(197)를 포함한다. 일 실시예에서, 클라이언트 에이전트(120)는 Fort Lauderdale, Florida의 Citrix Systems, Inc.에 의해 개발된 ICA(Independent Computing Architecture) 클라이언트 또는 그 일부를 포함하고, 또한 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)은 가속 기술 중 하나 이상을 통합된 방식 또는 양식으로 수행한다. 또한, 가속 프로그램(302)은 전송 계층 프로토콜의 네트워크 패킷의 페이로드로서 운반되는 임의의 프로토콜 또는 복수의-프로토콜에 대해 압축을 수행할 수 있다.
스트리밍 클라이언트(306)는 서버(106)로부터 스트리밍된 어플리케이션을 수신 및 실행하기 위한 어플리케이션, 프로그램, 프로세스, 서비스, 작업 또는 실행 가능한 명령을 포함한다. 서버(106)는 재생, 실행 또는 이와 다르게 클라이언트(102) 상의 어플리케이션을 실행되게 하기 위해 하나 이상의 어플리케이션 데이터 파일을 스트리밍 클라이언트(306)로 스트리밍할 수 있다. 일부 실시예에서, 서버(106)는 압축 또는 패키징된 어플리케이션 데이터 파일의 세트를 스트리밍 클라이언트(306)로 송신한다. 일부 실시예에서, 복수의 어플리케이션 파일은 압축되어 CAB, ZIP, SIT, TAR, JAR 또는 다른 아카이브와 같은 아카이브 파일 내에 파일 서버 상에 저장된다. 일 실시예에서, 서버(106)는 어플리케이션 파일을 압축 해제, 언패키징 또는 아카이빙 해제하여 파일을 클라이언트(102)로 송신한다. 다른 실시예에서, 클라이언트(102)는 어플리케이션 파일을 압축 해제, 언패키징 또는 아카이빙 해제한다. 스트리밍 클라이언트(306)는 어플리케이션 또는 그 일부를 동적으로 설치하고 어플리케이션을 실행한다. 일 실시예에서, 스트리밍 클라이언트(306)는 실행 가능한 프로그램일 수 있다. 일부 실시예에서, 스트리밍 클라이언트(306)는 다른 실행 가능한 프로그램을 론칭할 수 있다.
수집 에이전트(304)는 클라이언트(102)에 대한 정보를 식별, 획득 및/또는 수집하기 위한 어플리케이션, 프로그램, 프로세스, 서비스, 작업 또는 실행 가능한 명령을 포함한다. 일부 실시예에서, 기기(200)는 수집 에이전트(304)를 클라이언트(102) 또는 클라이언트 에이전트(120)로 송신한다. 수집 에이전트(304)는 기기(200)의 정책 엔진(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)는 메모리, CPU 및 디스크와 같은 클라이언트(102)의 임의의 자원을 모니터링 및 측정한다.
모니터링 에이전트(197)는 클라이언트의 임의의 어플리케이션의 성능을 모니터링 및 측정할 수 있다. 일 실시예에서, 모니터링 에이전트(197)는 클라이언트(102) 상의 브라우저의 성능을 모니터링 및 측정한다. 일부 실시예에서, 모니터링 에이전트(197)는 클라이언트 에이전트(120)를 통해 전달되는 임의의 어플리케이션의 성능을 모니터링 및 측정한다. 다른 실시예에서, 모니터링 에이전트(197)는 웹-기반 또는 HTTP 응답 시간과 같은 어플리케이션에 대한 최종 사용자 응답 시간을 측정 및 모니터링한다. 모니터링 에이전트(197)는 ICA 또는 RDP 클라이언트의 성능을 모니터링 및 측정할 수 있다. 다른 실시예에서, 모니터링 에이전트(197)는 사용자 세션 또는 어플리케이션 세션에 대한 메트릭을 측정 및 모니터링한다. 일부 실시예에서, 모니터링 에이전트(197)는 ICA 또는 RDP 세션을 측정 및 모니터링한다. 일 실시예에서, 모니터링 에이전트(197)는 어플리케이션 및/또는 데이터의 클라이언트(102)로의 전달을 가속시키는 데 있어서 기기(200)의 성능을 측정 및 모니터링한다.
일부 실시예에서 여전히 도 3을 참조하면, 제1 프로그램(322)은 클라이언트 에이전트(120) 또는 인터셉터(350)와 같은 그 일부를 자동으로, 조용하게, 투명하게 또는 다른 방식으로 설치 및/또는 실행하는 데 사용될 수 있다. 일 실시예에서, 제1 프로그램(322)은 어플리케이션으로 로드되어 이에 의해 실행되는 ActiveX 컨트롤 또는 Java 컨트롤 또는 스크립트와 같은 플러그인 구성 요소를 포함한다. 예를 들어, 제1 프로그램(322)은 메모리 공간 또는 어플리케이션의 컨텍스트와 같은 웹 브라우저 어플리케이션에 의해 로딩되고 실행되는 ActiveX 컨트롤을 포함한다. 다른 실시예에서, 제1 프로그램(322)은 브라우저와 같은 어플리케이션으로 로딩되고 이에 의해 실행되는 실행 가능 명령의 세트를 포함한다. 일 실시예에서, 제1 프로그램(322)은 클라이언트 에이전트(120)를 설치하기 위해 설계되고 구성된 프로그램을 포함한다. 일부 실시예에서, 제1 프로그램(322)은 다른 컴퓨팅 디바이스로부터 네트워크를 통해 클라이언트 에이전트(120)를 획득, 다운로드 또는 수신한다. 다른 실시예에서, 제1 프로그램(322)은 네트워크 드라이버와 같은 프로그램을 클라이언트(102)의 운영 체제에 설치하기 위한 인스톨러 프로그램 또는 플러그 앤드 플레이(plug and play) 관리자이다.
D. 가상화된 어플리케이션 전달 제어기를 제공하기 위한 시스템 및 방법
이하 도 4a를 참조하면, 블록도는 가상화 환경(400)의 일 실시예를 도시한다. 간략한 개요에서, 컴퓨팅 디바이스(100)는 하이퍼바이저(hypervisor) 계층, 가상화 계층 및 하드웨어 계층을 포함한다. 하이퍼바이저 계층은 가상화 계층에서 실행되는 적어도 하나의 가상 머신에 의해 하드웨어 계층의 다수의 물리적 자원(예를 들어, 프로세서(들)(421) 및 디스크(들)(428))에 대한 액세스를 할당하고 관리하는 하이퍼바이저(401)(가상화 관리자라고도 지칭함)를 포함한다. 가상화 계층은 적어도 하나의 운영 체제(410) 및 적어도 하나의 운영 체제(410)에 할당된 복수의 가상 자원을 포함한다. 가상 자원은 가상 메모리 및 가상 네트워크 인터페이스와 같은 가상 자원뿐만 아니라 복수의 가상 프로세서(432a, 432b, 432c(일반적으로 432)) 및 가상 디스크(442a, 442b, 442c(일반적으로 442))를 제한 없이 포함할 수 있다. 복수의 가상 자원 및 운영 체제(410)는 가상 머신(406)으로 지칭될 수 있다. 가상 머신(406)은 하이퍼바이저(401)와 통신하고 컴퓨팅 디바이스(100) 상에서 다른 가상 머신을 관리 및 구성하기 위한 어플리케이션을 실행하는 데 사용되는 제어 운영 체제(405)를 포함할 수 있다.
보다 상세하게, 하이퍼바이저(401)는 물리적 디바이스에 액세스하는 운영 체제를 시뮬레이팅하는 임의의 방식으로 가상 자원을 운영 체제에 제공할 수 있다. 하이퍼바이저(401)는 가상 자원을 임의의 수의 게스트 운영 체제(410a, 410b)(일반적으로 410)에 제공할 수 있다. 일부 실시예에서, 컴퓨팅 디바이스(100)는 하나 이상의 유형의 하이퍼바이저를 실행한다. 이들 실시예에서, 하이퍼바이저는 가상 하드웨어를 에뮬레이팅하고, 물리적 하드웨어를 분할하고, 물리적 하드웨어를 가상화하고, 컴퓨팅 환경에 대한 액세스를 제공하는 가상 머신을 실행하는 데 사용될 수 있다. 하이퍼바이저는 Palo Alto, California의 VMWare, Inc.에 의해 제조된 것; 오픈 소스 Xen.org 커뮤니티에서 개발이 감독되는 오픈 소스 제품인 XEN 하이퍼바이저; Microsoft 또는 기타 업체에서 제공되는 HyperV, VirtualServer 또는 가상 PC 하이퍼바이저를 포함할 수 있다. 일부 실시예에서, 게스트 운영 체제가 실행될 수 있는 가상 머신 플랫폼을 생성하는 하이퍼바이저를 실행하는 컴퓨팅 디바이스(100)를 호스트 서버라고 칭한다. 이들 실시예 중 하나에서, 예를 들어, 컴퓨팅 디바이스(100)는 Fort Lauderdale, FL.의 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)에 의해 제공되는 적어도 하나의 하드웨어 자원의 앱스트랙션(abstraction)을 적어도 하나의 가상 머신(406)에 제시한다. 다른 실시예에서, 하이퍼바이저(401)는 물리적 프로세서 능력이 가상 머신(406)에 제공되는지 여부 및 그 방식을 제어한다.
제어 운영 체제(405)는 게스트 운영 체제를 관리 및 구성하기 위한 적어도 하나의 어플리케이션을 실행할 수 있다. 일 실시예에서, 제어 운영 체제(405)는 가상 머신을 실행하거나, 가상 머신의 실행을 종료하거나, 가상 머신에 대한 할당을 위해 물리적 자원의 유형을 식별하기 위한 기능을 포함하여 가상 머신의 실행을 관리하기 위한 기능에 대한 액세스를 관리자에게 제공하는 사용자 인터페이스를 포함하는 어플리케이션과 같은 관리 어플리케이션을 실행할 수 있다. 다른 실시예에서, 하이퍼바이저(401)는 하이퍼바이저(401)에 의해 생성된 가상 머신(406) 내에서 제어 운영 체제(405)를 실행한다. 또 다른 실시예에서, 제어 운영 체제(405)는 컴퓨팅 디바이스(100) 상의 물리적 자원에 직접 액세스할 수 있는 권한을 갖는 가상 머신(406)에서 실행된다. 일부 실시예에서, 컴퓨팅 디바이스(100a) 상의 제어 운영 체제(405a)는 하이퍼바이저(401a)와 하이퍼바이저(401b) 사이의 통신을 통해 컴퓨팅 디바이스(100b) 상의 제어 운영 체제(405b)와 데이터를 교환할 수 있다. 이러한 방식으로, 하나 이상의 컴퓨팅 디바이스(100)는 자원의 풀(pool)에서 이용 가능한 프로세서 및 다른 물리적 자원에 관한 하나 이상의 다른 컴퓨팅 디바이스(100)와 데이터를 교환할 수 있다. 이들 실시예 중 하나에서, 이 기능은 하이퍼바이저가 복수의 물리적 컴퓨팅 디바이스에 분산된 자원의 풀을 관리할 수 있게 한다. 이들 실시예들 중 다른 실시예에서, 복수의 하이퍼바이저는 컴퓨팅 디바이스(100) 중 하나 상에서 실행되는 하나 이상의 게스트 운영 체제를 관리한다.
일 실시예에서, 제어 운영 체제(405)는 적어도 하나의 게스트 운영 체제(410)와 상호 작용하도록 허가된 가상 머신(406)에서 실행된다. 다른 실시예에서, 게스트 운영 체제(410)는 디스크 또는 네트워크에 대한 액세스를 요청하기 위하여 하이퍼바이저(401)를 통해 제어 운영 체제(405)와 통신한다. 또 다른 실시예에서, 게스트 운영 체제(410) 및 제어 운영 체제(405)는 예를 들어, 하이퍼바이저(401)에 의해 이용 가능하게 된 복수의 공유 메모리 페이지를 통하는 것과 같이, 하이퍼바이저(401)에 의해 확립된 통신 채널을 통해 통신할 수 있다.
일부 실시예에서, 제어 운영 체제(405)는 컴퓨팅 디바이스(100)에 의해 제공된 네트워킹 하드웨어와 직접 통신하기 위한 네트워크 백-엔드 드라이버를 포함한다. 이들 실시예 중 하나에서, 네트워크 백-엔드 드라이버는 적어도 하나의 게스트 운영 체제(110)로부터의 적어도 하나의 가상 머신 요청을 프로세싱한다. 다른 실시예에서, 제어 운영 체제(405)는 컴퓨팅 디바이스(100) 상의 저장 요소와 통신하기 위한 블록 백-엔드 드라이버를 포함한다. 이들 실시예 중 하나에서, 블록 백-엔드 드라이버는 게스트 운영 체제(410)로부터 수신된 적어도 하나의 요청에 기초하여 저장 요소로부터 데이터를 판독 및 기입한다.
일 실시예에서, 제어 운영 체제(405)는 툴(tool) 스택(404)을 포함한다. 다른 실시예에서, 툴 스택(404)은 하이퍼바이저(401)와 상호 작용하고, (예를 들어, 제2 컴퓨팅 디바이스(100b) 상의) 다른 제어 운영 체제(405)와 통신하고, 컴퓨팅 디바이스(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)로 전달될 수 있다.
일 실시예에서, 게스트 운영 체제(410)는 그것이 실행되는 가상 머신과 연계하여 가상 머신임을 인식하지 못하는 완전히-가상화된 가상 머신을 형성하고; 이러한 머신을 "도메인 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)으로 지칭된다.
하이퍼바이저(401)는 컴퓨팅 디바이스(100) 상의 프로세서 상에서 실행된다. 하이퍼바이저(401)는 물리적 디스크에 대한 액세스 량을 가상 디스크에 할당한다. 일 실시예에서, 하이퍼바이저(401)는 물리적 디스크 상에 소정량의 공간을 할당한다. 다른 실시예에서, 하이퍼바이저(401)는 물리적 디스크 상에 복수의 페이지를 할당한다. 일부 실시예에서, 하이퍼바이저(401)는 가상 머신(450)을 초기화 및 실행하는 프로세스의 일부로서 가상 디스크(442)를 제공한다.
일 실시예에서, 관리 구성 요소(404a)는 풀 관리 구성 요소(404a)로 지칭된다. 다른 실시예에서, 제어 운영 체제(405a)로 지칭될 수 있는 관리 운영 체제(405a)는 관리 구성 요소를 포함한다. 일부 실시예에서, 관리 구성 요소는 툴 스택으로 지칭된다. 이들 실시예 중 하나에서, 관리 구성 요소는 도 4a와 관련하여 상술한 툴 스택(404)이다. 다른 실시예에서, 관리 구성 요소(404)는 관리자와 같은 사용자로부터 제공 및/또는 실행되는 가상 머신(406)의 식별을 수신하기 위한 사용자 인터페이스를 제공한다. 또 다른 실시예에서, 관리 구성 요소(404)는 관리자와 같은 사용자로부터 하나의 물리적 머신(100)에서 다른 물리적 머신(100)으로의 가상 머신(406b)의 이동 요청을 수신하기 위한 사용자 인터페이스를 제공한다. 추가의 실시예에서, 관리 구성 요소(404a)는 요청된 가상 머신(406d)을 실행할 컴퓨팅 디바이스(100b)를 식별하고 식별된 컴퓨팅 디바이스(100b) 상의 하이퍼바이저(401b)에게 식별된 가상 머신을 실행하도록 지시하고; 이러한 관리 구성 요소는 풀 관리 구성 요소로 지칭될 수 있다.
이하 도 4c를 참조하면, 가상 어플리케이션 전달 제어기 또는 가상 기기(450)의 실시예가 도시되어 있다. 간략한 개요에서, 도 2a 및 도 2b와 관련하여 상술한 기기(200)(예를 들어, 어플리케이션 전달 제어기)의 기능 및/또는 실시예 중 임의의 것이 도 4a 및 도 4b와 관련하여 상술한 가상화된 환경의 임의의 실시예에 배치될 수 있다. 어플리케이션 전달 제어기의 기능이 기기(200)의 형태로 배치되는 대신에, 이러한 기능은 클라이언트(102), 서버(106) 또는 기기(200)와 같은 임의의 컴퓨팅 디바이스(100) 상의 가상화된 환경(400)에 배치될 수 있다.
이하 도 4c를 참조하면, 서버(106)의 하이퍼바이저(401) 상에서 동작하는 가상 기기(450)의 실시예의 도면이 도시되어 있다. 도 2a 및 도 2b의 기기(200)와 마찬가지로, 가상 기기(450)는 가용성, 성능, 오프로드 및 보안을 위한 기능을 제공할 수 있다. 가용성을 위해, 가상 기기(450)는 네트워크의 계층 4와 7 사이에서 부하 밸런싱을 수행하고 또한 지능형 서비스 건강 모니터링을 수행할 수도 있다. 네트워크 트래픽 가속화를 통한 성능 향상을 위해, 가상 기기(450)는 캐싱 및 압축을 수행할 수 있다. 임의의 서버의 프로세싱을 오프로딩하기 위해, 가상 기기(450)는 접속 다중화 및 풀링 및/또는 SSL 프로세싱을 수행할 수 있다. 보안을 위해, 가상 기기(450)는 기기(200)의 임의의 어플리케이션 방화벽 기능 및 SSL VPN 기능을 수행할 수 있다.
도 2a와 관련하여 설명된 바와 같은 기기(200)의 임의의 모듈은 기성(off the shelf) 서버와 같은 임의의 서버 상의 가상화된 환경(300) 또는 비가상화된 환경에서 실행 가능한 하나 이상의 소프트웨어 모듈 또는 구성 요소로서 배치될 수 있는 가상화된 기기 전달 제어기(450)의 형태로 패키징, 조합, 설계 또는 구성될 수 있다. 예를 들어, 가상 기기(450)는 컴퓨팅 디바이스 상에 설치하기 위한 설치 패키지 형태로 제공될 수 있다. 도 2a를 참조하면, 캐시 관리자(232), 정책 엔진(236), 압축(238), 암호화 엔진(234), 패킷 엔진(240), GUI(210), CLI(212), 쉘 서비스(214) 및 건강 모니터링 프로그램(216) 중 임의의 것이 소프트웨어 구성 요소 또는 모듈로서 설계 및 구성되어 컴퓨팅 디바이스 및/또는 가상화된 환경(300)의 임의의 운영 체제 상에서 실행될 수 있다. 기기(200)의 암호화 프로세서(260), 프로세서(262), 메모리(264) 및 네트워크 스택(267)을 사용하는 대신에, 가상화 기기(450)는 가상화된 환경(400)에 의해 제공되거나 이와 다르게 서버(106) 상에서 이용 가능한 이들 자원 중 임의의 것을 사용할 수 있다.
여전히 도 4c를 참조하고, 간략한 개요에서, 임의의 하나 이상의 vServer(275a-275n)는 임의의 서버(106)와 같은 임의의 유형의 컴퓨팅 디바이스(100)의 가상화된 환경(400)에서 동작 또는 실행될 수 있다. 도 2b와 관련하여 설명된 기기(200)의 임의의 모듈 또는 기능은 서버의 가상화된 환경 또는 비가상화된 환경 중 어느 하나에서 동작하도록 설계 및 구성될 수 있다. 임의의 vServer(275), SSL VPN(280), 인트라넷 UP(282), 스위칭(284), DNS(286), 가속(288), AppFW(290) 및 모니터링 에이전트(197)는 하나 이상의 소프트웨어 모듈 또는 디바이스 및/또는 가상화된 환경(400) 상에서 실행 가능한 구성 요소로서 배치 가능한 어플리케이션 전달 제어기(450)의 형태로 패키징, 조합, 설계 또는 구성될 수 있다.
일부 실시예에서, 서버는 가상 환경에서 복수의 가상 머신(406a-406n)을 실행할 수 있으며, 각각의 가상 머신은 가상 어플리케이션 전달 제어기(450)의 동일하거나 상이한 실시예를 실행한다. 일부 실시예에서, 서버는 멀티-코어 프로세싱 시스템의 코어 상의 하나 이상의 가상 머신 상의 하나 이상의 가상 기기(450)를 실행할 수 있다. 일부 실시예에서, 서버는 복수의 프로세서 디바이스의 각각의 프로세서 상의 하나 이상의 가상 머신 상에서 하나 이상의 가상 기기(450)를 실행할 수 있다.
E. 멀티-코어 아키텍처 제공을 위한 시스템 및 방법
무어의 법칙(Moore's Law)에 따르면, 집적 회로에 배치될 수 있는 트랜지스터의 수는 근사적으로 2년마다 두 배로 될 수 있다. 그러나, CPU 속도 증가는 정점에 도달할 수 있으며, 예를 들어, CPU 속도는 2005년 이후 대략 3.5-4 GHz 범위였다. 일부 경우에, CPU 제조업체는 추가 성능을 얻기 위해 CPU 속도 증가에 의존하지 않을 수 있다. 일부 CPU 제조업체는 추가 성능을 제공하기 위해 그 프로세서에 부가적인 코어를 추가할 수 있다. 성능 이득을 위해 CPU에 의존하는 소프트웨어 및 네트워킹 벤더의 제품과 같은 제품은 이러한 멀티-코어 CPU를 활용하여 그 성능을 향상시킬 수 있다. 단일 CPU를 위해 설계 및 구성된 소프트웨어는 멀티-스레드, 병렬 아키텍처 또는 이와 다르게 멀티-코어 아키텍처를 이용하도록 재설계 및/또는 재작성될 수 있다.
nCore 또는 멀티-코어 기술로 지칭되는 기기(200)의 멀티-코어 아키텍처는 일부 실시예에서 기기가 단일 코어 성능 장벽을 깨고 멀티-코어 CPU의 능력을 활용할 수 있게 한다. 도 2a와 관련하여 설명된 이전 아키텍처에서, 단일 네트워크 또는 패킷 엔진이 실행된다. nCore 기술 및 아키텍처의 복수의 코어는 복수의 패킷 엔진이 동시에 및/또는 병렬로 실행될 수 있게 한다. 각 코어에서 패킷 엔진을 실행하면, 기기 아키텍처는 추가 코어의 프로세싱 용량을 활용한다. 일부 실시예에서, 이는 7배까지의 성능 증가 및 확장성을 제공한다.
도 5a에는 기능적 병렬 처리, 데이터 병렬 처리 또는 흐름-기반 데이터 병렬 처리와 같은 병렬 처리 또는 병렬 컴퓨팅 스킴의 유형에 따라 하나 이상의 프로세서 코어에 걸친 작동, 작업, 부하 또는 네트워크 트래픽 분배의 일부 실시예가 나타내어져 있다. 간략한 개요에서, 도 5a는 n-코어, 총 코어 수가 1 내지 N인 기기(200')와 같은 멀티-코어 시스템의 실시예를 나타낸다. 일 실시예에서, 작업, 부하 또는 네트워크 트래픽은 제1 코어(505A), 제2 코어(505B), 제3 코어(505C), 제4 코어(505D), 제5 코어(505E), 제6 코어(505F), 제7 코어(505G) 등에 분배될 수 있어, n 코어(505N)(이하, 총괄적으로 코어(505)로 지칭함)의 전부 또는 둘 이상에 걸쳐 분배된다. 복수의 코어 중 각각의 코어 상에서 각각 실행되는 복수의 VIP(275)가 있을 수 있다. 복수의 코어 중 각각의 코어 상에서 각각 실행되는 복수의 패킷 엔진(240)이 있을 수 있다. 사용된 임의의 접근법은 임의의 코어에 걸쳐 상이하고, 가변적이거나 유사한 작업 부하 또는 성능 레벨(515)로 이어질 수 있다. 기능적 병렬 처리 접근법의 경우, 각 코어는 패킷 엔진, VIP(275) 또는 기기(200)에 의해 제공되는 기능들 중 다른 기능을 실행할 수 있다. 데이터 병렬 처리 접근법에서, 데이터는 데이터를 수신하는 NIC(Network Interface Card) 또는 VIP(275)에 기초하여 코어를 통해 병렬 처리 또는 분배될 수 있다. 다른 데이터 병렬 처리 접근법에서, 프로세싱은 각 코어에 대한 데이터 흐름을 분배함으로써 코어에 걸쳐 분배될 수 있다.
도 5a에 대한 추가적인 상세 사항에서, 일부 실시예에서, 부하, 작업 또는 네트워크 트래픽은 기능적 병렬 처리(500)에 따라 코어(505) 사이에 분배될 수 있다. 기능적 병렬 처리(500)는 하나 이상의 각각의 기능을 수행하는 각각의 코어에 기초할 수 있다. 일부 실시예에서, 제1 코어는 제1 기능을 수행하는 한편, 제2 코어는 제2 기능을 수행한다. 기능적 병렬 처리 접근법에서, 멀티-코어 시스템에 의해 수행될 기능은 기능에 따라 각 코어에 분할 및 분배된다. 일부 실시예에서, 기능적 병렬 처리(500)는 작업 병렬 처리로 지칭될 수 있고, 각각의 프로세서 또는 코어가 동일하거나 상이한 데이터에 대해 상이한 프로세스 또는 기능을 실행할 때 달성될 수 있다. 코어 또는 프로세서는 동일하거나 상이한 코드를 실행할 수 있다. 일부 경우에, 상이한 실행 스레드 또는 코드가 작동할 때 서로 통신할 수 있다. 작업 흐름의 일부로서 하나의 스레드에서 다음 스레드로 데이터를 전달하기 위해 통신이 이루어질 수 있다.
일부 실시예에서, 기능적 병렬 처리(500)에 따라 코어(505)에 걸쳐 작업을 분배하는 것은 네트워크 입력/출력 관리(NW I/O)(510A), 보안 소켓 계층(SSL) 암호화 및 복호화(510B), 송신 제어 프로토콜(TCP) 기능(510C)과 같이 특정 기능에 따라 네트워크 트래픽을 분배하는 것을 포함할 수 있다. 이는 사용되는 기능의 볼륨 또는 레벨에 기초한 작업, 성능 또는 컴퓨팅 부하(515)로 이어질 수 있다. 일부 실시예에서, 데이터 병렬 처리(540)에 따라 코어(505)에 걸쳐 작업을 분배하는 것은 특정 하드웨어 또는 소프트웨어 구성 요소와 연관된 분배 데이터에 기초하여 작업량(515)을 분배하는 것을 포함할 수 있다. 일부 실시예에서, 흐름-기반 데이터 병렬 처리(520)에 따라 코어(505)에 걸쳐 작업을 분배하는 것은, 각각의 코어 상의 작업량(515A-N)이 유사하거나, 실질적으로 동등하거나 비교적 균등하게 분배될 수 있도록 컨텍스트 또는 흐름에 기초하여 데이터를 분배하는 것을 포함할 수 있다.
기능적 병렬 접근법의 경우, 각각의 코어는 패킷 엔진 또는 기기의 VIP에 의해 제공된 복수의 기능 중 하나 이상의 기능을 실행하도록 구성될 수 있다. 예를 들어, 코어 1은 기기(200')에 대한 네트워크 I/O 프로세싱을 수행할 수 있는 반면, 코어 2는 기기(200')에 대한 TCP 접속 관리를 수행한다. 마찬가지로, 코어 3은 SSL 오프로딩을 수행할 수 있는 반면, 코어 4는 계층 7 또는 어플리케이션 계층 프로세싱 및 트래픽 관리를 수행할 수 있다. 각각의 코어는 동일한 기능 또는 상이한 기능을 수행할 수 있다. 각각의 코어는 하나 초과의 기능을 수행할 수 있다. 임의의 코어는 도 2a 및 도 2b와 관련하여 식별되고 및/또는 설명된 임의의 기능 또는 그 일부를 실행할 수 있다. 이러한 접근법에서, 코어에 걸친 작업은 거친 방식 또는 세밀한 방식 중 어느 하나로 기능에 의해 분할될 수 있다. 일부 경우에, 도 5a에 나타낸 바와 같이, 기능에 의한 분할은 상이한 레벨의 성능 또는 부하(515)에서 실행되는 상이한 코어로 이어질 수 있다.
기능적 병렬 처리 접근법의 경우, 각각의 코어는 기기의 패킷 엔진에 의해 제공된 복수의 기능 중 하나 이상의 기능을 실행하도록 구성될 수 있다. 예를 들어, 코어 1은 기기(200')에 대한 네트워크 I/O 프로세싱을 수행할 수 있는 반면, 코어 2는 기기(200')에 대한 TCP 접속 관리를 수행한다. 마찬가지로, 코어 3은 SSL 오프 로딩을 수행할 수 있는 반면, 코어 4는 계층 7 또는 어플리케이션 계층 프로세싱 및 트래픽 관리를 수행할 수 있다. 각각의 코어는 동일한 기능 또는 상이한 기능을 수행할 수 있다. 각각의 코어는 하나 초과의 기능을 수행할 수 있다. 임의의 코어는 도 2a 및 도 2b와 관련하여 식별되고 및/또는 설명된 임의의 기능 또는 그 일부를 실행할 수 있다. 이러한 접근법에서, 코어에 걸친 작업은 거친 방식 또는 세밀한 방식 중 어느 하나로 기능에 의해 분할될 수 있다. 일부 경우에, 도 5a에 나타낸 바와 같이, 기능에 의한 분할은 상이한 레벨의 부하 또는 성능에서 실행되는 상이한 코어로 이어질 수 있다.
기능 또는 작업은 임의의 배열 및 스킴으로 분배될 수 있다. 예를 들어, 도 5b는 네트워크 I/O 기능(51OA)과 연관된 어플리케이션 및 프로세스를 프로세싱하는 제1 코어인 코어 1(505A)을 나타낸다. 일부 실시예에서, 네트워크 I/O와 연관된 네트워크 트래픽은 특정 포트 번호와 연관될 수 있다. 따라서, NW I/O(51OA)와 연관된 포트 착신지를 갖는 진출 및 진입 패킷은 NW I/O 포트와 연관된 모든 네트워크 트래픽을 처리하는 데 전용인 코어 1(505A)을 향할 것이다. 유사하게, 코어 2(505B)는 SSL 프로세싱과 연관된 기능을 처리하는 데 전용이며, 코어 4(505D)는 모든 TCP 레벨 프로세싱 및 기능을 처리하는 데 전용일 수 있다.
도 5a는 네트워크 I/O, SSL 및 TCP와 같은 기능을 나타내지만, 다른 기능이 코어에 할당될 수 있다. 이러한 다른 기능은 본원에 설명되는 기능 또는 동작 중 임의의 하나 이상을 포함할 수 있다. 예를 들어, 도 2a 및 도 2b와 관련하여 설명된 기능들 중 임의의 기능은 기능 기반으로 코어에 걸쳐 분배될 수 있다. 일부 경우에, 제1 VIP(275A)는 제1 코어 상에서 실행될 수 있는 반면, 다른 구성을 갖는 제2 VIP(275B)는 제2 코어 상에서 실행될 수 있다. 일부 실시예에서, 각각의 코어(505)는 특정 기능을 처리할 수 있어, 각각의 코어(505)는 그 특정 기능과 연관된 프로세싱을 처리할 수 있다. 예를 들어, 코어 2(505B)는 SSL 오프로딩을 처리할 수 있지만, 코어 4(505D)는 어플리케이션 계층 프로세싱 및 트래픽 관리를 처리할 수 있다.
다른 실시예에서, 작업, 부하 또는 네트워크 트래픽은 임의의 유형 및 형태의 데이터 병렬 처리(540)에 따라 코어(505) 사이에 분배될 수 있다. 일부 실시예에서, 데이터 병렬 처리(540)는 분배된 상이한 단편의 데이터에 대해 동일한 작업 또는 기능을 수행하는 각각의 코어에 의해 멀티-코어 시스템에서 달성될 수 있다. 일부 실시예에서, 단일 실행 스레드 또는 코드는 모든 데이터 단편에 대한 동작을 제어한다. 다른 실시예에서, 상이한 스레드 또는 명령이 동작을 제어하지만, 동일한 코드를 실행할 수 있다. 일부 실시예에서, 데이터 병렬 처리(540)는 패킷 엔진, vServer(VIP)(275A-C), 네트워크 인터페이스 카드(NIC)(542D-E) 및/또는 기기(200)에 포함되거나 기기(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)와 연관시키는 것은 코어(505)가 특정 vServer와 연관된 모든 기능을 프로세싱하는 것을 포함할 수 있다. 일부 실시예에서, 각각의 코어는 동일한 코드 및 구성을 갖는 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)에서, 데이터의 분배는 요청/응답 페어링(pairing), 트랜잭션, 세션, 접속 또는 어플리케이션 통신과 같은 임의의 유형의 데이터 흐름과 관련된다. 예를 들어, 기기를 횡단하는 클라이언트와 서버 간의 네트워크 트래픽은 복수의 코어 중 하나의 코어에 분배되어 프로세싱될 수 있다. 일부 경우에, 세션 또는 접속을 초기에 확립하는 코어는 해당 세션 또는 접속에 대한 네트워크 트래픽이 분배되는 코어일 수 있다. 데이터 흐름의 분배는 각각의 코어(505)가 실질적으로 동일하거나 상대적으로 균등하게 분배된 부하, 데이터 또는 네트워크 트래픽의 양을 운반하도록 하는 것일 수 있다.
일부 실시예에서, 데이터 흐름은 트랜잭션, 요청/응답 통신 또는 클라이언트 상의 어플리케이션으로부터 발생하는 트래픽과 같은 네트워크 트래픽의 임의의 단위 또는 부분에 기초한다. 이러한 방식으로 그리고 일부 실시예에서, 기기(200')를 횡단하는 클라이언트와 서버 사이의 데이터 흐름은 다른 접근법보다 더 균형 잡힌 방식으로 분배될 수 있다. 일 실시예에서, 데이터 흐름은 트랜잭션 또는 일련의 트랜잭션에 기초하여 분배될 수 있다. 일부 실시예에서, 이 트랜잭션은 클라이언트와 서버 사이에 있을 수 있고, IP 주소 또는 다른 패킷 식별자에 의해 특성화될 수 있다. 예를 들어, 코어 1(505A)은 특정 클라이언트와 특정 서버 간의 트랜잭션에 전용일 수 있으므로, 코어 1(505A) 상의 부하(515A)는 특정 클라이언트와 서버 간의 트랜잭션과 연관된 네트워크 트래픽으로 구성될 수 있다. 코어 1(505A)에 네트워크 트래픽을 할당하는 것은 특정 클라이언트 또는 서버로부터 발생하는 모든 데이터 패킷을 코어 1(505A)로 라우팅함으로써 달성될 수 있다.
작업 또는 부하는 트랜잭션에 부분적으로 기초하여 코어에 분배될 수 있지만, 다른 실시예에서, 부하 또는 작업은 패킷마다 할당될 수 있다. 이들 실시예에서, 기기(200)는 데이터 패킷을 인터셉팅하여 최소량의 부하를 갖는 코어(505)에 이를 할당할 수 있다. 예를 들어, 기기(200)는, 코어 1(505A) 상의 부하(515A)가 나머지 코어(505B-N) 상의 부하(515B-N)보다 작기 때문에 제1 진입 데이터 패킷을 코어 1(505A)에 할당할 수 있다. 일단 제1 데이터 패킷이 코어 1(505A)에 할당되면, 코어 1(505A) 상의 부하(515A)는 제1 데이터 패킷을 프로세싱하기 위해 필요한 프로세싱 자원의 양에 비례하여 증가된다. 기기(200)가 제2 데이터 패킷을 인터셉팅할 때, 기기(200)는, 코어 4(505D)가 두 번째로 적은 양의 부하를 갖기 때문에 코어 4(505D)에 부하를 할당할 것이다. 최소량의 부하를 갖는 코어에 데이터 패킷을 할당하는 것은 일부 실시예에서, 각 코어(505)에 분배된 부하(515A-N)가 실질적으로 동일하게 유지되도록 보장할 수 있다.
다른 실시예에서, 부하는 네트워크 트래픽의 섹션이 특정 코어(505)에 할당되는 단위 별로 할당될 수 있다. 상술한 예는 패킷별로 부하 밸런싱을 나타낸다. 다른 실시예에서, 부하는 최소량의 부하를 갖는 코어(505)에 10, 100 또는 1000개의 패킷마다 할당되도록 패킷의 수에 기초하여 할당될 수 있다. 코어(505)에 할당된 패킷의 수는 어플리케이션, 사용자 또는 관리자에 의해 결정된 수일 수 있으며 제로보다 큰 임의의 수일 수 있다. 또 다른 실시예에서, 패킷이 미리 정해진 시간 동안 특정 코어(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) 내에는 하나 이상의 네트워크 인터페이스 카드(NIC)(552) 및 하나 이상의 프로세싱 코어(505A-N)와 추가로 통신할 수 있는 흐름 분배기(550)가 포함될 수 있다. 흐름 분배기(550)는 수신 측 스케일러(RSS: Receive Side Scaler) 또는 수신 측 스케일링(RSS: Receive Side Scaling) 모듈을 포함할 수 있다.
추가로 도 5b를 참조하고, 더욱 상세하게, 일 실시예에서 패킷 엔진(들)(548A-N)은 도 2a 및 도 2b에 설명된 기기의 임의의 부분과 같이 본원에 설명되는 기기(200)의 임의의 부분을 포함할 수 있다. 패킷 엔진(들)(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)이 부하를 어디에 분배할지를 총괄적으로 결정할 수 있도록 요구할 수 있다. 이 프로세스의 일 실시예는 부하에 대해 각각의 패킷 엔진으로부터 투표를 수신하는 중재자를 포함할 수 있다. 중재자는 엔진의 투표 연령 및 일부 경우 엔진의 연관된 코어(505) 상의 현재 부하량과 연관된 우선 순위값에 일부 기초하여 각각의 패킷 엔진(548A-N)에 부하를 분배할 수 있다.
코어 상에서 실행되는 임의의 패킷 엔진은 사용자 모드, 커널 또는 이들의 임의의 조합으로 실행될 수 있다. 일부 실시예에서, 패킷 엔진은 실행중인 어플리케이션 또는 프로그램이 사용자 또는 어플리케이션 공간인 것과 같이 동작한다. 이들 실시예에서, 패킷 엔진은 커널에 의해 제공된 임의의 기능에 액세스하기 위해 임의의 유형 및 형태의 인터페이스를 사용할 수 있다. 일부 실시예에서, 패킷 엔진은 커널 모드 또는 커널의 일부로서 동작한다. 일부 실시예에서, 패킷 엔진의 제1 부분은 사용자 모드에서 동작하는 반면, 패킷 엔진의 제2 부분은 커널 모드에서 동작한다. 일부 실시예에서, 제1 코어 상의 제1 패킷 엔진은 커널 모드에서 실행되는 반면, 제2 코어 상의 제2 패킷 엔진은 사용자 모드에서 실행된다. 일부 실시예에서, 패킷 엔진 또는 그 임의의 부분은 NIC 또는 그 임의의 드라이버 상에서 또는 이와 연계하여 동작한다.
일부 실시예에서, 메모리 버스(556)는 임의의 유형 및 형태의 메모리 또는 컴퓨터 버스일 수 있다. 단일 메모리 버스(556)가 도 5b에 도시되어 있지만, 시스템(545)은 임의의 수의 메모리 버스(556)를 포함할 수 있다. 일 실시예에서, 각각의 패킷 엔진(548)은 하나 이상의 개별 메모리 버스(556)와 연관될 수 있다.
NIC(552)는 일부 실시예에서 본원에 설명되는 네트워크 인터페이스 카드 또는 메커니즘 중 임의의 것일 수 있다. NIC(552)는 임의의 개수의 포트를 가질 수 있다. NIC(552)는 임의의 유형 및 형태의 네트워크(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보다 큰 정수이다.
코어(505)는 해당 코어(505)에 사용하기 위해 할당 또는 배당된 메모리를 갖거나 사용할 수 있다. 메모리는 해당 코어(505)의 개인 또는 로컬 메모리로 간주되며 해당 코어(505)에 의해서만 액세스될 수 있다. 코어(505)는 복수 코어(505)에 공유되거나 할당된 메모리를 가지거나 사용할 수 있다. 메모리는 하나 초과의 코어(505)에 의해 액세스될 수 있는 공용 또는 공유 메모리로 간주될 수 있다. 코어(505)는 개인 메모리와 공용 메모리의 임의의 조합을 사용할 수 있다. 각 코어(505)에 대해 별도의 주소 공간을 사용하면, 동일한 주소 공간을 사용하는 경우로부터 어느 정도의 조정이 제거된다. 별도의 주소 공간을 사용하면, 코어(505)는 다른 코어(505)와의 충돌에 대한 걱정 없이 코어(505)의 자체 주소 공간의 정보 및 데이터에 대한 작업을 수행할 수 있다. 각 패킷 엔진은 TCP 및/또는 SSL 접속을 위한 별도의 메모리 풀을 가질 수 있다.
추가로 도 5b를 참조하면, 도 5a와 관련하여 상술한 코어(505)의 기능 및/또는 실시예 중 임의의 것이 도 4a 및 도 4b와 관련하여 상술한 가상화된 환경의 임의의 실시예에 배치될 수 있다. 코어(505)의 기능이 물리적 프로세서(505)의 형태로 배치되는 대신에, 이러한 기능은 클라이언트(102), 서버(106) 또는 기기(200)와 같은 임의의 컴퓨팅 디바이스(100) 상의 가상화된 환경(400)에 배치될 수 있다. 다른 실시예에서, 코어(505)의 기능이 기기 또는 단일 디바이스의 형태로 배치되는 대신에, 기능은 임의의 배열로 복수의 디바이스에 걸쳐 배치될 수 있다. 예를 들어, 하나의 디바이스가 둘 이상의 코어(505)를 포함할 수 있고 다른 디바이스가 둘 이상의 코어(505)를 포함할 수 있다. 예를 들어, 멀티-코어 시스템은 컴퓨팅 디바이스의 클러스터, 서버 팜 또는 컴퓨팅 디바이스의 네트워크를 포함할 수 있다. 일부 실시예에서, 코어(505)의 기능이 코어 형태로 배치되는 대신에, 기능은 복수의 단일 코어 프로세서와 같은 복수의 프로세서 상에 배치될 수 있다.
일 실시예에서, 코어(505)는 임의의 유형 및 형태의 프로세서일 수 있다. 일부 실시예에서, 코어(505)는 본원에 설명되는 임의의 프로세서 또는 중앙 처리 장치와 실질적으로 유사하게 기능할 수 있다. 일부 실시예에서, 코어(505)는 본원에 설명되는 임의의 프로세서의 임의의 부분을 포함할 수 있다. 도 5a는 7개의 코어를 나타내지만, 기기(200) 내에 임의의 "N"개의 코어(505A-N)가 존재할 수 있으며, 여기서 "N"은 1보다 큰 임의의 정수이다. 일부 실시예에서, 코어(505)는 공통 기기(200) 내에 설치될 수 있는 반면, 다른 실시예에서 코어(505)는 서로 통신 가능하게 접속된 하나 이상의 기기(들)(200) 내에 설치될 수 있다. 코어(505)는 일부 실시예에서 그래픽 프로세싱 소프트웨어를 포함할 수 있는 반면, 다른 실시예에서 코어(505)는 일반적인 프로세싱 기능을 제공한다. 코어(505)는 서로 가까이에 물리적으로 설치될 수 있고 및/또는 서로 통신 가능하게 접속될 수 있다. 코어(505)는 코어(505)로, 코어(505)로부터 및/또는 코어(505) 사이에서 데이터를 전달하기 위해 코어(505)에 물리적으로 및/또는 통신 가능하게 커플링된 임의의 유형 및 형태의 버스 또는 서브시스템에 의해 접속될 수 있다.
각각의 코어(505)는 다른 코어(505)와 통신하기 위한 소프트웨어를 포함할 수 있지만, 일부 실시예에서 코어 관리자(미도시)는 각 코어(505) 사이의 통신을 용이하게 할 수 있다. 일부 실시예에서, 커널이 코어 관리를 제공할 수 있다. 코어(505)는 다양한 인터페이스 메커니즘을 사용하여 서로 인터페이싱하거나 통신할 수 있다. 일부 실시예에서, 코어 대 코어 메시징이 코어(505)를 접속하는 버스 또는 서브시스템을 통해 메시지 또는 데이터를 제2 코어로 전송하는 제1 코어와 같이, 코어(505) 사이의 통신에 사용될 수 있다. 일부 실시예에서, 코어(505)는 임의의 유형 및 형태의 공유 메모리 인터페이스를 통해 통신할 수 있다. 일 실시예에서, 모든 코어들(505) 간에 공유되는 하나 이상의 메모리 위치가 있을 수 있다. 일부 실시예에서, 각각의 코어(505)는 서로 코어(505)와 공유되는 별도의 메모리 위치를 가질 수 있다. 예를 들어, 제1 코어(505A)는 제2 코어(505B)와의 제1 공유 메모리 및 제3 코어(505C)와의 제2 공유 메모리를 가질 수 있다. 일부 실시예에서, 코어(505)는 커널을 통한 함수 호출과 같은 임의의 유형의 프로그래밍 또는 API를 통해 통신할 수 있다. 일부 실시예에서, 운영 체제는 복수의 코어 디바이스를 인식 및 지원하고 코어 간 통신을 위한 인터페이스 및 API를 제공할 수 있다.
흐름 분배기(550)는 임의의 유형 및 형태의 하드웨어 상에서 실행되는 임의의 어플리케이션, 프로그램, 라이브러리, 스크립트, 작업, 서비스, 프로세스 또는 임의의 유형 및 형태의 실행 가능한 명령일 수 있다. 일부 실시예에서, 흐름 분배기(550)는 본원에 설명된 동작 및 기능 중 임의의 것을 수행하기 위한 회로의 임의의 설계 및 구성일 수 있다. 일부 실시예에서, 흐름 분배기(550)는 코어(505) 및/또는 코어(505) 상에서 실행되는 패킷 엔진 또는 VIP 사이에서 데이터 패킷의 분배를 분산, 전달, 라우팅, 제어 및/또는 관리한다. 일부 실시예에서, 흐름 분배기(550)는 인터페이스 마스터로 지칭될 수 있다. 일 실시예에서, 흐름 분배기(550)는 기기(200)의 코어(505) 또는 프로세서 상에서 실행되는 실행 가능한 명령의 세트를 포함한다. 다른 실시예에서, 흐름 분배기(550)는 기기(200)와 통신하는 컴퓨팅 머신 상에서 실행되는 실행 가능 명령의 세트를 포함한다. 일부 실시예에서, 흐름 분배기(550)는 펌웨어와 같은 NIC(552) 상에서 실행되는 실행 가능 명령의 세트를 포함한다. 또 다른 실시예에서, 흐름 분배기(550)는 코어(505) 또는 프로세서 간에 데이터 패킷을 분배하기 위한 소프트웨어 및 하드웨어의 임의의 조합을 포함한다. 일 실시예에서, 흐름 분배기(550)는 코어(505A-N) 중 적어도 하나에서 실행되는 반면, 다른 실시예에서, 각각의 코어(505A-N)에 할당된 개별 흐름 분배기(550)는 연관된 코어(505A-N) 상에서 실행된다. 흐름 분배기(550)는 임의의 유형 및 형태의 통계 또는 확률적 알고리즘 또는 의사 결정을 사용하여 코어(505)에 걸친 흐름의 균형을 맞출 수 있다. NIC(552) 또는 커널과 같은 기기의 하드웨어는 NIC(552) 및/또는 코어(505)에 걸쳐 순차적인 동작을 지원하도록 설계 및 구성될 수 있다.
시스템(545)이 하나 이상의 흐름 분배기(550)를 포함하는 실시예에서, 각각의 흐름 분배기(550)는 프로세서(505) 또는 패킷 엔진(548)과 연관될 수 있다. 흐름 분배기(550)는 각각의 흐름 분배기(550)가 시스템(545) 내에서 실행되는 다른 흐름 분배기(550)와 통신할 수 있게 하는 인터페이스 메커니즘을 포함할 수 있다. 하나의 예에서, 하나 이상의 흐름 분배기(550)는 서로 통신함으로써 부하를 밸런싱하는 방식을 결정할 수 있다. 이 프로세스는 중재자에게 투표를 제출하기 위해 상술한 프로세스와 실질적으로 유사하게 동작할 수 있으며, 그 후 중재자는 어떠한 흐름 분배기(550)가 부하를 수신해야 하는지를 결정한다. 다른 실시예에서, 제1 흐름 분배기(550')는 다음의 기준들 중 임의의 것에 기초하여 연관된 코어(505) 상의 부하를 식별하고 제1 데이터 패킷을 연관된 코어(505)로 전달할지 여부를 결정할 수 있다: 연관된 코어(505) 상의 부하가 미리 정해진 임계값을 초과함; 연관된 코어(505) 상의 부하가 미리 정해진 임계값 미만임; 연관된 코어(505) 상의 부하가 다른 코어(505) 상의 부하 미만임; 또는 프로세서 상의 부하량에 부분적으로 기초하여 데이터 패킷을 전달할 위치를 결정하는 데 사용될 수 있는 임의의 다른 메트릭.
흐름 분배기(550)는 본원에 설명된 것과 같은 분배, 컴퓨팅 또는 부하 밸런싱 스킴에 따라 코어(505) 사이에 네트워크 트래픽을 분배할 수 있다. 일 실시예에서, 흐름 분배기(550)는 기능적 병렬 처리 분배 스킴(550), 데이터 병렬 처리 부하 분배 스킴(540), 흐름-기반 데이터 병렬 처리 분배 스킴(520), 또는 이들 분배 스킴의 임의의 조합 또는 복수의 프로세서 사이에 부하를 분배하기 위한 임의의 부하 밸런싱 스킴 중 임의의 하나에 따라 네트워크 트래픽을 분배할 수 있다. 따라서, 흐름 분배기(550)는 데이터 패킷을 취하여 동작 부하 밸런싱 또는 분배 스킴에 따라 프로세서에 걸쳐 이를 분배함으로써 부하 분배기로서 작용할 수 있다. 일 실시예에서, 흐름 분배기(550)는 그에 따라 패킷, 작업 또는 부하를 분배하는 방식을 결정하기 위한 하나 이상의 동작, 기능 또는 로직을 포함할 수 있다. 또 다른 실시예에서, 흐름 분배기(550)는 소스 주소 및 데이터 패킷과 연관된 착신 주소를 식별하고 그에 따라 패킷을 분배할 수 있는 하나 이상의 서브 동작, 기능 또는 로직을 포함할 수 있다.
일부 실시예에서, 흐름 분배기(550)는 수신-측 스케일링(RSS) 네트워크 드라이버, 모듈 또는 하나 이상의 코어(505) 사이에 데이터 패킷을 분배하는 임의의 유형 및 형태의 실행 가능 명령을 포함할 수 있다. RSS 모듈은 하드웨어와 소프트웨어의 임의의 조합을 포함할 수 있다. 일부 실시예에서, RSS 모듈은 흐름 분배기(550)와 연계하여 작동하여 코어(505A-N)에 걸친 또는 멀티-프로세서 네트워크의 복수의 프로세서 사이에 데이터 패킷을 분배한다. RSS 모듈은 일부 실시예에서 NIC(552) 내에서 실행될 수 있고, 다른 실시예에서 코어(505) 중 임의의 하나 상에서 실행될 수 있다.
일부 실시예에서, RSS 모듈은 MICROSOFT 수신-측-스케일링(RSS) 스킴을 사용한다. 일 실시예에서, RSS는 데이터의 순서대로의 전달을 유지하면서 수신 프로세싱이 시스템의 복수의 프로세서에 걸쳐 균형을 잡을 수 있게 하는 Microsoft Scalable Networking 이니셔티브 기술이다. RSS는 네트워크 패킷을 프로세싱하기 위한 코어 또는 프로세서를 결정하기 위해 임의의 유형 및 형태의 해싱(hashing) 스킴을 사용할 수 있다.
RSS 모듈은 Toeplitz 해시 함수와 같은 임의의 유형 및 형태의 해시 함수를 적용할 수 있다. 해시 함수는 해시 유형 또는 임의의 시퀀스의 값에 적용될 수 있다. 해시 함수는 임의의 보안 레벨의 보안 해시일 수 있거나 이와 다르게 암호학적으로 안전하다. 해시 함수는 해시 키를 사용할 수 있다. 키의 크기는 해시 함수에 따른다. Toeplitz 해시의 경우, 크기는 IPv6의 경우 40 바이트, IPv4의 경우 16 바이트일 수 있다.
해시 함수는 하나 이상의 기준 또는 설계 목표에 기초하여 설계 및 구성될 수 있다. 일부 실시예에서, TCP/IPv4, TCP/IPv6, IPv4 및 IPv6 헤더를 포함하는 상이한 해시 입력 및 상이한 해시 유형에 대한 해시 결과의 균일한 분배를 제공하는 해시 함수가 사용될 수 있다. 일부 실시예에서, 적은 수(예를 들어, 2개 또는 4개)의 버킷이 존재할 때 균일하게 분배되는 해시 결과를 제공하는 해시 함수가 사용될 수 있다. 일부 실시예에서, 많은 수의 버킷(예를 들어, 64개의 버킷)이 존재할 때 랜덤하게 분배되는 해시 결과를 제공하는 해시 함수가 사용될 수 있다. 일부 실시예에서, 해시 함수는 계산 레벨 또는 자원 사용량에 기초하여 결정된다. 일부 실시예에서, 해시 함수는 하드웨어에서 해시를 구현하는 용이성 또는 곤란성에 기초하여 결정된다. 일부 실시예에서, 해시 함수는 악의적인 원격 호스트가 동일한 버킷으로 모두 해싱하는 패킷을 전송하는 데 있어서의 용이성 또는 곤란성에 기초하여 결정된다.
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 확장 헤더 파싱(parsing)에 대한 지원을 포함하여, 소스 IPv6 주소 및 착신 IPv6 주소의 2-튜플.
해시 결과 또는 임의의 그 일부는 네트워크 패킷을 분배하기 위한 패킷 엔진 또는 VIP와 같은 코어(505) 또는 엔티티를 식별하는 데 사용될 수 있다. 일부 실시예에서, 하나 이상의 해시 비트 또는 마스크가 해시 결과에 적용된다. 해시 비트 또는 마스크는 임의의 개수의 비트 또는 바이트일 수 있다. NIC(552)는 7 비트와 같은 임의의 수의 비트를 지원할 수 있다. 네트워크 스택은 초기화 동안 사용될 실제 비트 수를 설정할 수 있다. 숫자는 1과 7을 포함하여, 1과 7 사이일 것이다.
해시 결과는 버킷 테이블 또는 인디렉션(indirection) 테이블과 같은 임의의 유형 및 형태의 테이블을 통해 코어(505) 또는 엔티티를 식별하는 데 사용될 수 있다. 일부 실시예에서, 해시-결과 비트의 수가 테이블로 인덱싱하기 위해 사용된다. 해시 마스크의 범위는 인디렉션 테이블의 크기를 효과적으로 정의할 수 있다. 해시 결과 또는 해시 결과 자체의 일부는 인디렉션 테이블을 인덱싱하는 데 사용될 수 있다. 테이블의 값은 코어(505) 또는 프로세서 식별자에 의한 것과 같이, 임의의 코어(505) 또는 프로세서를 식별할 수 있다. 일부 실시예에서, 멀티-코어 시스템의 모든 코어(505)가 테이블에서 식별된다. 다른 실시예에서, 멀티-코어 시스템의 코어(505)의 포트가 테이블에서 식별된다. 인디렉션 테이블은 해시 마스크에 의해 인덱싱될 수 있는 임의의 수의 버킷, 예를 들어 2 내지 128개의 버킷을 포함할 수 있다. 각 버킷은 코어(505) 또는 프로세서를 식별하는 범위의 인덱스 값을 포함할 수 있다. 일부 실시예에서, 흐름 제어기 및/또는 RSS 모듈은 인디렉션 테이블을 변경함으로써 네트워크 부하를 리밸런싱할 수 있다.
일부 실시예에서, 멀티-코어 시스템(545)은 RSS 드라이버 또는 RSS 모듈을 포함하지 않는다. 이들 실시예 중 일부에서, 시스템 내의 RSS 모듈의 소프트웨어 스티어링 모듈(미도시) 또는 소프트웨어 실시예는 흐름 분배기(550)의 일부와 연계하여 또는 일부로서 동작하여 멀티-코어 시스템(545) 내에서 코어(505)로 패킷을 스티어링할 수 있다.
흐름 분배기(550)는 일부 실시예에서 기기(200) 상의 임의의 모듈 또는 프로그램 내에서, 코어(505) 중 임의의 하나 및 멀티-코어 시스템(545) 내에 포함된 디바이스 또는 구성 요소 중 임의의 하나 상에서 실행된다. 일부 실시예에서, 흐름 분배기(550')는 제1 코어(505A) 상에서 실행될 수 있는 반면, 다른 실시예에서 흐름 분배기(550")는 NIC(552) 상에서 실행될 수 있다. 또 다른 실시예에서, 흐름 분배기(550')의 인스턴스는 멀티-코어 시스템(545)에 포함된 각각의 코어(505) 상에서 실행될 수 있다. 이 실시예에서, 흐름 분배기(550')의 각 인스턴스는 흐름 분배기(550')의 다른 인스턴스와 통신하여 코어(505)에 걸쳐 전후로 패킷을 전달할 수 있다. 요청 패킷에 대한 응답이 동일 코어에 의해 프로세싱되지 않을 수 있는 상황이 존재할 수 있으며, 즉, 제1 코어(505A)는 요청을 프로세싱하는 반면, 제2 코어(505B)는 응답을 프로세싱한다. 이러한 상황에서, 흐름 분배기(550')의 인스턴스는 패킷을 인터셉팅하여 이를 원하는, 또는 정확한 코어(505)로 전달할 수 있으며, 즉, 흐름 분배기 인스턴스(550')는 응답을 제1 코어(505A)로 전달할 수 있다. 흐름 분배기(550')의 복수의 인스턴스는 임의의 수의 코어(505) 및 임의의 조합의 코어(505) 상에서 실행될 수 있다.
흐름 분배기(550)는 임의의 하나 이상의 규칙 또는 정책에 응답하여 동작할 수 있다. 규칙은 네트워크 패킷, 데이터 또는 데이터 흐름을 수신하는 코어 또는 패킷 프로세싱 엔진을 식별할 수 있다. 규칙은 소스 및 착신 IP 주소와 소스 및 착신 포트의 4-튜플과 같은 네트워크 패킷과 관련된 임의의 유형 및 형태의 튜플 정보를 식별할 수 있다. 규칙에 의해 특정된 튜플과 매칭되는 수신된 패킷에 기초하여, 흐름 분배기(550)는 패킷을 코어(505) 또는 패킷 엔진으로 전달할 수 있다. 일부 실시예에서, 패킷은 공유 메모리 및/또는 코어 대 코어 메시징을 통해 코어로 전달된다.
도 5b는 멀티-코어 시스템(545) 내에서 실행되는 흐름 분배기(550)를 나타내지만, 일부 실시예에서, 흐름 분배기(550)는 멀티-코어 시스템(545)으로부터 원격에 위치된 컴퓨팅 디바이스 또는 기기 상에서 실행될 수 있다. 이러한 실시예에서, 흐름 분배기(550)는 멀티-코어 시스템(545)과 통신하여 데이터 패킷을 취하고 하나 이상의 코어(505)에 걸쳐 패킷을 분배할 수 있다. 일 실시예에서, 흐름 분배기(550)는 기기(200)로 예정된 데이터 패킷을 수신하여, 분배 스킴을 수신된 데이터 패킷에 적용하고, 데이터 패킷을 멀티-코어 시스템(545)의 하나 이상의 코어(505)에 분배한다. 일 실시예에서, 흐름 분배기(550)는, 각 패킷이 멀티-코어 시스템(545)의 서브-노드를 향해 타겟팅되도록 각 패킷과 연관된 메타 데이터를 변경함으로써 라우터가 특정 코어(505)를 타겟팅할 수 있도록 라우터 또는 다른 기기에 포함될 수 있다. 이러한 실시예에서, CISCO의 vn-태그 메커니즘이 적절한 메타 데이터로 각 패킷을 변경하거나 태깅하는 데 사용될 수 있다.
도 5c에는 하나 이상의 프로세싱 코어(505A-N)를 포함하는 멀티-코어 시스템(575)의 실시예가 나타내어져 있다. 간략한 개요에서, 코어(505) 중 하나는 제어 코어(505A)로 지정될 수 있고 다른 코어(505)에 대한 제어 평면(570)으로서 사용될 수 있다. 다른 코어(505)는, 제어 코어(505A)가 제어 평면(570)을 제공하는 동안 데이터 평면에서 동작하는 2차 코어일 수 있다. 코어(505A-N)는 글로벌 캐시(580)를 공유할 수 있다. 제어 코어(505A)는 제어 평면(570)을 제공하지만, 멀티-코어 시스템(575)의 다른 코어(505)는 데이터 평면을 형성하거나 제공한다. 이들 코어(505)는 네트워크 트래픽에 대한 데이터 프로세싱 기능을 수행하는 반면, 제어는 멀티-코어 시스템(575)의 초기화, 구성 및 제어를 제공한다.
추가로 도 5c를 참조하고, 더욱 상세하게, 제어 코어(505A)뿐만 아니라 코어(505A-N)는 본원에 설명된 임의의 프로세서일 수 있다. 또한, 코어(505A-N) 및 제어 코어(505A)는 도 5c에 설명된 시스템(575) 내에서 기능할 수 있는 임의의 프로세서일 수 있다. 또한, 코어(505A-N) 및 제어 코어(505A)는 본원에 설명된 임의의 코어 또는 코어 그룹일 수 있다. 제어 코어(505A)는 다른 코어(505)와 다른 유형의 코어 또는 프로세서일 수 있다. 일부 실시예에서, 제어는 다른 패킷 엔진을 동작시키거나 다른 코어(505)의 패킷 엔진과 다르게 구성된 패킷 엔진을 가질 수 있다.
각각의 코어(505)의 메모리의 임의의 부분은 코어(505)에 의해 공유되는 글로벌 캐시(580)에 할당되거나 이에 대해 사용될 수 있다. 간략한 개요에서, 각 코어(505)의 메모리 각각의 미리 정해진 백분율 또는 미리 정해진 양이 글로벌 캐시(580)에 사용될 수 있다. 예를 들어, 각 코어(505)의 각 메모리의 50%는 공유 글로벌 캐시(580)에 전용 또는 할당될 수 있다. 즉, 나타낸 실시예에서, 제어 평면 코어 또는 코어 1을 제외한 각 코어(505)의 2GB는 28GB 공유 글로벌 캐시(580)를 형성하는 데 사용될 수 있다. 구성 서비스를 통한 것과 같은 제어 평면(570)의 구성은 공유 글로벌 캐시(580)에 사용되는 메모리의 양을 결정할 수 있다. 일부 실시예에서, 각각의 코어(505)는 글로벌 캐시(580)에 의해 사용하기 위해 상이한 양의 메모리를 제공할 수 있다. 다른 실시예에서, 임의의 하나의 코어(505)는 임의의 메모리를 제공하지 않거나 글로벌 캐시(580)를 사용하지 않을 수 있다. 일부 실시예에서, 임의의 코어(505)는 또한 글로벌 공유 메모리에 할당되지 않은 메모리의 로컬 캐시를 가질 수 있다. 각각의 코어(505)는 네트워크 트래픽의 임의의 부분을 글로벌 공유 캐시(580)에 저장할 수 있다. 각각의 코어(505)는 요청 또는 응답에 사용하기 위한 임의의 컨텐츠에 대해 캐시를 확인할 수 있다. 임의의 코어(505)는 데이터 흐름, 요청 또는 응답에 사용하기 위해 글로벌 공유 캐시(580)로부터 컨텐츠를 얻을 수 있다.
글로벌 캐시(580)는 본원에 설명된 임의의 메모리 또는 저장 요소와 같은 임의의 유형 및 형태의 메모리 또는 저장 요소일 수 있다. 일부 실시예에서, 코어(505)는 미리 정해진 양의 메모리(즉, 시스템(575)에 상응하는 32GB 또는 임의의 다른 메모리 양)에 액세스할 수 있다. 글로벌 캐시(580)는 미리 정해진 양의 메모리로부터 할당될 수 있는 반면, 이용 가능한 나머지 메모리는 코어(505) 사이에 할당될 수 있다. 다른 실시예에서, 각각의 코어(505)는 미리 정해진 양의 메모리를 가질 수 있다. 글로벌 캐시(580)는 각각의 코어(505)에 할당된 메모리의 양을 포함할 수 있다. 이 메모리 양은 바이트로 측정될 수 있거나, 각 코어(505)에 할당된 메모리의 백분율로 측정될 수 있다. 따라서, 글로벌 캐시(580)는 각각의 코어(505)와 연관된 메모리로부터의 1GB의 메모리를 포함할 수 있거나, 각각의 코어(505)와 연관된 메모리의 20% 또는 절반을 포함할 수 있다. 일부 실시예에서, 코어(505)의 일부만이 메모리를 글로벌 캐시(580)에 제공하고, 다른 실시예에서, 글로벌 캐시(580)는 코어(505)에 할당되지 않은 메모리를 포함할 수 있다.
각각의 코어(505)는 글로벌 캐시(580)를 사용하여 네트워크 트래픽 또는 캐시 데이터를 저장할 수 있다. 일부 실시예에서, 코어(505)의 패킷 엔진은 글로벌 캐시(580)를 사용하여 복수의 패킷 엔진에 의해 저장된 데이터를 캐싱하여 사용한다. 예를 들어, 도 2a의 캐시 관리자 및 도 2b의 캐시 기능이 글로벌 캐시(580)를 사용하여 가속을 위해 데이터를 공유할 수 있다. 예를 들어, 각각의 패킷 엔진은 HTML 데이터와 같은 응답을 글로벌 캐시(580)에 저장할 수 있다. 코어(505) 상에서 동작하는 임의의 캐시 관리자는 글로벌 캐시(580)에 액세스하여 클라이언트 요청에 대한 서버 캐시 응답을 캐싱할 수 있다.
일부 실시예에서, 코어(505)는 포트에 부분적으로 기초하여 데이터 흐름을 결정하는 데 사용될 수 있는 포트 할당 테이블을 저장하기 위해 글로벌 캐시(580)를 사용할 수 있다. 다른 실시예에서, 코어(505)는 글로벌 캐시(580)를 사용하여 진입 및 진출 데이터 패킷이 어디를 향하는지 결정하기 위해 흐름 분배기에 의해 사용될 수 있는 주소 룩업 테이블 또는 임의의 다른 테이블 또는 리스트를 저장할 수 있다. 코어(505)는 일부 실시예에서 글로벌 캐시(580)로부터 또는 글로벌 캐시(580)에 판독 및 기입할 수 있는 반면, 다른 실시예에서 코어(505)는 글로벌 캐시(580)로부터 또는 글로벌 캐시(580)에 오직 판독 또는 기입만 할 수 있다. 코어(505)는 글로벌 캐시(580)를 사용하여 코어 대 코어 통신을 수행할 수 있다.
글로벌 캐시(580)는 각각의 섹션이 특정 코어(505)에 전용될 수 있는 개별 메모리 섹션으로 분할될 수 있다. 일 실시예에서, 제어 코어(505A)는 더 많은 양의 가용 캐시를 수신할 수 있는 반면, 다른 코어(505)는 다양한 양을 수신하거나 글로벌 캐시(580)에 액세스할 수 있다.
일부 실시예에서, 시스템(575)은 제어 코어(505A)를 포함할 수 있다. 도 5c는 제어 코어로서 코어 1(505A)을 나타내지만, 제어 코어는 기기(200) 또는 멀티-코어 시스템 내의 임의의 코어일 수 있다. 또한, 단일 제어 코어만이 도시되어 있지만, 시스템(575)은 각각 시스템(575)에 대한 제어 레벨을 갖는 하나 이상의 제어 코어를 포함할 수 있다. 일부 실시예에서, 하나 이상의 제어 코어는 각각 시스템(575)의 특정 양태를 제어할 수 있다. 예를 들어, 하나의 코어는 어떤 분배 스킴을 사용할지를 결정하는 것을 제어할 수 있는 반면, 다른 코어는 글로벌 캐시(580)의 크기를 결정할 수 있다.
멀티-코어 시스템(575)의 제어 평면은 전용 관리 코어 또는 마스터 코어로서의 코어(505)의 지정 및 구성일 수 있다. 이 제어 평면 코어는 멀티-코어 시스템(575)에서 복수의 코어(505)의 동작 및 기능의 제어, 관리 및 조정을 제공할 수 있다. 이 제어 평면 코어는 멀티-코어 시스템(575)의 초기화 및 구성을 포함하여, 멀티-코어 시스템(575)의 복수의 코어(505) 중 시스템의 메모리 할당 및 사용의 제어, 관리 및 조정을 제공할 수 있다. 일부 실시예에서, 제어 평면은 데이터 흐름에 기초하여 코어(505)에 대한 데이터 흐름의 할당 및 코어(505)에 대한 네트워크 패킷의 분배를 제어하기 위한 흐름 분배기를 포함한다. 일부 실시예에서, 제어 평면 코어는 패킷 엔진을 실행하고, 다른 실시예에서, 제어 평면 코어는 시스템(575)의 다른 코어의 관리 및 제어에 전용이다.
제어 코어(505A)는 각 코어(505)에 얼마나 많은 메모리가 할당되어야 하는지를 결정하거나 특정 기능 또는 하드웨어/소프트웨어 엔티티를 처리하기 위해 어떤 코어(505)가 할당되어야 하는지를 결정하는 것과 같이, 다른 코어(505)에 대한 제어 레벨을 행사할 수 있다. 일부 실시예에서, 제어 코어(505A)는 제어 평면(570) 내에서 이들 코어(505)에 대한 제어를 행사할 수 있다. 따라서, 제어 코어(505A)에 의해 제어되지 않는 제어 평면(570)의 외부에 프로세서가 존재할 수 있다. 제어 평면(570)의 경계를 결정하는 것은 제어 코어(505A) 또는 시스템(575) 내에서 실행되는 에이전트에 의해 제어 코어(505A)에 의해 제어되는 이들 코어(505)의 리스트를 유지하는 것을 포함할 수 있다. 제어 코어(505A)는 다음 중 임의의 것을 제어할 수 있다: 코어(505)의 초기화; 코어(505)가 이용 불가능한 때를 결정; 하나의 코어(505)가 고장 났을 때 다른 코어(505)로 부하를 재분배; 구현할 분배 스킴을 결정; 네트워크 트래픽을 수신해야 하는 코어(505)를 결정; 각 코어(505)에 얼마나 많은 캐시가 할당되어야 하는지를 결정; 특정 기능 또는 요소를 특정 코어(505)에 할당할지 여부를 결정; 코어(505)가 서로 통신할 수 있게 할지 여부를 결정; 글로벌 캐시(580)의 크기를 결정; 및 시스템(575) 내의 코어(505)의 기능, 구성 또는 동작의 임의의 다른 결정.
F. 분배된 클러스터 아키텍처를 제공하기 위한 시스템 및 방법
이전 섹션에서 논의한 바와 같이, 트랜지스터 간격 및 CPU 속도 증가에 대한 제한을 극복하기 위해, 많은 CPU 제조업체는 단일의 보다 높은 속도의 CPU도 능가할 수 있는 성능을 향상시키기 위해 멀티-코어 CPU를 통합했다. 단일 또는 멀티-코어인 복수의 기기를 분배 또는 클러스터링된 기기로서 함께 동작시킴으로써 유사하거나 추가적인 성능 이득이 이루어질 수 있다. 개별 컴퓨팅 디바이스 또는 기기는 클러스터의 노드로 지칭될 수 있다. 집중식 관리 시스템은 부하 밸런싱, 분배, 구성 또는 다른 작업을 수행할 수 있어, 노드가 단일 컴퓨팅 시스템으로서 연계하여 동작할 수 있게 한다. 많은 실시예에서, 외부 또는 서버 및 클라이언트를 포함하는 다른 디바이스에 대해, 통상의 개별 기기보다 뛰어난 성능을 갖지만, 클러스터는 단일 가상 디바이스 또는 컴퓨팅 디바이스로 볼 수 있다.
이하 도 6을 참조하면, 컴퓨팅 디바이스 클러스터 또는 기기 클러스터(600)의 실시예가 나타내어져 있다. 때때로 데스크탑 컴퓨터, 서버, 랙 마운트(rack mount) 서버, 블레이드 서버 또는 임의의 다른 유형 및 형태의 컴퓨팅 디바이스와 같은 노드로 지칭되는 복수의 기기(200a-200n) 또는 다른 컴퓨팅 디바이스는 단일 기기 클러스터(600)에 결합될 수 있다. 기기 클러스터라고 칭하더라도, 많은 실시예에서, 클러스터는 어플리케이션 서버, 네트워크 저장 서버, 백업 서비스, 또는 임의의 다른 유형의 컴퓨팅 디바이스로서 제한 없이 동작할 수 있다. 많은 실시예에서, 기기 클러스터(600)는 기기(200), WAN 최적화 디바이스, 네트워크 가속 기기 또는 상술한 다른 디바이스의 많은 기능을 수행하는 데 사용될 수 있다.
일부 실시예에서, 기기 클러스터(600)는 동일한 기기, 하나 이상의 섀시 내의 블레이드 서버, 데스크탑 또는 랙 마운트 컴퓨팅 디바이스, 또는 다른 디바이스와 같은 동종의 컴퓨팅 디바이스의 세트를 포함할 수 있다. 다른 실시예에서, 기기 클러스터(600)는 상이한 모델의 기기, 혼합 기기 및 서버, 또는 임의의 다른 컴퓨팅 디바이스의 세트를 포함하는 이종 또는 혼합 디바이스 세트를 포함할 수 있다. 이는 예를 들어, 새로운 모델 또는 디바이스로 시간이 지남에 따라 기기 클러스터(600)가 확장 또는 업그레이드될 수 있게 한다.
일부 실시예에서, 기기 클러스터(600)의 각 컴퓨팅 디바이스 또는 기기(200)는 상술한 바와 같이 멀티-코어 기기를 포함할 수 있다. 이러한 많은 실시예에서, 상술한 코어 관리 및 흐름 분배 방법은 본원에서 논의된 노드 관리 및 분배 방법 외에 각 개별 기기에 의해 이용될 수 있다. 이것은 2-계층 분배 시스템으로 생각할 수 있으며, 하나의 기기는 복수의 노드에 데이터를 포함하고 분배하며 각 노드는 복수의 코어에 프로세싱하기 위해 데이터를 포함하고 분배한다. 따라서, 이러한 실시예에서, 노드 분배 시스템은 상술한 바와 같이 마스터 또는 제어 코어에 의해 처리될 수 있는 개별 코어로의 흐름 분배를 관리할 필요가 없다.
많은 실시예에서, 기기 클러스터(600)는 섀시 내의 복수의 블레이드 서버 또는 단일 랙에서의 복수의 랙 마운트 디바이스와 같이 물리적으로 그룹화될 수 있지만, 다른 실시예에서, 기기 클러스터(600)는 복수의 섀시, 복수의 랙, 데이터 센터의 복수의 방, 복수의 데이터 센터 또는 임의의 다른 물리적 배치로 분배될 수 있다. 따라서, 기기 클러스터(600)는 물리적 그룹이 아니라 공통 구성, 관리 및 목적을 통해 그룹화된 가상 기기로 간주될 수 있다.
일부 실시예에서, 기기 클러스터(600)는 하나 이상의 네트워크(104, 104')에 접속될 수 있다. 예를 들어, 간단히 도 1a를 다시 참조하면, 일부 실시예에서, 기기(200)는 하나 이상의 클라이언트(102)에 연결된 네트워크(104)와 하나 이상의 서버(106)에 연결된 네트워크(104') 사이에 배치될 수 있다. 기기 클러스터(600)는 단일 기기로서 동작하도록 유사하게 배치될 수 있다. 많은 실시예에서, 이것은 기기 클러스터(600) 외부의 임의의 네트워크 토폴로지 변경을 요구하지 않을 수 있어서, 단일 기기 시나리오로부터 용이한 설치 및 확장성을 가능하게 한다. 다른 실시예에서, 기기 클러스터(600)는 도 1b 내지 도 1d에 나타내거나 상술한 바와 유사하게 배치될 수 있다. 또 다른 실시예에서, 기기 클러스터(600)는 하나 이상의 서버에 의해 실행되는 복수의 가상 머신 또는 프로세스를 포함할 수 있다. 예를 들어, 그러한 일 실시예에서, 서버 팜은 복수의 가상 머신을 실행할 수 있고, 각각의 가상 머신은 기기(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) 내의 노드에 걸쳐 트래픽을 균등하게 분배하도록 추가로 구성될 수 있다. 따라서, 많은 실시예에서, 인터페이스 마스터(608)는 기기 클러스터(600) 외부의 흐름 분배기를 포함할 수 있다. 다른 실시예에서, 인터페이스 마스터(608)는 기기(200a-200n) 중 하나를 포함할 수 있다. 예를 들어, 제1 기기(200a)는 기기 클러스터(600)에 대한 진입 트래픽을 수신하고 각각의 기기(200b-200n)에 걸쳐 트래픽을 분배하는 인터페이스 마스터(608)로서 기능할 수 있다. 일부 실시예에서, 리턴 트래픽은 인터페이스 마스터(608)로서 기능하는 제1 기기(200a)를 통해 각각의 기기(200b-200n)로부터 유사하게 흐를 수 있다. 다른 실시예에서, 각각의 기기(200b-200n)로부터의 리턴 트래픽은 네트워크(104, 104')로 직접 또는 외부 라우터, 스위치 또는 다른 디바이스를 통해 송신될 수 있다. 일부 실시예에서, 인터페이스 마스터(608)로서 기능하지 않는 기기 클러스터(600)의 기기(200)는 인터페이스 슬레이브(610a-610n)로 지칭될 수 있다.
인터페이스 마스터(608)는 임의의 다양한 방식으로 부하 밸런싱 또는 트래픽 흐름 분배를 수행할 수 있다. 예를 들어, 일부 실시예에서, 인터페이스 마스터(608)는 클러스터의 기기 또는 노드로 구성된 다음 홉(hop)과 동일-비용 다중-경로(ECMP: equal-cost multi-path) 라우팅을 수행하는 라우터를 포함할 수 있다. 인터페이스 마스터(608)는 최단 경로 우선(OSPF: open-shortest path first)을 사용할 수 있다. 일부 실시예에서, 인터페이스 마스터(608)는 상술한 바와 같이, IP 주소에 기초한 해시 또는 다른 패킷 정보 튜플과 같은 트래픽 분배를 위한 스테이트리스(stateless) 해시-기반 메커니즘을 사용할 수 있다. 노드에 걸쳐 균등한 분배를 위해 해시 키 및/또는 솔트(salt)가 선택될 수 있다. 다른 실시예에서, 인터페이스 마스터(608)는 링크 집계(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)와의 네트워크 상의 비중간(non-intermediary) 노드로서 배치될 수 있다. 상술한 바와 같이, 많은 실시예에서, 인터페이스 마스터(608)는 서버 및 네트워크(104')로부터 기기 클러스터(600)의 각 기기(200)로의 통신의 라우팅 및 분배를 위해 서버 데이터 평면(604) 상에 배치될 수 있다. 많은 실시예에서, 클라이언트 데이터 평면(602)에 대한 인터페이스 마스터(608) 및 서버 데이터 평면(604)에 대한 인터페이스 마스터(608)는 상술한 바와 같이 ECMP 또는 LAG 프로토콜을 수행하여 유사하게 구성될 수 있다.
일부 실시예에서, 기기 클러스터(600) 내의 각각의 기기(200a-200n)는 내부 통신 네트워크 또는 백 플레인(606)을 통해 접속될 수 있다. 백 플레인(606)은 노드 간 또는 기기 간 제어 및 구성 메시지를 위한, 그리고 트래픽의 노드 간 전달을 위한 통신 네트워크를 포함할 수 있다. 예를 들어, 제1 기기(200a)가 네트워크(104)를 통해 클라이언트와 통신하고, 제2 기기(200b)가 네트워크(104')를 통해 서버와 통신하는 일 실시예에서, 클라이언트와 서버 간의 통신은 클라이언트에서 제1 기기(200a)로, 제1 기기(200a)에서 백 플레인(606)을 통해 제2 기기(200b)로, 그리고 제2 기기(200b)에서 서버로 또는 그 반대로 흐를 수 있다. 다른 실시예에서, 백 플레인(606)은 인터페이스 일시 정지 또는 리셋 커맨드; 필터링 또는 압축 정책과 같은 정책 업데이트; 버퍼 상태, 스루풋 또는 오류 메시지와 같은 상태 메시지; 또는 임의의 다른 유형 및 형태의 노드 간 통신과 같은 구성 메시지를 운반할 수 있다. 일부 실시예에서, RSS 키 또는 해시 키는 클러스터(600) 내의 모든 노드에 의해 공유될 수 있고, 백 플레인(606)을 통해 통신될 수 있다. 예를 들어, 제1 노드 또는 마스터 노드는 스타트업(startup) 또는 부트(boot)와 같은 RSS 키를 선택할 수 있고 다른 노드에 의한 사용을 위해 이 키를 분배할 수 있다. 일부 실시예에서, 백 플레인(606)은 각 기기(200)의 네트워크 인터페이스 사이의 네트워크를 포함할 수 있고, 라우터, 스위치 또는 다른 네트워크 디바이스(미도시)를 포함할 수 있다. 따라서, 일부 실시예에서 그리고 상술한 바와 같이, 클라이언트 데이터 평면(602)에 대한 라우터는 기기 클러스터(600)와 네트워크(104) 사이에 배치될 수 있고, 서버 데이터 평면(604)에 대한 라우터는 기기 클러스터(600)와 네트워크(104') 사이에 배치될 수 있으며, 백 플레인(606)에 대한 라우터는 기기 클러스터(600)의 일부로서 배치될 수 있다. 각각의 라우터는 각각의 기기(200)의 상이한 네트워크 인터페이스에 접속될 수 있다. 다른 실시예에서, 하나 이상의 평면(602-606)이 결합될 수 있거나, 라우터 또는 스위치가 복수의 LAN 또는 VLAN으로 분할되어 기기(200a-200n)의 상이한 인터페이스에 접속하고 복수의 라우팅 기능을 동시에 제공하여, 복잡성을 줄이거나 시스템에서 추가 디바이스를 제거할 수 있다.
일부 실시예에서, 제어 평면(미도시)은 구성을 제어하고 관리자 또는 사용자로부터 기기 클러스터(600)로의 트래픽을 제어할 수 있다. 일부 실시예에서, 제어 평면은 제4 물리적 네트워크일 수 있는 반면, 다른 실시예에서 제어 평면은 평면(602-606) 중 하나를 통한 VPN, 터널 또는 통신을 포함할 수 있다. 따라서, 일부 실시예에서, 제어 평면은 가상 통신 평면으로 간주될 수 있다. 다른 실시예에서, 관리자는 RS-232와 같은 직렬 통신 인터페이스와 같은 별도의 인터페이스; USB 통신 인터페이스; 또는 임의의 다른 유형 및 형태의 통신을 통해 구성 및 제어를 제공할 수 있다. 일부 실시예에서, 기기(200)는 버튼을 갖는 전면 패널 및 디스플레이; 네트워크(104, 104') 또는 백 플레인(606)을 통한 구성을 위한 웹 서버; 또는 임의의 다른 유형 및 형태의 인터페이스와 같은 관리를 위한 인터페이스를 포함할 수 있다.
일부 실시예에서, 상술한 바와 같이, 기기 클러스터(600)는 내부 흐름 분배를 포함할 수 있다. 예를 들어, 이는 노드가 외부 디바이스에 투명하게 연결/방출되도록 하기 위해 수행될 수 있다. 이러한 변화에 대해 외부 흐름 분배기가 반복적으로 재구성될 필요가 없도록 하기 위해, 노드 또는 기기는 네트워크 패킷을 클러스터(600) 내의 정확한 노드로 스티어링하기 위한 인터페이스 마스터(608) 또는 분배기로서 작용할 수 있다. 예를 들어, 일부 실시예에서, 노드가 클러스터를 떠나면(예를 들어, 고장, 리셋 또는 유사한 경우), 외부 ECMP 라우터가 노드의 변경을 식별하고 모든 흐름을 다시 해싱하여 트래픽을 재분배할 수 있다. 이는 모든 접속이 끊어지고 리셋되는 것으로 이어질 수 있다. 노드가 다시 연결될 때 동일한 끊김 및 리셋이 발생할 수 있다. 일부 실시예에서, 신뢰성을 위해, 기기 클러스터(600) 내의 2개의 기기 또는 노드는 접속 미러링을 통해 외부 라우터로부터 통신을 수신할 수 있다.
많은 실시예에서, 기기 클러스터(600)의 노드들 사이의 흐름 분배는 기기의 코어들 사이의 흐름 분배를 위해 상술한 임의의 방법을 사용할 수 있다. 예를 들어, 일 실시예에서, 마스터 기기, 마스터 노드 또는 인터페이스 마스터(608)는 진입하는 트래픽에 대한 Toeplitz 해시와 같은 RSS 해시를 계산하고 해시에 대한 선호 리스트 또는 분배 테이블을 참조할 수 있다. 많은 실시예에서, 흐름 분배기는 트래픽을 전달할 때 해시를 수신자 기기에 제공할 수 있다. 이것은 노드로의 흐름 분배를 위해 노드가 해시를 재계산할 필요성을 제거할 수 있다. 많은 이러한 실시예에서, 기기들 사이에 분배를 위한 해시를 계산하는 데 사용되는 RSS 키는 코어들 사이에 분배를 위해 해시를 계산하는 데 사용되는 것과 동일한 키를 포함할 수 있으며, 이는 글로벌 RSS 키로 지칭될 수 있고, 계산된 해시의 재사용을 가능하게 한다. 일부 실시예에서, 해시는 포트 번호를 포함하는 전송 계층 헤더, IP 주소를 포함하는 인터넷 계층 헤더; 또는 임의의 다른 패킷 헤더 정보의 입력 튜플로 계산될 수 있다. 일부 실시예에서, 패킷 바디 정보가 해시에 이용될 수 있다. 예를 들어, 하나의 프로토콜의 트래픽이 무손실 TCP 헤더를 통해 캡슐화된 손실 UDP 트래픽과 같은 다른 프로토콜의 트래픽 내에 캡슐화되는 일 실시예에서, 흐름 분배기는 캡슐화(encapsulating) 프로토콜(예를 들어, TCP 헤더)이 아닌 캡슐화된(encapsulated) 프로토콜의 헤더(예를 들어, UDP)에 기초하여 해시를 계산할 수 있다. 유사하게, 패킷이 캡슐화되고 암호화되거나 압축되는 일부 실시예에서, 흐름 분배기는 복호화 또는 압축 해제 후에 페이로드 패킷의 헤더에 기초하여 해시를 계산할 수 있다. 또 다른 실시예에서, 노드는 구성 또는 관리 목적과 같은 내부 IP 주소를 가질 수 있다. 이러한 IP 주소로의 트래픽은 해시 및 분배될 필요는 없지만, 착신 주소를 소유한 노드로 전달될 수 있다. 예를 들어, 기기는 1.2.3.4의 IP 주소에서 구성 또는 관리 목적으로 실행되는 웹 서버 또는 다른 서버를 가질 수 있으며, 일부 실시예에서, 흐름 분배기로 이 주소를 내부 IP 주소로 등록할 수 있다. 다른 실시예에서, 흐름 분배기는 내부 IP 주소를 기기 클러스터(600) 내의 각 노드에 할당할 수 있다. 관리자에 의해 사용되고 기기의 내부 IP 주소(1.2.3.4)로 향하는, 워크스테이션과 같은 외부 클라이언트 또는 서버로부터 도착하는 트래픽은 해싱을 필요로 하지 않고 직접 전달될 수 있다.
G. 적응형 패킷 복제를 위한 시스템 및 방법
본 개시는 2차의 신뢰성 있는 링크 상의 우선 순위 트래픽의 적응형 패킷 복제를 사용하는 하이브리드 WAN 링크 환경에서 손실 인터넷 광대역 링크를 사용하기 위한 해결책을 설명한다. 2차 링크는 MPLS(multiprotocol label switching) 링크일 수 있다. 본 해결책은 전체 네트워크에서의 유효 패킷 손실을 계산함으로써 단일 링크의 품질보다는 전체 네트워크 신뢰성에 기초하여 링크 품질 상태를 결정할 수 있다. 본 해결책은 또한 대역폭을 감소시키기 위해 필요할 때 패킷을 적응적으로 복제할 수 있다. 본 해결책은 또한 패킷을 2차 링크 상으로 적응적으로 복제함으로써 신뢰성을 증가시킬 수 있다. 본 해결책은 또한 우선 순위 트래픽을 식별하고 우선 순위 트래픽으로부터 2차 링크로 패킷을 복제할 수 있다.
본 해결책은 더 높은 레이트의 패킷 손실 및 지연이 있는 경우에도, 링크 상태의 빈번한 변경 없이 보완적인 방식으로 인터넷 광대역 링크를 사용함으로써 증가된 신뢰성을 제공할 수 있다. 패킷을 제2 링크 상으로 복제함으로써, 본 해결책은 수용된 패킷에 대한 패킷 재송신을 감소시킴으로써 스루풋을 증가시키고 대기 시간을 개선할 수 있다. 해결책의 적응형 패킷 복제 기술은 또한 모든 트래픽을 제2 링크로 복제하는 시스템과 비교할 때 더 적은 대역폭을 사용할 수 있다. 본 해결책은 또한 적응형 순방향 오류 정정(FEC: forward error correction) 스킴에 의해 추가된 오버헤드를 감소시키고 고정 FEC 및 단일 링크와 비교하여 네트워크의 용량을 향상시킬 수 있다. 본 해결책은 또한 POC(Packet Order Correction)를 단순화할 수 있다.
도 7은 예시적인 중간 디바이스(700)의 블록도를 나타낸다. 중간 디바이스(700)는 패킷 엔진(548)을 포함할 수 있다. 패킷 엔진(548)으로부터의 패킷은 패킷 복제기(702)로 송신될 수 있다. 패킷 복제기(702)는 네트워크 상태에 기초하여 복제 정책 선택기(704)에 의해 적용되는 복제 정책에 따라 패킷을 복제할 수 있다. 중간 디바이스(700)는 또한 네트워크 상태의 표시를 복제 정책 선택기(704)에 제공할 수 있는 링크 품질 추정기(706)를 포함할 수 있다.
중간 디바이스(700)는 링크 품질 추정기(706)를 포함할 수 있다. 링크 품질 추정기(706)는 2개의 네트워크 디바이스 사이의 하나 이상의 네트워크 링크의 특성을 측정하고 및/또는 품질을 결정하기 위한 어플리케이션, 서비스, 루틴, 데몬 또는 다른 실행 가능한 로직을 포함할 수 있다. 예를 들어, 중간 디바이스(700)는 제1 및 제2 링크를 통해 제2 디바이스와 통신할 수 있다. 링크 품질 추정기(706)는 제1 및 제2 링크의 품질을 결정할 수 있다. 링크 품질은 또한 네트워크 메트릭이라고도 지칭될 수 있다. 일부 실시예에서, 링크 품질 추정기(706)는 각각의 링크의 링크 품질을 결정하기 위해 패킷 복제기(702)와 커플링된 상이한 링크를 통해 제어 패킷을 송신할 수 있다. 링크 품질은 링크 이용, 링크 대기 시간, 링크 지터(jitter), 링크 드롭 레이트 또는 이들의 임의의 조합에 제한되지 않지만 이와 같은 메트릭을 포함하거나 이에 기초할 수 있다. 링크 품질 추정기(706)는 또한 링크 품질의 주기적 측정을 수행하기 위해 이미 링크를 횡단한 패킷(예를 들어, 구체적으로 생성된 제어 패킷이 아님)을 사용할 수 있다. 일례에서, 링크 품질 추정기(706)는 복수의 TCP 패킷을 송신하고 원격 디바이스로부터 패킷의 확인 응답을 수신할 때까지 왕복 시간을 측정할 수 있다. 링크 품질 추정기(706)는 확인 응답되지 않은 패킷 또는 부정 응답된(nACK) 패킷을 식별함으로써 손실 레이트(또는 드롭 레이트)를 결정할 수 있다. 링크 품질 추정기(706)는 또한 접속의 대역폭, 최대 세그먼트 크기, 윈도우 크기, 혼잡 또는 네트워크 링크의 임의의 다른 특성을 측정할 수 있다. 링크 품질 추정기(706)는 패킷에 대한 왕복 시간에 기초하여 대기 시간을 측정할 수 있다. 왕복 시간은 패킷의 송신으로부터 패킷 확인 응답의 수신까지의 시간의 양일 수 있다. 링크 품질 추정기(706)는 링크 품질 스코어 및 대역폭의 측정, 이용률, 지터, 대기 시간(또는 지연), 패킷 드롭 레이트 및 복제 정책 선택기(704)에 대한 각각의 링크에 대한 다른 네트워크 특성의 측정치를 제공할 수 있다. 일부 실시예에서, 링크 품질 추정기(706)는 복제 정책 선택기(704)에 대한 각각의 링크에 대한 하나 이상의 대역폭, 이용률, 지터, 대기 시간(또는 지연), 패킷 드롭 레이트 및 다른 네트워크 특성의 측정치를 사용하여 링크 품질 스코어를 생성 또는 계산할 수 있다.
링크 품질 추정기(706)는 패킷 복제기(702)와 커플링된 복수의 링크의 네트워크 메트릭을 결정할 수 있다. 복수의 링크는 원격 디바이스에 접속될 수 있고 패킷 복제기(702)와 원격 디바이스 사이에 복수의 경로를 제공할 수 있다. 복수의 링크는 원격 WAN 또는 데이터센터에 대한 경로를 제공할 수 있다. 패킷 복제기(702)는 원격 디바이스와 중간 디바이스(700) 사이에 확립된 링크의 네트워크 상태를 결정할 수 있다. 네트워크 상태는 하나 이상의 네트워크 메트릭을 포함하거나 이에 기초할 수 있다. 일부 실시예에서, 제1 링크는 인터넷 광대역 링크일 수 있고, 제2 링크는 멀티프로토콜 라벨 스위칭 링크일 수 있다. 원격 디바이스는 가상 광역 네트워크 디바이스일 수 있다.
중간 디바이스(700)는 패킷 복제기(702)를 포함할 수 있다. 패킷 복제기(702)는 데이터 패킷을 하나 이상의 링크에 복제하거나 달리 복사하기 위한 어플리케이션, 서비스, 루틴, 데몬 또는 다른 실행 가능한 로직을 포함할 수 있다. 나타낸 바와 같이, 패킷 복제기(702)는 2개의 링크에 커플링되지만; 패킷 복제기(702)는 2개 초과의 링크에 커플링될 수 있다. 다른 링크는 원격 디바이스에 대한 다른 경로를 제공할 수 있다. 링크는 다른 네트워크, 네트워크 유형을 횡단할 수 있으며, 다른 캐리어에 의해 제공될 수 있다. 일례에서, 제1 링크는 MPLS 링크일 수 있고, 제2 링크는 케이블 또는 DSL 캐리어에 의해 제공된 인터넷 접속일 수 있다. 패킷 복제기(702)가 패킷을 복제하는 레이트는 복제 정책에 의해 제어된다. 복제 레이트는 단위 시간 당 복제된 패킷의 수 - 예를 들어, 초 당 복제된 패킷의 수를 나타낼 수 있다. 다른 구현예에서, 복제 레이트는 수신된 패킷 당 복제된 패킷의 수일 수 있으며, 예를 들어 100개의 수신된 패킷 당 20개의 패킷이 복제된다. 이하에서 더 상세히 설명되는 복제 정책 선택기(704)는 어떤 복제 정책을 구현할 것인지를 결정하고 패킷 복제기(702)에 복제 정책을 제공할 수 있다. 복제 정책은 예를 들어, 링크 품질 또는 다른 네트워크 메트릭과 같이, 패킷이 이에 기초하여 복제되는 복제를 설정할 수 있는 규칙의 세트를 포함할 수 있다. 복제 정책은 하나 이상의 임계값을 포함할 수 있다. 복제 레이트는 각 임계값과 연관될 수 있다. 임계값은 링크 품질과 같은 네트워크의 메트릭 또는 패킷 드롭 레이트 및 대역폭 이용률과 같은 링크 품질을 결정하는 데 사용되는 임의의 측정치에 기초할 수 있다. 예를 들어, 링크 품질 추정기(706)가 복제 정책의 제1 임계값이 교차되는 것으로 결정할 때, 패킷 복제기(702)는 제1 레이트로 패킷을 복제할 수 있고; 링크 품질 추정기(706)가 제2 임계값이 교차되는 것으로 결정할 때, 패킷 복제기(702)는 복제 정책에 의해 지시된 바와 같이 패킷을 제2 레이트로 복제할 수 있다.
일부 실시예에서, 패킷 엔진(548)으로부터의 원본 패킷은 패킷 복제기(702)가 원본 패킷을 송신할 링크를 결정하기 위해 판독할 수 있는 헤더의 라우팅 정보를 포함한다. 패킷 복제기(702)는 복제 패킷을 원본 패킷이 송신되는 링크와 다른 제2의 다른 링크를 통해 송신할 수 있다. 예를 들어, 측정된 네트워크 메트릭(예를 들어, 링크 품질)이 제1 임계값 미만(또는 임계값을 충족하지 않음)인 경우, 패킷 복제기(702)는 제1 링크를 통해 원본 패킷만을 송신할 수 있다. 네트워크 메트릭이 임계값을 충족하는 경우(예를 들어, 대기 시간이 대기 시간 임계값 위로 증가), 패킷 복제기(702)는 제2 링크를 통해 복제 패킷을 송신할 수 있다. 패킷 복제기(702)는 임계값 교차와 연관된 복제 레이트로 패킷을 복제할 수 있다. 복제 레이트는 수신된 원본 패킷 당 패킷 복제기(702)가 얼마나 많은 패킷을 복제하는지 또는 주어진 시간 구간 동안 패킷 복제기(702)가 복제하는 패킷의 수를 나타낼 수 있다.
일부 실시예에서, 제2 링크 상으로 패킷의 복제가 제2 링크의 미리 정해진 양의 대역폭을 소비할 때, 패킷 복제기(702)는 복제된 패킷의 일부를 제1 링크 상으로 송신하기 시작할 수 있다. 예를 들어, 링크 품질 추정기(706)는 제2 링크의 대역폭 이용값이 미리 정해진 임계값(예를 들어, 링크의 총 대역폭의 80%)을 충족하는 것으로 결정할 수 있다. 패킷 복제기(702)는 미리 정해진 임계값을 충족시키는 제2 링크의 복제 패킷량을 송신할 수 있고, 미리 정해진 임계값 위의 복제 패킷을 제1 링크 상으로 송신할 수 있다.
일부 실시예에서, 패킷 복제기(702)는 수신 네트워크 디바이스에서의 유효 패킷 손실 레이트, 유효 침묵 기간 또는 다른 네트워크 상태가 미리 정해진 임계값을 초과할 때, 단지 패킷을 (원본 패킷이 송신되는) 제1 링크 상으로 복제한다. 예를 들어, 수신 디바이스는 전송 디바이스로부터 수신 디바이스로의 패킷의 송신에서 많은 수의 패킷이 드롭되는 네트워크 상태를 경험할 수 있다. 패킷 복제기(702)는 유효 패킷 손실 레이트를 감소시키기 위해 제2 링크를 따라 복제 패킷을 수신 디바이스로 송신할 수 있다. 복제 패킷이 제2 링크의 최대 대역폭 이용값(또는 임계값)에 도달할 때 유효 패킷 드롭 레이트가 허용 가능한 범위로 개선되지 않았다면, 패킷 복제기(702)는 패킷을 제1 링크 상으로 복제하기 시작할 수 있다.
중간 디바이스(700)는 복제 정책 선택기(704)를 포함할 수 있다. 복제 정책 선택기(704)는 복제 정책을 결정 및 선택하기 위한 어플리케이션, 서비스, 루틴, 데몬 또는 다른 실행 가능한 로직을 포함할 수 있다. 복제 정책 선택기(704)는 링크 품질 추정기(706)로부터 네트워크 메트릭을 수신하고 패킷 복제기(702)에 접속된 하나 이상의 링크의 메트릭에 기초하여 복제 정책을 선택할 수 있다. 복제 정책 선택기(704)는 네트워크 메트릭에 기초하여 패킷 복제 레이트를 결정 또는 설정할 수 있다. 복제 정책 선택기(704)는 미리 정해진 네트워크 메트릭과 임계값 사이의 차이에 기초하여 패킷 복제 레이트를 결정할 수 있다. 예를 들어, 복제 정책 선택기(704)는 제1 링크의 대기 시간 및 패킷 손실 레이트를 모니터링할 수 있다. 대기 시간 및 패킷 손실 레이트가 너무 높고 임계값에 교차할 때, 복제 정책 선택기(704)는 패킷 복제기(702)에게 패킷을 제2 링크 상에 복제하도록 지시할 수 있다. 복제 정책 선택기(704)는 링크 품질 추정기(706)로부터 네트워크 메트릭 정보를 계속 수신하고 대기 시간 및 패킷 손실 레이트가 임계값 아래로 떨어지면 패킷 복제를 중지하도록 패킷 복제기(702)에 지시할 수 있다.
복제 정책 선택기(704)는 또한 패킷 복제기(702)가 패킷을 복제하는 복제 레이트를 설정할 수 있다. 복제 정책 선택기(704)는 제1 링크의 네트워크 메트릭을 수신할 수 있고, 네트워크 상태가 임계값에 교차할 때, 복제 정책 선택기(704)는 패킷 복제기(702)에 제2 링크를 통해 패킷 복제를 시작하도록 지시할 수 있다. 복제 정책 선택기(704)가 패킷 복제기(702)에게 패킷을 복제하도록 지시하는 레이트는 네트워크 메트릭에 기초할 수 있다. 예를 들어, 복제 정책 선택기(704)가 네트워크 메트릭이 저하되고 있는 것으로 결정하면(예를 들어, 대기 시간이 증가하거나 패킷 손실 레이트가 증가하고 있음), 복제 정책 선택기(704)는 복제 레이트를 증가시킬 수 있다. 네트워크 메트릭이 저하됨에 따라, 복제 정책 선택기(704)는 제1 링크의 저하를 보상하기 위해 복제 레이트를 증가시킬 수 있다.
복제 정책 선택기(704)는 제1 링크 단독의 네트워크 메트릭 또는 하나 이상의 링크의 네트워크 메트릭에 기초하여 복제 레이트를 설정할 수 있다. 복수의 링크의 네트워크 메트릭에 기초하여 복제 레이트를 결정할 때, 동일하거나 상이한 유형의 네트워크 메트릭이 사용될 수 있다. 상이한 네트워크 메트릭이 사용되는 예에서, 패킷 복제 레이트는 제2 링크의 결정된 대역폭 및 제1 링크의 대기 시간 또는 패킷 손실과 같은 네트워크 메트릭에 기초할 수 있다.
복제 정책 선택기(704)는 유효 패킷 손실 레이트에 기초하여 복제 레이트를 설정할 수 있다. 도 8a는 유효 패킷 손실 레이트에 기초한 패킷의 복제를 나타낸다. 유효 패킷 손실 레이트는 제1 링크를 통한 패킷 손실 레이트 및 제2 링크를 통해 송신된 복제 패킷의 수용 레이트를 고려하는 패킷 손실 레이트일 수 있다. 예를 들어, 또한 도 8a를 참조하면, 제1 가상 WAN 기기(800(a))는 제2 가상 WAN 기기(800(b))와 통신할 수 있다. 제1 가상 WAN 기기(800(a))는 제1 링크(802) 및 제2 링크(804)를 통해 제2 가상 WAN 기기(800(b))와 통신할 수 있다. 패킷(806)은 제1 링크(802) 및 제2 링크(804)를 통해 송신된다. 음영 처리된 패킷(806')은 제1 링크(802)를 따라 제1 가상 WAN 기기(800(a))에서 제2 가상 WAN 기기(800(b))로 송신하는 동안 드롭되는 패킷을 나타낸다. 제1 링크(802)는 케이블 또는 DSL 공급자에 의해 제공한 것과 같은 인터넷을 통한 링크일 수 있다. 제2 링크(804)는 MPLS 링크일 수 있다.
도 8a에 나타낸 바와 같이. 7개의 패킷(806')이 제1 링크(802) 상에서 드롭된다. 6개의 패킷(806)이 제2 링크(804) 상에 복제된다. 적응적 복제 없이, 제1 링크(802)를 따른 손실 레이트는 7개의 패킷이다. 유효 패킷 손실 레이트를 계산하는 것은 제2 링크(804) 상에서의 패킷 수용 레이트를 결정하는 것을 포함할 수 있다. 일부 실시예에서, 패킷 수용 레이트는 수신 디바이스에서 수신된 총 복제 패킷 수의 수용 레이트일 수 있다. 예를 들어, 도 8a에 나타낸 예에서, 나타낸 시간 프레임을 통한 수용 레이트는 6이다. 다른 실시예에서, 패킷 수용 레이트는 주어진 시간 프레임 동안 제1 링크(802) 상의 손실된 패킷에 대응하는 제2 링크(804) 상의 수신된 복제 패킷의 수에 기초할 수 있다. 예를 들어, 제2 링크(804)를 통해 송신된 패킷(806(11))은 제1 링크(802)를 통해 송신된 수용된 패킷(806(11))에 대응하고, 제2 링크(804)를 통해 송신된 패킷(806(10))은 제1 링크(802)를 통해 송신된 손실된 패킷(806(10))에 대응한다. 제1 링크(802) 상의 패킷(806)에 대응하는 제2 링크(804) 상의 패킷(806)은 패킷(806)이 서로의 복제물임을 나타낼 수 있다. 예를 들어, 제2 링크(804) 상의 패킷(806(8))은 제1 링크(802) 상의 패킷(806(8))의 복제물이다. 유효 패킷 손실 레이트는 제1 링크(802)를 통한 제1 패킷 손실 레이트와 제2 링크(804)를 통한 패킷 수용 레이트 간의 차이에 기초할 수 있다. 도 8a에 나타낸 예에서, 제1 링크(802)를 통한 제1 패킷 손실 레이트는 나타낸 시간 프레임 동안 7개의 패킷이고, 제2 링크(804)를 통한 (손실된 패킷에 대응하는 패킷에 대한) 나타낸 시간 프레임 동안 패킷 수용 레이트는 4이다. 이 예에서, 나타낸 시간 프레임 동안 유효 손실 레이트는 3이다. 일부 실시예에서, 복제 정책 선택기(704)는 유효 손실 레이트가 미리 정해진 임계값 미만일 때 복제 레이트를 계속 증가시킬 수 있다. 예를 들어, 상술한 예에서 나타내어진 시간 프레임 동안 임계값이 2의 유효 손실 레이트로 설정되었으면, 복제 정책 선택기(704)는 유효 손실 레이트가 3인 것으로 계산되기 때문에 복제 레이트를 증가시킬 것이다.
제1 링크(802) 및 제2 링크(804)는 제1 가상 WAN 기기(800(a))와 제2 가상 WAN 기기(800(b)) 사이의 복수의 경로를 포함할 수 있다. 상이한 경로는 제1 가상 WAN 기기(800(a))와 제2 가상 WAN 기기(800(b)) 사이에 상이한 수의 홉을 가질 수 있다. 다른 경로는 링크를 따라 다른 물리적 접속을 횡단할 수 있다. 제1 디바이스는 그 경로를 따라 송신된 미리 정해진 수의 패킷이 드롭되거나 지연되면 링크를 따르는 경로 중 하나를 유효하지 않은 경로로 마킹할 수 있다. 일례에서, 제1 링크(802)의 경로를 따라 송신하는 동안 3개의 연속 패킷이 드롭될 때, 경로는 유효하지 않은 것으로 마킹될 수 있고 경로는 후속 패킷에 사용되지 않을 수 있다. 유효하지 않은 경로의 마킹은 제1 링크(802)의 드롭 레이트 또는 지연 레이트에 기초할 수 있고 제1 링크(802) 및 제2 링크(804)의 조합된 유효 드롭 또는 지연 레이트에 기초하지 않을 수 있다.
다시 도 7을 참조하면, 일부 실시예에서, 복제 정책 선택기(704)는 제1 링크를 횡단하는 패킷의 지연 레이트에 기초하여 복제 레이트를 설정할 수 있다. 복제 정책 선택기(704)는 또한 패킷의 유효 지연 레이트에 기초하여 복제 레이트를 설정할 수 있다. 도 8b는 유효 지연 레이트에 기초한 패킷의 복제를 나타낸다. 도 8b는 도 8a에 나타낸 것과 유사한 예시적인 시스템을 나타낸다. 도 8b는 지연 레이트에 기초하여 패킷이 복제되는 시스템을 나타낸다. 도 8b에서, 패킷(806)은 제1 가상 WAN 기기(800(a))와 제2 가상 WAN 기기(800(b)) 사이에서 송신된다.
패킷(806(1)-806(6))을 포함하는 데이터 스트림은 제1 링크(802)를 따라 송신된다. 복제 패킷(806(2), 806(4) 및 806(6))은 제2 링크(804)를 따라 송신된다. 도 8b에 나타낸 시스템에서, 음영 처리된 패킷(806')은 지연된 패킷이다. 예를 들어, 제1 링크(802) 상의 패킷(806(2))은 패킷(806(1))으로부터 지연된다. 유효 지연 레이트는 제1 링크(802)의 제1 패킷 지연 레이트를 결정하고 제1 링크 상의 지연된 패킷에 대해 수용되는 복제 패킷의 수에 기초할 수 있는 제2 링크(804)의 패킷 수용 레이트를 결정함으로써 복제 정책 선택기(704)에 의해 계산될 수 있다. 유효 패킷 지연 레이트는 제1 패킷 지연 레이트와 패킷 수용 레이트의 차이에 기초할 수 있다. 유효 패킷 지연 레이트는 제2 가상 WAN 기기(800(b))에 의해 수신된 패킷들 사이의 유효 침묵을 나타낼 수 있다. 예를 들어, 가상 WAN 기기(800(a))는 시간 t=t 1 에서 패킷(806(1))을 수신하고, t=t n 에서 제1 링크(802) 상의 패킷(806(2))을 수신하고, t=t m 에서 제2 링크(804) 상의 패킷(806(2))을 수신하며, 여기서 mn보다 작다. 제1 링크(802) 상에서 패킷(806(1) 및 806(2))의 수신 사이의 침묵은 (t n -t 1 )이다. mn보다 작기 때문에, 가상 WAN 기기(800(b))에서의 패킷 수신의 유효 침묵 레이트는 (t m -t 1 )이다. 일부 실시예에서, 복제 정책 선택기(704)는 유효 침묵 레이트가 미리 정해진 임계값보다 작을 때까지 패킷 복제 레이트를 증가시킬 수 있다. 예를 들어, 패킷 복제 레이트는 추가 패킷이 제2 링크(804)를 통해 송신되도록 증가될 수 있다. 미리 정해진 양의 시간(예를 들어, 30 초) 동안 증가된 복제 레이트로 제2 링크(804)를 통해 복제 패킷을 송신한 후, 링크 품질 추정기(706)는 유효 침묵 레이트를 재확인할 수 있다. 패킷 복제기(702) 및 링크 품질 추정기(706)는 유효 침묵 주기가 미리 정해진 임계값보다 작을 때까지 복제 레이트를 반복적으로 증가시키고 유효 침묵 레이트를 확인할 수 있다.
도 9는 네트워크 상태에 기초하여 복제 패킷을 송신하기 위한 예시적인 방법(900)의 블록도를 도시한다. 방법(900)은 제1 디바이스와 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태 메트릭이 임계값 내에 있는 것으로 결정하는 단계를 포함할 수 있다(블록 902). 방법(900)은 네트워크 상태 메트릭이 임계값 내에 있는 것으로 결정하는 것에 기초하여, 제1 링크를 따라 제1 디바이스로부터 제2 디바이스로 송신될 원본 패킷의 복제 패킷을 생성하는 단계를 포함할 수 있다(블록 904). 방법(900)은 제1 디바이스에 의해, 원본 패킷을 제2 디바이스로 송신하는 단계를 포함할 수 있다(블록 906). 방법(900)은 제1 디바이스와 제2 디바이스 사이에 확립된 제2 링크 상에서 제1 디바이스에 의해 복제 패킷을 제2 디바이스로 송신하는 단계를 포함할 수 있다(블록 908).
블록 902에서, 방법(900)은 제1 디바이스에 의해, 제1 디바이스와 제2 디바이스 사이의 제1 링크의 네트워크 상태 메트릭이 임계값 내에 있는지를 결정하는 단계를 포함할 수 있다. 제1 및 제2 디바이스는 가상 WAN 디바이스일 수 있다. 네트워크 상태 메트릭은 제1 링크를 통한 패킷 손실 레이트, 제1 링크를 통한 패킷 지연 시간, 제1 및 제2 링크를 통한 효과 패킷 손실 레이트, 또는 제1 및 제2 링크를 통한 유효 패킷 지연 시간일 수 있다. 임계값은 복제 정책에 의해 설정된 네트워크 상태 메트릭의 범위일 수 있다. 임계값은 사용자 또는 컴퓨터 시스템이 네트워크 중단을 경험하기 시작하는 네트워크 상태 메트릭 값 아래로 설정될 수 있다. 예를 들어, 패킷 손실 레이트가 x로 상승하면 컴퓨터 시스템은 네트워크 중단을 경험하기 시작할 수 있다. 임계값은 x/2로 설정될 수 있어 사용자 또는 시스템이 현저한 네트워크 중단을 경험하기 전에 시스템이 패킷을 복제하기 시작한다. 제1 링크는 인터넷 광대역 링크일 수 있고 제2 링크는 멀티프로토콜 라벨 스위칭 링크일 수 있다.
블록 904에서, 방법(900)은 제1 디바이스와 제2 디바이스 사이에서 송신될 원본 패킷의 복제 패킷을 생성하는 단계를 포함할 수 있다. 네트워크 상태 메트릭이 임계값 내에 있는 것으로 결정하면, 패킷 복제기는 제1 링크를 통해 패킷 엔진으로부터 제2 디바이스로 송신된 패킷을 인터셉팅 및 복제하기 시작할 수 있다. 패킷을 복제하는 단계는 원본 패킷의 하나 이상의 사본을 생성하는 단계를 포함할 수 있다. 어떠한 패킷이 복제되는지는 복제 레이트에 기초할 수 있다. 예를 들어, 복제 레이트는 매 5번째 패킷이 복제되거나 미리 정해진 수의 패킷이 매초 복제되는 것일 수 있다. 패킷의 복제 레이트는 복제 정책에 기초하여 설정될 수 있다. 복제 레이트는 네트워크 상태 메트릭에 기초할 수 있다. 예를 들어, 네트워크 상태 메트릭이 악화되어 제1 임계값을 충족시킬 때, 복제 레이트는 제1 값으로 설정될 수 있고, 네트워크 상태 메트릭이 더욱 악화되어 제2 임계값을 충족시킬 때, 복제 레이트는 제1 값보다 더 큰 제2 값으로 설정될 수 있다. 네트워크 상태 메트릭이 악화될수록 복제 레이트를 더 높게 설정하면 네트워크 상태가 악화되는 효과에 대응할 수 있다. 예를 들어, 제1 링크를 따라 더 많은 패킷이 드롭됨에 따라, 패킷 복제기는 제1 링크에 대한 드롭된 패킷의 효과를 상쇄하기 위해 제2 링크를 따라 송신되는 더 많은 수의 복제 패킷을 생성한다.
복제 레이트는 네트워크 상태의 메트릭과 임계값 사이의 차이에 기초할 수 있다. 예를 들어, 패킷 손실 레이트와 패킷 손실 레이트에 대한 임계값 사이의 차이가 증가함에 따라 복제 레이트는 증가할 수 있다. 일부 실시예에서, 복제 정책은 복수의 임계값을 포함할 수 있다. 네트워크 상태의 메트릭이 제1 임계값을 충족할 때, 복제 레이트는 제1 레이트로 설정될 수 있다. 네트워크 상태의 메트릭이 제2 임계값을 충족할 때, 복제 레이트는 제2 레이트로 설정될 수 있다. 일부 실시예에서, 복제 레이트는 제2 링크의 대역폭에 기초할 수 있다. 예를 들어, 제2 링크가 높은 대역폭 용량을 갖는 경우, 낮은 대역폭 용량을 갖는 제2 링크와 비교할 때 복제 레이트가 더 높게 설정될 수 있다.
블록 906에서, 방법(900)은 원본 패킷을 제1 링크를 통해 제2 디바이스로 송신하는 단계를 포함할 수 있다. 제1 링크는 인터넷 광대역 링크일 수 있다. 제1 링크는 제1 디바이스와 제2 디바이스 사이의 1차 링크일 수 있다. 제1 링크는 제1 디바이스와 제2 디바이스 사이의 복수의 경로를 포함할 수 있다.
블록 908에서, 방법(900)은 복제 패킷을 제2 링크를 통해 제2 디바이스로 송신하는 단계를 포함할 수 있다. 제2 링크는 MPLS 링크일 수 있다. 제2 링크는 제1 디바이스와 제2 디바이스 사이의 복수의 경로를 포함할 수 있다. 일부 실시예에서, 복제 패킷이 제2 링크의 최대 대역폭 이용률을 채울 때, 패킷 복제기는 제1 링크 상에서 복제 패킷을 송신할 수 있다. 제2 링크를 통해 제2 디바이스로 송신된 복제 패킷의 레이트 또는 양은 유효 패킷 지연 레이트 및 유효 패킷 손실 레이트와 같은 네트워크 상태 메트릭에 기초할 수 있다.
일부 실시예에서, 방법(900)의 일부는 미리 정해진 시간 후에 되풀이되며 반복될 수 있다. 예를 들어, 시스템은 타겟 유효 패킷 손실 레이트 또는 타겟 유효 지연 레이트를 가질 수 있다. 시스템은 현재 유효 패킷 손실 레이트 또는 유효 지연 레이트를 결정할 수 있다. 그 후 시스템은 현재 레이트가 타겟 레이트보다 낮은 지를 결정할 수 있다. 현재 유효 패킷 손실 레이트 또는 현재 유효 지연 레이트가 그 타겟 레이트 미만이 되도록 타겟 레이트 사이에 차이가 있는 경우, 시스템은 복제 레이트를 증가시킬 수 있다. 복제 레이트의 증가 후 미리 정해진 시간 후에, 시스템은 업데이트된 레이트를 타겟 레이트와 비교할 수 있다. 시스템은 업데이트된 레이트가 타겟 레이트를 충족할 때까지 복제 레이트를 계속 증가시킬 수 있다.
상술한 시스템은 이들 구성 요소 중 임의의 것 또는 각각의 복수를 제공할 수 있으며, 이들 구성 요소는 독립형 머신 또는 일부 실시예에서 분산형 시스템의 복수의 머신 중 어느 하나에 제공될 수 있음을 이해해야 한다. 상술한 시스템 및 방법은 소프트웨어, 펌웨어, 하드웨어 또는 이들의 임의의 조합을 생성하기 위한 프로그래밍 및/또는 엔지니어링 기술을 사용하는 방법, 장치 또는 제조 물품으로서 구현될 수 있다. 또한, 상술한 시스템 및 방법은 하나 이상의 제조 물품 상에 또는 하나 이상의 제조 물품에 구현되는 하나 이상의 컴퓨터 판독 가능 프로그램으로서 제공될 수 있다. 본원에서 사용되는 용어 "제조 물품"은 하나 이상의 컴퓨터 판독 가능 디바이스, 펌웨어, 프로그램 가능 로직, 메모리 디바이스(예를 들어, EEPROM, ROM, PROM, RAM, SRAM 등), 하드웨어(예를 들어, 집적 회로 칩, FPGA(Field Programmable Gate Array), ASIC(Application Specific Integrated Circuit) 등), 전자 디바이스, 컴퓨터 판독 가능 비휘발성 저장 유닛(예를 들어, CD-ROM, 플로피 디스크, 하드 디스크 드라이브 등)으로부터 액세스 가능하고 이에 내장되는 코드 또는 로직을 포함하도록 의도된다. 제조 물품은 네트워크 송신 라인, 무선 송신 매체, 공간을 통해 전파되는 신호, 무선 전파, 적외선 신호 등을 통해 컴퓨터 판독 가능 프로그램에 대한 액세스를 제공하는 파일 서버로부터 액세스될 수 있다. 제조 물품은 플래시 메모리 카드 또는 자기 테이프일 수 있다. 제조 물품은 하드웨어 로직뿐만 아니라 프로세서에 의해 실행되는 컴퓨터 판독 가능 매체에 내장된 소프트웨어 또는 프로그램 가능 코드를 포함한다. 일반적으로, 컴퓨터 판독 가능 프로그램은 LISP, PERL, C, C++, C#, PROLOG와 같은 임의의 프로그래밍 언어 또는 JAVA와 같은 임의의 바이트 코드 언어로 구현될 수 있다. 소프트웨어 프로그램은 객체 코드로서 하나 이상의 제조 물품 상에 또는 제조 물품에 저장될 수 있다.
방법 및 시스템의 다양한 실시예가 설명되었지만, 이들 실시예는 예시적인 것이며 설명된 방법 또는 시스템의 범위를 제한하는 것은 아니다. 관련 기술 분야의 통상의 기술자는 설명된 방법 및 시스템의 가장 넓은 범위를 벗어나지 않고도 설명된 방법 및 시스템의 형태 및 세부 사항에 대해 변경을 가할 수 있다. 따라서, 본원에 설명된 방법 및 시스템의 범위는 예시적인 실시예 중 어느 것에 의해서도 제한되어서는 안되며, 첨부된 청구 범위 및 그 등가물에 따라 규정되어야 한다.

Claims (20)

  1. 네트워크 상태에 기초하여 복제 패킷을 송신하기 위한 방법으로서,
    제1 디바이스에 의해, 상기 제1 디바이스와 제2 디바이스 사이에 확립된 제1 링크의 네트워크 상태의 메트릭이 임계값 내에 있는지를 결정하는 단계 - 상기 제1 링크의 네트워크 상태의 상기 메트릭은 상기 제1 링크의 패킷 지연 레이트 또는 상기 제1 링크의 패킷 손실 레이트임 - ;
    상기 제1 디바이스에 의해, 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭이 상기 임계값 내에 있는 것으로 결정하는 것에 응답하여, 상기 제1 디바이스와 상기 제2 디바이스 사이에 확립된 제2 링크를 통해, 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하는 단계 - 상기 복제 패킷들은 상기 제1 링크의 손실 레이트 또는 지연 레이트, 및 상기 제2 링크의 타겟 유효 패킷 수용 레이트에 기초하여 생성됨 -;
    상기 제1 디바이스에 의해, 상기 제1 링크 상에서 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 상기 패킷들을 송신하는 단계; 및
    상기 제1 디바이스에 의해, 상기 제2 링크 상에서 상기 복제 패킷들을 송신하는 단계를 포함하는, 방법.
  2. 삭제
  3. 제1항에 있어서, 상기 임계값은 제1 임계값이며,
    상기 제1 디바이스에 의해, 상기 제1 링크의 상기 네트워크 상태를 모니터링하는 단계;
    상기 제1 디바이스에 의해, 상기 네트워크 상태의 상기 메트릭이 제2 임계값 내에 있는지 결정하는 단계; 및
    상기 제1 디바이스에 의해, 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭이 상기 제2 임계값 내에 있는 것으로 결정하는 것에 응답하여, 복제 패킷들이 생성되어 상기 제2 링크 상에서 송신되는 레이트에 대응하는 패킷 복제 레이트를 수정하는 단계를 더 포함하는, 방법.
  4. 제1항에 있어서,
    상기 제1 디바이스에 의해, 상기 제2 링크의 대역폭을 결정하는 단계; 및
    상기 제1 디바이스에 의해, 상기 결정된 상기 제2 링크의 대역폭 및 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭에 기초하여 패킷 복제 레이트를 결정하는 단계를 더 포함하고,
    상기 제1 링크를 통해 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하는 단계는 상기 패킷 복제 레이트에 기초하여 상기 복제 패킷들을 생성하는 단계를 포함하는, 방법.
  5. 제1항에 있어서, 상기 제1 디바이스와 상기 제2 디바이스 사이에 확립된 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭을 결정하는 단계는 상기 제1 링크의 패킷 손실 레이트 또는 상기 제1 링크의 패킷 지연 레이트 중 하나를 결정하는 단계를 포함하는, 방법.
  6. 제1항에 있어서, 상기 제1 링크는 인터넷 광대역 링크이고 상기 제2 링크는 멀티프로토콜 라벨 스위칭 링크이고 상기 제1 디바이스 및 상기 제2 디바이스는 가상 광역 네트워크 디바이스인, 방법.
  7. 제1항에 있어서,
    상기 제1 디바이스에 의해, 상기 제1 링크 상에서 손실된 패킷들의 수에 대응하는 상기 제1 링크의 제1 패킷 손실 레이트를 결정하는 단계;
    상기 제1 디바이스에 의해, 상기 제1 링크 상의 손실된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 상기 제2 링크의 패킷 수용 레이트를 결정하는 단계; 및
    상기 제1 디바이스에 의해, 상기 제1 패킷 손실 레이트와 상기 패킷 수용 레이트 사이의 차이에 기초하여 상기 제1 링크의 유효 패킷 손실 레이트를 결정하는 단계를 더 포함하고,
    상기 제1 링크의 상기 네트워크 상태의 상기 메트릭은 상기 제1 링크의 상기 유효 패킷 손실 레이트인, 방법.
  8. 제1항에 있어서,
    상기 제1 디바이스에 의해, 상기 제1 링크 상에서 지연된 패킷들의 수에 대응하는 상기 제1 링크의 제1 패킷 지연 레이트를 결정하는 단계;
    상기 제1 디바이스에 의해, 상기 제1 링크 상의 지연된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 상기 제2 링크의 패킷 수용 레이트를 결정하는 단계; 및
    상기 제1 디바이스에 의해, 상기 제1 패킷 지연 레이트와 상기 패킷 수용 레이트 사이의 차이에 기초하여 상기 제1 링크의 유효 패킷 지연 레이트를 결정하는 단계를 더 포함하고,
    상기 제1 링크의 상기 네트워크 상태의 상기 메트릭은 상기 제1 링크의 상기 유효 패킷 지연 레이트인, 방법.
  9. 제1항에 있어서,
    상기 제1 디바이스에 의해, 상기 네트워크 상태의 상기 메트릭을 업데이트하기 위해 상기 제1 링크의 상기 네트워크 상태를 모니터링하는 단계;
    상기 제1 디바이스에 의해, 상기 제2 링크 상에서 상기 복제 패킷들을 송신하는 것에 응답하여, 상기 제1 링크의 상기 네트워크 상태의 상기 업데이트된 메트릭이 상기 임계값 내에 있는지 결정하는 단계; 및
    상기 제1 디바이스에 의해, 상기 네트워크 상태의 상기 업데이트된 메트릭이 상기 임계값 내에 있는 것으로 결정하는 것에 응답하여 패킷 복제 레이트를 증가시키는 단계를 더 포함하는, 방법.
  10. 제1항에 있어서,
    상기 제1 디바이스에 의해, 상기 제1 링크의 상기 네트워크 상태의 현재 메트릭이 상기 임계값 내에 있는지 결정하는 단계;
    상기 제1 디바이스에 의해, 상기 제2 링크의 대역폭 이용 메트릭이 상기 제2 링크에 할당된 미리 정해진 최대 대역폭 이용값 내에 있는지 결정하는 단계;
    상기 제1 디바이스에 의해, 상기 제1 링크의 상기 네트워크 상태의 상기 현재 메트릭이 상기 임계값 내에 있는 것으로 결정하는 것에 응답하여, 단위 시간 당 생성되는 복제된 패킷들의 수를 증가시키기 위해 패킷 복제 레이트를 증가시키는 단계; 및
    상기 제1 디바이스에 의해, 상기 제2 링크의 상기 대역폭 이용 메트릭이 상기 미리 정해진 최대 대역폭 이용값 내에 있는 것으로 결정하는 것에 응답하여, 상기 제1 링크 상의 상기 복제 패킷들의 일부를 송신하는 단계를 더 포함하는, 방법.
  11. 네트워크 상태에 기초하여 복제 데이터 패킷들을 송신하기 위한 시스템으로서,
    제2 디바이스와의 제1 링크를 확립하고 상기 제2 디바이스와의 제2 링크를 확립하도록 구성된 제1 디바이스를 포함하고, 상기 제1 디바이스는,
    상기 제1 디바이스와 상기 제2 디바이스 사이에 확립된 상기 제1 링크의 네트워크 상태의 메트릭이 임계값 내에 있음을 결정하고 - 상기 제1 링크의 네트워크 상태의 상기 메트릭은 상기 제1 링크의 패킷 지연 레이트 또는 상기 제1 링크의 패킷 손실 레이트임 - ;
    상기 제1 링크의 상기 네트워크 상태의 상기 메트릭이 상기 임계값 내에 있다는 결정에 응답하여, 상기 제1 디바이스와 상기 제2 디바이스 사이에 확립된 제2 링크를 통해, 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하고 - 상기 복제 패킷들은 상기 제1 링크의 패킷 손실 레이트 또는 지연 레이트, 및 상기 제2 링크의 타겟 유효 패킷 수용 레이트에 기초하여 생성됨 - ;
    상기 제1 링크 상에서 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 상기 패킷들을 송신하고; 그리고
    상기 제2 링크 상에서 상기 복제 패킷들을 송신하도록 구성되는, 시스템.
  12. 삭제
  13. 제11항에 있어서, 상기 임계값은 제1 임계값이고, 상기 제1 디바이스는,
    상기 제1 링크의 상기 네트워크 상태를 모니터링하고;
    상기 네트워크 상태의 상기 메트릭이 제2 임계값 내에 있는지 결정하고;
    상기 제1 링크의 상기 네트워크 상태의 상기 메트릭이 상기 제2 임계값 내에 있는 것으로 결정하는 것에 응답하여, 복제 패킷들이 생성되어 상기 제2 링크 상에서 송신되는 레이트에 대응하는 패킷 복제 레이트를 수정하도록 추가로 구성되는, 시스템.
  14. 제11항에 있어서, 상기 제1 디바이스는,
    상기 제2 링크의 대역폭을 결정하고;
    상기 결정된 상기 제2 링크의 대역폭 및 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭에 기초하여 패킷 복제 레이트를 결정하도록 추가로 구성되고,
    상기 제1 링크를 통해 상기 제1 디바이스로부터 상기 제2 디바이스로 송신될 패킷들의 복제 패킷들을 생성하기 위해, 상기 제1 디바이스는 상기 패킷 복제 레이트에 기초하여 상기 복제 패킷들을 생성하도록 구성되는, 시스템.
  15. 제11항에 있어서, 상기 제1 디바이스와 상기 제2 디바이스 사이에 확립된 상기 제1 링크의 상기 네트워크 상태의 상기 메트릭을 결정하기 위해, 상기 제1 디바이스는 상기 제1 링크의 패킷 손실 레이트 또는 상기 제1 링크의 패킷 지연 레이트 중 하나를 결정하도록 추가로 구성되는, 시스템.
  16. 제11항에 있어서, 상기 제1 링크는 인터넷 광대역 링크이고 상기 제2 링크는 멀티프로토콜 라벨 스위칭 링크이고 상기 제1 디바이스 및 상기 제2 디바이스는 가상 광역 네트워크 디바이스인, 시스템.
  17. 제11항에 있어서, 상기 제1 디바이스는,
    상기 제1 링크 상에서 손실된 패킷들의 수에 대응하는 상기 제1 링크의 제1 패킷 손실 레이트를 결정하고;
    상기 제1 링크 상의 손실된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 상기 제2 링크의 패킷 수용 레이트를 결정하고; 그리고
    상기 제1 패킷 손실 레이트와 상기 패킷 수용 레이트 사이의 차이에 기초하여 상기 제1 링크의 유효 패킷 손실 레이트를 결정하도록 추가로 구성되고,
    상기 제1 링크의 상기 네트워크 상태의 상기 메트릭은 상기 제1 링크의 상기 유효 패킷 손실 레이트인, 시스템.
  18. 제11항에 있어서, 상기 제1 디바이스는,
    상기 제1 링크 상에서 지연된 패킷들의 수에 대응하는 상기 제1 링크의 제1 패킷 지연 레이트를 결정하고;
    상기 제1 링크 상의 지연된 패킷들에 대해 수용된 복제 패킷들의 수에 기초하여 상기 제2 링크의 패킷 수용 레이트를 결정하고; 그리고
    상기 제1 패킷 지연 레이트와 상기 패킷 수용 레이트 사이의 차이에 기초하여 상기 제1 링크의 유효 패킷 지연 레이트를 결정하도록 추가로 구성되고,
    상기 제1 링크의 상기 네트워크 상태의 상기 메트릭은 상기 제1 링크의 상기 유효 패킷 지연 레이트인, 시스템.
  19. 제11항에 있어서, 상기 제1 디바이스는,
    상기 네트워크 상태의 상기 메트릭을 업데이트하기 위해 상기 제1 링크의 상기 네트워크 상태를 모니터링하고;
    상기 제2 링크 상에서 상기 복제 패킷들을 송신하는 것에 응답하여, 상기 제1 링크의 상기 네트워크 상태의 상기 업데이트된 메트릭이 상기 임계값 내에 있는지 결정하고; 그리고
    상기 네트워크 상태의 상기 업데이트된 메트릭이 상기 임계값 내에 있는 것으로 결정하는 것에 응답하여 패킷 복제 레이트를 증가시키도록 추가로 구성되는, 시스템.
  20. 제11항에 있어서, 상기 제1 디바이스는,
    상기 제1 링크의 상기 네트워크 상태의 현재 메트릭이 상기 임계값 내에 있는지 결정하고;
    상기 제2 링크의 대역폭 이용 메트릭이 상기 제2 링크에 할당된 미리 정해진 최대 대역폭 이용값 내에 있는지 결정하고;
    상기 제1 링크의 상기 네트워크 상태의 상기 현재 메트릭이 상기 임계값 내에 있는 것으로 결정하는 것에 응답하여, 단위 시간 당 생성되는 복제된 패킷들의 수를 증가시키기 위해 패킷 복제 레이트를 증가시키고; 그리고
    상기 제2 링크의 상기 대역폭 이용 메트릭이 상기 미리 정해진 최대 대역폭 이용값 내에 있는 것으로 결정하는 것에 응답하여, 상기 제1 링크 상의 상기 복제 패킷들의 일부를 송신하도록 추가로 구성되는, 시스템.
KR1020197030214A 2017-03-20 2018-03-16 대체 링크 상의 패킷의 적응형 복제에 의한 하이브리드 wan 링크의 자동 튜닝 KR102304416B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/463,635 US10367712B2 (en) 2017-03-20 2017-03-20 Auto tuning of hybrid wan links by adaptive duplication of packets on alternate links
US15/463,635 2017-03-20
PCT/US2018/023013 WO2018175263A1 (en) 2017-03-20 2018-03-16 Auto tuning of hybrid wan links by adaptive duplication of packets on alternate links

Publications (2)

Publication Number Publication Date
KR20190126143A KR20190126143A (ko) 2019-11-08
KR102304416B1 true KR102304416B1 (ko) 2021-09-23

Family

ID=61874044

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197030214A KR102304416B1 (ko) 2017-03-20 2018-03-16 대체 링크 상의 패킷의 적응형 복제에 의한 하이브리드 wan 링크의 자동 튜닝

Country Status (6)

Country Link
US (2) US10367712B2 (ko)
EP (1) EP3603023B1 (ko)
JP (1) JP6953547B2 (ko)
KR (1) KR102304416B1 (ko)
CN (1) CN110679132B (ko)
WO (1) WO2018175263A1 (ko)

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10454714B2 (en) 2013-07-10 2019-10-22 Nicira, Inc. Method and system of overlay flow control
US10135789B2 (en) 2015-04-13 2018-11-20 Nicira, Inc. Method and system of establishing a virtual private network in a cloud service for branch networking
CN108702355B (zh) * 2016-02-23 2021-08-03 瑞典爱立信有限公司 用户设备中使用的方法和相关联的ue
US11706127B2 (en) 2017-01-31 2023-07-18 Vmware, Inc. High performance software-defined core network
US10992568B2 (en) 2017-01-31 2021-04-27 Vmware, Inc. High performance software-defined core network
US20180219765A1 (en) 2017-01-31 2018-08-02 Waltz Networks Method and Apparatus for Network Traffic Control Optimization
US10778528B2 (en) 2017-02-11 2020-09-15 Nicira, Inc. Method and system of connecting to a multipath hub in a cluster
MX2019013630A (es) * 2017-05-15 2020-08-20 Mixhalo Corp Sistemas y metodos para proporcionar audio y datos en tiempo real con referencia reciproca a aplicaciones relacionadas.
CN109245870B (zh) * 2017-06-16 2021-12-28 华为技术有限公司 处理无线链路失败方法、终端设备和基站
US10778466B2 (en) 2017-10-02 2020-09-15 Vmware, Inc. Processing data messages of a virtual network that are sent to and received from external service machines
US11115480B2 (en) 2017-10-02 2021-09-07 Vmware, Inc. Layer four optimization for a virtual network defined over public cloud
US10999100B2 (en) 2017-10-02 2021-05-04 Vmware, Inc. Identifying multiple nodes in a virtual network defined over a set of public clouds to connect to an external SAAS provider
US11223514B2 (en) 2017-11-09 2022-01-11 Nicira, Inc. Method and system of a dynamic high-availability mode based on current wide area network connectivity
US10904135B2 (en) * 2018-07-13 2021-01-26 Nokia Technologies Oy Method and apparatus for increasing reliability of packet delivery by dynamic packet cloning and route selection
US10771405B2 (en) 2018-10-26 2020-09-08 Cisco Technology, Inc. Switching and load balancing techniques in a communication network
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
US10749787B2 (en) * 2019-01-03 2020-08-18 Citrix Systems, Inc. Method for optimal path selection for data traffic undergoing high processing or queuing delay
US11743174B2 (en) * 2019-01-29 2023-08-29 Cisco Technology, Inc. Supporting asynchronous packet operations in a deterministic network
CN109587052B (zh) 2019-01-30 2022-03-15 展讯通信(上海)有限公司 一种多链路数据传输方法及装置
US11805446B2 (en) * 2019-03-25 2023-10-31 Lg Electronics Inc. Conditional supplementary link activation and transmission
JPWO2020261393A1 (ko) * 2019-06-25 2020-12-30
US11121985B2 (en) 2019-08-27 2021-09-14 Vmware, Inc. Defining different public cloud virtual networks for different entities based on different sets of measurements
US20210092062A1 (en) * 2019-09-20 2021-03-25 Citrix Systems, Inc. Quality of experience (qoe) enhancement device and related techniques
US11611507B2 (en) 2019-10-28 2023-03-21 Vmware, Inc. Managing forwarding elements at edge nodes connected to a virtual network
US11356851B2 (en) 2019-12-03 2022-06-07 Harris Global Communications, Inc. Communications system having multiple carriers with selectively transmitted real information and fake information and associated methods
US11489783B2 (en) 2019-12-12 2022-11-01 Vmware, Inc. Performing deep packet inspection in a software defined wide area network
US11438789B2 (en) 2020-01-24 2022-09-06 Vmware, Inc. Computing and using different path quality metrics for different service classes
US11159978B2 (en) * 2020-01-28 2021-10-26 Dell Products, L.P. Adaptive multi-link control
CN111642022B (zh) * 2020-06-01 2022-07-15 重庆邮电大学 一种支持数据包聚合的工业无线网络确定性调度方法
US11709710B2 (en) 2020-07-30 2023-07-25 Vmware, Inc. Memory allocator for I/O operations
KR102648570B1 (ko) 2020-11-03 2024-03-18 한국전자통신연구원 무손실 패킷 전달을 위한 전송 제어 방법 및 장치
CN112383472A (zh) * 2020-11-13 2021-02-19 Oppo广东移动通信有限公司 网络传输方法、装置、存储介质及电子设备
US11662934B2 (en) 2020-12-15 2023-05-30 International Business Machines Corporation Migration of a logical partition between mutually non-coherent host data processing systems
US11929903B2 (en) 2020-12-29 2024-03-12 VMware LLC Emulating packet flows to assess network links for SD-WAN
CN116783874A (zh) * 2021-01-18 2023-09-19 Vm维尔股份有限公司 网络感知的负载平衡
US11979325B2 (en) 2021-01-28 2024-05-07 VMware LLC Dynamic SD-WAN hub cluster scaling with machine learning
US11509571B1 (en) 2021-05-03 2022-11-22 Vmware, Inc. Cost-based routing mesh for facilitating routing through an SD-WAN
US12009987B2 (en) 2021-05-03 2024-06-11 VMware LLC Methods to support dynamic transit paths through hub clustering across branches in SD-WAN
US11729065B2 (en) 2021-05-06 2023-08-15 Vmware, Inc. Methods for application defined virtual network service among multiple transport in SD-WAN
US12015536B2 (en) 2021-06-18 2024-06-18 VMware LLC Method and apparatus for deploying tenant deployable elements across public clouds based on harvested performance metrics of types of resource elements in the public clouds
US12047282B2 (en) 2021-07-22 2024-07-23 VMware LLC Methods for smart bandwidth aggregation based dynamic overlay selection among preferred exits in SD-WAN
US20230100301A1 (en) * 2021-09-30 2023-03-30 Adaptiv Networks Inc. Efficient fail over to backup link
US11943146B2 (en) 2021-10-01 2024-03-26 VMware LLC Traffic prioritization in SD-WAN
KR102522585B1 (ko) * 2022-01-21 2023-04-17 주식회사 넥스트앤콤 데이터 동기화 시스템 및 그 방법
US11909815B2 (en) 2022-06-06 2024-02-20 VMware LLC Routing based on geolocation costs
US12057993B1 (en) 2023-03-27 2024-08-06 VMware LLC Identifying and remediating anomalies in a self-healing network
US12034587B1 (en) 2023-03-27 2024-07-09 VMware LLC Identifying and remediating anomalies in a self-healing network

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040105463A1 (en) 2002-12-03 2004-06-03 Gene Cheung Method for enhancing transmission quality of streaming media
US20060068715A1 (en) 2004-09-30 2006-03-30 Hundal Sukhdeep S System and method for asymmetric enhanced mode operation in a digital communication system
US20080311855A1 (en) 2007-05-04 2008-12-18 Toshiba Research America, Inc. Intelligent connectivity framework for the simultaneous use of multiple interfaces
US20110142034A1 (en) * 2009-12-15 2011-06-16 Hong Kong Applied Science And Tehnology Research Institute Co. Ltd. Control of bit-rate and packet duplication in a real-time media stream
JP2013207431A (ja) * 2012-03-27 2013-10-07 Jvc Kenwood Corp 送信端末装置、データ送受信システム、データ送信方法、及び、プログラム
JP2014530531A (ja) 2011-09-19 2014-11-17 アルカテル−ルーセント 選択的保護切り替えのためのシステムおよび方法
US20160127215A1 (en) 2014-11-04 2016-05-05 Imagination Technologies Limited Packet Loss and Bandwidth Coordination

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6615251B1 (en) * 1995-12-11 2003-09-02 John R. Klug Method for providing node targeted content in an addressable network
US7046636B1 (en) 2001-11-26 2006-05-16 Cisco Technology, Inc. System and method for adaptively improving voice quality throughout a communication session
CN101237314A (zh) * 2008-01-16 2008-08-06 杭州华三通信技术有限公司 一种保障复制业务传输的方法及接入设备
JP2011087091A (ja) * 2009-10-14 2011-04-28 Sony Corp 送信装置および送信装置の動作モード制御方法
US9178806B2 (en) * 2012-07-31 2015-11-03 Alcatel Lucent High-speed content routing
US9444751B1 (en) * 2012-08-03 2016-09-13 University Of Southern California Backpressure with adaptive redundancy
US9320050B2 (en) * 2013-06-28 2016-04-19 Apple Inc. Systems and methods to enhance radio link performance in a multi-carrier environment
CA2943454C (en) * 2014-04-04 2022-08-23 Superpedestrian, Inc. Systems, methods and devices for the operation of electrically motorized vehicles
US9717015B2 (en) * 2014-07-03 2017-07-25 Qualcomm Incorporated Rate control for wireless communication
US10728791B2 (en) * 2014-10-27 2020-07-28 General Electric Company Wireless interface virtualization

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040105463A1 (en) 2002-12-03 2004-06-03 Gene Cheung Method for enhancing transmission quality of streaming media
US20060068715A1 (en) 2004-09-30 2006-03-30 Hundal Sukhdeep S System and method for asymmetric enhanced mode operation in a digital communication system
US20080311855A1 (en) 2007-05-04 2008-12-18 Toshiba Research America, Inc. Intelligent connectivity framework for the simultaneous use of multiple interfaces
US20110142034A1 (en) * 2009-12-15 2011-06-16 Hong Kong Applied Science And Tehnology Research Institute Co. Ltd. Control of bit-rate and packet duplication in a real-time media stream
JP2014530531A (ja) 2011-09-19 2014-11-17 アルカテル−ルーセント 選択的保護切り替えのためのシステムおよび方法
US20140369182A1 (en) * 2011-09-19 2014-12-18 Giuseppe De Blasio System and method for selective protection switching
JP2013207431A (ja) * 2012-03-27 2013-10-07 Jvc Kenwood Corp 送信端末装置、データ送受信システム、データ送信方法、及び、プログラム
US20160127215A1 (en) 2014-11-04 2016-05-05 Imagination Technologies Limited Packet Loss and Bandwidth Coordination

Also Published As

Publication number Publication date
CN110679132B (zh) 2022-05-17
US11075831B2 (en) 2021-07-27
JP6953547B2 (ja) 2021-10-27
US10367712B2 (en) 2019-07-30
US20180270139A1 (en) 2018-09-20
US20190342201A1 (en) 2019-11-07
KR20190126143A (ko) 2019-11-08
CN110679132A (zh) 2020-01-10
WO2018175263A1 (en) 2018-09-27
EP3603023B1 (en) 2023-03-15
JP2020515149A (ja) 2020-05-21
EP3603023A1 (en) 2020-02-05

Similar Documents

Publication Publication Date Title
KR102304416B1 (ko) 대체 링크 상의 패킷의 적응형 복제에 의한 하이브리드 wan 링크의 자동 튜닝
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
AU2017258734B2 (en) System and method for service chain load balancing
US9497281B2 (en) Systems and methods to cache packet steering decisions for a cluster of load balancers
US9619542B2 (en) Systems and methods for application-state distributed replication table hunting
US10333846B2 (en) Systems and methods for routing network packets between multi-core intermediaries
US8971323B2 (en) Systems and methods for dynamic routing in a cluster
US9497106B2 (en) Systems and methods for synchronizing MSS and PMTU in Ncore and cluster systems
US8972602B2 (en) Systems and methods for using ECMP routes for traffic distribution
US9866475B2 (en) Systems and methods for forwarding traffic in a cluster network
US8891364B2 (en) Systems and methods for distributing traffic across cluster nodes
US9652514B2 (en) Systems and methods for redirect handling
US20170126345A1 (en) Method for packet scheduling using multiple packet schedulers
US20130336337A1 (en) Systems and methods for sharing l2 information & mac based forwarding
EP3183867B1 (en) Systems and methods for providing fine grained control over mss values of transport layer connections
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