KR20170106648A - 대용량 네트워크 데이터의 처리 기법 - Google Patents

대용량 네트워크 데이터의 처리 기법 Download PDF

Info

Publication number
KR20170106648A
KR20170106648A KR1020177023441A KR20177023441A KR20170106648A KR 20170106648 A KR20170106648 A KR 20170106648A KR 1020177023441 A KR1020177023441 A KR 1020177023441A KR 20177023441 A KR20177023441 A KR 20177023441A KR 20170106648 A KR20170106648 A KR 20170106648A
Authority
KR
South Korea
Prior art keywords
data
consumer
topic
session
message
Prior art date
Application number
KR1020177023441A
Other languages
English (en)
Other versions
KR102082355B1 (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 KR20170106648A publication Critical patent/KR20170106648A/ko
Application granted granted Critical
Publication of KR102082355B1 publication Critical patent/KR102082355B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1859Arrangements for providing special services to substations for broadcast or conference, e.g. multicast adapted to provide push services, e.g. data channels
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/08Configuration management of networks or network elements
    • H04L41/0803Configuration setting
    • H04L41/0806Configuration setting for initial configuration or provisioning, e.g. plug-and-play
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/24Traffic characterised by specific attributes, e.g. priority or QoS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24558Binary matching operations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/50Network service management, e.g. ensuring proper service fulfilment according to agreements
    • H04L41/5003Managing SLA; Interaction between SLA and QoS
    • 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/0805Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters by checking availability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/19Flow control; Congestion control at layers above the network layer
    • H04L47/193Flow control; Congestion control at layers above the network layer at the transport layer, e.g. TCP related
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/52Queue scheduling by attributing bandwidth to queues
    • H04L47/522Dynamic queue service slot or variable bandwidth allocation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • H04L61/50Address allocation
    • H04L61/5007Internet protocol [IP] addresses
    • 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/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2463/00Additional details relating to network architectures or network communication protocols for network security covered by H04L63/00
    • H04L2463/144Detection or countermeasures against botnets

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Environmental & Geological Engineering (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

적어도 하나의 프로그램을 저장하는 컴퓨터 판독가능 저장 매체와, 네트워크를 통한 이벤트 메시징을 위한 컴퓨터 구현 방법을 포함하는 시스템이 개시된다. 식별 모듈은 토픽에 링크된 이벤트 메시지를 수신하는 데 이용가능한 소비자 디바이스를 식별하는 제 1 데이터를 수신한다. 식별 모듈은 토픽에 링크된 이벤트 메시지를 제공하는 데 이용가능한 생산자 디바이스를 식별하는 제 2 데이터를 수신한다. 프로비저닝 모듈은 복수의 값을 토픽에 링크된 각각의 소비자 디바이스에 링크시킨다. 스케줄러 모듈은 토픽에 링크된 제 1 데이터 메시지에 액세스한다. 제 1 데이터 메시지는 키 값을 포함한다. 스케줄러 모듈은 키 값과 각각의 소비자 디바이스의 복수의 값의 비교에 기초하여 소비자 디바이스 중 선택된 소비자 디바이스에 제 1 데이터 메시지를 제공한다.

Description

대용량 네트워크 데이터의 처리 기법
본원의 실시예는 일반적으로 데이터 처리의 기술 분야에 관한 것이다.
머신 간 통신은 발행자-구독자 약정(a publisher-subscriber arrangement)을 사용하여 이행될 수 있다. 송신기 머신 기능은 메시지 생성자로도 알려진 메시지 발행자의 역할을 수행한다. 송신기 머신은 네트워크를 사용하여 하나 이상의 메시지를 송신(예, 생성 또는 발행)할 수 있다. 송신기 머신은 하나 이상의 수신기 머신에 네트워크를 통해 메시지를 전송한다. 그러나 메시지는 특정 수신기 시스템으로 전달되지 않는다. 오히려, 송신기 머신은 멀티캐스트 네트워크 프로토콜(복수의 수신기 머신으로 하여금 각각 메시지를 수신하게 함)을 사용하여 메시지를 전송한다. 멀티캐스트 프로토콜은 일 대 다(one-to-many) 통신을 지원하며 송신기 머신에는 어떤 특정 수신기 머신이 메시지를 처리할지를 나타내는 정보가 없다. 이와 관련하여, 멀티캐스트 통신은 포인트 투 포인트(point-to-point)(예를 들어, 일 대 일) 통신과 구별된다. 수신기 머신은 메시지 소비자로도 알려진 메시지 구독자로서의 기능을 한다. 수신기 머신은 송신기 머신으로부터 송신된 메시지를 수신(예를 들어, 소비)할 수 있다. 수신기 머신은 멀티캐스트 프로토콜을 사용하여 전송된 메시지에 대해 네트워크를 모니터링한다.
도면은 반드시 축척대로 그려진 것은 아니며, 도면에서 동일한 도면 부호는 상이한 도면에서 유사한 구성 요소를 나타낼 수 있다. 상이한 문자 또는 숫자 접미사를 갖는 유사한 숫자는 유사한 구성 요소의 다른 경우를 나타낼 수 있다. 도면은 본 명세서에서 논의된 다양한 실시예에 대한 제한이 아닌 예로서 일반적으로 나타낸다.
도 1은 하나의 예시적인 실시예가 배치될 수 있는 클라이언트-서버 시스템을 나타내는 네트워크 다이어그램이다.
도 2는 일 실시예에 따른 모바일 디바이스를 나타내는 블록도이다.
도 3은 도 1의 클라이언트-서버 시스템의 적어도 일부를 형성하는 다수의 모듈을 포함하는 메시징 시스템의 예시적인 실시예를 나타내는 블록도이다.
도 4는 일 실시예에 따른 예시적인 생산자-소비자 시스템을 나타내는 블록도이다.
도 5는 일 실시예에 따른 예시적인 메시징 스택을 나타내는 블록도이다.
도 6은 일 실시예에 따른 예시적인 생산자-에이전트-소비자 시스템을 나타내는 블록도이다.
도 7은 일 실시예에 따른 광고의 예시적인 데이터 구조를 나타내는 블록도이다.
도 8은 일 실시예에 따른 예시적인 메시징 시스템 아키텍처를 나타내는 블록도이다.
도 9는 일 실시예에 따라, 메시징 시스템에 의해 사용되는 예시적인 모니터링 시스템을 나타내는 블록도이다.
도 10은 일 실시예에 따라, 소비자 클러스터를 재구성하기 위한 생산자와 소비자의 상호 작용의 예시적인 실시예를 나타내는 개략도이다.
도 11은 일 실시예에 따른 클러스터 메시징의 예시적인 방법을 도시하는 흐름도이다.
도 12는 일 실시예에 따른 예시적인 세션화기 시스템 아키텍처를 나타내는 블록도이다.
도 13은 다수의 모듈을 포함하는 세션화기의 예시적인 실시예를 나타내는 블록도이다.
도 14는 일 실시예에 따른 예시적인 세션화기 아키텍처를 나타내는 블록도이다.
도 15는 일 실시예에 따라, 세션화된 데이터를 생성하는 예시적인 방법을 나타내는 흐름도이다.
도 16은 일 실시예에 따라 세션을 생성 및 업데이트하는 예시적인 방법을 나타내는 흐름도이다.
도 17은 일 실시예에 따른 세션 라이프사이클 관리의 예시적인 방법을 도시하는 흐름도이다.
도 18은 머신으로 하여금 본 명세서에 논의된 임의의 하나 이상의 방법론을 수행하게 하기 위한 명령어가 실행될 수 있는 예시적인 형태의 컴퓨터 시스템 내의 머신의 블록도이다.
지금부터 본 발명의 대상을 실시하기 위한 구체적인 실시예가 상세히 참조될 것이다. 이러한 구체적인 실시예에 대한 예시가 첨부 도면에 도시되어 있다. 이들은 청구된 범위를 설명된 실시예로 제한하려는 것이 아니라는 점을 이해할 것이다. 반대로, 이들은 첨부된 청구항에 의해 정의된 바와 같은 개시의 범위 내에 포함될 수 있는 대안, 수정 및 등가물을 포함하도록 의도된다. 이하의 설명에서, 구체적인 내용은 발명의 대상에 대한 완전한 이해를 제공하기 위해 기술된다. 실시예는 이들 특정 세부 사항의 일부 또는 전부가 없이도 실시될 수 있다. 또한, 불필요하게 발명의 대상을 모호하게 하는 것을 피하기 위해 주지의 특징이 상세히 기술되지 않을 수도 있다.
본 개시내용에 따라, 컴포넌트, 프로세스 단계 및/또는 데이터 구조는 다양한 타입의 운영 체제, 프로그래밍 언어, 컴퓨팅 플랫폼, 컴퓨터 프로그램 및/또는 유사한 머신을 사용하여 구현된다. 또한, 당업자는 하드웨어에 내장된 디바이스, 필드 프로그램가능 게이트 어레이(FPGA), 주문형 집적 회로(ASIC) 등과 같은 디바이스를 본 명세서에 개시된 개념의 범주 및 사상을 벗어나지 않는 범위에서 디바이스의 하나 이상의 기술적 특징을 구현하는 데에 사용할 수 있다. 실시예는 또한 컴퓨터 명령어 기반 실시예의 기술적 특징을 이용하기 위해 메모리 디바이스와 같은 컴퓨터 판독가능 매체 상에 저장된 컴퓨터 명령어의 세트로서 전형적으로 구현될 수 있다.
전자 디바이스에 구현된 데이터를 분배 및/또는 처리하기 위한 예시적인 방법 및 시스템이 설명된다. 이하의 상세한 설명에서는, 설명의 목적으로, 예시적인 실시예의 완전한 이해를 제공하기 위해 다수의 특정 세부 사항이 기술된다. 그러나, 본 발명의 대상은 이러한 특정 세부 사항 없이도 실시될 수 있다는 점이 당업자에게 명백히 이해될 것이다.
일 실시예에서, 네트워크 내에서 실시간으로 이벤트 메시지를 분배하고, 이벤트 스트림을 세션화하고, 이벤트 스트림의 뷰를 관리하는 시스템 및 방법이 개시된다. 예를 들어, 실시간 복합 이벤트 처리(CEP)는 초당 수백만 개의 이벤트를 처리하는 것을 포함한다. 일부 시나리오에서 CEP는 매우 빠른 속도(예, 초당 최대 백만 이벤트), 볼륨(예, 테라 바이트의 데이터) 및/또는 다양성(예, 비 구조화 및 준 구조화된 데이터)을 갖는 이벤트 스트림 처리를 포함할 수 있다. CEP 엔진은 이벤트 스트림을 분석하여 이벤트 내에 포함된 정보의 튜플의 조합 또는 정보의 튜플에 대한 집계를 계산하는 데 사용되는 CEP 인스턴스이다. 때로는 여러 스트림을 결합하여 이벤트 스트림을 상관시키거나 이벤트 도착 시에 패턴을 감지할 수 있다. 그러나, 단일 노드에서 실행되는 CEP 엔진은 그러한 많은 용량을 처리하기 위한 처리 자원을 갖지 못할 것이다.
본 명세서에 개시된 바와 같이, 일 실시예는 다수의 CEP 엔진을 클러스터에 배치하고 다수의 디바이스에 배치한다. 일 실시예는 CEP 엔진의 클러스터 전체에 작업 부하를 분배한다. 이러한 배치는 확장 가능한 시스템을 제공할 수 있다. 시스템은 CEP 엔진의 클러스터를 탄력적으로 확장할 수 있어 작업 부하가 증가하면 클러스터의 건전성(예, 성능, 네트워크 안정성 등)에 영향을 주지 않으면서 새 CEP 엔진을 클러스터에 동적으로 추가할 수 있다. 클러스터는 CEP 엔진 고장 또는 특정 인스턴스가 사용 중이 되는 경우에 자연 치유(selfheal)될 수 있다. 또한 시스템은 하나 이상의 데이터 센터에 걸쳐 클러스터를 배치할 수 있다. 이러한 시나리오에서 이벤트 메시지는 광역 네트워크를 통해 이동된다. 통신 대역폭을 효율적으로 사용하기 위해, 메시징 시스템은 네트워크를 통해 이동하는 메시지를 일괄처리(batch) 및 압축할 수 있다.
본 명세서에서 사용되는 이벤트는 메시징 시스템의 메시지를 나타낼 수 있다. 메시징 시스템의 예시적인 실시예는 CEP 사용 케이스 이외의 응용예에서 사용될 수 있다는 점을 이해할 것이다.
도 1은 일 실시예가 배치될 수 있는 클라이언트-서버 시스템(100)을 나타내는 네트워크 다이어그램이다. 네트워크화된 시스템(102)은 예시적인 네트워크 기반 시장 또는 공개 시스템 형태로 네트워크(104)(예를 들어, 인터넷 또는 광역 네트워크(WAN))를 통해 하나 이상의 클라이언트에 서버 측 기능을 제공한다. 예를 들어, 도 1은 각각의 클라이언트 머신(110 및 112)에서 실행되는 웹 클라이언트(106)(예를 들어, 브라우저) 및 프로그램 가능한 클라이언트(108)를 도시한다. 여기서, 클라이언트 머신(110)은 다양한 애플리케이션 내의 "클라이언트 디바이스" 또는 "사용자 디바이스"로 지칭될 수 있다.
애플리케이션 프로그램 인터페이스(API) 서버(114) 및 웹 서버(116)는 각각 하나 이상의 애플리케이션 서버(118)에 연결되어 프로그래밍 인터페이스 및 웹 인터페이스를 제공한다. 애플리케이션 서버(118)는 하나 이상의 시장 애플리케이션(120) 및 지불 애플리케이션을 호스팅한다. 애플리케이션 서버(118)는 차례로 데이터 처리를 용이하게 하는 하나 이상의 데이터 처리 서버(123) 및 하나 이상의 데이터베이스(126)로의 액세스를 용이하게 하는 데이터베이스 서버(124)에 결합되도록 도시되어 있다.
시장 애플리케이션(들)(120)은 네트워크화된 시스템(102)에 액세스하는 다수의 시장 기능 및 서비스를 사용자에게 제공할 수 있다. 지불 애플리케이션(들)(122)은 마찬가지로 다수의 지불 서비스 및 기능을 사용자에게 제공할 수 있다. 지불 애플리케이션(들)(122)은 사용자가 사용 가치(예를 들어, 미국 달러 또는 "포인트" 등의 독점적 통화와 같은 상용 통화로)를 계좌에 누적하고, 시장 애플리케이션(들)(120)을 통해 이용가능하게 된 아이템에 관해 누적된 가치를 돌려받게 할 수 있다.
데이터 처리 서버(123)는 네트워크화된 시스템(102)에 다수의 기능 및 서비스를 제공할 수 있다. 일 실시예에서, 데이터 처리 서버는 클라이언트 머신(110)으로부터 수신된 데이터에 기초하여 이벤트 메시지를 생성하기 위한 다수의 생산자 디바이스를 배치할 수 있다. 또한, 데이터 처리 서버(123)는 생산자 디바이스에 의해 생성된 이벤트 메시지를 처리하기 위해 다수의 CEP 엔진을 배치할 수 있다. 데이터 처리 서버(123)는 분산형 아키텍처를 이용하는 다수의 서버에 대응할 수 있다. 예를 들어, 다수의 데이터 처리 서버(123)가 생산자 디바이스로서 다수의 데이터 센터 내에 배치될 수 있다. 부가적으로 또는 대안으로, 다수의 데이터 처리 서버(123)가 CEP 엔진으로서 다수의 데이터 센터 내에 배치될 수 있다. 도 3과 관련하여 후술되는 바와 같이, 데이터 처리 서버(123)는 각각의 CEP 엔진에 이벤트 메시지를 라우팅하는 것을 용이하게 하는 추가 컴포넌트를 포함할 수 있다.
또한, 도 1에 도시된 시스템(100) 은 클라이언트-서버 아키텍처를 사용하지만, 본 발명의 대상은 물론 그러한 아키텍처에 국한되지 않으며, 예를 들어 분산형 또는 피어 투 피어(peer-to-peer) 아키텍처 시스템에서도 마찬가지로 동등하게 응용예를 발견할 수 있다. 다양한 시장 및 지불 애플리케이션(120, 122)은 반드시 네트워킹 기능을 가질 필요가 없는 독립형 소프트웨어 프로그램으로서 구현될 수도 있다.
또한, 다양한 시장 애플리케이션(120) 및 지불 애플리케이션(122)이 별개의 기능을 갖는 것으로 상술되었지만, 대안적인 실시예에서, 이러한 기능은 다양한 시장 및 지불 애플리케이션(120, 122) 중 임의의 하나 이상에 의해 수행될 수 있다.
웹 클라이언트(106)는 웹 서버(116)에 의해 지원되는 웹 인터페이스를 통해 다양한 시장 및 지불 애플리케이션(120 및 122)에 액세스한다. 유사하게, 프로그램 클라이언트(108)는 API 서버(114)에 의해 제공되는 프로그램 클라이언트 인터페이스를 통해 시장 및 지불 애플리케이션(120 및 122)에 의해 제공되는 다양한 서비스 및 기능에 액세스한다. 프로그램 클라이언트(108)는, 예를 들어 판매자 애플리케이션(예, 산호세, 캘리포니아에 소재한 EBAY INC.™에 의해 개발된 TURBOLISTER™ 애플리케이션)일 수 있으며, 이 애플리케이션은 판매자가 오프라인 방식으로 네트워크 시스템(102) 상에서 목록을 작성 및 관리하고, 프로그램 클라이언트(108)와 네트워크 시스템(102) 사이에서 일괄처리 모드 통신을 수행하는 것을 가능하게 한다.
또한, 도 1은 제 3 자 서버(130)상에서 실행되는 제 3 자 애플리케이션(128)을 API 서버(114)에 의해 제공되는 프로그래밍 인터페이스를 통해 네트워크 시스템(102)에 프로그래밍 방식으로 액세스하는 것으로 도시한다. 예를 들어, 제 3 자 애플리케이션(128)은 네트워크화된 시스템(102)으로부터 검색되는 정보를 사용하여, 제 3 자에 의해 호스팅되는 웹 사이트 상의 하나 이상의 특징 또는 기능을 지원할 수 있다. 예를 들어, 제 3 자 웹 사이트는 네트워크화된 시스템(102)의 관련 애플리케이션에 의해 지원되는 하나 이상의 프로모션, 시장 또는 지불 기능을 제공할 수 있다.
도 2는 일 실시예에 따른 모바일 디바이스(200)를 나타내는 블록도이다. 일 실시예에서, 모바일 디바이스(200)는 도 1의 클라이언트 머신(110)에 대응할 수 있다. 특히, 모바일 디바이스(200)는 사용자로부터 모바일 디바이스(200)에 의해 수신된 사용자 입력에 기초하여 네트워크화된 시스템과 상호 작용할 수 있다. 사용자 입력의 예는 파일 요청, 페이지 뷰, 클릭, 양식 제출, "키 누르기" 이벤트, 입력 디바이스 이벤트 및/또는 다른 클라이언트-머신 측 상호 작용을 포함할 수 있다. 파일 요청은 예를 들어 웹 페이지, 웹 페이지의 구성 요소, 이미지 데이터, 시장 애플리케이션(120)으로부터의 데이터 및 웹 리소스와 같은 요청을 포괄할 수 있다. 사용자 입력은 추가로 또는 대안적으로 클릭 경로 또는 스트림(예를 들어, 클라이언트-머신-사이드 상호 작용의 정렬된 시퀀스)과 같은 일련의 상호 작용에 대응할 수 있다.
모바일 디바이스(200)는 프로세서(202)를 포함할 수 있다. 프로세서(202)는 모바일 디바이스(200)를 위해 특별히 구성된 다양한 종류의 상업적으로 이용가능한 프로세서 중 임의의 프로세서일 수 있다(예를 들어, XScale 아키텍처 마이크로 프로세서, MIPS(microprocessor without interlocked pipeline stages) 아키텍처 프로세서 또는 다른 타입의 프로세서). 랜덤 액세스 메모리(RAM), 플래시 메모리 또는 다른 타입의 메모리와 같은 메모리(204)는 일반적으로 프로세서(202)에 액세스 가능하다. 메모리(204)는 운영 체제(206)뿐만 아니라 사용자에게 위치 기반 서비스(LBS)를 제공할 수 있는 모바일 위치 가용 애플리케이션과 같은 애플리케이션 프로그램(208)을 포함할 수 있다. 프로세서(202)는 직접 또는 적절한 중간 하드웨어를 통해, 디스플레이(210) 및 하나 이상의 입/출력(I/O) 디바이스(212)(키패드, 터치 패널 센서, 마이크로폰 등)에 연결될 수 있다. 유사하게, 일부 실시예에서, 프로세서(202)는 안테나(216)와 인터페이스하는 송수신기(214)에 연결될 수 있다. 송수신기(214)는 셀룰러 네트워크 신호, 무선 데이터 신호 또는 다른 타입의 신호를 안테나를 거쳐 모바일 디바이스(200)의 속성에 따라 송신 및 수신하도록 구성될 수 있다. 또한, 일부 구성에서, GPS(global positioning system) 수신기(218)는 GPS 신호를 수신하기 위해 안테나(216)를 사용할 수 있다.
예시적 메시징 시스템
본 명세서에 개시된 일 실시예에서, 메시징 시스템은 발행-구독(본 명세서에서 "퍼브-서브(pub-sub)"라고도 함) 프로세스를 사용하며, 발행-구독 프로세스에 의해 네트워크에 연결된 생산자 디바이스(본 명세서에서 "송신기 디바이스"로도 지칭됨) 및 소비자 디바이스(또한 "수신기 디바이스"로도 지칭됨)는 네트워크 내의 릴레이 에이전트(a relay agent)를 통해 소비자 디바이스에 의해 송신된 광고를 통해 서로를 발견한다. 전술한 바와 같이, 생산자 디바이스는 도 1의 데이터 처리 서버(123)에 의해 구현될 수 있다. 추가적으로 또는 대안적으로, 생산자 디바이스는 도 1의 클라이언트 머신(110)에 의해 구현될 수 있다. 소비자 디바이스는 데이터 처리 서버(123)의 하나 이상의 서버에 대응한다. 소비자 디바이스는 생산자 디바이스에 의해 생성된 이벤트 메시지를 처리하기 위해 하나 이상의 CEP 엔진을 호스팅한다. 릴레이 에이전트는 생산자 디바이스 및 소비자 디바이스를 런타임 중에 인터페이싱하는 데이터 처리 서버(123)에 의해 호스팅되는 모듈일 수 있다.
예를 들어, 동작 시에 메시징 시스템은 생산자 디바이스가 생성하는 주어진 토픽에 대한 메시지를 수신하고 처리할 수 있는 다수의 소비자 디바이스(예를 들면, "고객 클러스터 링"를 형성함)를 식별할 수 있다. 생산자 디바이스는 그 토픽을 구독하는 것으로 식별된 소비자 디바이스의 레지스트리를 관리한다. 소비자 디바이스가 제거되거나 소비자 클러스터 링에 추가되면 생산자 디바이스가 생산자의 레지스트리를 업데이트한다.
생산자 디바이스는 이벤트를 나타내는 (예를 들면, 클라이언트-시스템 측 상호 작용을 나타냄) 이벤트 메시지(여기서는 "이벤트 데이터"라고도 함)를 생성하여 소비자 디바이스에 보낸다. 이벤트는 일련의 정보 튜플이다. 튜플은 ASCII(American Standard Code for Information Interchange) 문자의 세트 또는 기타 적절한 문자열 데이터 타입과 같은 키 및 해당 값(예, 미가공 데이터 타입)으로 구성된다. 예시적인 프리미티브 타입은 정수, 부울(boolean), 부동 소수점 수, 고정 소수점 수, 문자 및/또는 문자열, 데이터 범위 및/또는 프로그래밍 언어에 내장된 유사한 데이터 타입을 포함한다. 이벤트는 이벤트 정보의 일치하는 튜플에 기초하여 타입으로 분류될 수 있다. 이벤트 스트림은 시간이 경과함에 따라 수신되는 이벤트의 집합이다. 각 이벤트 타입에 대한 이벤트 스트림이 존재할 수 있다. 일 실시예에서, 정보 튜플의 집합은 사용자 디바이스상에서 실행되는 웹 페이지 또는 인터넷 접속된 소프트웨어 프로그램과 같은 웹 자원과 사용자의 상호 작용과 관련하여 하나 이상의 사용자 상호 작용 또는 사용자 이벤트를 나타낸다.
생산자 디바이스(예를 들어, 일관된 해싱을 사용하는 것)는 소비자 클러스터의 각 소비자 디바이스에 복수의 해시 값을 연관시킨다. 해시 값은 서클 상의 각 소비자 노드로 보여질 수 있다. 이와 같이, 소비자 디바이스에 해시 값을 할당하는 것은 식별된 소비자 클러스터를 분할하여 지정된 토픽에 대해 소비자 노드의 로직 링을 형성한다. 즉, 각 소비자 디바이스는 로직 링 상의 많은 소비자 노드로 표현된다.
해시 값은 대응하는 소비자 디바이스의 식별자에 기초하여 소비자 디바이스에 할당될 수 있다. 소비자 디바이스의 식별자의 예는 소비자 디바이스의 글로벌 고유 식별자("GUID"), 애플리케이션 식별자("APPID"), GUID와 APPID의 조합(예를 들어, 연결(concatenation)), IP 어드레스 등이 있다. 소비자 디바이스는 도 7과 관련하여 설명된 광고 데이터 내에 식별자를 제공함으로써 생산자 디바이스에 식별자를 제공할 수 있다.
해시 값은 식별자를 시드로 사용하여 의사 랜덤 방식으로 소비자 디바이스에 할당될 수 있다. 일 실시예에서, 생산자 디바이스는 소비자 디바이스의 식별자를 시드로서 사용하여 의사 난수 생성기를 실행하여 복수의 값을 생성함으로써 소비자 디바이스에 해시 값을 할당한다. 생성된 값은 소비자 디바이스에 연결된 해시 값으로 할당될 수 있다. 의사 랜덤 방식으로 해시 값을 할당하면 소비자 노드를 로직 링에 거의 균등하게 분배하는 것을 용이하게 할 수 있다. 또한, 의사 랜덤 방식으로 해시 값을 할당하는 것은, 예를 들어 해시 값을 기존의 소비자 노드에 재 할당하지 않고 소비자 디바이스를 추가 또는 제거하는 동안 대략 균일한 분포를 용이하게 할 수 있다.
소비자 디바이스에 대한 해시 값의 할당은 생산자 디바이스의 레지스트리에 저장될 수 있다. 동작 동안, 생산자 디바이스는 해시 함수를 사용하여 대응하는 소비자 디바이스에 주어진 해시 값의 매핑을 결정할 수 있다.
보다 상세히 후술하는 바와 같이, 일 실시예에서, 주어진 토픽에 대한 메시지를 발행하는 각각의 생산자 디바이스는 동일한 로직 링을 생성한다. 예를 들어 주어진 토픽에 대한 발행을 하는 각 생산자 디바이스는 주어진 토픽 내의 이벤트 메시지를 수신하도록 등록하는 동일한 소비자 디바이스를 가질 수 있다. 소비자 디바이스는 각 생산자 디바이스에 동일한 식별자를 제공할 것이다. 또한 각 생산자 디바이스는 동일한 메커니즘을 사용하여 해시 값을 할당할 수 있다. 전술한 바와 같이, 하나의 예시적인 메카니즘은 식별자를 시드로서 사용하여 의사 랜덤 방식으로 해시 값을 할당하는 것이다. 따라서, 각 생산자 디바이스는 해시 값과 소비자 디바이스간에 동일한 할당 값을 생성한다.
생산자 디바이스는 소비자 클러스터의 소비자 디바이스에 대한 이벤트 메시지를 스케줄링한다. 예를 들어, 생산자 디바이스는 이벤트 메시지에 포함된 키를 사용하여 분할 키를 생성하여 하나의 소비자 디바이스가 이벤트 메시지를 수신하도록 선택한다. 일 실시예에서, 생산자 디바이스는 분할 키의 해시 값을 계산하고 계산된 해시 값을 생산자 디바이스에 등록된 소비자 디바이스의 소비자 노드를 나타내는 해시 값과 대조한다. 생산자 디바이스는 분할 키의 해시 거리를 각 소비자 노드와 비교한 것에 기초하여 이벤트 메시지를 수신할 소비자 디바이스 중 하나를 선택한다. 예를 들어, 생산자 디바이스는, 첫 번째 소비자 노드에 도달할 때까지 분할 키의 해시 포인트에서 시작하여 로직 링을 한 방향(예, 시계 방향 또는 반 시계 방향)으로 "워킹"함으로써 선택을 한다. 생산자 디바이스는 제 1 소비자 노드와 연관된 소비자 디바이스를 선택하고 처리를 위해 선택된 소비자 디바이스로 이벤트 메시지를 라우팅한다.
이러한 접근 방식을 사용하면 소비자 디바이스 고장 또는 작업 부하 불균형에 응답하여 작업 부하를 소비자 디바이스에게 재분배할 수 있는 효과적인 방법을 제공할 수 있다. 예를 들어 노드가 고장하면 생산자 디바이스는 고장난 소비자 디바이스와 연관된 소비자 노드를 제거하거나 무시한다. 전술한 바와 같이, 나머지 소비자 디바이스의 소비자 노드의 분포는 소비자 디바이스의 소비자 노드가 제거될 때 거의 균일하게 배분된다. 이는, 고장난 소비자 디바이스에 대해 스케줄링된 이벤트 메시지가 기능 소비자 디바이스의 가장 가까운 다음 소비자 노드로 재분배되고, 나머지 소비자 디바이스로의 이벤트 메시지의 라우팅은 동일하게 유지되기 때문에 사실일 수 있다. 마찬가지로, 소비자 디바이스가 사용 중일 때, 생산자 디바이스는 사용 중인 소비자 디바이스의 소비자 노드를 제거하여 작업 부하를 다른 소비자에게 자동으로 재조정할 수 있다. 생산자 디바이스는 저속 소비자 디바이스를 발견할 수 있고, 이하에서 도 4 및 도 9와 관련하여 보다 상세히 설명되는 바와 같이, 소비자 디바이스로 어드레싱된 이벤트 메시지를 오프 힙 지속 큐(an off-heap persistent queue)로 전송하여 나중에 재생(예를 들어, 처리)되게 할 수 있다. 메시징 시스템에서 생성된 통계를 사용하여 클라우드의 소비자 노드를 탄력적으로 확장할 수 있다.
따라서, 예시적인 구현예의 일 특징은 메시징 시스템이 예를 들어, 클라우드 환경에서 매우 대용량인 복잡한 이벤트의 처리를 용이하게 하기 위해 자기 치유 특성을 갖는 확장 가능한 기반 구조를 제공한다는 것이다. 또한 메시징 시스템은 동일한 분할 키를 가진 이벤트 메시지가 클라우드의 동일한 소비자 디바이스로 전송되도록 함으로써 집계 계산을 용이하게 하고, 패턴을 살피고 그러한 패턴에 반응하는 것을 용이하게 한다. 메시징 시스템은 네트워크 클라우드 또는 기타 분산형 컴퓨팅 환경에서 사용될 수 있으므로 메시징 시스템은 흐름 제어를 일괄처리, 압축 및 활성화할 수 있다. 메시징 시스템은 부하의 변화에 따라 소비자 클러스터를 실시간으로 탄력적으로 확장할 수 있으며 계산 머신 고장 시에 네트워크 정체의 경우 트래픽을 자동으로 재조정할 수 있다. 이와 같이, 메시징 시스템의 일 실시예는 메시징 시스템을 네트워크 클라우드 상에 배치하는 것을 용이하게 하여 복잡한 이벤트 처리를 용이하게 한다.
메시징 시스템의 일 실시예가 인터넷 애플리케이션 추적 파이프라인 및 예를 들어, JETSTREAM CEP 프레임워크를 사용하는 하는 몇몇 다른 사용 사례에 이용될 수 있음을 이해할 것이다. CEP 프레임워크는 사용자 거동 분석, 모니터링, 광고, 인터넷 마케팅, 및 위험 및 보안 사용 사례에 대한 분산형 애플리케이션을 작성하는 데 사용될 수 있다. 일 실시예가 이하에 설명된다.
도 3은 도 1의 클라이언트-서버 시스템의 적어도 일부를 형성하는 다수의 모듈을 포함하는 메시징 시스템(300)의 일 실시예를 나타내는 블록도이다. 도시된 데이터 분석 시스템(300)의 모듈(302-312)은 애플리케이션 인터페이스 모듈(들)(302), 릴레이 에이전트 모듈(들)(304), 스케줄러 모듈(들)(306), 프로비저닝 모듈(들)(308), 데이터베이스 인터페이스 모듈(들)(310), 및 데이터베이스 업데이트 모듈(들)(312)을 포함한다. 애플리케이션 인터페이스 모듈(들)(302)은 소비자 대면 서브 모듈(들)(314), 생산자 대면 서브 모듈(들)(316), 및 제 3 자 대면 서브 모듈(들)(318)을 포함한다.
일부 실시예에서, 데이터 분석 시스템(300)의 컴포넌트는 도 1의 데이터 처리 서버(123)에 포함될 수 있다. 그러나, 대안적인 실시예에서, 후술된 데이터 분석 시스템(300)의 하나 이상의 컴포넌트는 추가적으로 또는 대안적으로, 도 1의 시장 애플리케이션(120), 지불 애플리케이션(122), 서버(114, 116, 118, 130), 네트워크(104) 및/또는 클라이언트 머신(110, 112) 중 하나 이상 등의 다른 디바이스에 포함될 수 있다. 또한 데이터 분석 시스템(300)은 온라인 시장 이외의 시스템에 배치될 수 있음을 이해할 것이다.
데이터 분석 시스템(300)의 모듈(302-312)은 서버 머신 간의 통신을 가능하게 하도록 통신 가능하게 결합된 전용 또는 공유 서버 머신(도시되지 않음) 상에서 호스팅될 수 있다. 하나 이상의 모듈(302-312)은 하나 이상의 데이터 센터에 배치될 수 있다. 모듈(302-312) 각각은 데이터 분석 시스템(300)의 모듈(302-312) 사이에서 정보가 전달되도록 하기 위해 또는 모듈(302-312)이 공통 데이터를 공유하고 액세스하도록 허용하기 위해 서로에게 그리고 다양한 데이터 소스에게 (예를 들어, 적절한 인터페이스를 통해) 통신 가능하게 결합된다. 데이터 분석 시스템(300)의 다양한 모듈은 또한 데이터베이스 서버(들)(124)를 통해 하나 이상의 데이터베이스(126)에 액세스할 수 있다.
메시징 시스템(300)은 네트워크 및 분산 환경에서 대규모 이벤트 데이터의 실시간 CEP를 용이하게 할 수 있다. 이를 위해, 도 3에 도시된 데이터 분석 시스템(300)은 릴레이 에이전트 모듈(들) (304), 스케줄러 모듈(들)(306), 프로비저닝 모듈(들) (308), 데이터베이스 인터페이스 모듈(들) (310) 및 데이터베이스 업데이트 모듈(들) (312)을 포함한다.
애플리케이션 인터페이스 모듈(들)(302)은 메시징 시스템(300)과 클라이언트, 서버 및 네트워크의 다른 디바이스 간의 (가령, 데이터 처리 서버(123)와, 도 1의 시장 애플리케이션(120), 지불 애플리케이션(122), 서버(114, 116, 118, 130), 네트워크(104) 및/또는 클라이언트 머신(110, 112) 중 하나 이상 간의) 데이터 통신을 용이하게 하는 하드웨어-구현된 모듈일 수 있다. 특히, 애플리케이션 인터페이스 모듈(들)(302)은 소비자 디바이스와의 인터페이스를 제공하기 위한 소비자 대면 서브 모듈(들)(314)을 포함한다. 생산자 대면 서브 모듈(들)(316)은 생산자 디바이스와의 인터페이스를 제공한다. 제 3 자 대면 서브 모듈(들)(318)은 다수의 제 3 자 서버와의 인터페이스를 제공한다. 일 실시예에서, 메시징 시스템(300)은 검색 서비스, 데이터 저장, 데이터 관리, 데이터 마이닝, 웹-활동 모니터링 및 분석, 및 유사한 서비스 등(이에 제한되지 않음)의 웹 기반 서비스를 제공하는 제 3 자 애플리케이션(128)과 인터페이싱할 수 있다. 메시징 시스템(300)은 예를 들어 제 3 자 애플리케이션(128)과 상호 작용함으로써 그러한 서비스를 수신할 수 있다.
일 실시예에서, 생산자 및 소비자 디바이스는 발행-구독 모델을 사용한다. 이와 같이, 생산자 대면 서브 모듈(들) (314)은 생산자 디바이스(예를 들어, 도 1의 데이터 처리 서버(123)의 하나 이상의 서버)에 인터페이스를 제공하여 생산자 디바이스에게 발행하는 토픽을 나타내는 브로드캐스트 데이터를 제공한다. 브로드캐스트 데이터는 토픽에 링크된 데이터 메시지를 제공하는 데 이용할 수 있는 생산자 디바이스를 식별시킨다.
소비자 대면 서브 모듈(들)(316)은 소비자 디바이스가 구독을 요청하는 토픽을 나타내는 광고 데이터를 제공하도록 소비자 디바이스(예를 들어, 도 1의 데이터 처리 서버(123) 중 하나 이상의 서버)를 위한 인터페이스를 제공한다. 광고 데이터는 소비자 디바이스가 표시된 토픽에 링크된 이벤트 메시지를 수신할 수 있음을 표시한다.
릴레이 에이전트 모듈(들)(304)(본 명세서에서 "식별 모듈(들)"이라고도 함)은 생산자 디바이스와 소비자 디바이스를 연결하는 것을 용이하게 하는 하드웨어-구현된 모듈일 수 있다. 릴레이 에이전트 모듈(들)은 도 1의 데이터 처리 서버(123)의 하나 이상의 서버에 의해 구현될 수 있다. 동작 시에, 릴레이 에이전트 모듈(들)(304)은 생산자 대면 서브 모듈(314)을 통해 생산자 디바이스 로부터 브로드캐스트 데이터를 수신하고 소비자 대면 서브 모듈(316)을 통해 소비자 디바이스로부터의 광고 데이터를 수신한다. 생산자 및 소비자 디바이스로부터 수신된 데이터에 기초하여, 릴레이 에이전트 모듈(들)(304)은 매칭 토픽을 갖는 생산자 및 소비자 디바이스를 링크시키는 역할을 할 수 있다.
스케줄러 모듈(들)(306)은 생산자 디바이스로부터 생산자 디바이스에 링크된 소비자 디바이스로 이벤트 메시지를 분배하는 것을 용이하게 하는 하드웨어-구현된 모듈일 수 있다. 스케쥴링 스킴의 예는 다른 것들 중에서도 라운드 로빈(round robin) 및 일관된 해싱(consistent hashing)을 포함한다. 생산자 디바이스가 릴레이 에이전트 모듈(들)(304)에 등록하기 위해 브로드캐스트 메시지를 제공할 때, 스케줄러 모듈(들)(306)은 생산자 디바이스 상에 호스팅된 스케줄러 인스턴스를 인스턴스화한다. 주어진 토픽에 대한 각 인스턴스는 동일할 수 있으므로 "스케줄러는 토픽에 바인딩된다"고 할 수 있다.
프로비저닝 모듈(들)(308)은 확장 가능하고 결함을 용인하는(fault-tolerant) 방식으로 소비자 디바이스에 이벤트 메시지를 스케줄링하는 것을 용이하게 하는 하드웨어-구현된 모듈일 수 있다. 프로비저닝 모듈(들)(308)은 해시 값과 같은 복수의 값을 토픽에 링크된 각각의 소비자 디바이스에 링크시킨다. 예를 들어, 프로비저닝 모듈(들)(308)은 대응하는 소비자 디바이스 식별자에 기초하여 복수의 값을 생성할 수 있다. 복수의 값의 생성은 각각의 요청 메시지(예를 들어, 도 7과 관련하여 더 자세히 설명될 광고 데이터)를 수신하는 것에 응답하여 이루어질 수 있다. 복수의 값은 토픽마다 계산될 수 있다. 프로비저닝 모듈(들)(308)은 일관된 해싱 스케줄러와 함께 사용하기 위한 해시 값을 생성하는 의사 난수 생성기를 포함할 수 있다.
일 실시예에서, 스케줄러 모듈(들)(308)은 생산자 디바이스와 독립적인 방식으로 각 소비자 디바이스에 링크된 해시 값을 결정한다. 이러한 방식으로 동일한 해시 값이 주어진 토픽에 대한 발행을 하는 각 생산자 디바이스에 제공된다.
동작 중에, 스케줄러 모듈(들)(306)은 생산자 디바이스로부터 토픽에 링크된 이벤트 메시지를 액세스(예를 들어, 수신 또는 검색)한다. 이벤트 메시지는 키 값을 포함하고, 스케줄러 모듈(들)(306)은 각 소비자 디바이스의 키와 복수의 값의 비교에 기초하여 소비자 디바이스 중 선택된 하나에 이벤트 메시지를 제공한다. 예를 들어, 스케줄러 모듈(들)(306)은 키 값의 해시 값을 계산하고, 계산된 해시 값을 소비자 디바이스의 해시 값과 비교한다. 예를 들어, 스케쥴러 모듈(들)(306)은 소비자 해시 값에 도달할 때까지 그리고 관련 소비자 디바이스가 선택될 때까지 키 값의 해시 포인트에서 시작하여 일 방향(예를 들어, 시계 방향 또는 반 시계 방향)으로 로직 링 주위를 "워킹"함으로써 선택을 한다.
데이터베이스 인터페이스 모듈(들)(310)은 메시징 시스템(300)에 대한 데이터 액세스를 용이하게 하는 하드웨어-구현된 모듈일 수 있다. 일 실시예에서, 데이터베이스 인터페이스 모듈(들)(310)은 도 1의 데이터베이스(126)와 인터페이싱할 수 있다.
데이터베이스 업데이트 모듈(들)(312)은 메시징 시스템(300)을 지원하는 데이터베이스를 업데이팅하는 것을 용이하게 하는 하드웨어-구현된 모듈일 수 있다. 예를 들어, 세션의 라이프 사이클 이벤트(예, 세션 시작 및 종료 이벤트)에 응답하여 데이터베이스 업데이트 모듈(들)(312)은 데이터베이스를 업데이트하여 데이터를 수집하고 데이터베이스 유지 활동을 개시하는 것을 용이하게 할 수 있다.
도 4는 일 실시예에 따른 예시적인 생산자-소비자 시스템(400)을 나타내는 블록도이다. 생산자 소비자 시스템(400)은 소비자 디바이스(402), 생산자 디바이스(404), 메시징 서비스(406), 네티 트랜스포트(a Netty transport)(408), 주키퍼 트랜스포트(a Zookeeper transpor)(410), 권고 리스너(412), 지속 큐(414) 및 리플레이어(416)를 포함한다.
언급한 바와 같이, 생산자 디바이스(404)는 이벤트 메시지의 생산자인 디바이스에 대응하고, 메시징 패러다임에서 "발행자"로 지칭될 수 있다. 소비자 디바이스(402)는 메시지를 소비하는 디바이스에 대응하고 메시지의 "구독자"로 지칭될 수 있다.
동작 시, 생산자 디바이스(404) 및 소비자 디바이스(402)는 발행자와 구독자 간의 통신 채널을 확립하는 "계약"을 설정한다. 채널의 주소는 토픽으로서 참조된다. 토픽은 "id1.kind1/id2.kind2/name" 형식의 문자열이다. '/'는 컨텍스트 분리자(a context separator)이다. 토픽은 하나 이상의 컨텍스트(예, "id1.kind1" 및 "id2.kind2")로 구성된다. 뒤에 나열된 토픽(예, id2.kind2)은 루트 컨텍스트에 링크된 서비스 품질 특성과 같은 고유한 속성을 가질 수 있다. 첫 번째 컨텍스트를 루트 컨텍스트라고 한다. 일부 예시적인 실시예에서, 토픽은 루트 컨텍스트만을 가질 수 있다.
일 실시예로서, 예시 토픽은 "topic = Rtbd.RTD/rtdEvent"로 명명될 수 있고 여기로 구독 및 발행된다. 예를 들어, 생산자 디바이스(404)는 메시징 서비스(406)와 인터페이스하여 도 3의 생산자 대면 서브 모듈(들)(316)에 의해 구현되는 예시적인 함수 publish(topic, event)에 대한 API 호(call)를 호출한다. 부가적으로, 소비자 디바이스(402)는 메시징 서비스(406)와 인터페이스하고 예시적인 함수 subscribe(topic)에 대한 API 호를 호출한다. 이러한 토픽의 루트 컨텍스트는 "Rtbd.RTD"이다. 이는 예를 들면 APACHE SOFTWARE FOUNDATION™ 에서 입수할 수 있는 특정한 네티 트랜스포트 인스턴스에 바인딩되며, 이에 대해 아래에서 자세히 설명한다. 이러한 컨텍스트는 일관된 해싱 스케줄러에 바인딩될 수 있다. 따라서, "Rtbd.RTD"에 바인딩된 토픽에 대해 발행함으로써 메시징 서비스(406)는 일관된 해싱 스케쥴링을 사용한다.
이러한 구현은 생산자 디바이스가 메시지를 발행하고 소비자 디바이스가 메시지를 소비하는 데 사용할 수 있는 단독 개체 서비스 인터페이스(a singleton service interface)를 제공한다. 메시징 서비스(406)는 플러그형 트랜스포트 아키텍처를 갖는다. 트랜스포트 인스턴스는 런타임 시 메시징 서비스(406)에 동적으로 플러그 인될 수 있다. 메시징 서비스(406)는 예를 들면 APACHE SOFTWARE FOUNDATION™에서 입수할 수 있는 네티 트랜스포트(408) 및 주키퍼 트랜스포트(410)와 같은 적어도 두 타입의 전송을 지원할 수 있다.
메시징 서비스(406)는 주키퍼 트랜스포트(410)를 사용하여 제어 메시지를 전송할 수 있다. 제어 메시지의 예로는 발견, 광고 및 권고 메시지가 있다. 주키퍼 트랜스포트(410)는 생산자와 소비자 메시지 서비스 인스턴스 간에 제어 메시지를 전달하기 위한 릴레이 에이전트 역할을 하는 분산된 주키퍼 앙상블(a distributed Zookeeper ensemble)과 통신할 수 있다. 주키퍼 트랜스포트(410)은 토픽에 바인딩하고 이러한 토픽에 대한 메시지 흐름을 제어한다.
메시징 서비스(406)는 이벤트 메시지를 전송하기 위해 네티 트랜스포트(408)를 사용할 수 있다. 네티 트랜스포트(408)는 네티 비 블록 입출력(NIO) 설비 위에 구축될 수 있다. 이는 TCP를 통한 완전한 비동기 전송을 제공한다. 이는 POJO(plain old JAVA objects)를 전송하고 자바 객체를 정렬하기 위해 Kryo 객체 직렬화기를 사용한다. 메시징 서비스(406)는 하나 이상의 네티 트랜스포트 인스턴스를 이용할 수 있다.
일 실시예에서, 네티 트랜스포트(408)의 각각의 인스턴스는 토픽의 하나 이상의 루트 컨텍스트에 바인딩된다. 이러한 바인딩은 두 개의 전송 인스턴스가 동일한 루트 컨텍스트에 바인딩되지 않는다는 규칙으로 프로비저닝된다. 각 루트 컨텍스트는 스케줄러 모듈에 바인딩된다. 컨텍스트에 바인딩된 모든 토픽은 컨텍스트에 바인딩된 스케줄러에 바인딩된다. 각 트랜스포트 인스턴스는 자신의 고유한 통신 속성을 가지며, 런타임 시 튜닝될 수 있는 TCP 속성과 실질적으로 일치할 수 있다. 권고 리스너(412)는 후속하여 리플레이어(416)에 의해 재송신되도록 전달되지 않은 이벤트 메시지를 지속 큐(414)로 향하게 할 수 있다. 권고 리스너(412) 및 리플레이어(416)는 도 8 내지 도 10과 관련하여 보다 상세히 후술될 것이다.
도 5는 일 실시예에 따른 예시적인 메시징 스택(500)을 나타내는 블록도이다. 메시징 스택(500)은 발행자(506), 스케줄러(508), 인코더(510), 배처(512) 및 압축기(524)를 포함하는 생산자 측 스택(502)을 포함한다. 메시징 스택(600)은 또한 압축해제기(526), 디코더(528), 및 구독자(530)를 포함하는 소비자 측 스택(504)을 포함한다.
생산자 측 스택(502)은 데이터 처리 서버(123)의 서버에 의해 구현될 수 있다. 스케줄러(508), 인코더(510), 배처(512) 및 압축기(524)는 스케줄러 모듈(들)(306)로 구현될 수 있다. 소비자 측 스택(504)은 데이터 처리 서버(123)의 서버로 구현될 수 있다.
발행자(506)는 도 4의 생산자 디바이스(404)에 대응할 수 있다. 발행자(506)는 하나 이상의 구독자(예를 들어, 소비자 디바이스)에게 발행될 스케줄러 이벤트 메시지를 제공한다.
스케줄러(508)는 도 3의 스케줄러 모듈(들)(306)에 대응할 수 있다. 메시징 스택의 생산자 측은 플러그형 메시지 스케줄러(508)로 프로비저닝된다. 스케줄러(508)는 가중 라운드 로빈(weighted round robin) 또는 일관된 해싱 스케줄링 알고리즘의 2 가지 타입 중 하나일 수 있다. 스케줄러는 서비스 품질(QOS)을 제공한다. 스케줄러(508)는 일 실시예에서 토픽의 루트 콘텍스트에 바인딩된다. 따라서 발행자는 단순히 루트 컨텍스트에 바인딩된 토픽을 선택하여 QOS를 선택할 수 있다.
가중 라운드 로빈: 가중 라운드 로빈 스케줄러가 프로비저닝되면, 이벤트 메시지가 가중 라운드 로빈 알고리즘을 사용하여 발견된 고객 사이에 분배된다. 이러한 접근 방식을 사용하면 모든 소비자의 가중치가 동일한 경우에 생산자 측 스택으로 흐르는 메시지가 해당 루트 컨텍스트에 바인딩된 소비자 집합간에 균등하게 분배된다. 소비자 노드에 가중치가 할당되면, 가중치를 고려하여 이벤트가 그 노드에 분배된다. 예를 들어, 특정 소비자 인스턴스에 대해 가중치를 20으로 설정하면 초당 전체 메시지(MPS)의 20 %만이 해당 인스턴스로 스케줄링되고 잔여분(balance)은 남은 인스턴스 간에 균등하게 분배된다. 토픽 별로 작업 부하 분산이 수행할 수 있다.
일관된 해싱: 일관된 해싱 스케줄러가 프로비저닝되면 일관된 해싱 링(a consistent hashing ring)이 토픽 별로 생성된다. 예를 들어, 소비자 광고가 도착하면, 소비자 디바이스의 식별자를 사용하여 프로비저닝된 해시의 수를 계산한다. 예를 들어, 식별자는 광고에 포함될 수 있다. 이 동작은 발견된 모든 소비자에 대해 수행된다. 해시는 로직 링을 통해 분배된다. 각 토픽에 대해 하나의 링이 존재한다. 이러한 알고리즘은 동일한 토픽에 발행하는 생산자 디바이스가 동일한 링 뷰를 갖도록 구현된다. 메시지가 스케줄러에 도달하면 메시지와 소비 노드 사이의 연관 관계를 생성하는 데 사용할 수 있는 키로 메시지가 데코레이팅된다. 스케쥴러(508)는 키에 대한 해시를 계산하고 해싱된 값을 링에 배치한다. 스케줄러(508)는 스케줄러(508)가 소비자 노드의 제 1 해시를 만날 때까지 반 시계 방향 또는 시계 방향으로 링을 이동한다. 소비자 디바이스에 대한 해시의 맵핑이 존재한다. 스케줄러(508)는 일치된 해시와 연관된 소비자 디바이스를 찾기 위해 레지스트리에서 룩업(a lookup)을 수행할 수 있다. 이어서, 스케줄러(508)는 일치된 해시와 연관된 소비자 노드로 이벤트 메시지를 스케줄링한다.
리스너(예컨대, 도 4의 리스너(412))는 일관된 해싱 스케쥴러에 플러그인 될 수 있어서, 새로운 링의 뷰로 링 변경 통지를 청취할 수 있다. 리스너는 링 변경에 민감한 시스템에서 사용할 수 있다. 링 변경의 예는 소비자 디바이스의 추가, 소비자 디바이스의 제거, 소비자 디바이스의 QOS 정의의 재정의 등을 포함한다. 리스너는 도 9와 관련하여 이하에서 보다 상세히 설명될 것이다.
인코더(510)는 이벤트 메시지에 대한 인코딩 과정을 수행한다. 예를 들어, 인코더(510)는 스케줄러(508)로부터 이벤트 메시지를 수신하고, 수신된 이벤트 메시지를 인코딩하고, 인코딩된 이벤트 메시지를 배처(512)에 제공한다.
생산자 측(502)은 배처(512)로 프로비저닝되어 컨텍스트마다 메시지를 일괄 처리(batch)할 수 있다. 선택된 컨텍스트 이하의 토픽이 일괄처리될 수 있다. 일괄처리 사이즈(batch size)도 프로비저닝되며 런타임시 변경될 수 있다. 스택 내의 배처(512)는 업스트림에서 전달된 이벤트 메시지를 누적한다. 일괄처리 사이즈에 도달하거나 타이머가 만료되면 이벤트 메시지가 다운스트림으로 스케줄링된다. 타이머는 수신된 이벤트 메시지의 낮은 레이트로 인한 배처(512)에 의한 실질적인 지연을 억제하는 메카니즘을 제공한다. 배처(512)는 대안적인 실시예에서는 생략될 수 있다는 점을 이해할 것이다. 일 실시예에서, 배처(512)가 포함되는지 여부는 프로비저닝 중에 결정될 수 있다.
압축기(524)는 이벤트 메시지를 압축할 수 있다. 압축은 소비자(예를 들어, 구독자(530))로부터의 광고를 통해 시동된다. 소비자가 압축된 형태의 메시지를 기대한다고 생산자에게 신호를 보내면 생산자는 메시지를 압축할 수 있다. 일괄처리 및 일괄처리되지 않은 이벤트 메시지는 압축될 수 있다. 일례로, SNAPPY 압축이 지원된다.
스택(504)의 소비자 측에서, 압축 해제기(526) 및 디코더(528)는 압축기(526) 및 인코더(510)의 프로세스를 반전시킨다.
도 6은 일 실시예에 따른 예시적인 생산자-에이전트-소비자 시스템(600)을 나타내는 블록도이다. 생산자-에이전트-소비자 시스템(600)은 생산자 디바이스(600), 릴레이 에이전트 모듈(들)(604) 및 소비자 디바이스(606)를 포함한다. 도 6은 발행-구독 프로세스 동안 생산자 디바이스(602), 릴레이 에이전트 모듈(들)(604) 및 소비자 디바이스(606)의 상호 작용을 나타내고, 간략한 설명을 위해 메시징 시스템 아키텍처의 추가적인 컴포넌트는 도시되지 않았다. 메시징 시스템 아키텍처의 일 실시예가 도 8과 관련하여 보다 상세하게 설명된다.
동작 시, 생산자 디바이스(602) 및 소비자 디바이스(606)는 순서를 벗어나 시작될 수 있다. 생산자 디바이스(602) 및 소비자 디바이스(606) 모두는 릴레이 에이전트 모듈(들)(604)에 등록된다. 릴레이 에이전트 모듈(들)(604)은 데이터 센터에 걸쳐 클러스터로서 배치될 수 있다. 릴레이 에이전트 그룹(도시되지 않음)은 액티브 앙상블(an active ensemble)로 구성될 수 있다. 그룹의 나머지는 관찰자로 지정된다. 릴레이 에이전트 모듈(들)(604)은 메시지 라우터/분배기로서 사용될 수 있다. 생산자 디바이스 및 소비자 디바이스는 전술한 바와 같이 토픽 기반 어드레스를 사용하여 릴레이 에이전트 모듈(들)(604)을 통해 메시지를 발행한다.
소비자 디바이스(606)가 등록을 시작하면, 소비자 디바이스(606)는 릴레이 에이전트 모듈(들)(604)을 통해 상호 작용(610) 시 관심있는 모든 생산자에게 광고를 포스팅한다. 릴레이 에이전트 모듈(들)(604)은 이에 응답하여, 상호 작용(612) 시 생산자 디바이스(602)를 이용하여 광고를 포스팅한다. 이에 응답하여, 생산자 디바이스(602)는 생산자 디바이스(602)에 등록된 모든 알려진 소비자 디바이스를 포함하는 레지스트리를 구축할 수 있다.
일부 실시예에서, 소비자 디바이스(606)는 릴레이 에이전트 모듈(604)을 통해 다수의 권고자(advisors)를 생산자(602)에게 제공할 수 있다. 예를 들어, 소비자 디바이스(606)는 소비자 디바이스(606)의 상태(가령, 소비자 디바이스(606)가 이벤트 메시지를 느리게 처리하는 것, 이벤트 메시지를 처리하기 위한 자원이 부족한 것, 현재 작업 부하에 대한 잉여 자원을 가지는 것, 복원 작업 부하를 요구하고 있는 것 및/또는 소비자 디바이스에게 작업 부하를 감소시키거나 증가시키는 것을 나타내는 유사한 조건)을 나타내는 권고자를 제공할 수 있다.
예시로서, 동작 시 소비자 디바이스(606)는 상호 작용(614)에서 권고 메시지를 릴레이 에이전트 모듈(들)(604)에 제공할 수 있다. 권고 메시지는 소비자 디바이스 식별자, 토픽 식별자, 및 권고 타입(예를 들어, 생산자 디바이스(602) 및/또는 릴레이 에이전트 모듈(들)(604)에 의해 작업 부하를 증가시키거나 감소시키는 것을 결정하는 데 사용 가능한 것)을 나타내는 권고 식별자를 포함할 수 있다. 권고 메시지를 수신한 후에, 릴레이 에이전트 모듈(들)(604)은 권고 메시지를 생산자 디바이스(602) 및 상호 작용(616) 시에 토픽에 링크된 다른 생산자 디바이스로 라우팅할 수 있다. 다음으로, 생산자 디바이스(602)는 권고에 기초하여 소비자 식별자의 레지스트리를 업데이트할 수 있다. 예를 들어, 생산자 디바이스(602)는 자신의 레지스트리에서 소비자 식별자를 제거하거나 비활성화시킬 수 있고, 이에 따라 소비자 디바이스(606)는 처리한 이벤트 메시지를 더 이상 수신할 수 없게 된다.
추가 동작에서, 소비자 디바이스가 이벤트 메시지를 처리하는 데 이용가능하다는 것을 소비자 디바이스가 검출하면, 소비자 디바이스(606)는 생산자 디바이스(602)에게 소비자 디바이스(606)가 이벤트 메시지를 수신할 수 있다는 것을 나타내도록 다른 권고자를 릴레이 에이전트 모듈(들)(604)에 송신할 수 있다.
생산자 디바이스(602)가 등록을 시작하면, 생산자 디바이스(602)는 상호 작용(618)에서 릴레이 에이전트 모듈(604)을 통해 발견 메시지를 송신한다. 발견 메시지는 상호 작용(620)에서 소비자 디바이스(606)와 같은 모든 관심 있는 소비자 디바이스로 브로드캐스팅된다. 소비자 디바이스(606)는 발견 메시지를 수신하는 것에 응답하여, 상호 작용(610, 612)과 관련하여 전술 한 바와 같이 광고로 응답할 수 있다. 광고 메시지는 또한 릴레이 에이전트 모듈(604)을 통해 송신된다.
도 7은 일 실시예에 따른, 광고(700)의 예시적인 데이터 구조를 나타내는 블록도이다. 광고(700)는 도 6과 관련하여 상술한 바와 같이, 소비자 디바이스로부터 생산자 디바이스로 이동한다. 소비자 디바이스가 시동될 때 소비자 디바이스는 고유 소비자 식별자 데이터 필드(702)를 생성한다. 광고(700)는 소비자 IP 어드레스 및/또는 포트 바인딩에 대응될 수 있는 어드레스 데이터 필드(704)를 포함한다. 광고(700)는 또한 압축, 직렬화 포맷, 데이터 레이트 등과 같은 임의의 적합한 서비스 품질 특성을 나타낼 수 있는 QOS 데이터 필드(706)를 포함한다. 광고(700)는 또한 소비자 디바이스가 언제 광고(700)를 포스팅했는지를 나타내는 타임스탬프 데이터 필드(708)를 포함할 수 있다. 광고(700)는 또한 소비자 디바이스가 요청한 상대적인 작업 부하를 나타내는 가중치 데이터 필드(710)를 포함할 수 있다. 광고(700)는 또한 소비자 디바이스가 구독하는 토픽을 나타내는 토픽 데이터 필드(712)를 포함할 수 있다. 생산자 디바이스가 광고를 수신할 때, 생산자 디바이스는 광고(700)로 자신의 소비자 레지스트리를 업데이트할 수 있다.
도 8은 일 실시예에 따른 예시적인 메시징 시스템 아키텍처(802)를 나타내는 블록도이다. 메시징 시스템 아키텍처(802)는 데이터 센터에 배치될 수 있다. 예를 들어, 제 1 데이터 센터는 생산자 디바이스(802), 릴레이 에이전트 모듈(들)(804), 리플레이어(806), 및 카프카 큐(Kafka queue)와 같은 큐(808)를 포함할 수 있다. 제 2 데이터 센터는 소비자 디바이스(812A-C), 릴레이 에이전트 모듈(들)(814), 카프카 큐와 같은 큐(818), 및 리플레이어(822)를 포함하는 클러스터 링(810)의 일부를 포함할 수 있다. 제 3 데이터 센터는 소비자 디바이스(812D-F), 릴레이 에이전트 모듈(들)(816), 카프카 큐와 같은 큐(820) 및 리플레이어(824)를 포함하는 클러스터 링(810)의 잔여 부분을 포함할 수 있다. 생산자 디바이스(802)는 이벤트 메시지를 스케줄러 모듈(들)(826)을 통해 클러스터 링(810)으로 전달하고, 스케줄러 모듈(들)(826)은 클러스터 링(810) 내의 이벤트 메시지의 라우팅을 결정한다. 마찬가지로, 리플레이어(806)는 스케줄러 모듈(들)(826)을 통해 클러스터 링(810)에 이벤트 메시지를 제공한다.
릴레이 에이전트 모듈(804, 814, 816)은 도 3의 릴레이 에이전트 모듈(들)(304)의 인스턴스에 대응한다. 스케줄러 모듈(들)(826)은 도 3의 스케줄러 모듈(들)(306)에 대응할 수 있다.
릴레이 에이전트 모듈(804, 814, 816)은 데이터 센터에 걸쳐 배치된다. 데이터 센터 중 하나의 릴레이 에이전트 모듈의 일부는 액티브 앙상블(예, 릴레이 에이전트 모듈(804, 814, 816))로 지정되고, 나머지는 관찰자(미도시)로 지정된다. 생산자 디바이스(802) 및 소비자 디바이스(812A-F) 내의 메시징 스택은 이용가능한 릴레이 에이전트 모듈에 등록한다. 그때부터, 생산자 디바이스(802) 및 소비자 디바이스(812A-F)는 그 릴레이 에이전트로의 연결이 끊어질 때까지 동일한 릴레이 에이전트 모듈과 통신한다.
생산자 디바이스(802)는 자신의 릴레이 에이전트(804)를 통해 발견 메시지를 송신하고 소비자 디바이스(812A-F)는 자신의 릴레이 에이전트(814, 816)를 통해 광고 메시지를 송신한다. 발견 메시지는 토픽 식별자 및 생산자 디바이스(802)의 식별자를 포함할 수 있다. 발견 및 광고 메시지는 데이터 센터에서 송신 및 수신될 수 있다. 따라서 생산자 디바이스는 데이터 센터에서 소비자 디바이스를 발견할 수 있다. 또한, 일관된 해싱 구성을 이용하는 스케줄러 모듈(들)(826)은 다수의 데이터 센터에 걸쳐있는 소비자 디바이스를 갖는 클러스터 링(810)에 이벤트 메시지를 라우팅하는 것을 용이하게 할 수 있다.
도 9는 일 실시예에 따라, 메시징 시스템에 의해 사용되는 예시적인 모니터링 시스템(900)을 나타내는 블록도이다. 모니터링 시스템(900)은 가상 큐(906A-C) 및 가상 큐 모니터(908)를 포함하는 네티 트랜스포트(904)를 포함하는 메시징 서비스(902)를 포함한다. 메시징 서비스(902)는 하나 이상의 소비자 디바이스(910A-C), 경고 리스너(912) 및 큐(916)에 연결된 권고 리스너(914)를 포함한다.
일 측면에서, 모니터링 시스템(900)은 자기 치유 클러스터를 지원할 수 있다. 예를 들어, 소비자 디바이스(910A-C)가 고장나거나 사용 중일 때, 그 소비자 디바이스에 스케줄링되어 있는 트래픽은 다른 소비자 디바이스로 재전송되어야 한다. 이러한 재구성은 본 명세서에 설명된 메시징 시스템을 통해 이루어질 수 있다. 특히 메시징 스택의 생산자 측은 소비자 디바이스가 고장 났을 때를 감지할 수 있다. 그러한 시나리오에서, 고장난 소비자 디바이스는 생산자 디바이스의 레지스트리에서 제거될 수 있으며 고장난 소비자 디바이스에 대해 트래픽이 더 이상 스케줄링되지 않는다. 대신 트래픽은 여전히 동작하고 있는 클러스터 링의 다른 인스턴스에 대해 재조정된다.
메시징 스택의 생산자 측은 도 9에 도시된 바와 같이 자신의 레지스트리 내에 소비자 디바이스(910A-C)마다 가상 큐(906A-C)를 유지한다. 가상 큐 모니터(908)는 가상 큐(906A-C)를 모니터링하여 소비자 디바이스(910A-C)의 느려짐을 검출한다. 이것은 일반적으로 생산자 디바이스와 소비자 디바이스 사이의 네트워크가 느려지거나 소비자 디바이스가 느리게 동작하여 통신 소켓 버퍼를 비울 수 없는 경우에 발생한다. 그러한 경우에, 메시징 서비스(902)는 권고 리스너(914) 또는 권고 메시지를 구독하고 있는 다른 리스너 컴포넌트에게 권고 메시지를 발행한다. 권고 메시지에는 토픽(이에 대해 권고 메시지가 발행됨)이 포함된 원본 메시지가 들어 있다. 권고 리스너(914)는 이벤트 메시지를 받아 메타 데이터를 부가하고 그 이벤트를 카프카 큐(916)에 푸시한다. 도 8의 리플레이어(822, 824)와 같은 리플레이어 디바이스는 큐(916)를 청취하여 메시지를 소비자 디바이스에게 직접 재생하도록 설정된다.
또한, 생산자 측은 경고 리스너(912)를 이용하여 프로비저닝될 수 있다. 가상 큐 모니터(908)가 저속 소비자 디바이스를 검출할 때, 가상 큐 모니터(908)는 경고 리스너(912)에 신호를 보낼 것이다. 예를 들어, 가상 큐 모니터(908)는 토픽과 함께 저속 소비자 디바이스의 네트워크 어드레스에 관한 정보를 경고 리스너(912)에게 제공할 수 있다. 이것은 해당 생산자 디바이스를 검출하는 신호로 사용될 수 있다. 소비자 클러스터 링을 재구성하는 예시적인 방법이 도 10과 관련하여 이하에서 설명된다.
메시징 시스템의 예시적인 방법
도 10은 일 실시예에 따른, 소비자 클러스터를 재구성하기 위한 생산자 및 소비자의 상호 작용(1000)의 일 실시예를 나타내는 개략도이다.
상호 작용 라인(1002 내지 1004)에서, 생산자 측 스택(502)은 이벤트 메시지를 소비자 측 스택(504)으로 전송한다. 상호 작용 라인(1006)에서, 소비자 측 스택(504)은 소비자 애플리케이션이 느린 것을 검출하기 위해 업스트림 큐 깊이(upstream queue depth)를 모니터링한다. 상호 작용 라인(1008)에서, 소비자 측 스택(504)은 소비자 메시징 스택 내의 업스트림 큐가 제 1 임계 값 이상으로 구축되었음을 감지하고, 상호 작용 라인(1010)에서 소비자 측 스택(504)에 메시지를 보내는 것을 중지하기 위해 모든 생산자 디바이스에 권고를 보낸다. 상호 작용 라인(1012)에서, 생산자 측 스택(502)은 이러한 소비자 인스턴스에 예정된 트래픽을 재조정하고 트래픽을 클러스터 링을 통해 배분함으로써 권고 메시지에 반응한다.
상호 작용 라인(1014)에서, 소비자 측 스택(504)은 업스트림 큐가 제 2 임계 값 아래로 떨어졌음을 검출하고, 소비자 측 스택(504)은 소비자 측 스택(504)에 메시지를 다시 보내기 시작하기 위해 생산자에게 또 다른 권고 메시지를 보낸다. 일 실시예에서, 제 1 및 제 2 임계 값은 상이한 값일 수 있다. 상호 작용 라인(1020)에서, 생산자 측 스택(502)은 소비자 측 스택(504)으로의 이벤트 메시지의 전송을 재개한다.
도 11은 일 실시예에 따른, 클러스터 메시징의 예시적인 방법(1100)을 나타내는 흐름도이다. 이 예에서, 방법(1100)은 데이터 메시지를 수신할 수 있는 소비자 디바이스를 식별하는 제 1 데이터를 수신하고(블록 1104), 데이터 메시지를 제공하는 데 이용가능한 송신기 머신을 식별하는 제 2 데이터를 수신하며(블록 1106), 각 소비자 디바이스에 복수의 값을 링크하고(블록 1108), 송신기 머신에서 제 1 데이터 메시지에 액세스하고(블록 1110), 제 1 데이터 메시지를 소비자 디바이스 중 선택된 디바이스에 제공하는 것(블록 1112) 등의 동작을 포함할 수 있다. 예시적인 방법(1100)은 설명을 위해, 특정 모듈에 의해 수행되는 것으로 아래에서 설명될 것이다. 그러나, 예시적인 방법(1100)의 동작은 도 3에 도시된 임의의 수의 모듈에 의해 임의의 적절한 순서로 수행될 수 있다는 점을 이해해야 한다.
일 실시예에서, 방법(1100)은 블록(1102)에서 시작하여 블록(1104)으로 진행하며, 여기서 릴레이 에이전트 모듈(들)(304)은 토픽에 링크된 데이터 메시지를 수신하기 위해 이용가능한 소비자 디바이스를 식별하는 제 1 데이터를 수신한다. 제 1 데이터는 소비자 디바이스에 의해 전송된 하나 이상의 광고에 대응할 수 있다.
블록(1106)에서, 릴레이 에이전트 모듈(들)(304)은 토픽에 링크된 데이터 메시지를 제공하는 데 이용가능한 생산자 디바이스(또는 "송신기 디바이스")를 식별하는 제 2 데이터를 수신한다. 예를 들어, 릴레이 에이전트 모듈(들)(304)은 생산자 디바이스가 식별된 토픽에 대한 이벤트 메시지를 발행하고 있음을 나타내는 발견 메시지를 생산자 디바이스로부터 수신할 수 있다.
블록(1108)에서, 프로비저닝 모듈(들)(308)은 복수의 값을 각각의 소비자 디바이스에 링크시킨다. 예를 들어, 값은 일관된 해싱 스케줄러에 의해 생성된 해시 값일 수 있다. 예를 들어, 소비자 디바이스의 식별자는 소비자 디바이스에 이의 해시 값으로서 할당될 복수의 값을 생성하기 위해 의사 난수 생성기에서 시드로 사용될 수 있다. 따라서, 복수의 해시 값은 각 소비자 디바이스에 링크될 수 있다. 복수의 값은 토픽에 대해 계산될 수 있다.
블록(1110)에서, 스케줄러 모듈(들)(306)은 생산자 디바이스에서 토픽에 링크된 제 1 이벤트 메시지를 액세스할 수 있다. 예를 들어, 스케줄러 모듈(들)(306)은 데이터 메모리에서 제 1 이벤트 메시지를 검색하거나(예를 들어, 생산자 디바이스에서 구현되는 경우), 생산자 디바이스로부터 데이터 통신 채널을 통해 이를 수신할 수 있다(예를 들어, 생산자 디바이스 외부의 디바이스 내에 구현되는 경우). 제 1 이벤트 메시지는 키 값을 포함한다. 블록(1112)에서, 스케줄러 모듈(들)(306)은 키 및 각 소비자 디바이스의 복수의 값의 비교에 기초하여 소비자 디바이스 중 선택된 디바이스에 제 1 이벤트 메시지를 제공한다. 언급한 바와 같이, 비교는 해시 함수를 사용하여 키를 평가한 다음 결과 해시 값을 소비자 디바이스에 링크된 값과 비교하는 것을 포함할 수 있다. 비교는 로직 링의 둘레에서 이루어질 수 있으며 시계 방향 또는 반 시계 방향으로 가장 근접한 일치 값을 찾는다. 블록(1114)에서, 방법(1100)이 종료될 수 있다.
세션화 시스템의 예
일 측면예에서, 본 명세서에 개시된 실시예는 다른 것들 중에서도 인터넷 및 모바일 애플리케이션의 실시간 분석과 같은 네트워크 데이터의 세션화를 용이하게 하고, 모니터링, 보안, 인터넷 봇 검출(애플리케이션과 같은 네트워크 데이터의 세션화) 및 이와 유사한 응용을 용이하게 하는 시스템을 제공한다. 세션화는 특정 식별자를 포함하는 이벤트를 그룹화하는 프로세스이며, 세션 지속 시간이라고 불리는 시간 창에서 이루어진다. 방문(visit) 또는 세션은 동일한 고유 식별 클라이언트로부터의 일련의 페이지 요청, 이미지 요청 및/또는 이와 유사한 웹 리소스 요청으로서 정의된다. 고유 식별자를 가진 이벤트가 처음 감지되면 각 시간 창이 시작된다. 지정된 지속 시간 동안 그러한 특정 식별자를 가진 이벤트가 도착하지 않으면 시간 창이 종료된다. 웹 애플리케이션의 분석을 위해, 세션화는 세션 지속 시간을 비활성의 30분으로 정의할 수 있다. 그러나 모바일 디바이스 흐름 및 기타 애플리케이션의 분석을 위해 세션화는 다른 세션 기간을 사용할 수 있다.
세션화는 이벤트 스트림에서 추출한 선택된 필드를 저장하는 것을 용이하게 하고 또한 네트워크를 통한 이벤트 흐름에 따라 세션의 라이프 사이클 동안 필드 또는 이벤트의 집계된 카운트를 계산 및 저장하는 것을 용이하게 한다. 본 명세서에 개시된 실시예는 사용자 거동 데이터를 세션화하는 것의 맥락으로 설명된다. 머신 동작은 대안 실시예에서 세션화될 수 있고, 마찬가지로 다른 타입의 데이터가 세션화에 적합할 수 있다는 점을 이해할 것이다.
본 명세서에 설명된 세션화 시스템은 함께 파이프라인화된 다단 분산 스테이지(multi-stage distributed-stages)를 포함한다. 첫 번째 단계는 여러 소스에서 여러 인터페이스를 통해 이벤트를 수집하는 컬렉션 계층(a collection tier)이다. 세션화기 계층은 파이프라인의 두 번째 단계이다. 세션화기 계층은 다른 구성 요소들 중에서도 하나 이상의 CEP 엔진의 세션화기 뱅크를 포함한다. 여기서, 세션화기 뱅크는 또한 "클러스터 링"이라고 지칭될 것이지만, 클러스터 링의 CEP 엔진은 실제로 원 또는 다른 특정한 기하학적 패턴으로 배열될 필요가 없다는 점을 이해할 것이다.
일 측면에서, 세션화기 시스템은 테넌트(tenant)(또는 "구독자"라고 함)마다 세션화된 데이터를 생성 및 유지하고 세션이 그 시작 및 끝 상태로 변화함에 따라 라이프 사이클 이벤트를 생성한다. 테넌트는 세션화된 데이터를 요청하는 클라이언트 디바이스이다.
다수의 데이터 센터에 걸쳐 동작하는 결함 허용 분산 환경을 얻기 위해, 세션화기 시스템은 도 3의 메시징 시스템(300)을 사용하여 세션의 상태를 유지하고 조작한다. 또한, 세션화기 시스템은 하나의 세션이 다수의 서브 세션 및/또는 다수의 채널에 걸쳐있는 계층적 세션을 생성할 수 있다.
도 12는 일 실시예에 따른 예시적인 세션화기 시스템 아키텍처(a sessionizer system architecture)(1200)를 나타내는 블록도이다. 세션화기 시스템 아키텍처(1200)는 제 1 메시징 시스템(1204)에 의한 이벤트 데이터를 하나 이상의 CEP 엔진(1208A-F)을 포함하는 수집기 클러스터 링(1206)으로 전송하는 애플리케이션(들)(1202)을 포함한다. 수집기 클러스터 링(1206)은 주키퍼 트랜스포트(1210, 1212) 및 큐(1214, 1216)화 상호 접속된다. 또한, 수집기 클러스터 링(1206)은 이벤트 메시지를 하나 이상의 소비자 디바이스(1228A-F)에 의해 형성된 세션화 클러스터 링(1226)으로 라우팅 및 전달하는 제 2 메시징 시스템(1224)에 연결된다. 추가로, 세션화 클러스터 링(1226)은 주키퍼 트랜스포트(1230, 1232) 및 데이터 큐(1234, 1236)와 상호 접속된다. 나아가, 세션화 클러스터링(1226)은 구독자(들)(120)와 상호 연결될 수 있다.
애플리케이션(들)(1202)은 사용자 디바이스상에서 실행되는 웹 자원에 대응할 수 있고 수집기 클러스터 링(1206)을 위한 생산자 디바이스로서 기능할 수 있다. 메시징 시스템(1204)은 애플리케이션(1202)으로부터 수집기 클러스터 링(1206)으로 라운드 로빈 스케줄러 모듈을 사용하여 이벤트 메시지를 라우팅할 수 있다. 이어서, 이벤트 메시지는 세션화된 데이터를 생성하기 위한 처리를 위해 제 2 메시징 시스템(1224)에 의해 세션화 클러스터 링(1226)으로 라우팅된다. 세션화 클러스터 링(1226)은 세션화된 데이터를 특정 세션화된 데이터를 요청하는 디바이스(들)인 대응 구독자(들)(1240)에게 제공한다.
세션화기 시스템(1200)의 제 1 계층에 대한 수집기 클러스터 링(1206), CEP 엔진(1208A-F), 주키퍼 트랜스포트(1210, 1212) 및 큐(1214, 1216)는 수집기 계층이라 지칭할 수 있다. 수집기 계층은 여러 데이터 센터를 사용하여 배치될 수 있다. 예를 들어, 제 1 데이터 센터는 CEP 엔진(1208A-C), 주키퍼 트랜스포트(1210) 및 데이터 큐(1214)를 배치할 수 있다. 제 2 데이터 센터는 CEP 엔진(1208D-F), 주키퍼 트랜스포트(1212) 및 데이터 큐(1216)를 배치할 수 있다.
수집기 계층은 애플리케이션(들)(1202)과 같은 상이한 소스(1202)로부터 다수의 인터페이스를 통해 이벤트 메시지를 수신하고, 이벤트 메시지를 제 2 메시징 시스템(1224)을 통해 세션화기 계층으로 지칭되는 제 2 계층으로 스케줄링한다. 따라서, CEP 엔진(1208A-F)은 애플리케이션(들)(1202)에 관한 소비자 디바이스로서의 역할을 하며 세션화기 계층(1226)에 관한 생산자 디바이스로서의 역할을 한다. 일 실시예에서, 제 2 메시징 시스템(1224)은 도 3의 메시징 시스템에 대응할 수 있다.
세션화기 계층은 세션화 클러스터 링(1226), 소비자 디바이스(1228A-F), 주키퍼 트랜스포트(1230, 1232) 및 데이터 큐(1234, 1236)를 포함한다. 이와 같이, 세션화기 계층은 다수의 데이터 센터를 포괄하는 클러스터 링으로서 배치될 수 있다. 예를 들어, 제 1 데이터 센터는 소비자 디바이스(1228A-C), 주키퍼 트랜스포트(1230) 및 데이터 큐(1234)를 배치할 수 있고, 제 2 데이터 센터는 소비자 디바이스(1228D-F), 주키퍼 트랜스포트(1232) 및 데이터 큐(1236)를 배치할 수 있다. 다수의 데이터 센터에 메시징을 제공하기 위해 주키퍼(1210, 1212, 1230, 1232)는 릴레이 에이전트 모듈(들)(304)을 구현할 수 있다.
구독자(들)(1240)는 세션화 클러스터 링(1226)에 세션화된 데이터를 수신하기 위한 요청 메시지를 제공한다. 구독자(들)는 "테넌트(tenant)"라고 지칭될 수 있다. 세션화 클러스터 링(1226)은 테넌트별로 세션화를 수행한다. 환언하면, 세션화 클러스터 링(1226)은 특정 테넌트를 위해 세부적으로 세션화된 데이터를 생성할 수 있다.
따라서, 각 테넌트 특정 세션에는 이벤트 스트림의 하나 이상의 튜플에서 파생된 고유한 식별자가 있다. 수집기 계층 및 제 2 메시징 시스템(1224)은 이벤트 메시지에 포함된 키에 기초하여 세션화 클러스터 링(1226)을 분할할 수 있다. 예를 들어, 키는 이벤트 메시지의 GUID(globally unique identifier)에 대응할 수 있다. GUID는 이벤트 메시지의 소스인 디바이스(예를 들면, 웹 사이트를 브라우징하는 사용자 디바이스)에 대해 고유하다. 이벤트 메시지의 다른 데이터는 대안적인 실시예에서 키로서 사용될 수 있다는 점을 이해할 것이다. 예를 들어, 애플리케이션 식별자("APPID")와 GUID가 결합(예, 연결 또는 결합)되어 세션 식별자를 형성할 수 있다.
전술한 바와 같이, 수집기 계층은 다중 인터페이스를 통해 이벤트 메시지를 수신할 수 있다. 일 실시예에서, 수집기 계층은 이벤트 메시지를 다운스트림으로 송신하기 전에 수신된 이벤트 메시지를 추가로 정규화한다(normalize). 수집기 계층에서 호스팅되는 CEP 엔진(1208A-F)은 인터넷 봇 트래픽(Internet bot traffic)을 걸러 낼 수 있다. 예를 들어, CEP 엔진(1208A-F)은 인터넷 봇 서명(예를 들어, 이벤트의 패턴)을 검색하여 인터넷 봇 서명과 일치하는 이벤트 메시지를 "BOTSignatureEvent" 타입으로 표시할 수 있다. 이벤트 메시지는 "BOTSignatureEvent" 타입을 나타내는 메타 데이터를 추가하여 표시할 수 있다. 필터링 후에, 이벤트 메시지의 GUID를 사용하는 것과 같이, 이벤트 메시지 내의 키를 사용함으로써 이벤트 메시지 스트림이 세션화기 계층에 대해 스케줄링된다(도 14와 관련하여 더 상세하게 설명됨).
세션화기 시스템은 테넌트가 자신의 세션에 특정한 세션 지속 시간을 정의하는 것을 용이하게 할 수 있다. 예를 들어, 세션 지속 시간은 30 분의 비활성 시간으로 정의될 수 있다. 대안적인 예에서, 세션 지속 시간은 더 짧을 수도 있고(예를 들어, 5-10분) 또는 더 길 수도 있다(예, 30-60 분).
도 13은 다수의 모듈을 포함하는 세션화기 시스템(1300)의 일 실시예를 나타내는 블록도이다. 도시된 세션화기 시스템(1300)은 카운터 업데이터 모듈(들)(1302), 이벤트 데코레이터 모듈(들)(1304), 봇 검출 모듈(들)(1306), 세션 업데이터 모듈(들)(1308) 및 메타 데이터 업데이터 모듈(들)(1310)을 포함한다.
일부 실시예에서, 세션화기 시스템(1300)의 구성 요소는 도 1의 데이터 처리 서버(123) 및/또는 세션화기 링의 클러스터 링(1226)에 포함될 수 있다. 그러나, 대안적인 실시예에서, 이하에 설명되는 세션화기 시스템(1300)의 하나 이상의 컴포넌트는 추가적으로 또는 대안으로, 다른 디바이스(예를 들면, 도 1의 시장 애플리케이션(120), 지불 애플리케이션(122), 서버(114, 116, 118, 130), 네트워크(104) 및/또는 클라이언트 머신(110, 112) 중 하나 이상)에 포함될 수 있다는 점을 이해할 것이다. 세션화기 시스템(1300)은 네트워크(104)와 상호 연결된 다른 머신에 그리고 온라인 시장 이외의 시스템에 배치될 수 있음을 이해할 것이다.
세션화기 시스템(1300)의 모듈(1302-1310)은 서버 머신 간의 통신을 가능하게 하도록 통신 가능하게 결합되는 전용 또는 공유 서버 머신(도시되지 않음) 상에 호스팅될 수 있다. 하나 이상의 모듈(1302-1310)은 하나 이상의 데이터 센터에 배치될 수 있다. 각각의 모듈(1302-1310)은 정보가 서로 그리고 다양한 데이터 소스와 통신 가능하게 결합되어(예를 들어, 적절한 인터페이스들을 통해), 세션화기 시스템(1300)의 모듈(1302-1310) 사이에서 정보가 전달되도록 하거나 모듈(1302-1310)로 하여금 공통 데이터를 공유하고 액세스하게 한다. 세션화기 시스템(1300)의 다양한 모듈은 또한 데이터베이스 서버(들)(124)를 통해 하나 이상의 데이터베이스(126)에 액세스할 수 있다.
카운터 업데이터 모듈(들)(1302)은 수신된 이벤트 데이터 내의 사용자 정의 필드의 발생의 카운팅을 용이하게 하고 및/또는 이벤트 메시지에 의해 표현된 이벤트를 카운트하는 하드웨어-구현된 모듈일 수 있다. 동작 중에, 이벤트 메시지가 도착하면, 카운터 업데이터 모듈(들)(1302)은 이벤트 메시지에서 사용자 정의 필드의 발생의 카운트를 관리하거나, 이벤트를 카운트한다. 이러한 카운터는 세션 데이터 저장소에서 관리된다.
이벤트 데코레이터 모듈(들)(1304)은 이벤트 메시지 외부의 정보 소스를 이벤트 메시지와 결합하는 것을 용이하게 하는 하드웨어-구현된 모듈일 수 있다. 예를 들어, 가치 있는 정보를 갖는 다른 데이터 소스가 가령 사용자 거동 스트림과 같은 이벤트 스트림과 결합될 수 있다. 이벤트 메시지 데이터로 추가될 수 있는 데이터의 예에는 지리학적 정보, 디바이스 분류, 인구 통계 및 세그먼트 데이터가 포함된다.
일 실시예에서, 이벤트 데코레이터(1304)는 세션 메시지가 세션화기 시스템(1300)을 통해 이동할 때 실시간으로 보조 데이터를 이벤트 메시지 스트림과 결합한다. 예를 들어, 이벤트 데코레이터(1304)는 이벤트 메시지의 속성 중 하나를 키로 사용하여 데이터 스토어를 검색한다. 캐싱 데이터는 처리 노드에서 로컬로 또는 고속 검색 캐시에서 외부적으로 사용될 수 있다. 보조 데이터를 실시간으로 이벤트 메시지 스트림에 추가하면 대규모 시스템에서 경험하는 속도로 확장 가능한 데이터 스토어에 질의하는 것이 용이해진다.
봇 검출 모듈(들)(1306)은 인터넷 봇 프로그램에 의해 생성된 이벤트 메시지를 처리하는 것을 용이하게 하는 하드웨어-구현된 모듈일 수 있다.
봇 검출 모듈(들)(1306)은 인터넷 봇 프로그램의 활동에 대응하는 실시간 이벤트 메시지를 식별할 수 있다. 봇 검출 모듈(들)(1306)의 업스트림인 애플리케이션 계층은 생성 애플리케이션에서 봇 서명을 검색할 수 있지만(예를 들어, 자체 선언된 봇의 서명과 오프라인 처리 중에 발견된 봇의 서명이 검색을 위해 캐시에 저장될 수 있음), 애플리케이션 계층은 일부 인터넷 봇 활동을 식별하지 못할 수 있다. 봇 검출 모듈(들)(1306)은, 인터넷 봇 프로그램이 서명을 사용하여 사이트에 액세스하는 속도를 관찰함으로써 인터넷 봇 프로그램 활동을 검출한다. 봇 검출 모듈(들)(1306)은 시간의 롤링 윈도우(rolling windows of time) 동안 측정된 확률론적 주파수 추정 기법을 사용한다. 봇 검출 모듈(들)(1306)은 인터넷 봇 프로그램에 의해 생성된 이벤트 메시지에 의해 소비되는 처리 자원을 감소시키는 역할을 할 수 있다. 세션화기 시스템(1300)이 봇 서명을 검출함에 따라, 세션화기 시스템(1300)은 봇 서명 캐시를 업데이트한다. 이러한 캐시는 수집기 계층에서 제공되어 봇 필터링을 시행할 수 있다.
세션 업데이트 모듈(들)(1308)은 세션 정보의 업데이트를 용이하게 하는 하드웨어-구현된 모듈일 수 있다. 예를 들어, 세션 업데이트 모듈(들)(1308)은 세션이 생성될 때 대응 세션에 세션 시작 마커 이벤트를 포스팅할 수 있고 세션이 종료될 때 세션 종료 마커 이벤트를 대응 세션에 포스팅할 수 있다. 세션 시작 및 종료 마커 이벤트에는 이벤트 스트림 및 지리학적 정보가 많은 데이터에서 파생된 메타 데이터가 포함된다. 세션화기 시스템(1300)은 수퍼 세션으로 지칭되는 크로스-채널(예를 들어, 다수의 디바이스에 걸쳐있는) 세션을 지원할 수 있다. 수퍼 세션의 세션 식별자는 사용자 식별자이다.
메타 데이터 업데이터 모듈(들)(1310)은 이벤트 메시지의 스트림으로부터 데이터를 추출하는 것을 용이하게 하는 하드웨어-구현된 모듈일 수 있다. 예를 들어, 메타 데이터 업데이터 모듈(들)(1310)은 세션의 이벤트 메시지로부터 데이터를 추출할 수 있고 추출된 데이터를 세션 메타 데이터의 형태로 세션 레코드에 저장할 수 있다. 세션 메타 데이터의 예로는 세션 식별자 데이터, 페이지 식별자 데이터, 지리적 위치 데이터(예, 도시, 지역, 국가, 대륙, 경도, 위도, 인터넷 서비스 공급자), 브라우저 타입 데이터, OS 타입 데이터 및 디바이스 타입 데이터가 있다.
메시지 이벤트를 수신하는 것에 응답하여, 세션화기 시스템(1300)은 캐시를 검색하여 세션에 대한 키가 존재하는지를 결정한다. 예를 들어, 이벤트 메시지는 캐시 검색에 사용할 키를 나타내는 메타 데이터를 갖는다. 이벤트 메시지는 세션화 계층의 소비자 디바이스에 의해 평가되고, 각 테넌트에 대해 세션이 존재하면(예, 세션의 키가 캐시에 있음) 메타 데이터가 추출되어 각 테넌트의 세션으로 업데이트된다. 세션이 존재하지 않으면(예, 세션의 키가 캐시에 있지 않음) 새로운 세션 인스턴스가 생성되고 세션 키가 생성되어 세션에 주입된다. 그런 다음 이벤트에서 추출된 메타 데이터가 세션 레코드로 업데이트된다.
세션화기 시스템(1300)은 세션화 성능을 제공하기 위한 인터페이스를 구현할 수 있다. 일 실시예에서, 세션화기 시스템(1300)은 EPL(Esper's event processing language)을 확장하는 다수의 주석을 구현한다. 예시적인 주석이 이하에 열거된다.
Figure pct00001
Figure pct00002
도 14는 일 실시예에 따른 예시적인 세션화기 아키텍처(1400)를 나타내는 블록도이다. 세션화기 아키텍처(1400)는 도 12와 관련하여 전술한 세션화기 계층에 대응할 수 있다. 세션화기 아키텍처(1400)는 인바운드 메시지 채널(IMC)(1402), 디스패처(1404), 세션화기(1406), 아웃 바운드 메시지 채널(OMC)(1408), 봇 검출기(1410) 및 봇 OMC(1412)를 포함한다. 세션화기(1406)는 업데이트 모듈(들)(1302), 이벤트 데코레이터 모듈(들)(1304), 세션 업데이터 모듈(들)(1308) 및 메타 데이터 업데이터 모듈(들)(1310)을 포함할 수 있다.
일 실시예에서, 세션화기 아키텍처(1400)는 JETSTREAM 컨테이너를 사용하여 구현된다. JETSTREAM 컨테이너는 동적 파이프 라인을 선언적으로 구축하여 런타임에 변경할 수 있는 메커니즘을 제공한다. 세션화기 아키텍처(1400)의 파이프 라인은 JETSTREAM 애플리케이션 컨테이너에서 호스팅될 수 있고, 도 14의 도시된 실시예에 도시된 바와 같이 배선된다.
IMC(1402)는 도 12의 수집기 계층으로부터 이벤트 메시지를 수신하는 파이프라인의 제 1 스테이지로서 기능한다. IMC에 도달한 이벤트 메시지는 이어서 디스패처(1404)로 전달된다. 일 실시예에서, 디스패처(1404)는 이벤트 메시지를 평가하고 라우팅 결정을 내리는 Esper CEP 엔진에 대응한다. BOTSignatureEvent 타입으로 표시된 이벤트 메시지는 봇 검출기(1410)로 전달되며, 봇 검출기(1410)는 이벤트 메시지를 처리한 다음, 상이한 봇 타입에 대한 메트릭을 포함하는 이벤트의 수신에 관심있는 구독자에게 이벤트 데이터를 제공한다.
수신된 이벤트 메시지가 세션화를 필요로 하지 않는 이벤트 타입으로 표시되었다는 결정에 응답하여, 디스패처(1404)는 수신된 이벤트 메시지를 OMC(1408)에 전달함으로써 세션화기(1406)를 우회한다.
따라서, 디스패처(1404)는 필터링된 봇 액티비티를 갖는 이벤트 메시지를 세션화기(1406)로 넘긴다. 일 실시예에서, 세션화기(1406)는 세션 라이프 사이클을 관리하고 세션의 이벤트 및 업데이트로부터의 데이터 추출을 허용하는 제 4 세대 언어(4GL) 프로그래밍 인터페이스를 제공하는 다른 CEP 엔진 인스턴스이다. 일 실시예에서, 세션화기(1406)는 Esper의 EPL을 사용하여 구현된다. 추가적으로 또는 대안으로, 세션화기(1406)는 표 1에 열거된 주석을 사용하여 구현될 수 있다.
추가적으로 또는 대안으로, 세션화기(1406)는 인커밍 이벤트 메시지에 포함된 정보의 튜플의 특정 조합에 대한 새로운 세션을 생성한다. 세션화기 아키텍처는 사용자에게 SQL로 테넌시 기반 세션화를 시행하게 하기 위한 사용자 정의 규칙을 작성하기 위한 인터페이스를 제공한다. SQL을 사용하여 이를 달성하는 예는 다음과 같다.
INSERT INTO EWASESSION SELECT appid, guid, 30 AS sessionduration, * FROM TRACKING_EVENT WHERE appid is not null;
@OutputTo("sessionizer") SELECT * FROM SESSIONINFO;
이 예에서 SQL 명령어는 APPID와 GUID가 세션 식별자를 형성하고 30분을 세션 지속 시간으로 정의한다.
사용자에게 규칙을 정의하는 기능을 제공하는 것은 4GL 프로그래밍 구성물(a 4GL programming construct)을 제공함으로써 충족될 수 있고 이에 따라 사용자는 4GL에서 규칙을 구현하고 그러한 규칙을 제출할 수 있다. 예를 들어, POWERBUILDER™, STATISTICAL ANALYSIS SYSTEM™(SAS), STATISTICAL PACKAGE FOR SOCIAL SCIENCES™(SPSS), STATA™ 및/또는 이와 유사한 4GL 프로그램을 사용하여 규칙을 구현하고 제출하는 4GL 프로그래밍 구성물로 SQL이 채택될 수 있다. JETSTREAM 프레임워크는 CEP 엔진에 JETSTREAM 프레임워크를 내장하여 세션 작성자가 새 SQL 규칙을 생성하고 이를 즉시 적용할 수 있게 한다.
일 실시예에서, 세션화기 아키텍처(1400)는 다수의 채널에 걸쳐있는 "수퍼 세션"(예를 들어, 다수의 스크린 및 디바이스를 사용하는 사용자에 대한 하나의 세션)을 추적 및 생성할 수 있다. 수퍼 세션은 "ActorId"로서 지칭되는 식별자에 의해 식별된다. 이벤트에는 세션 GUID로 지칭되는 세션에 대한 고유 식별자가 있을 수 있다. 사용자가 한 채널에서 다른 채널로 변경됨에 따라 사용자는 다수의 세션 식별자(예, 다수의 GUID)를 수신한다. 사용자의 신원은 사용자가 시스템과 상호 작용하는 동안 인식될 수 있으며 ActorId는 사용자의 표시기(indicator)로서 이벤트 메시지에 포함된다.
세션화기(1406)는 이벤트 메시지가 ActorId를 포함하는 것을 검출할 수 있다. 세션화기(1406)가 이벤트 메시지 내의 ActorId를 검출하면, 세션화기(1406)는 ActorId를 친화 키(affinity key)로 지정하는 상이한 토픽에 대해 세션화기 클러스터 링(1226)으로 이벤트 메시지를 다시 전달한다. 이벤트는 ActorId를 처리하기 위해 재생되는 것으로 표시된다. 세션화기(1406)는 이제 ActorId에 대한 새로운 세션을 생성한다. 이러한 접근 방식을 사용하면, 채널 세션에 귀속된(attributed to) 집계가 이제는 수퍼 세션에 귀속된다. 따라서, 모바일 이벤트 메시지가 수신되면, 이벤트 메시지는 모바일 세션 및 수퍼 세션에 귀속될 것이다. 수퍼 세션은 자신에 링크된 세션과 다른 라이프 사이클을 가질 수 있다. 또한, 링크된 세션과 수퍼 세션은 집계를 가질 수도 있다.
부가적으로 또는 대안으로, 세션화기 아키텍처(1400)는 또한 세션 자체를 다수의 서브 세션으로 분할할 수 있다. 이러한 경우에, 세션화기 아키텍처(1400)는 파티션마다 서브 세션을 생성하고, 이는 세션화기 아키텍처(1400)가 서브 세션마다 집계 및 메타 데이터를 관리할 수 있게 한다. 서브 세션의 라이프 사이클은 부모 세션의 라이프 사이클을 이용하여 캡슐화된다. 부모 세션이 만료되면 서브 세션도 역시 만료된다. 서브 세션의 집계 및 메타 데이터 업데이트는 EPL에서 수행될 수 있다. 예를 들어, 서브 세션은 시도 결과(trial results)를 측정하고 실험의 독립 변수의 효과를 특성화하는 방법으로 각 실험에 대한 하위 세션을 만들어 실험을 용이하게 할 수 있다.
부가적으로 또는 대안으로, 세션화기 아키텍처(1400)는 세션 시작 및 세션 종료 이벤트와 같은 세션 라이프 사이클 이벤트를 추적 및 관리할 수 있다. 예를 들어, 이벤트 메시지가 세션화기 아키텍처(1400)에 도달하면, 세션화기(1406)는 이벤트 메시지를 전달할 위치를 결정하기 위해 디스패처(1404)를 통해 이벤트 메시지를 보낸다. 이벤트가 세션화되는 경우, 디스패처(1404)는 이벤트 메시지를 세션화기 프로세서(1406)에 전달한다. 전술한 바와 같이, 세션화기(1406)는 테넌트마다 SQL로 작성된 규칙 세트를 갖는 CEP 엔진이다. 이벤트 메시지는 CEP 엔진에 의해 평가되고, 각 테넌트에 대해 해당 세션이 존재하면 메타 데이터가 추출되어 테넌트의 세션으로 업데이트된다. 세션이 존재하지 않으면, 새로운 세션 인스턴스가 생성되고 세션 키가 생성되어 세션에 주입된다. 그런 다음 이벤트에서 추출된 메타 데이터가 세션 레코드로 업데이트된다. 또한, 새로 생성된 세션은 지리학적 및 인구 통계학적 정보로 업데이트된다. 새 세션의 시작을 신호하기 위해 "session start marker event"라는 라이프 사이클 이벤트가 생성된다. 이러한 이벤트에는 세션 시작 시 및 생성 시에 세션에 누적된 모든 데이터가 포함된다. 이러한 이벤트는 관심있는 구독자에게 전달된다.
더 많은 이벤트가 세션에 도착하면 해당 세션에서 집계가 업데이트된다. 이벤트 자체는 세션 키와 함께 지리학 및 인구 통계학적 정보로 데코레이팅되어 관심 있는 구독자에게 송신된다.
세션 레코드는 캐시(예, Java 힙 외부의 매우 큰 메모리 영역에서 작업할 수 있는 오프 힙 캐시)에 저장될 수 있다. 이 캐시는 여러 데이터 센터에 분산된 복제된 분산 보조 저장소에 의해 백업된다. 캐시 구성 요소에는 캐시의 각 레코드에 대한 활동을 모니터링하는 러너가 있다. 캐시에서 세션 레코드가 업데이트되면 이의 마지막 업데이트 타임스탬프가 프로세스에서 계산할 수 있는 만료 시간과 함께 기록된다. 러너는 몇 초마다 전체 캐시를 스윕(sweep)한다. 만료된 세션 레코드를 발견하면 캐시에서 세션 레코드를 제거하고 "세션 종료 마커 이벤트(session end marker event)"라는 라이프 사이클 이벤트를 생성한다. 이 이벤트에는 세션 키, 집계 카운트와 함께 세션에 기록된 데이터 및 세션 시작 및 종료 시간이 포함된다.
구독자는 세션 라이프 사이클 및 미가공 이벤트를 구독할 수 있다.
부가적으로 또는 대안으로, 세션화기 아키텍처(1400)는 동적 스케일링 및 고장 조정을 용이하게 할 수 있다. 예를 들어, 도 12의 소비자 디바이스(1228A-F)("세션화기 노드"라고도 함)는 CEP 엔진(1204)(예를 들어, 수집기 클러스터 링(1206)의 생산자 디바이스)에 의해 자동으로 발견될 수 있다. 세션화기 클러스터 링(1226)은 수백 개의 노드로 성장할 수 있으며, 새로운 노드가 클러스터에 추가될 때 트래픽은 자동으로 재조정된다. 세션화기 클러스터 링(1226)의 노드가 고장 나거나 새로운 노드가 링에 추가되면, 특정 세션화기 노드로 흐르는 모든 이벤트가 이제 클러스터 링의 다른 노드로 스케줄링되도록 트래픽이 재조정된다. 트래픽이 다른 노드로 들어가면 해당 이벤트와 연관된 세션 상태가 분산 캐시로부터 복원된다.
클러스터 링은 재해 복구를 용이하게 한다. 이벤트는 노드 고장 또는 새로운 노드의 추가로 인한 변화를 검출하는 것에 응답하여 생성된다. 리스너는 이러한 이벤트를 청취할 수 있다. 그런 다음 리스너는 고장난 노드로부터 삽입된 세션화기 식별자(여기서는 "키"라고도 함)에 대해 분산된 캐시에 질의한다. 만료된 세션화기 식별자(예, 세션의 지속 시간 윈도우가 만료된 후 가장 최근의 이벤트가 발생한 경우)가 처리되고 닫힌다. 만료된 세션을 닫는 프로세스의 일부로서 "세션 종료 마커 이벤트"라는 불리는 라이프 사이클 이벤트가 생성된다.
새 세션이 만들어지면 세션 키가 생성되어 세션에 바인딩되고 바인딩은 캐시에 저장된다. 일 실시예에서, 분배된 보조 저장소를 갖는 오프 힙(off-heap) 캐시 기술이 사용된다. 이러한 타입의 설계를 통해 고장 복구 및 상태 복원이 가능하다. 세션 데이터를 저장하기 위해 서버 팜에 보조 저장소가 있는 오프 힙 캐시가 사용될 수 있다.
이벤트 메시지가 수신되면 캐시가 점검되어 키가 존재하는지 확인한다. 이벤트 메시지에는 캐시 검색에 사용할 키를 나타내는 메타 데이터가 있다. 키를 찾을 수 없는 경우 보조 저장소가 검사된다. 보조 저장소에서 키가 발견되면 세션은 캐시로부터 복원되고 카운트가 증가되며 보조 저장소가 업데이트된다.
세션화기 노드가 멈추면(die), 그 노드에서 만료 예정인 세션을 닫아야 한다. 이러한 세션의 레코드는 분산된 캐시에 저장된다. 세션화기 아키텍처(1400)는 윈도우(예를 들어, 200 밀리 초)에 걸쳐 누적된 세션화기 노드로부터 캐시에 기록된 키의 집합을 포함하는 세그먼트를 캐시에 유지한다. 이러한 방식으로 특정 노드에서 작성된 키에 대한 레코드가 보관된다. 이러한 버킷 엔트리 각각의 키는 세션화기 노드를 호스팅하는 디바이스를 식별 및/또는 어드레싱하는 데 사용할 수 있는 시간 세그먼트와 hostId를 결합하여 생성된다. 각 세션화기 노드에는 링 변경 사항에 주목하는 리스너가 있다. 한 호스트에서 고장이 검출되면 다른 호스트는 만료된 노드에서 키와 이의 대응 세션을 판독하고 이를 종료하는 리더를 갖는다. 세션이 여전히 유효한 경우, 세션이 유지되고, 유효하지 않으면, "세션 종료 마커 이벤트"가 배포된다.
도 15는 일 실시예에 따라 세션화된 데이터를 생성하는 예시적인 방법(1500)을 나타내는 흐름도이다. 이 예에서, 방법(1500)은 세션화된 데이터에 대한 구독 요청을 나타내는 데이터를 수신하는 것(블록 1504), 구독 요청에 링크된 세션화기 뱅크를 할당하는 것(블록 1506), 세션화기 뱅크의 각각의 처리 엔진에 링크된 식별자를 프로비저닝하는 것(블록 1508), 이벤트 메시지를 처리하는 데 이용가능한 할당된 세션화기 뱅크를 등록하는 것(블록 1510), 이벤트 데이터를 수신하는 것(블록 1512), 수신된 이벤트 데이터를 처리하는 것(블록 1514), 및 생성된 세션화된 데이터를 제공하는 것(블록 1516)과 같은 동작을 포함할 수 있다. 예시적인 방법(1500)은 설명을 위해, 특정 모듈에 의해 수행되는 것으로서 아래에 설명될 것이다. 그러나, 예시적인 방법(1500)의 동작은 도 3 및 도 13에 도시된 임의의 수의 모듈에 의해 임의의 적절한 순서로 수행될 수 있다.
방법(1500)은 블록(1502)에서 시작하여 블록(1504)으로 진행하고, 여기서 구독 인터페이스는 세션화된 데이터에 대한 구독 요청을 나타내는 데이터를 수신한다. 이러한 구독 요청은 구독자 식별자, 관심 세션 등을 포함할 수 있다. 구독 요청은 도 12의 구독자(들)(1240)에 의해 전송될 수 있다. 구독 인터페이스는 도 12의 세션화기 클러스터 링(1226)에서 구현될 수 있다. 일 실시예에서, 구독 인터페이스는 도 3의 릴레이 에이전트 모듈(들)(304)에 대응할 수 있다.
블록(1506)에서, 할당 모듈(들)은 구독 요청을 서비스하기 위해 세션화기 뱅크(가령, 도 12의 세션화기 클러스터 링(1226))를 할당한다. 세션화기 뱅크는 구독 요청을 서비스하기 위해 이용가능한 처리 엔진을 포함한다. 세션화기 뱅크는 구독 요청 및 구독자(들)(1240)에 링크된다.
블록(1508)에서, 메시징 인터페이스 모듈은 세션화기 뱅크의 각각의 처리 엔진에 링크된 식별자를 프로비저닝한다. 예를 들어, 메시징 인터페이스 모듈은 도 12의 메시징 시스템(1224)에 의해 구현될 수 있다. 또한, 메시징 시스템(1224)은 일관된 해싱 스케쥴링을 제공하기 위해 도 3과 관련하여 기술된 메시징 시스템(300)을 구현할 수 있다. 이와 같이, 각각의 처리 엔진에 링크된 식별자는 세션화기 뱅크의 처리 엔진의 각각에 할당된 다수의 해시 값에 대응할 수 있다.
블록(1510)에서, 메시징 인터페이스 모듈은 프로비저닝된 식별자를 제공함으로써 구독 요청과 매칭하는 이벤트 메시지(또는 "이벤트 데이터")를 처리하는 데 이용가능한 할당된 세션화기 뱅크를 수집 서버에 등록한다. 예를 들어, 도 12의 소비자 디바이스(1228A-F)(1220)는, 메시징 시스템(1224), 또는 수집기 클러스터 링(1206)과 인터페이싱된 릴레이 에이전트 모듈(예를 들어, 주키퍼 트랜스포트(1230, 1232)), 또는 광고를 수신하도록 구성된 수집기 클러스터 링(1206)과 연결된 서버(도시되지 않음)에 광고를 제공한다. 결과적으로, CEP 엔진(1208A-F)은 세션화기 클러스터 링(1226)에 관한 생산자 디바이스로서 기능할 수 있다.
블록(1510)에서, 메시징 인터페이스 모듈은 콜렉션 서버에 링크된 처리 엔진으로부터 이벤트 데이터를 수신한다. 예를 들어, CEP 엔진(1208A-F) 중 하나는 이벤트 메시지를 메시징 시스템(1224)을 통해 소비자 디바이스(1228A-F) 중 선택된 하나에 전송한다. 소비자 디바이스의 선택은 일관된 해싱 스케줄러에 기초할 수 있다.
블록(1514)에서, 소비자 디바이스(1228A-F) 중 선택된 하나는 세션화된 데이터를 생성하기 위해 구독 요청에 링크된 세션 규칙 데이터에 따라 수신된 이벤트 데이터를 처리한다. 세션 규칙 데이터는 구독자가 요청한 하나 이상의 속성(예, 정보의 튜플)에 대응한다. 블록(1516)에서, 생성된 세션화된 데이터를 구독자(들)(1240)에게 제공한다. 블록(1518)에서, 방법(1500)이 종료된다.
도 16은 일 실시예에 따라 세션을 생성하고 업데이트하는 예시적인 방법(1600)을 도시하는 흐름도이다. 일 실시예에서, 방법(1600)의 블록(1602-1652)은 도 12의 소비자 디바이스(1228A-F)에 의해 수행될 수 있다.
방법(1600)은 이벤트 메시지를 수신함으로써 트리거될 수 있다. 예를 들어, 방법(1600)은 미가공 이벤트 타입의 이벤트 메시지를 수신한 것에 응답하여 블록(1602)에서 시작할 수 있다. 예를 들어, 미가공 이벤트 타입은 인터넷 봇 프로그램 서명이 포함된 것으로 표시되지 않은 및/또는 세션화기가 우회하도록 표시되지 않은 생산자 디바이스로부터 이벤트 메시지를 수신하는 것에 대응한다. 블록(1604)에서, 방법(1600)은 미가공 이벤트에 대한 세션이 존재하는지를 결정한다. 세션이 존재하지 않는다는 결정에 응답하여, 방법(1600)은 블록(1606)으로 진행하여 판독이 수행되어야 하는지를 결정할 수 있다. 일 실시예에서, 판독은 세션화기 노드 고장에 응답하여 수행되어야 한다. 판독이 수행되면, 방법(1600)은 세션을 로딩하기 위한 블록(1608)으로 진행할 수 있고, 로드가 계류중인지를 결정하기 위한 블록(1610)으로 진행할 수 있다. 로드가 계류중이 아닌 경우, 방법은 블록(1612)에서 세션의 비동기 로드를 수행한다. 로드가 계류중인 경우, 방법(1600)은 블록(1614)에서 수신된 미가공 이벤트를 큐잉한다.
블록(1606)의 결정으로 돌아가서, 방법(1600)이 판독이 필요하지 않다고 결정하면, 방법(1600)은 새로운 세션을 생성하기 위해 블록(1616)으로 진행한다. 방법(1600)은 수신된 이벤트 메시지를 지리적 및 인구 통계학적 정보로 데코레이팅하고, 수신된 이벤트 메시지로부터 메타 데이터를 추출하고, 이벤트 메시지에 대해 세션화기를 실행하고, 세션 시작 마커를 송신하기 위한 블록(1618-1624)으로 진행한다. 블록(1626-1634)에서, 방법(1600)은 데코레이팅된 이벤트 메시지와 관련된 카운터를 업데이트하고, 세션화기를 실행하고, 세션을 저장 및 동기화하고, 세션화된 이벤트 데이터를 구독자에게 송신하고, 계류중인 이벤트를 처리한다. 블록(1634)에서 계류중인 이벤트를 처리한 후에, 방법(1600)은 블록(1626-1634)의 동작을 반복하기 위해 블록(1626)으로 되돌아 갈 수 있다.
블록(1604)의 결정으로 돌아가서, 수신된 이벤트 메시지에 대한 세션이 존재한다는 결정에 응답하여, 방법(1600)은 기존 세션이 세션 지속 시간에 기초하여 긴(long)지를 결정하기 위해 블록(1636)으로 진행한다. 예를 들어, 기존 세션은 세션 지속 시간이 지나 메시징된 가장 최근의 캐시화된 이벤트에 기초하여 세션이 만료되는 경우 길다. 세션이 길다는 결정에 기초하여, 방법(1600)은 블록(1602)으로 진행하여 구 세션을 종료하고 블록(1616)에서 새로운 세션을 생성한 후, 방법(1600)은 전술한 바와 같이 블록(1618-1634)을 실행한다. 이와 달리, 방법이 세션이 블록(1636)에서 길지 않다고 결정하면, 방법은 블록(1642)으로 진행하여 지리학적 정보 및 인구 통계학적 정보로 이벤트 메시지를 데코레이팅한 다음 전술한 바와 같이 블록(1626-1634)으로 진행한다.
방법(1600)은 또한 선택된 세션을 로딩하라는 요청과 같은 세션 로드 이벤트를 나타내는 데이터를 수신함으로써 트리거될 수 있다. 방법(1600)은 블록(1650)에서 시작하여 세션이 존재하는지 여부를 결정하기 위해 블록(1650)으로 진행할 수 있다. 세션이 존재한다는 결정에 기초하여, 방법(1600)은 세션이 긴지 여부를 결정하고, 전술한 바와 같이 계속되는지 여부를 결정하기 위해 블록(1636)으로 진행한다. 세션이 존재하지 않는다는 결정에 기초하여, 방법(1600)은 블록(1638)으로 진행하여 구 세션을 종료하고 전술한 바와 같이 블록(1616)으로 진행한다.
도 17은 일 실시예에 따른 세션 라이프 사이클 관리에 대한 예시적인 방법을 도시하는 흐름도이다. 일 실시예에서, 방법(1700)의 블록(1702-1752)은 도 12의 소비자 디바이스(1228A-F)에 의해 수행될 수 있다. 방법(1700)의 실행은 타이머 이벤트, 세션 체크 이벤트 및 세션 복구 이벤트와 같은 다수의 이벤트에 응답하여 실행될 수 있다. 타이머 이벤트에 응답하여, 방법(1700)은 블록(1702)에서 시작하여 블록(1704)으로 진행하여 타임 아웃 판독 요청을 처리한다. 블록(1706)에서, 방법(1700)은 세션 타임 아웃을 처리한 다음 블록(1708)으로 진행하여 친화성(affinity)을 검사한다. 예를 들어, 해당 세션에 대한 이벤트 메시지를 수신하도록 할당된 세션화기 노드 및 타임 아웃 이벤트의 테넌트가 있는 경우 친화성이 있다. 친화성이 없다는 결정에 기초하여, 방법(1700)은 세션 체크 이벤트를 송신하기 위해 블록(1710)으로 진행하고 블록(1712)에서 종료한다(그리고, 예를 들어, 블록(1722)에서 시작하여 방법(1700)을 반복함). 대안으로, 친화성이 있다는 결정에 기초하여, 방법(1700)은 블록(1714)으로 진행하여 세션화기를 실행한다. 이 방법은 블록(1716, 1718)으로 진행하여 세션 종료 마커를 송신한 다음 세션을 삭제한다. 그 후에, 방법(1700)은 블록(1719)으로 진행하여 종료한다.
세션 복구 이벤트(블록 1720) 또는 세션 체크 이벤트(블록 1722)에 응답하여, 방법(1700)은 블록 (1724)으로 진행하여 로컬 세션이 존재하는지를 결정한다. 로컬 세션은 세션화기 노드의 오프 힙 캐시에 저장된 세션 데이터이고, 도 2의 카프카 큐(1234, 1236)와 같은 보조 저장소에 백업된다. 로컬 세션이 존재한다는 결정에 기초하여, 방법(1700)은 블록(1726)으로 진행하여 종료한다. 대안으로, 로컬 세션이 존재하지 않는다는 결정에 기초하여, 방법(1700)은 블록(1714)으로 진행하여 세션화기를 실행하고 전술한 바와 같이 블록(1716-1719)으로 진행한다.
특정 실시예는 본 명세서에서 로직 또는 다수의 컴포넌트, 모듈 또는 메커니즘을 포함하는 것으로 설명된다. 모듈은 소프트웨어 모듈(예, (1) 비 일시적 머신 판독가능 매체에 구현된 또는 (2) 전송 신호로 구현된 코드) 또는 하드웨어-구현된 모듈 중 하나를 구성할 수 있다. 하드웨어-구현된 모듈은 특정 동작을 수행할 수 있는 유형의 유닛이며, 특정 방식으로 구성되거나 배열될 수 있다. 일 실시예에서, 하나 이상의 컴퓨터 시스템(예를 들면, 독립형, 클라이언트 또는 서버 컴퓨터 시스템) 또는 하나 이상의 프로세서는 본 명세서에 설명된 소정의 동작을 수행하도록 동작하는 하드웨어-구현된 모듈로서 소프트웨어(예를 들어, 애플리케이션 또는 애플리케이션 부분)에 의해 구성될 수 있다.
다양한 실시예에서, 하드웨어-구현된 모듈은 기계적으로 또는 전자적으로 구현될 수 있다. 예를 들어, 하드웨어-구현된 모듈(예를 들어, 필드 프로그래머블 게이트 어레이(FPGA) 또는 주문형 집적 회로(ASIC)와 같은 특수 목적 프로세서로서)은 영구적으로 구성된 전용 회로 또는 로직을 포함할 수 있다. 하드웨어-구현된 모듈은 또한 특정 동작을 수행하기 위해 소프트웨어에 의해 일시적으로 구성되는 프로그램 가능 로직 또는 회로(예를 들어, 범용 프로세서 또는 다른 프로그램 가능한 프로세서 내에 포함되는 것 등)를 포함할 수 있다. 하드웨어-구현된 모듈을 기계적으로, 전용 및 영구적으로 구성된 회로에서, 또는 일시적으로 구성된 회로(예를 들어, 소프트웨어에 의해 구성된 것)에서 구현하는 결정이 비용 및 시간을 고려하여 시작될 수 있다는 점을 이해할 것이다.
따라서, "하드웨어-구현된 모듈"이라는 용어는 물리적으로 구성되거나, 영구적으로 구성되거나(예, 하드웨어에 내장됨(hardwired)), 임시로 또는 일시적으로 구성(예, 프로그래밍)되어 특정 방식으로 동작하거나 본 명세서에 설명된 특정 동작을 수행할 수 있다. 하드웨어-구현된 모듈이 일시적으로 구성되는(예를 들어, 프로그래밍되는) 실시예를 고려하면, 하드웨어-구현된 모듈 각각은 어느 한 시점에 구성되거나 인스턴스화될 필요가 없다. 예를 들어, 하드웨어-구현된 모듈이 소프트웨어를 사용하여 구성된 범용 프로세서를 포함하는 경우, 범용 프로세서는 상이한 시간에 개개의 상이한 하드웨어-구현된 모듈로서 구성될 수 있다. 따라서 소프트웨어는 예를 들면, 한 시점에 특정한 하드웨어 구현되는 모듈을 구현하고 다른 시점에 다른 하드웨어-구현된 모듈을 구현하는 프로세서를 구성할 수 있다.
하드웨어-구현된 모듈은 다른 하드웨어-구현된 모듈에 정보를 제공하고 이로부터 정보를 수신할 수 있다. 따라서, 설명된 하드웨어-구현된 모듈은 통신 가능하게 결합된 것으로 간주될 수 있다. 그러한 하드웨어-구현된 모듈 여러 개가 동시에 존재하는 경우, 하드웨어-구현된 모듈을 연결하는 신호 전송(예, 적절한 회로 및 버스를 통한 전송)을 통해 통신을 수행할 수 있다. 다수의 하드웨어-구현된 모듈이 상이한 시간에 구성되거나 인스턴스화되는 실시예에서, 그러한 하드웨어-구현된 모듈 간의 통신은 예를 들어, 다수의 하드웨어-구현된 모듈이 액세스를 하는 메모리 구조 내의 정보의 저장 및 검색을 통해 달성될 수 있다. 예를 들어, 하나의 하드웨어-구현된 모듈은 동작을 수행할 수 있고, 그 동작의 출력을 통신 가능하게 연결된 메모리 디바이스에 저장할 수 있다. 그런 다음, 추가적인 하드웨어-구현된 모듈을 나중에 메모리 디바이스에 액세스하여 저장된 출력을 검색하고 처리할 수 있다. 하드웨어-구현된 모듈은 또한 입력 또는 출력 디바이스와의 통신을 시작하고 자원(예, 정보의 컬렉션)에 대해 동작할 수 있다.
본 명세서에 설명된 예시적인 방법의 다양한 동작은 관련 동작을 수행하도록(예를 들어, 소프트웨어에 의해) 일시적으로 구성되거나 영구적으로 구성된 하나 이상의 프로세서에 의해 적어도 부분적으로 수행될 수 있다. 일시적으로 또는 영구적으로 구성되는지 여부에 상관없이, 그러한 프로세서는 하나 이상의 동작 또는 기능을 수행하도록 동작하는 프로세서로 구현된 모듈을 구성할 수 있다. 본 명세서에서 언급된 모듈은 일부 실시예에서 프로세서로 구현된 모듈을 포함할 수 있다.
유사하게, 본 명세서에서 설명된 방법은 적어도 부분적으로 프로세서로 구현될 수 있다. 예를 들어, 방법의 동작 중 적어도 일부는 하나 이상의 프로세서 또는 프로세서로 구현된 모듈에 의해 수행될 수 있다. 특정 동작의 실행은 단일 머신 내에 있는 경우뿐만 아니라 여러 머신에 걸쳐 배치된 하나 이상의 프로세서간에 분산될 수 있다. 일부 예시적인 실시예에서, 프로세서(들)는 단일 위치(예를 들어, 가정 환경, 사무실 환경 또는 서버 팜)에 위치할 수 있는 반면, 다른 실시예에서는 프로세서가 다수의 위치에 걸쳐 분산될 수 있다.
또한, 하나 이상의 프로세서는 "클라우드 컴퓨팅" 환경 또는 "SaaS(software as a service)"와 같은 관련 동작의 실행을 지원하기 위해 동작될 수 있다. 예를 들어, 동작 중 일부는 네트워크(104)(예를 들어, 인터넷) 및 하나 이상의 적절한 인터페이스(예를 들어, 애플리케이션 프로그램 인터페이스(API))를 통해 액세스 가능한 컴퓨터 그룹(프로세서를 포함하는 머신의 예로서)에 의해 수행될 수 있다.
일 실시예는 디지털 전자 회로, 또는 컴퓨터 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합으로 구현될 수 있다. 일 실시예는 컴퓨터 프로그램 제품(예를 들어, 데이터 처리 장치(예, 프로그램가능한 프로세서, 컴퓨터 또는 복수의 컴퓨터)에 의한 실행을 위해 또는 그 동작을 제어하기 위한 머신 판독가능 매체 내의 정보 캐리어에 유형적으로 구현된 컴퓨터 프로그램 등)의 컴퓨터 프로그램 매체를 사용하여 구현될 수 있다.
컴퓨터 프로그램은 컴파일된 언어 또는 해석된 언어를 포함하여 모든 형태의 프로그래밍 언어로 작성될 수 있으며, 독립형 프로그램이나 모듈, 서브 루틴 또는 컴퓨팅 환경에서 사용하기에 적합한 다른 유닛을 포함하여 모든 형태로 배치될 수 있다. 한 사이트의 하나의 컴퓨터 또는 여러 컴퓨터에서 실행되거나 복수의 사이트에 분산되고 통신 네트워크(104)에 의해 상호 연결되도록 컴퓨터 프로그램이 배치될 수 있다.
일 실시예에서, 동작은 입력 데이터를 조작하고 출력을 생성함으로써 기능을 수행하기 위해 컴퓨터 프로그램을 실행하는 하나 이상의 프로그램 가능 프로세서에 의해 수행될 수 있다. 방법 동작은 또한 예를 들어 필드 프로그래머블 게이트 어레이(FPGA) 또는 주문형 집적 회로(ASIC)와 같은 특수 목적의 로직 회로에 의해 수행될 수 있으며, 일 실시예의 장치는 이들로서 구현될 구현될 수 있다.
컴퓨팅 시스템에는 클라이언트와 서버가 포함될 수 있다. 클라이언트와 서버는 일반적으로 서로 멀리 떨어져 있으며 대체로 통신 네트워크(104)를 통해 상호 작용한다. 클라이언트와 서버의 관계는 각각의 컴퓨터에서 실행되고 서로 클라이언트-서버 관계를 갖는 컴퓨터 프로그램에 의해 발생된다. 프로그램 가능 컴퓨팅 시스템을 이용하는 실시예에서, 하드웨어 및 소프트웨어 아키텍처 모두가 고려될 수 있다는 점을 이해할 것이다. 특히, 영구적으로 구성된 하드웨어(예, ASIC), 일시적으로 구성된 하드웨어(예, 소프트웨어 및 프로그램가능한 프로세서의 조합), 또는 영구적 및 일시적으로 구성된 하드웨어의 조합 내에 소정의 기능을 구현할지 여부에 대한 선택은 설계적 선택사항일 수 있다는 점을 이해할 것이다. 이하에서 다양한 실시예에서 사용될 수 있는 하드웨어(예, 머신) 및 소프트웨어 아키텍처가 설명된다.
도 18은 컴퓨터 시스템(1800)의 예시적인 형태의 머신의 블록도로서, 컴퓨터 시스템에서 명령어(1824)는 머신으로 하여금 본 명세서에 논의된 방법론 중 하나 이상의 임의의 방법을 수행하게 할 수 있다. 다른 실시예에서, 머신은 독립형 디바이스로서 동작하거나 다른 머신에 연결(예를 들어, 네트워크화)될 수 있다. 네트워크화된 배치에서, 머신은 서버-클라이언트 네트워크 환경에서 서버 또는 클라이언트 머신(110)의 용량 내에서 동작할 수 있거나 피어 투 피어(또는 분산형) 네트워크 환경에서 피어 머신으로서 동작할 수 있다. 이러한 머신은 개인용 컴퓨터(PC), 태블릿 PC, 셋톱 박스(STB), PDA(Personal Digital Assistant), 휴대 전화, 웹 어플라이언스, 네트워크 라우터, 스위치 또는 브리지, 또는 그 머신에 의해 취해질 액션을 지정하는 명령어(1824)(순차적 또는 기타)를 실행할 수 있는 임의의 머신일 수 있다. 또한, 단지 하나의 머신이 도시되어 있지만, "머신"라는 용어는 본 명세서에 논의된 하나 이상의 방법론을 수행하기 위한 명령어(1824)의 세트(또는 복수의 세트)를 개별적으로 또는 공동으로 실행하는 임의의 머신 집합체를 포함하도록 선택된다.
예시적인 컴퓨터 시스템(1800)은 버스(1808)를 통해 서로 통신하는 프로세서(1802)(예컨대, 중앙 처리 유닛(CPU), 그래픽 처리 디바이스(GPU) 또는 둘 모두), 메인 메모리(1804) 및 정적 메모리 (1806)를 포함한다. 컴퓨터 시스템(1800)은 비디오 디스플레이 유닛(1810)(예를 들어, 액정 디스플레이(LCD) 또는 음극선 관(CRT))을 더 포함할 수 있다. 컴퓨터 시스템(1800)은 또한 영숫자 입력 디바이스(1812)(예를 들어, 키보드 또는 터치 감지형 디스플레이 스크린), 사용자 인터페이스(UI) 내비게이션(또는 커서 컨트롤) 디바이스(1814)(예를 들어, 마우스), 디스크 드라이브 유닛(1816), 신호 생성 디바이스(1818)(예를 들어, 스피커) 및 네트워크 인터페이스 디바이스(1820)를 포함한다.
디스크 드라이브 유닛(1816)은 본 명세서에 설명된 임의의 하나 이상의 방법 또는 기능에 의해 구현되거나 이용되는 데이터 구조 및 명령어(1824)의 하나 이상의 세트(예를 들어, 소프트웨어)가 저장되는 컴퓨터 판독가능 매체(1822)를 포함한다. 명령어(1824)는 또한 컴퓨터 시스템(1800), 메인 메모리(1804) 및 프로세서(1802)에 의한 실행 중에 메인 메모리(1804) 내에서 및/또는 프로세서(1802) 내에 완전히 또는 적어도 부분적으로 상주할 수 있으며, 또한 머신 판독가능 매체(1822)를 구성할 수 있다.
일 실시예에서, 컴퓨터 판독가능 매체(1822)가 단일 매체인 것으로 도시되어 있지만, "컴퓨터 판독가능 매체"라는 용어는 단일 매체 또는 다중 매체(예를 들어, 중앙 집중식 또는 분산형 데이터베이스 및/또는 관련 캐시 및 서버)를 포함할 수 있다. "컴퓨터 판독가능 매체"라는 용어는 또한 머신에 의한 실행을 위한 명령어(1824)를 저장, 인코딩 또는 운반할 수 있고 머신으로 하여금 본 발명의 대상의 방법론을 수행하게 하거나, 그러한 명령어(1824)에 의해 이용되거나 그러한 명령어와 연관될 수 있는 임의의 비 일시적인 유형의 매체를 포함하도록 선택될 것이다. 따라서 "컴퓨터 판독가능 매체"라는 용어는 고체 상태 메모리 및 광학 및 자기 매체를 포함하지만 이에 한정되지는 않다. 컴퓨터 판독가능 매체(1822)의 특정 예는 비 휘발성 메모리를 포함하며, 예를 들어, 소거가능한 프로그램 가능 판독 전용 메모리(EPROM), 전기적으로 소거가능한 프로그램 가능 판독 전용 메모리(EEPROM) 및 플래시 메모리 디바이스 등의 예시적인 반도체 메모리 디바이스와, 내부 하드 디스크 및 이동식 디스크와 같은 자기 디스크와, 자기 광 디스크와, CD-ROM 및 DVD-ROM 디스크를 포함한다.
명령어(1824)는 또한 전송 매체를 사용하여 통신 네트워크(1826)를 통해 전송되거나 수신될 수 있다. 명령어(1824)는 네트워크 인터페이스 디바이스(1820) 및 다수의 공지된 전송 프로토콜(예를 들어, 하이퍼텍스트 전송 프로토콜(HTTP)) 중 임의의 하나를 사용하여 전송될 수 있다. 통신 네트워크(1826)의 예는 근거리 통신망(LAN), WAN, 인터넷, 이동 전화 네트워크, POTS(plain old telephone) 네트워크 및 무선 데이터 네트워크(예, WiFi 및 WiMax 네트워크)를 포함한다. "전송 매체"라는 용어는 머신에 의한 실행을 위한 명령어(예, 명령어(1824))를 저장, 인코딩 또는 운반할 수 있는 임의의 무형 매체를 포함하도록 선택될 것이다.
본 발명의 대상이 특정 실시예를 참조하여 설명되었지만, 본 발명의 대상의 보다 넓은 사상 및 범주를 벗어나지 않는 범위에서 다양한 변형 및 변경이 이러한 실시예에 대해 행해질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미라기보다는 예시적인 것으로 간주되어야 한다. 본 명세서의 일부를 형성하는 첨부된 도면은, 발명의 대상이 실시될 수 있는 특정 실시예를 설명하기 위한 것이며 제한하려는 것이 아니다. 도시된 실시예는 당업자가 본 명세서에 개시된 교시를 실시할 수 있도록 충분히 상세하게 설명된다. 다른 실시예가 이용될 수 있고 그로부터 도출될 수 있으며, 본 개시내용의 범주를 벗어나지 않는 한 구조적 및 논리적 대체 및 변경이 이루어질 수 있다. 그러므로, 본 상세한 설명은 제한적인 의미가 아니며, 다양한 실시예의 범위는 첨부된 청구 범위와 그러한 청구 범위가 부여되는 등가물의 전체 범위에 의해서만 정의된다.
본 발명의 대상에 대한 실시예는, 실제로 하나 이상의 실시예에 개시되는 경우에, 본 출원의 범위를 임의의 단일 발명 또는 발명적 개념으로 자발적으로 제한하려는 것이 아니며, 편의상 "발명"이라는 용어로 개별적으로 및/또는 집합적으로 언급될 수 있다. 따라서, 특정 실시예가 본 명세서에 도시되고 설명되었지만, 동일한 목적을 달성하도록 계산된 임의의 구성이 도시된 특정 실시예를 대체할 수 있음을 이해해야 한다. 본 개시 내용은 다양한 실시예의 임의의 및 모든 개조 또는 변형을 포함하기 위한 것이다. 전술한 실시예의 조합 및 본 명세서에 구체적으로 기술되지 않은 다른 실시예는 전술한 설명을 검토하면 당업자에게 명백히 이해될 것이다.

Claims (20)

  1. 시스템으로서,
    토픽에 링크된 이벤트 메시지를 수신하는 데 이용가능한 소비자 디바이스(consumer devices)를 식별하는 제 1 데이터를 수신하도록 구성된 식별 모듈 - 상기 식별 모듈은 상기 토픽에 링크된 이벤트 메시지를 제공하는 데 이용가능한 생산자 디바이스(a producer device)를 식별하는 제 2 데이터를 수신하도록 더 구성됨 - 과,
    상기 토픽에 대해 계산되는 복수의 값을 상기 토픽에 링크된 각각의 소비자 디바이스에 링크하도록 구성된 프로비저닝 모듈(a provisioning module)과,
    하나 이상의 프로세서를 포함하며, 상기 토픽에 링크된 제 1 데이터 메시지를 상기 생산자 디바이스에서 액세스하도록 구성된 스케쥴러 모듈 - 상기 제 1 데이터 메시지는 키 값을 포함하고, 상기 스케쥴러 모듈은 상기 각각의 소비자 디바이스의 복수의 값과 상기 키 값의 비교에 기초하여 상기 제 1 데이터 메시지를 상기 소비자 디바이스 중 선택된 소비자 디바이스에게 제공하도록 더 구성됨 -
    을 포함하는 시스템.
  2. 제 1 항에 있어서,
    상기 프로비저닝 모듈은 일관된 해싱 프로세스(a consistent hashing process)를 사용하여 상기 복수의 값을 생성하도록 구성되고,
    상기 스케줄러 모듈은 해시 함수를 사용하여 상기 키 값을 평가하여 자원 값을 생성하고 상기 복수의 값 중 자원 키에 가장 가까운 값에 링크된 소비자 디바이스를 선택함으로써 상기 소비자 디바이스 중 상기 선택된 소비자 디바이스를 선택하도록 구성되는
    시스템.
  3. 제 1 항에 있어서,
    상기 제 1 및 제 2 데이터는 하드웨어-구현된 주키퍼 트랜스포트 컴포넌트(a hardware-implemented Zookeeper transport component)에 의해 통신되고,
    상기 제 1 데이터 메시지는 전송 제어 프로토콜(TCP) 접속을 사용하여 하드웨어-구현된 네티 트랜스포트(Netty transport)에 의해 상기 소비자 디바이스 중 상기 선택된 소비자 디바이스에 제공되는
    시스템.
  4. 제 1 항에 있어서,
    상기 제 1 데이터는 하나 이상의 요청 메시지를 포함하고,
    각각의 요청 메시지는 소비자 디바이스 식별자, 해당 소비자 디바이스의 인터넷 프로토콜(IP) 어드레스 및 포트 바인딩(port binding), 및 상기 토픽의 토픽 식별자를 포함하는
    시스템.
  5. 제 4 항에 있어서,
    상기 스케줄러 모듈은 상기 토픽 식별자에 기초하여 QOS(Quality-of-Service) 특성을 결정하도록 구성되는
    시스템.
  6. 제 4 항에 있어서,
    상기 프로비저닝 모듈은 각각의 요청 메시지를 수신하는 것에 응답하여 대응하는 소비자 디바이스 식별자에 기초하여 상기 복수의 값을 생성하도록 구성되는
    시스템.
  7. 제 6 항에 있어서,
    상기 각각의 소비자 디바이스에 대한 값은 상기 생산자 디바이스와 독립적인
    시스템.
  8. 제 1 항에 있어서,
    상기 스케줄러 모듈은 상기 소비자 디바이스의 이용가능성의 변화를 모니터링하도록 구성되고,
    소비자 디바이스가 이용가능하지 않다는 결정에 기초하여, 상기 이용가능하지 않은 소비자 디바이스에 링크된 상기 복수의 값이 상기 스케줄러 모듈에서 제거되어 상기 이벤트 메시지가 나머지 이용가능한 소비자 디바이스로 재분배되는
    시스템.
  9. 제 1 항에 있어서,
    상기 소비자 디바이스 중 상기 선택된 소비자 디바이스로의 전송을 위해 하나 이상의 다른 이벤트 메시지와 함께 상기 제 1 데이터 메시지를 일괄처리(batch)하도록 구성된 배처 모듈을 더 포함하는
    시스템.
  10. 제 1 항에 있어서,
    상기 제 1 데이터에 기초하여 선택적으로 상기 제 1 데이터 메시지를 압축하도록 구성된 배처 모듈을 더 포함하는
    시스템.
  11. 제 1 항에 있어서,
    상기 복수의 값에 링크된 각각의 소비자 디바이스는 둘 이상의 데이터 센터에 상주하는
    시스템.
  12. 방법으로서,
    토픽에 링크된 이벤트 메시지를 수신하는 데 이용가능한 소비자 디바이스를 식별하는 제 1 데이터를 수신하는 단계와,
    상기 토픽에 링크된 이벤트 메시지를 제공하기 위해 이용가능한 생산자 디바이스를 식별하는 제 2 데이터를 수신하는 단계와,
    하나 이상의 프로세서에 의해, 상기 토픽에 링크된 각각의 소비자 디바이스에 복수의 값을 링크시키는 단계 - 상기 복수의 값은 상기 토픽에 대해 계산됨 - 와,
    상기 토픽에 링크된 제 1 데이터 메시지를 상기 생산자 디바이스에서 액세스하는 단계 - 상기 제 1 데이터 메시지는 키 값을 포함함 - 와,
    상기 키 값과 상기 각각의 소비자 디바이스의 상기 복수의 값의 비교에 기초하여 상기 소비자 디바이스 중 선택된 소비자 디바이스에 상기 제 1 데이터 메시지를 제공하는 단계
    를 포함하는 방법.
  13. 제 12 항에 있어서,
    일관된 해싱 프로세스를 사용하여 상기 복수의 값을 생성하는 단계와,
    해시 함수를 사용하여 상기 키 값을 평가하여 자원 값을 생성하고 상기 복수의 값 중 자원 키에 가장 가까운 값에 링크된 소비자 디바이스를 선택함으로써, 상기 소비자 디바이스 중 상기 선택된 소비자 디바이스를 선택하는 단계
    를 더 포함하는 방법.
  14. 제 12 항에 있어서,
    상기 제 1 및 제 2 데이터는 하드웨어-구현된 주키퍼 트랜스포트 컴포넌트에 의해 통신되고,
    상기 제 1 데이터 메시지의 제공은 전송 제어 프로토콜(TCP) 접속을 사용하여 하드웨어-구현된 네티 트랜스포트에 의해 수행되는
    방법.
  15. 제 12 항에 있어서,
    상기 제 1 데이터는 하나 이상의 요청 메시지를 포함하고,
    각각의 요청 메시지는 소비자 디바이스 식별자, 인터넷 프로토콜(IP) 어드레스 및 포트 바인딩, 및 토픽 식별자를 포함하는
    방법.
  16. 제 15 항에 있어서,
    상기 토픽 식별자에 기초하여 QOS(Quality of Service) 특성을 결정하는 단계를 더 포함하는
    방법.
  17. 제 15 항에 있어서,
    각각의 요청 메시지를 수신하는 것에 응답하여, 대응하는 소비자 디바이스 식별자에 기초하여 상기 복수의 값을 생성하는 단계를 더 포함하는
    방법.
  18. 디바이스에 의해 실행될 때, 상기 디바이스로 하여금 동작을 수행하게 하도록 구현된 명령어를 저장하는 디바이스 판독가능 저장 매체로서,
    상기 동작은
    토픽에 링크된 이벤트 메시지를 수신하는 데 이용가능한 소비자 디바이스를 식별하는 제 1 데이터를 수신하는 것과,
    상기 토픽에 링크된 이벤트 메시지를 제공하는 데 이용가능한 생산자 디바이스를 식별하는 제 2 데이터를 수신하는 것과,
    상기 토픽에 링크된 각각의 소비자 디바이스에 상기 토픽에 대해 계산된 상기 복수의 값을 링크시키는 것과,
    상기 생산자 디바이스로부터 상기 토픽에 링크된 제 1 데이터 메시지를 액세스하는 것 - 상기 제 1 데이터 메시지는 키 값을 포함함 - 과,
    상기 키 값과 상기 각각의 소비자 디바이스의 상기 복수의 값의 비교에 기초하여 상기 소비자 디바이스 중 선택된 소비자 디바이스에게 상기 제 1 데이터 메시지를 제공하는 것
    을 포함하는 디바이스 판독가능 저장 매체.
  19. 제 18 항에 있어서,
    상기 제 1 데이터는 하나 이상의 요청 메시지를 포함하고,
    각각의 요청 메시지는 소비자 디바이스 식별자, 인터넷 프로토콜(IP) 어드레스 및 포트 바인딩, 및 토픽 식별자를 포함하는
    디바이스 판독가능 저장 매체.
  20. 제 19 항에 있어서,
    상기 디바이스에 의해 실행될 때, 상기 디바이스로 하여금 상기 토픽 식별자에 기초하여 QOS(Quality of Service) 특성을 결정하는 것을 포함하는 동작을 수행하게 하도록 구현된 명령어를 더 포함하는
    디바이스 판독가능 저장 매체.
KR1020177023441A 2015-01-23 2015-01-23 대용량 네트워크 데이터의 처리 기법 KR102082355B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2015/071442 WO2016115734A1 (en) 2015-01-23 2015-01-23 Processing high volume network data

Publications (2)

Publication Number Publication Date
KR20170106648A true KR20170106648A (ko) 2017-09-21
KR102082355B1 KR102082355B1 (ko) 2020-02-27

Family

ID=56416314

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177023441A KR102082355B1 (ko) 2015-01-23 2015-01-23 대용량 네트워크 데이터의 처리 기법

Country Status (5)

Country Link
US (1) US11916727B2 (ko)
EP (1) EP3248340A4 (ko)
KR (1) KR102082355B1 (ko)
CN (2) CN113037823B (ko)
WO (1) WO2016115734A1 (ko)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016115735A1 (en) 2015-01-23 2016-07-28 Murthy Sharad R Processing high volume network data
EP3248340A4 (en) 2015-01-23 2018-01-03 eBay Inc. Processing high volume network data
US10212120B2 (en) 2016-04-21 2019-02-19 Confluent, Inc. Distributed message queue stream verification
US11726842B2 (en) * 2016-08-02 2023-08-15 Salesforce, Inc. Techniques and architectures for non-blocking parallel batching
US10514952B2 (en) 2016-09-15 2019-12-24 Oracle International Corporation Processing timestamps and heartbeat events for automatic time progression
US11475012B2 (en) * 2016-09-26 2022-10-18 Singlestore, Inc. Real-time data retrieval
CN106790347B (zh) * 2016-11-11 2020-06-09 南通大学 一种基于netty的大规模并发数据转发方法
CN108306941A (zh) * 2018-01-05 2018-07-20 上海你我贷互联网金融信息服务有限公司 一种分布式消息系统
CN108234670B (zh) * 2018-01-31 2021-01-15 北京中安智达科技有限公司 一种基于zookeeper和netty的分布式远程调用方法
US20190303874A1 (en) * 2018-03-30 2019-10-03 Microsoft Technology Licensing, Llc Determining metrics for electronic communications to improve engagement
CN110399545B (zh) * 2018-04-20 2023-06-02 伊姆西Ip控股有限责任公司 管理文档索引的方法和设备
CN110636095A (zh) * 2018-06-25 2019-12-31 北京京东尚科信息技术有限公司 设备管控系统及其工作方法
CN109254853B (zh) * 2018-07-24 2020-10-27 福建星网视易信息系统有限公司 数据共享方法、数据共享系统及计算机可读存储介质
CN110769018A (zh) * 2018-07-27 2020-02-07 北京国双科技有限公司 一种消息推送方法及装置
CN109413040B (zh) * 2018-09-21 2020-12-18 深圳前海微众银行股份有限公司 消息鉴权方法、设备、系统及计算机可读存储介质
CN110032459B (zh) * 2019-04-22 2022-05-03 深圳乐信软件技术有限公司 消息队列配置方法、装置、计算机设备及存储介质
CN110233870A (zh) * 2019-04-26 2019-09-13 福州慧校通教育信息技术有限公司 一种班牌系统客户端长连接处理方法及装置
US11580165B2 (en) * 2019-08-06 2023-02-14 Twitter, Inc. Event producer system of a messaging platform for delivering real-time messages
CN110955536A (zh) * 2019-11-25 2020-04-03 中国科学院自动化研究所 用于连接ros的通讯系统
US11768835B2 (en) * 2020-01-31 2023-09-26 Salesforce, Inc. Merging multiple unsynchronized streams of related events and multi-tenant support
CN113204436A (zh) * 2020-02-03 2021-08-03 马上消费金融股份有限公司 一种消息处理方法、装置、设备及计算机可读存储介质
CN111555957B (zh) * 2020-03-26 2022-08-19 孩子王儿童用品股份有限公司 一种基于Kafka的同步消息服务系统及实现方法
CN111460822B (zh) * 2020-03-27 2024-02-27 北京百度网讯科技有限公司 主题扩展的方法、装置、设备和存储介质
US20210326162A1 (en) * 2020-04-15 2021-10-21 Open Invention Network Llc Lifecycle management of a vnfc included in a multi-vnfc vdu
CN112667476B (zh) * 2020-12-30 2023-02-14 平安普惠企业管理有限公司 基于任务的消息过滤方法、装置、设备及存储介质
CN112699130A (zh) * 2021-01-15 2021-04-23 广东电网有限责任公司广州供电局 电力数据处理方法、装置、计算机设备
CN112910971B (zh) * 2021-01-21 2023-04-07 中国工商银行股份有限公司 多站点数据同步方法、装置及系统
KR102331734B1 (ko) 2021-03-19 2021-12-01 쿠팡 주식회사 분산 시스템의 데이터 처리 방법 및 이를 위한 전자 장치
CN116112570A (zh) * 2021-11-10 2023-05-12 青岛海尔科技有限公司 消息处理方法、装置、电子设备与存储介质
CN114095537B (zh) * 2021-11-18 2023-07-14 重庆邮电大学 一种物联网应用中基于Netty的海量数据接入方法及系统
CN114780564A (zh) * 2022-04-21 2022-07-22 京东科技控股股份有限公司 数据处理方法、数据处理装置、电子设备和存储介质
CN115567477B (zh) * 2022-09-19 2024-05-31 上海星起源新能源科技有限公司 一种处理消息堆积的方法、设备、及存储介质
CN116800741A (zh) * 2022-11-14 2023-09-22 中移(苏州)软件技术有限公司 一种消息处理方法、装置、设备及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100125545A1 (en) * 2008-11-20 2010-05-20 Sap Ag Federating business event data within an enterprise network

Family Cites Families (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5852822A (en) 1996-12-09 1998-12-22 Oracle Corporation Index-only tables with nested group keys
US6061690A (en) 1997-10-31 2000-05-09 Oracle Corporation Apparatus and method for storage of object collections in a database system
US6662206B1 (en) 1999-05-28 2003-12-09 International Business Machines Corporation Method and apparatus for summarizing missing events using event stream interpretation
US6411963B1 (en) 1999-07-09 2002-06-25 Junot Systems, Inc. External system interface method and system
US6996536B1 (en) 2000-09-01 2006-02-07 International Business Machines Corporation System and method for visually analyzing clickstream data with a parallel coordinate system
US7581170B2 (en) 2001-05-31 2009-08-25 Lixto Software Gmbh Visual and interactive wrapper generation, automated information extraction from Web pages, and translation into XML
US8037153B2 (en) 2001-12-21 2011-10-11 International Business Machines Corporation Dynamic partitioning of messaging system topics
US6941521B2 (en) 2002-03-29 2005-09-06 Intel Corporation Method for dynamically generating a user interface from XML-based documents
US20030208537A1 (en) * 2002-05-01 2003-11-06 Lane James K. Real-time data collection and distribution among office productivity software applications
US7127467B2 (en) 2002-05-10 2006-10-24 Oracle International Corporation Managing expressions in a database system
US7177859B2 (en) 2002-06-26 2007-02-13 Microsoft Corporation Programming model for subscription services
US9124447B2 (en) * 2002-07-26 2015-09-01 International Business Machines Corporation Interactive client computer communication
EP1418743A1 (en) * 2002-11-07 2004-05-12 CMG IPR Telecommunications B.V. System for billing rating and selection of accounts
US7266121B2 (en) 2002-12-27 2007-09-04 Nokia Corporation Flow labels
US8200775B2 (en) 2005-02-01 2012-06-12 Newsilike Media Group, Inc Enhanced syndication
US7509653B2 (en) 2004-01-22 2009-03-24 International Business Machines Corporation Efficient and scalable event partitioning in business integration applications using multiple delivery queues
US8346909B2 (en) * 2004-01-22 2013-01-01 International Business Machines Corporation Method for supporting transaction and parallel application workloads across multiple domains based on service level agreements
US8095598B2 (en) * 2004-04-30 2012-01-10 Sap Ag Methods and apparatus for subscribing/publishing messages in an enterprising computing environment
US9154511B1 (en) 2004-07-13 2015-10-06 Dell Software Inc. Time zero detection of infectious messages
US8645578B2 (en) * 2004-12-22 2014-02-04 Intel Corporaton Routing of messages
CN101507270A (zh) 2005-12-22 2009-08-12 美国唯美安视国际有限公司 多源桥式网络发布系统和方法
US7493406B2 (en) * 2006-06-13 2009-02-17 International Business Machines Corporation Maximal flow scheduling for a stream processing system
US10110687B2 (en) 2006-10-06 2018-10-23 International Business Machines Corporation Session based web usage reporter
US7890576B2 (en) 2006-11-13 2011-02-15 Microsoft Corporation Selective communication of targeted information
US7752552B2 (en) 2006-11-30 2010-07-06 Red Hat, Inc. Method and system for embedding an aggregated event stream into a third party web page
US8145780B2 (en) * 2007-10-19 2012-03-27 Voxer Ip Llc Telecommunication and multimedia management method and apparatus
US7974205B1 (en) 2008-07-15 2011-07-05 Sprint Communications Company L.P. Method and system for the distribution of internet protocol traffic in a communication system
CA3184014A1 (en) 2008-12-15 2010-07-08 Exegy Incorporated Method and apparatus for high-speed processing of financial market depth data
US8301879B2 (en) 2009-01-26 2012-10-30 Microsoft Corporation Conversation rights management
US8769664B1 (en) 2009-01-30 2014-07-01 Palo Alto Networks, Inc. Security processing in active security devices
US8914878B2 (en) 2009-04-29 2014-12-16 Juniper Networks, Inc. Detecting malicious network software agents
US8463934B2 (en) 2009-11-05 2013-06-11 Rj Intellectual Properties, Llc Unified system area network and switch
US8275816B1 (en) 2009-11-06 2012-09-25 Adobe Systems Incorporated Indexing messaging events for seeking through data streams
CA2736282A1 (en) 2010-04-02 2011-10-02 Thinkeco Power Inc. Method and system for developing and identifying leaders for charitable and social justice campaigns through the use of social networks
CN102222295A (zh) 2010-04-13 2011-10-19 维鹏信息技术(上海)有限公司 一种在自助终端上自助购物的控制方法及控制装置
US8380799B2 (en) 2010-04-15 2013-02-19 Ebay Inc. Topic-based messaging using consumer address and pool
US8935214B2 (en) 2010-08-16 2015-01-13 Mimosa Systems, Inc. Storing electronic content with time-varying properties
US8751639B2 (en) 2011-04-27 2014-06-10 Rackspace Us, Inc. Event queuing and distribution system
CN103067349A (zh) 2011-09-12 2013-04-24 微软公司 将事件分发给大量设备
US20130067024A1 (en) 2011-09-12 2013-03-14 Microsoft Corporation Distributing multi-source push notifications to multiple targets
CN103051465B (zh) * 2011-09-12 2018-05-08 微软技术许可有限责任公司 对广播系统徽章计数器的计数和重置
US9094288B1 (en) 2011-10-26 2015-07-28 Narus, Inc. Automated discovery, attribution, analysis, and risk assessment of security threats
US20130173747A1 (en) * 2011-11-21 2013-07-04 Young Jin Kim System, method and apparatus providing address invisibility to content provider/subscriber
US9166892B1 (en) * 2012-01-20 2015-10-20 Google Inc. Systems and methods for event stream management
EP2634956B1 (en) * 2012-02-29 2016-11-02 BlackBerry Limited Communicating an identity to a server
US20130254132A1 (en) 2012-03-26 2013-09-26 Ebay Inc. Unified Service for Providing Shipping Services
US20150066765A1 (en) 2012-03-30 2015-03-05 Ip Payovation Pty Ltd Payment apparatus and method
CN103365907B (zh) 2012-04-06 2017-06-30 腾讯科技(深圳)有限公司 显示支付页面的方法、系统及服务器
US9130969B2 (en) * 2012-08-23 2015-09-08 Seagate Technology Llc Data storage I/O communication method and apparatus
EP2909805A4 (en) 2012-10-22 2016-06-08 Jean-Louis Fiorucci APPARATUS AND METHODS FOR PROVIDING URBAN SERVICES
US9883389B2 (en) 2012-12-14 2018-01-30 Facebook, Inc. Techniques for communicating notifications to subscribers
US10224025B2 (en) 2012-12-14 2019-03-05 Robert Bosch Gmbh System and method for event summarization using observer social media messages
US20140172506A1 (en) 2012-12-17 2014-06-19 Microsoft Corporation Customer segmentation
US10192238B2 (en) * 2012-12-21 2019-01-29 Walmart Apollo, Llc Real-time bidding and advertising content generation
US9992269B1 (en) 2013-02-25 2018-06-05 EMC IP Holding Company LLC Distributed complex event processing
CA2906816C (en) 2013-03-15 2020-06-30 Amazon Technologies, Inc. Scalable analysis platform for semi-structured data
CN104144098B (zh) * 2013-05-07 2018-04-03 腾讯科技(深圳)有限公司 消息推送方法、系统及推送服务器设备
US9461967B2 (en) 2013-07-18 2016-10-04 Palo Alto Networks, Inc. Packet classification for network routing
US9998556B2 (en) * 2013-09-11 2018-06-12 Oath Inc. Unified end user notification platform
CN103501486B (zh) 2013-09-29 2016-09-28 华为软件技术有限公司 一种消息推送方法及推送服务器
CN103581740B (zh) * 2013-10-25 2018-09-25 南京中兴软件有限责任公司 一种分布式的iptv多屏网关和iptv多屏互动方法
IN2014CH00438A (ko) 2014-01-31 2015-08-07 Mentor Graphics Corp
US9660943B2 (en) 2014-04-25 2017-05-23 International Business Machines Corporation Messaging based signaling for communications sessions
US9800592B2 (en) 2014-08-04 2017-10-24 Microsoft Technology Licensing, Llc Data center architecture that supports attack detection and mitigation
US9680919B2 (en) 2014-08-13 2017-06-13 Software Ag Usa, Inc. Intelligent messaging grid for big data ingestion and/or associated methods
US10120907B2 (en) 2014-09-24 2018-11-06 Oracle International Corporation Scaling event processing using distributed flows and map-reduce operations
US10469396B2 (en) * 2014-10-10 2019-11-05 Pegasystems, Inc. Event processing with enhanced throughput
US10057082B2 (en) 2014-12-22 2018-08-21 Ebay Inc. Systems and methods for implementing event-flow programs
US20160188376A1 (en) * 2014-12-26 2016-06-30 Universidad De Santiago De Chile Push/Pull Parallelization for Elasticity and Load Balance in Distributed Stream Processing Engines
US10089307B2 (en) * 2014-12-31 2018-10-02 International Business Machines Corporation Scalable distributed data store
WO2016115735A1 (en) 2015-01-23 2016-07-28 Murthy Sharad R Processing high volume network data
EP3248340A4 (en) 2015-01-23 2018-01-03 eBay Inc. Processing high volume network data
US20160219089A1 (en) 2015-01-23 2016-07-28 Ebay Inc. Systems and methods for messaging and processing high volume data over networks

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100125545A1 (en) * 2008-11-20 2010-05-20 Sap Ag Federating business event data within an enterprise network

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
‘Consistent hashing - Wikipedia’, 2014.12.08.* *

Also Published As

Publication number Publication date
CN113037823B (zh) 2024-03-22
CN113037823A (zh) 2021-06-25
EP3248340A1 (en) 2017-11-29
CN107431664B (zh) 2021-03-12
EP3248340A4 (en) 2018-01-03
US20180159731A1 (en) 2018-06-07
KR102082355B1 (ko) 2020-02-27
US11916727B2 (en) 2024-02-27
WO2016115734A1 (en) 2016-07-28
CN107431664A (zh) 2017-12-01

Similar Documents

Publication Publication Date Title
US11818049B2 (en) Processing high volume network data
KR102082355B1 (ko) 대용량 네트워크 데이터의 처리 기법
US20160219089A1 (en) Systems and methods for messaging and processing high volume data over networks
JP6126099B2 (ja) タイムリーイベントデータ分配用マーケットプレイス
US10178067B1 (en) Data center portal applications monitoring
US9208476B2 (en) Counting and resetting broadcast system badge counters
US20130067024A1 (en) Distributing multi-source push notifications to multiple targets
US8595322B2 (en) Target subscription for a notification distribution system
WO2017092582A1 (zh) 一种数据处理方法和装置
US20190005534A1 (en) Providing media assets to subscribers of a messaging system
CN110213203A (zh) 网络调度方法、装置及计算机存储介质
WO2018156980A1 (en) Managing intelligent microservices in a data streaming ecosystem
JP6067714B2 (ja) イベントデータを取得するスケールアウトシステム
JP2014531072A (ja) 多数のデバイスへのイベントの配信
CN103051465B (zh) 对广播系统徽章计数器的计数和重置
Piccinini Dynamic load balancing based on latency prediction
WO2024030980A1 (en) Systems and methods for networked microservices flow control

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)