KR20170048373A - 이벤트 스트림 변환 기법 - Google Patents

이벤트 스트림 변환 기법 Download PDF

Info

Publication number
KR20170048373A
KR20170048373A KR1020177005572A KR20177005572A KR20170048373A KR 20170048373 A KR20170048373 A KR 20170048373A KR 1020177005572 A KR1020177005572 A KR 1020177005572A KR 20177005572 A KR20177005572 A KR 20177005572A KR 20170048373 A KR20170048373 A KR 20170048373A
Authority
KR
South Korea
Prior art keywords
event
computer
event stream
stream
module
Prior art date
Application number
KR1020177005572A
Other languages
English (en)
Other versions
KR102454201B1 (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 KR20170048373A publication Critical patent/KR20170048373A/ko
Application granted granted Critical
Publication of KR102454201B1 publication Critical patent/KR102454201B1/ko

Links

Images

Classifications

    • G06F17/30563
    • 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/25Integrating or interfacing systems involving database management systems
    • G06F16/254Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses
    • 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
    • G06F16/2456Join operations
    • 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/24568Data stream processing; Continuous queries
    • G06F17/30498
    • G06F17/30516
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/12Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks

Abstract

하나 이상의 출력 이벤트 스트림들을 생성하도록 하나 이상의 입력 이벤트 스트림들에 대한 변환들을 작성하는 것과 관련된다. 따라서, 이러한 변환들은 최초의 입력 이벤트 스트림(들)에 대한 쿼리가 되는 것으로 간주될 수 있다. 이벤트 쿼리는 특정 실행 컨텍스트에서 이용가능한 입력 이벤트 스트림을 표현하는 이벤트 스트림 소스 표현들을 포함한다. 이벤트 쿼리는 또한 실행 컨텍스트에서 입력 이벤트 스트림들에 대해서 수행될 변환 세트를 식별하는 변환 모듈을 포함한다. 일단 쿼리가 적합하게 형성되면, 실행 모듈은 상기 변환들이 지정된 입력 이벤트 스트림(들)에 대해 실행되게 하여 출력 이벤트 스트림들이 생성되게 할 수 있다.

Description

이벤트 스트림 변환 기법{EVENT STREAM TRANSFORMATIONS}
이벤트는 하나 이상의 타임스탬프와 연관된 데이터 조각(piece)이다. 이벤트 스트림은 이벤트들의 스트림이다. 이벤트 소스는 이벤트들을 수신하고, 이들을 타임스탬프에 의해서 분류하고 배열된 이벤트 스트림을 제공할 수 있다. 이벤트 스트림들을 프로세싱하는 다양한 통상적인 메커니즘들이 존재한다. 각 메커니즘은 이벤트 스트림들에 대한 변환들의 표현 및 실행을 수반한다. 그러나, 이벤트들의 비동기적 성질 및 병렬 프로세싱으로 인해서, 스트리밍 도메인은 자연적으로 복잡하다. 따라서, 이벤트 스트림들에 대해서 쿼리를 하는 신규 사용자에 대한 학습 곡선은 통상적으로 매우 가파르다.
현재, 이벤트 프로세싱 시에 데이터 변환을 표현하는 2가지 주요 방식들, 즉 도메인 특정 언어(DSL) 및 범용 프로그래밍 언어(GPPL)가 존재한다. DSL는 통상적으로 시간 차원을 핸들링할 수 있는 추가 능력을 갖는 일부 형태의 SQL-유사 언어를 취한다. DSL은 높은 추상화로 쿼리를 기술하기 위한 선언적 방식을 제공한다. 또한, DSL는 학습 곡선을 저감시키는 것을 돕고 비개발자가 쿼리를 기록하도록 하기 위해서 SQL와 유사하다. DSL의 주요한 문제는 사용자 정의 확장 및 통상적으로 GPPL로 기록된, 애플리케이션과의 통합이 어렵다는 것이다. 쿼리를 GPPL로 직접 기록하는 것은 데이터를 사용하는 애플리케이션과 보다 원활한 통합을 가능하게 하지만, 작성자가 GPPL를 아는 것을 요구한다.
본 명세서에서 청구된 청구 대상은 임의의 단점을 해결하거나 상술한 바와 같은 환경들에서만 동작하는 실시예들로 한정되지 않는다. 이보다는, 이러한 배경 기술은 본 명세서에서 기술된 일부 실시예들이 실시될 수 있는 일 예시적인 기술 분야만을 예시하는데 제공된다.
본 명세서에서 기술된 적어도 일부 실시예들은 하나 이상의 출력 이벤트 스트림들을 생성하도록 하나 이상의 입력 이벤트 스트림들에 대한 변환들을 작성하는 것과 관련된다. 따라서, 이러한 변환들은 최초의 입력 이벤트 스트림(들)에 대한 쿼리가 되는 것으로 간주될 수 있다. 이벤트 쿼리는 특정 실행 컨텍스트에서 이용가능한 입력 이벤트 스트림을 표현하는 이벤트 스트림 소스 표현들을 포함한다. 이벤트 쿼리는 또한 실행 컨텍스트에서 입력 이벤트 스트림들에 대해서 수행될 변환 세트를 식별하는 변환 모듈을 포함한다. 일단 쿼리가 적합하게 형성되면, 실행 모듈은 상기 변환들이 지정된 입력 이벤트 스트림(들)에 대해 실행되게 하여 출력 이벤트 스트림들을 생성할 수 있다.
일부 실시예들에서, 입력 이벤트 스트림을 표현하는데 이용가능한 프로그래밍 추상화는 입력 이벤트 스트림과 상관없이 동일하다. 예를 들어, 동일한 프로그래밍 추상화가 동시간 이벤트 스트림 및 이력 이벤트 스트림을 지정하는데 사용될 수 있다. 프로그래밍 추상화는 동시간적인 이벤트 스트림이 동일한 이벤트 스트림의 이력 버전과 결합되게 할 수 있다.
본 발명의 내용 부분은 상세한 설명 부분에서 이하에서 더 기술되는 개념들 중 선택된 것을 간단한 형태로 소개하도록 제공된다. 본 발명의 내용 부분은 청구된 청구 대상의 필수 특징들 또는 핵심 특징들을 식별하고자 하는 것도 아니며 청구된 청구 대상의 범위를 정의할 시에 보조 역할을 하는 것도 아니다.
본 발명의 상술한 그리고 다른 이점들 및 특징들이 획득될 수 있는 방식을 기술하기 위해서, 본 발명의 보다 구체적인 설명이 특정 실시예들을 참조하여 이루어질 것이며, 이 특정 실시예들은 첨부 도면들에서 예시된다. 이러한 도면들은 본 발명의 오직 전형적인 실시예들을 도시하며 따라서 본 발명의 범위를 한정하는 것으로 해석되지 말아야 한다는 것을 이해하면서, 본 발명이 첨부 도면들을 사용하여 더 구체적이면서 세부적으로 기술 및 설명될 것이다.
도 1은 이벤트 프로세싱 프로그래밍 모델의 저작 환경 측면을 도시한, 이벤트 프로세싱 프로그래밍 모델을 예시한다.
도 2는 이벤트 프로세싱 프로그래밍 모델의 실행 환경 측면을 도시한, 이벤트 프로세싱 프로그래밍 모델을 예시한다.
도 3은 변환 컴포넌트가 실행 환경에서 동작되도록 준비되게 하는 방법의 흐름도를 예시한다.
도 4는 변환 프로세스를 예시하는 흐름 그래프를 예시한다.
도 5는 10분의 텀블링 윈도우에 걸친 평균이 고려되는 이벤트 스트림을 예시한다.
도 6은 하나는 동시간적인 이벤트 스트림이고 다른 하나는 이력 이벤트 스트림인 2개의 이벤트 스트림들의 상관과 연관된 이벤트 흐름을 예시한다.
도 7은 본 명세서에서 기술된 원리들이 동작될 수 있는 예시적인 컴퓨팅 시스템을 예시한다.
쿼리들이 하나 이상의 이벤트 스트림들에 대해서 표현 및 실행되어서 하나 이상의 결과적인 이벤트 스트림들을 생성하는, 포괄적이면서 사용하기 용이한 이벤트 프로세싱 프로그래밍 모델이 본 명세서에서 기술된다. 이벤트는 하나 이상의 타임스탬프와 연관된 데이터 조각이다. 본 명세서에서 기술된 적어도 일부 실시예들은 하나 이상의 출력 이벤트 스트림들을 생성하도록 하나 이상의 입력 이벤트 스트림들에 대한 변환들을 작성하는 것과 관련된다. 따라서, 이러한 변환들은 최초의 입력 이벤트 스트림(들)에 대한 쿼리가 되는 것으로 간주될 수 있다. 이벤트 쿼리는 특정 실행 컨텍스트에서 이용가능한 입력 이벤트 스트림을 표현하는 이벤트 스트림 소스 표현들을 포함한다. 이벤트 쿼리는 또한 실행 컨텍스트에서 입력 이벤트 스트림들에 대해서 수행될 변환 세트를 식별하는 변환 모듈을 포함한다. 일단 쿼리가 적합하게 형성되면, 실행 모듈은 상기 변환들이 지정된 입력 이벤트 스트림(들)에 대해 실행되게 하여 출력 이벤트 스트림들이 생성되게 할 수 있다.
일부 실시예들에서, 입력 이벤트 스트림을 표현하는데 이용가능한 프로그래밍 추상화는 입력 이벤트 스트림과 상관없이 동일하다. 예를 들어, 동일한 프로그래밍 추상화가 심지어 아마도 동일한 쿼리 내에서, 동시간적(예를 들어, 라이브) 이벤트 스트림 및 이력 이벤트 스트림을 지정하는데 사용될 수 있다. 자연 언어로 표현된 다음의 쿼리를 고려해보자: "1일 시간 프레임 내에서 평균 에너지 소모량이 1년 전 동일한 일자에 소모된 에너지보다 50퍼센트보다 많은 때에 경보를 개시하라". 통상적으로, 이러한 시나리오는 사용자가 복잡한 커스텀 로직을 기록함으로써 다루어진다. 프로그래밍 추상화는 동시간적인 이벤트 스트림이 동일한 이벤트 스트림의 이력 버전과 결합되게 할 수 있다. 이로써, (이벤트 스트림이 실행 컨텍스트에서 이용가능하면) 이벤트 스트림의 타입에 무관한 통합된 이벤트 쿼리 모델이 기술된다.
이벤트 스트림 쿼리 변환 세트를 프로그래밍한 경험은 실행 컨텍스트에 상관없이(예를 들어, 실행 컨텍스트가 로컬 컴퓨팅 시스템 상인지, 원격 서버 상인지, 또는 클라우드 내에서인지 상관없이) 실질적으로 동일할 수 있다. 실행 컨텍스트는 컨텍스트 식별을 사용하여, 실행 컨텍스트를 식별하는데 필요한 정보를 획득하고 쿼리 변환 세트가 지정된 실행 컨텍스트에서 실행되게 할 수 있다. 이벤트 쿼리 프로세싱가 수행되는 이러한 유연성은 연산이 입력 이벤트 스트림(들)이 생성되는 곳 및/또는 출력 이벤트 스트림(들)이 소비되는 곳에 보다 가깝게 발생하게 한다. 따라서, (실행 모듈이 해당 실행 컨텍스트에서 쿼리를 식별 및 전개하는데 충분한 정보를 갖는 한) 이벤트 프로세싱 프로그래밍 모델의 실시예들은 실행 컨텍스트에 무관하다.
본 명세서에서 기술된 이벤트 프로세싱 모델의 실시예들은 여전히 표현적이면서 확장성을 가지면서 사용자를 위한 점진적인 학습 곡선을 갖는다. 이벤트들의 비동기적 성질 및 병렬 프로세싱으로 인해서, 스트리밍 도메인은 자연적으로 복잡하다. 따라서, 이벤트 스트림들에 대해서 쿼리를 하는 신규 사용자에 대한 학습 곡선은 통상적으로 매우 가파르다. 사용의 용이성을 위해서, 이벤트 프로세싱 프로그래밍 모델은 사용자가 노출된 애플리케이션 프로그램 인터페이스(API)에서 개념/추상화의 수를 제한하며, 이러한 추상화의 시멘틱을 명확하게 정의한다. 동시에, 표현성(expressiveness)을 실현하기 위해서, 이러한 추상화는 구성가능하며 사용자로 하여금 프리미티브 빌트인(built-in) 이벤트 프로세싱 연산으로부터 상위 레벨 쿼리 로직을 구축하게 할 수 있다. 기술된 이벤트 프로세싱 프로그래밍 모델은 도메인 특정 언어(DSL) 및 범용 프로그래밍 언어(GPPL) 모두로 표현될 수 있는 추상화를 정의한다.
이벤트 프로세싱 프로그래밍 모델이 이벤트 스트림들에 대한 시간적 모델을 구현하는 것으로서 기술된다. 이하에서 기술되는 애플리케이션 프로그램 인터페이스(API)에서, 각 이벤트는 해당 이벤트가 생성된 때를 표현한 관련 단일 타임스탬프를 갖는다. 그러나, 본 명세서에서 기술된 보다 일반적인 원리들은 또한 시퀀스 모델, 인터벌/스냅샷 모델, 또는 임의의 다른 이벤트 프로세싱 시간 모델을 지원할 수도 있다. 본 명세서에서 기술된 원리들은 또한 다수의 이벤트 프로세싱 시간 모델(예를 들어, 시간적 모델, 인터벌/스냅샷 모델, 등) 간의 보다 명확하게 정의된 사용자 경험 분리와 함께 상기 다수의 이벤트 프로세싱 시간 모델과의 상호작용을 가능하게 하는 이벤트 프로세싱 프로그래밍 모델에 적용가능할 수도 있다.
이벤트 프로세싱 프로그래밍 모델은 또한 시간의 개념을 명시적으로 정의하며 가상 시간(즉, 애플리케이션 시간)으로 동작한다. 수많은 모니터링 및 원격측정 시나리오들은 벽 시계 시간(즉, 시스템 시간)과는 상이한 그들 자신의 시간표를 갖는 로그 기록들에 대한 분석을 수반한다. 본 실례는 자연적 언어 형태로 된 다음과 같은 쿼리의 실례이다: "1시간 내에 응답이 없는 모든 경우들을 통지하라". 이러한 쿼리는 시스템 시간 평가를 수반하지 않는다.
이벤트 프로세싱 프로그래밍 모델은 쿼리를 실행하는 기본 서비스에 의해서 이벤트 프로세싱 연산들이 자동적으로 병렬화될 수 있도록 이벤트 프로세싱 연산들을 정의함으로써 표현성을 제공한다. 이로써, 이벤트 프로세싱 프로그래밍 모델은 편리한 그룹핑 추상화를 제공함으로써 연산들을 탄력적으로 스케일-아웃(scale-out)할 수 있다.
먼저, 시간적 데이터 프로세싱 모델의 개념이 도입될 것이다. 다음의 시나리오를 고려하자. 데이터 센터 내에 상이한 머신들로부터 취해진 수행 카운터 값들의 세트가 존재한다고 가정하자. 이러한 시나리오에서, 시스템은 시간에 걸쳐서 수행 카운터 값들에서 이상(anomaly)을 발견한다. 수행 카운터 값의 시간은 해당 값이 판독되는 시간이지만, 대응하는 이벤트가 프로세싱되는 시간은 아니다. 따라서, 이벤트 프로세싱 프로그래밍 모델은 시간적 모델을 도입한다.
이러한 시간적 모델은 가상 시간에 기초하며, CEDR(Complex Event Detection and Response) 대수의 서브세트 상에 구축되며, 가상 시간에 기초한다. 시간적 모델 내의 연산자 모두는 이벤트들 각각 내의 가상 시간 타임스탬프을 참조한다. 일 실시예에서, 사용자를 위한 시멘틱을 단순화시키기 위해서, 시간적 모델 내의 이벤트들은 이벤트들 각각이 정확하게 하나의 타임스탬프를 가지며 시간 상의 일 시점에 대한 페이로드를 반송한다는 점에서, 시점 이벤트들이다. 시점 이벤트들의 실례는 계측기 판독, 이메일 도착, 사용자 웹 클릭, 주식시세 표시, 또는 로그 입력을 포함한다.
이러한 시간적 모델 내의 모든 연산자들은 결정론적이며 연산자들의 출력은 반복가능할 수 있다. 일 실례에서, 쿼리는 소스로 지칭되는 이벤트 스트림을 그의 입력으로서 수신하고, 변환들(예를 들어, 펄터링, 선택, 등)을 해당 이벤트 스트림 입력을 사용하여 수행하고(즉, 해당 입력 이벤트 스트림에 대한 쿼리를 수행하고), 싱크(sink)로 지칭되는 결과적인 데이터 스트림을 생성한다. 소스는 다양한 이벤트들을 다양한 위치들로부터 수신하고, 결과적인 이벤트 스트림을 제공한다. 일부 실시예들에서, 소스는 또한 이벤트들에 추가동작을 수행하여, 예를 들어, 시간에 의해서 이벤트들을 분류하여 이벤트 스트림을 생성한다.
도 1은 이벤트 프로세싱 프로그래밍 모델을 도시하되, 이벤트 프로세싱 프로그래밍 모델의 저작 환경(100) 측면을 도시한다. 작성 모듈(141)은 작성자로 하여금 이벤트 스트림 소스 표현(110), 이벤트 스트림 싱크 표현(120), 변환 모듈(130), 및 컨텍스트 식별 모듈(150)을 작성할 수 있게 한다.
작성 후에, 개시 명령(160)이 개시될 수 있으며, 이로써 자동적으로 변환 모듈(130)이 컨텍스트 식별 모듈(150)에서 식별된 실행 컨텍스트에서 실행되게 된다. 예를 들어, 도 2는 실행 환경(200)에서 실행되는 실행가능한 변환 컴포넌트(230)를 예시한다.
쿼리 변환 모듈(130)은 출력(또는 결과적인) 이벤트 스트림을 생성하도록 입력 이벤트 스트림에 대해서 수행될 특정 쿼리를 표현한다. 구체적으로, 쿼리 변환 모듈(130)은 하나 이상의 출력 이벤트 스트림들을 생성하도록 하나 이상의 입력 이벤트 스트림들에 대해서 수행될 하나 이상의 변환들의 변환 세트를 표현할 수 있다. 변환 연산들의 실례들은 이벤트들 중 오직 일부만이 통과하게 허용되도록 하나 이상의 이벤트 스트림 소스들 각각에 대한 필터링을 포함할 수 있다. 다른 변환들은 하나 이상의 결과적인 이벤트들을 생성하도록 이벤트 스트림 소스 이벤트들을 사용하여 수행된 로직을 포함할 수 있다. 이러한 로직은 이벤트 스트림 소스에 대해서 직접적으로 수행되거나, 하나 이상의 필터를 통해서 필터링된 이벤트들에 대해서만 수행될 수 있다.
실행 환경에서, 대응하는 쿼리 변환 컴포넌트(230)는 이벤트 스트림 소스(210)를 입력으로서 수신한다. 이벤트 스트림 소스(210)는 이벤트들(201)(예를 들어, 점들(201D)로 표시된 바와 같은 잠재적으로 수많은 다른 이벤트들 중에서도 이벤트들(201A, 201B, 201C))을 수신하고, 결과를 입력 이벤트 스트림(211)으로서 제공한다. 쿼리 변환 컴포넌트(230)는 입력 이벤트 스트림을 프로세싱하여 쿼리 변환 모듈(130)에서 표현된 쿼리를 수행한다. 프로세싱에 의해서, 쿼리 변환 컴포넌트(230)는 이벤트 스트림 싱크(220)로 제공되는 출력(결과적인) 이벤트 스트림(221)을 생성한다. 출력 이벤트 스트림(221)은 쿼리가 입력 이벤트 스트림(211)에 적용되는 때에 쿼리 변환 컴포넌트와 연관된 쿼리의 쿼리 결과들을 나타낸다. 이벤트 스트림 소스(210) 및 이벤트 스트림 싱크(220)는 그 자체들이 이벤트 스트림들로서 사료될 수 있다. 따라서, 이벤트 스트림 싱크는 나중에 상이한 쿼리 프로세싱을 위한 이벤트 스트림 소스 역할을 할 수 있다.
저작 시에, 작성자는 작성 모듈(141)을 사용하여, 실행 컨텍스트(200)에서 이용가능한 이벤트 스트림 소스(210)를 표현하는 이벤트 스트림 소스 표현(110)을 작성한다. 작성 모듈(141)은 또한 변환 모듈에 의해서 표현되는(또는 변환 모듈과 연관된) 하나 이상의 입력 이벤트 스트림들에 대해서 수행될 하나 이상의 변환들(130)의 변환 세트를 식별하는 쿼리 변환 모듈을 작성하는데 사용된다. 변환 모듈(130)은 이벤트 스트림 소스 표현(110)을 참조하거나 이와 연관될 수 있다. 작성 모듈(141)은 또한 실행 컨텍스트(200)에서 이용가능한 이벤트 스트림 싱크(220)를 표현한 이벤트 스트림 싱크 표현(120)을 작성하는데 사용될 수 있다. 변환 모듈(130)은 이벤트 스트림 싱크 표현(120)을 참조하거나 이와 연관될 수 있다. 작성 모듈(141)은 또한 실행 컨텍스트를 식별하는 컨텍스트 식별 모듈(150)을 작성하는데 사용될 수 있다.
실행 컨텍스트(150)는 해당 컨텍스트에서 이용가능한 이벤트 스트림 소스들 및 이벤트 스트림 싱크에 대한 정의사항들을 포함한다. 확장하여, 이용가능한 연산들의 세트는 또한 이용가능한 소스 및 싱크 정의사항들로부터 추론될 수 있다. 예를 들어, 도 2에서 예시된 바와 같이, 실행 컨텍스트(200)는 이벤트 스트림 소스(110)의 인스턴스(210), 및 이벤트 스트림 싱크(120)의 인스턴스(220)를 포함한다. 컨텍스트 식별 모듈(150)은 컨텍스트를 암시적으로(예를 들어, 식별된 컨텍스트 식별의 부재 시에 디폴트 컨텍스트로서), 또는 명시적으로 식별할 수 있다. 예를 들어, 디폴트 컨텍스트는 단순히, 해당 쿼리를 개시한 동일한 시스템 상에서 쿼리 변환 컴포넌트(130)의 인스턴스를 단지 실행하고자 하는 것뿐일 수 있다. 오로지 예시로서, 실행 컨텍스트는 로컬 컴퓨팅 시스템, 클라우드 컴퓨팅 환경, 또는 임의의 다른 실행 환경일 수 있다.
저작 환경(100)은 또한 하나 이상의 조건들 및/또는 이벤트들의 검출 시에, 실행 컨텍스트(200)에서 실행되는 대응하는 쿼리 변환 컴포넌트(230)를 구현하도록 변환 모듈(130)을 해석하는 실행 모듈(161)을 포함한다. 예를 들어, 실행 모듈(161)은 사용자 입력 검출 시에 실행 모듈(161)을 개시하도록 구성된 개시 명령 또는 제어부(160)(또는 "관리 API")를 포함할 수 있다. 개시 명령(160)은 자동적으로 이벤트 프로세싱 프로그래밍 모델이 실행 컨텍스트(200)에서 실행되게 할 수 있다. 예를 들어, 콘텐츠 식별 컴포넌트(150)에서 식별된 컨텍스트가 해당 쿼리가 로컬하게 실행될 것임을 나타내면, 쿼리 변환 컴포넌트(230)는 로컬 컴퓨팅 시스템 상에 로컬하게 실행될 수 있다. 컨텍스트 식별 컴포넌트(150)에서 식별된 실행 컨텍스트가 클라우드 컴퓨팅 환경 또는 일부 타입의 원격 서버이면, 쿼리 변환 모듈(130)은 해당 클라우드 컴퓨팅 환경 또는 다른 타입의 원격 서버로 업로드될 것이며, 쿼리 변환 컴포넌트(230)를 인스턴스화하여 해당 원격 환경에서 실행될 것이다. 쿼리 변환 컴포넌트(130)의 인스턴스(230)가 실행되는 컨텍스트가 쿼리 변환 컴포넌트(130) 자체의 쿼리 로직 중 어떠한 것도 변경하지 않으면서 컨텍스트 식별 컴포넌트(150) 내에서 식별될 수 있다.
도 3은 실행 환경(200)에서 동작하도록 변환 컴포넌트(230)가 준비되게 하는 방법(300)의 흐름도를 도시한다. 방법(300)은 도 1의 개시 명령(160)을 작성자가 개시하는 것에 응답하여 수행될 수 있다.
이벤트 스트림 소스 표현이 액세스된다(동작 301A). 예를 들어, 도 1에서, 이벤트 스트림 소스 표현(110)이 액세스된다. 단지 하나의 이벤트 스트림 소스 표현으로 한정되지 않는다. 따라서, 다른 이벤트 스트림 소스 표현이 액세스될 수 있다(동작 301B). 다른 이벤트 스트림 소스 표현은 또한 실행 컨텍스트(200)에서 이용가능한 특정 이벤트 스트림(도 2에서는 미도시)을 표현한다. 예를 들어, 이벤트 스트림 소스(110)는 동시간적인 이벤트 스트림인데 반해, 추가 이벤트 스트림 소스(미도시)는 이력 이벤트 스트림일 수 있다. 변환들은 입력 동시간적인 이벤트 스트림의 이력적 시간-시프트된 버전을 수행하는 것을 포함할 수 있다.
변환 모듈이 또한 액세스된다(동작 302). 예를 들어, 도 1에서, 변환 모듈(130)이 액세스될 수 있다. 또한, 이벤트 스트림 싱크 표현이 액세스되고(동작 303), 이와 함께 컨텍스트 식별 컴포넌트도 액세스된다(동작 304). 예를 들어, 실행 모듈(161)은 변환 모듈(130), 이벤트 스트림 싱크 표현(120), 및 컨텍스트 식별 컴포넌트(150)를 액세스할 수 있다.
이어서, 실행 모듈은 변환 모듈을 해석하여(동작 310) 변환 세트가 실행 컨텍스트(200)에서 식별된 하나 이상의 입력 이벤트 스트림들에 대해서 수행되게 하여 결과적인 이벤트 스트림을 생성한다. 이를 위해, 실행 모듈(161)은 컨텍스트 식별 모듈(150) 내의 컨텍스트 식별을 사용한다. 예를 들어, 실행 모듈은 변환 컴포넌트, 예를 들어, 변환 컴포넌트(230)의 인스턴스를 획득한다(동작 311). 실행 모듈은 또한 변환 컴포넌트를, 이벤트 스트림 소스 표현(예를 들어, 이벤트 스트림 소스 표현(110))에 의해서 식별된 임의의 이벤트 스트림 소스(예를 들어, 이벤트 스트림 소스(210))에 커플링한다(couple)(동작 312). 실행 모듈은 또한 변환 컴포넌트를, 이벤트 스트림 소스 표현(예를 들어, 이벤트 스트림 소스 표현(120))에 의해서 식별된 임의의 이벤트 스트림 싱크(예를 들어, 이벤트 스트림 싱크(220))에 커플링한다(동작 313). 이어서, 변환 컴포넌트(230)가 실행될 수 있다(동작 314).
도 1로 돌아가서, 작성 모듈(141)은 이벤트 스트림 소스 표현(110), 이벤트 스트림 싱크 표현(120), 쿼리 변환 모듈(130), 및 컨텍스트 식별 컴포넌트(150)를 작성하는데 작성자에 의해서 사용될 수 있는 프로그래밍 추상화 세트(140)를 포함한다. 예를 들어, 추상화 세트(140)는 추상화(141 내지 144)를 포함하는 것으로서 예시되지만, 점들(145)은 이벤트 스트림 표현들(110 및 120), 및 모듈들(130 및 150)을 작성하는데 프로그래머에 의해서 사용되는 임의의 수의 추상화가 존재할 수 있다는 것을 나타낸다.
본 명세서에서 기술된 실시예들에서, 이벤트 스트림 소스(110) 및 이벤트 스트림 싱크(120)의 정체 및 타입은 쿼리 변환 모듈(130)에 대한 기본적인 변경 없이, 정확히 이벤트 스트림 소스(110) 자체의 식별 시의 것과는 다르게 및/또는 정확히 이벤트 스트림 싱크(120) 자체의 식별 시의 것과는 변경될 수 있다.
예를 들어, 도 1의 실례에서, 추상화 세트(140) 중 하나의 추상화가 이벤트 스트림 소스(예를 들어, 이벤트 스트림 소스(110))를 식별하는데 사용될 수 있다. 다음은 ITemporalSourceDefinition 인터페이스로 지칭되는 추상화의 실례이다. 물론, 본 명세서에서 기술된 특정 추상화의 임의의 명칭들은 임의적이다. 보다 중요한 것은 추상화의 기능이다. 다음은 ITemporalSourceDefinition 인터페이스를 사용하는 예시적인 HTTP 소스 정의사항이다:
Figure pct00001
시간적 소스들(예를 들어, 바로 위에서 정의된 HTTP 소스)은 가상 시간에 의해서 배열된 이벤트들을 생성한다. 이들은 소스 타입에 따라서 일부 특정 파라미터들을 가질 수 있다. 예를 들어, 일부 타입의 시간 이벤트 스트림 소스들에서, 큐 명칭들은 관련성을 가질 수 있다. 다른 타입의 시간 이벤트 스트림 소스들은 타임스탬프 선택 또는 그룹핑 키 셀렉터(key selector)를 가질 수 있다.
분산형 시나리오에서, 이벤트 스트림 소스(예를 들어, 이벤트 스트림 소스(210))는 비순차로 이벤트들(예를 들어, 이벤트들(201))을 수신할 수 있다. 이벤트 스트림 소스는 가상 시간을 계속 추적한다. 이벤트들이 수신되면, 이벤트 스트림 소스는 해당 이벤트와 연관된 시점을 정의하고, 이에 따라서 애플리케이션 시간을 앞당긴다. 그러나, 이벤트들이 때로 비순차로 도달하기 때문에, 일부 이벤트들은 현 애플리케이션 시간 이전에 타임스탬프와 함께 이벤트 스트림 소스에 도달할 수 있다. 달리 말하면, 해당 이벤트는 가상 시간을 추정함으로써 과거에 타임-스탬핑된다.
다음의 상황을 가정하자: 타임스탬프 Tl, T2 및 T3을 갖는 3개의 이벤트들이 존재한다. 애플리케이션 시간 추정에 따라서 타임스탬프 Tl는 타임스탬프 T2 이전이며, 타임스탬프 T2는 타임스탬프 T3 이전이다. 이벤트들이 이벤트 스트림 소스로의 상이한 경로들을 취하면, 타임스탬프 Tl 및 T3을 갖는 이벤트들이 먼저 도착하고 오직 이 후에 타임스탬프 T2를 갖는 이벤트가 도달하도록 이벤트들이 도달할 수 있다. 타임스탬프 T3를 갖는 이벤트가 도달할 때에 이벤트 스트림 소스가 가상 시간을 T3로 이동시키면, 타임스탬프 T2를 갖는 이벤트와 무엇이 관계가 있는지 명확하지 않다.
이벤트들이 비순차로 도달하는 문제를 다루도록 사용자를 돕는 시간 이벤트 스트림 소스들의 2개의 파라미터들이 존재한다. 일 파라미터는 비순차 정책이며, 이는 "조절" 또는 "드롭(drop)"일 수 있다. 조절 정책을 적용하면, 현 가상 시간보다 작은 타임스탬프를 갖는 모든 이벤트들은 현 가상 시간으로 재-타임스탬핑될 것이다. 드롭 정책을 적용하면, 모든 이러한 이벤트들은 드롭될 것이다. 그러나, 다른 타입의 비순차 정책이 이벤트 스트림 소스에 의해서 적용될 수 있다. 다른 비순차 정책의 실례는 "어보트(abort)" 정책이며, 이 정책에서는 비순차로 도달한 이벤트들은 결과적인 이벤트 스트림에 대한 쿼리가 어보트되게 한다.
비순차 이벤트들의 허용을 가능하게 하는 다른 일 파라미터는 구두점 생성 설정사항들이다. 이러한 설정사항들은 해당 서비스가 입력의 가상 시간을 앞당기는 방식을 정의한다. 이벤트들이 비순차로 도달하지만, 사용자가 상기 비순차 정책으로 재-타임스탬핑하기를 원치 않을 때에, 사용자는 앞당겨진 가상 시간 함수를 사용하여 소스에 대한 구두점들을 생성하는 방식을 명시적으로 설정할 수 있다. 이러한 앞당겨진 가상 시간 함수는 현 가상 시간 및 모든 버퍼링된 이벤트들의 리스트를 입력으로 취하여 새로운 가상 시간을 리턴시킨다. 예를 들어, 가상 시간에서 10 초의 지연을 허용하기 위해서, 사용자는 다음과 같은 함수를 제공할 수 있다:
Figure pct00002
추상화(140)의 다른 일 실례는 결과적인 이벤트 스트림이 가야할 이벤트 스트림 싱크(221)를 식별하고 잠재적으로 정의하기 위한 추상화이다. 본 명세서에서의 실례에서, 이러한 추상화는 ITemporalSinkDefinition 인터페이스로 지칭된다. 다음은 ITemporalSinkDefinition 인터페이스를 사용하는 이벤트 스트림 싱크 정의사항의 샘플이다:
Figure pct00003
쿼리 변환 모듈(130) 자체와 연관된 쿼리들은 쿼리 변환 모듈(130)을 이벤트 스트림 소스(110)과 연관시키는 추상화를 사용하여 정의될 수 있으며, 이로써 쿼리 변환 컴포넌트(130)의 인스턴스(230)가 실행될 때에, 이 인스턴스는 입력 이벤트 스트림(211)을 대응하는 이벤트 스트림 소스(210)로부터 수신한다. 이러한 바를 수행하는데 사용될 수 있는 추상화(140)의 실례는 본 명세서에서 "From" 방법으로 지칭된다.
쿼리 변환 모듈(130)과 연관된 쿼리들은 또한 쿼리 변환 컴포넌트(230)를 이벤트 스트림 싱크(210)과 연관시키는 추상화를 사용하여 정의될 수 있으며, 이로써 쿼리 변환 컴포넌트(230)의 인스턴스가 실행되는 때에, 이 인스턴스는 출력 이벤트 스트림(221)을 대응하는 이벤트 스트림 싱크(220)에 제공한다. 이러한 바를 수행하는데 사용될 수 있는 추상화(140)의 실례는 본 명세서에서 "To" 방법으로 지칭된다.
다음은 이벤트 소스를 정의하고, 이벤트 스트림 싱크를 정의하고, 쿼리 로직을 정의하고, 쿼리 로직을 정의된 이벤트 소스 및 이벤트 싱크로 연결하기 위해서 다양한 추상화(140)를 사용하는 예시적인 엔드-투-엔드(end-to-end) 쿼리이다:
이러한 실례에서, 이벤트 스트림 소스는 HTTP 소스이며, 쿼리 로직은 머신마다의 평균 CPU 사용율을 계산하는 것을 수반한다.
본 명세서에서 기술된 이벤트 프로세싱 프로그래밍 모델은 그 사용자로 하여금, 데이터에 대한 저 지연, 증분적, 스케일-아웃된 그리고 신뢰할만한 연산들을 표현하게 할 수 있다. 데이터 핸들링 및 데이터 연산이 이제 기술될 것이다. 상술한 바와 같이, 데이터는 이벤트 스트림들로 구성된다. 각 이벤트 스트림은 시간에 따라서 부가되게 되는 데이터의 잠재적으로 무한한 집합을 기술한다. 예를 들어, 각 이벤트는 데이터 및 관련 타임스탬프로 구성된다. 데이터에 대한 연산은 그래프로서 표현될 수 있는 쿼리에 의해서 표현된다. 따라서, 사용자가 쿼리를 정의할 때에, 사용자는 기본 구축 블록들(예를 들어, 이벤트들 소스 및 싱크 정의사항들)을 사용하여 데이터 변환들의 그래프 구조를 정의하고, 또한 연관된 변환 자체를 정의한다. 이러한 쿼리 정의는 선언적으로 수행될 수 있다.
예를 들어, 도 4는 변환 프로세스를 예시하는 흐름 그래프를 도시한다. 도 4에서, 사용자는 수행 카운터 소스 정의사항을 취하고, 필터("where") 변환 및 선택 변환을 적용하고, 모든 것을 큐로 출력한다. 이러한 그래프가 (예를 들어, 개시 명령(160)의 실행에 의한) 실행을 위해서 (컨텍스트 식별 컴포넌트(150)에 의해서 식별된 바와 같은) 적절한 컨텍스트로 제공되면, 그래프는 연산 서비스 내에서 실행된다. 이 서비스는 그래프를 해석하여 런타임 시에 그래프를 실행한다. 해당 서비스는 런타임 데이터를 수행 카운터로부터 취하여 이를 필터링 및 프로젝팅하여 큐로 출력한다. 이러한 그래프의 런타임 인스턴스화가 쿼리이다. 따라서, 이벤트 프로세싱 프로그래밍 모델은 런타임 엔티티들로 맵핑되는 정의 엔티티들로 구성된다.
정의 엔티티들은 이들에 걸친 데이터 흐름 및 연산을 선언적으로 기술하는데 사용된다. 이러한 개념은 오직 거동만을 정의하는데, 이러한 개념은 임의의 런타임 구성요소를 가지지 않는다. 예를 들어, "필터" 정의사항은 인커밍 데이터가 일부 술어에 따라서 펄티링될 것이다. 프로그래밍 언어와 병행적인 것을 도출하기 위해서, 정의사항은 클래스와 유사하다. 쿼리의 컴포지션(composition)은 이벤트 프로세싱 프로그래밍 모델을 사용하여 클라이언트 측 상에서 발생하며, 쿼리의 실제 인스턴스화 및 실행은 (임의의 방식일 수 있으며 임의의 디바이스 상에 있을 수 있는) 이벤트 프로세싱 엔진 상에서 수행된다.
따라서, 런타임 엔티티들은 정의사항들을 실현하는 인스턴스들을 실행한다. 런타임 엔티티들은 이벤트 프로세싱 엔진 또는 서비스에 의해서 호스팅 및 실행되고, 데이터의 실제 프로세싱을 수행한다. 런타임 엔티티들은 프로그래밍 언어 내의 오브젝트들과 유사하다. 예를 들어, 런타임 동안, 동작 중인 이벤트 스트림 소스(110)의 인스턴스, 동작 중인 쿼리 변환 체인(130)의 인스턴스, 및 동작 중인 이벤트 스트림 싱크(130)의 인스턴스가 존재한다.
본 설명은 이벤트 프로세싱 프로그래밍 모델이 C# 프로그래밍 언어를 사용하여 예시적인 쿼리를 수행하는데 구현될 수 있는 방식의 실례를 이제 제공할 것이다. 이러한 실례에서, HTTP 엔드포인트가 존재하며, 여기서 룸으로부터의 모든 센서가 그들의 현재 온도를 전송한다고 가정하자. 이러한 시나리오에서, 애플리케이션은 임의의 센서로부터의, 1 분의 윈도우에 걸친 평균 온도가 90℃를 초과하면 경보를 발생해야 한다. 또한, 해당 경보는 Azure 큐 내에 기록되어야 한다. 다음은 쿼리 로직, 사용될 이벤트 스트림 소스, 사용될 이벤트 스트림 싱크, 쿼리가 실행될 컨텍스트, 및 대응하는 개시 명령을 기술하는, 쿼리의 대응하는 C# 실례이다. 라인 넘버링 및 적절한 스페이스들이 후속 참조 및 구성을 위해서 제공된다.
Figure pct00005
이러한 실례에서, 쿼리는 5 개의 논리적 단계들로 구현된다. 라인 1에서, 쿼리가 실행될 컨텍스트가 식별된다. 이는 도 1의 컨텍스트 식별 컴포넌트(150)의 실례이다. 이러한 실례에서, 컨텍스트는 도 1의 추상화(140)의 실례를 표현한, ServiceContext 방법을 사용하여 획득된다.
라인 2에서, 이벤트 스트림 소스가 정의된다. 이러한 실례에서, 이벤트 스트림 소스는 HTTP 이벤트 스트림 소스이다. 그러나, 이벤트 프로세싱 엔진은 매우 다양한 이벤트 스트림 소스들을 프로세싱할 수 있다. 따라서, 추상화(140)는 상이한 이벤트 스트림 소스 타입을 위한 빌드인 지원(build-in support)을 포함할 수 있다. 소스를 정의할 때에, 사용자는 이벤트 타입(본 경우에는 온도)을 선정할 수 있다. (본 실례에서는 ingressUri로서) 특정 소스 타입에 대해 특정된 일부 다른 파라미터들이 존재할 수 있다. 라인 2의 호(call)에서 마지막 파라미터는 도 1의 추상화(140)의 다른 일 실례인 그룹핑 기준이다. 쿼리는 일부 키에 의해서 식별된 바와 같은 이러한 그룹핑 기준을 사용할 수 있으며, 따라서 해당 쿼리 내에 정의된 모든 연산들이 해당 그룹의 각 멤버에게 개별적으로 적용될 것이다. 위의 실례에서, 쿼리들은 Sensorld에 의해서 그룹핑된다. 이는 average/where/select 연산들(라인 5 내지 라인 10)이 각 센서로부터의 데이터에 독립적으로 적용될 것을 의미한다. 라인 2가 도 1의 이벤트 스트림 소스(110)의 실례이다.
라인 3 내지 4에서, 이벤트 스트림 싱크가 정의된다. 이벤트 스트림 싱크는 출력 데이터(예를 들어, 출력 이벤트 스트림)가 종국적으로 갈 곳을 정의한다. 위의 실례에서, 라인 3 내지 4는 데이터를 Azure 큐로 기록할 싱크를 특정한다. 라인 3 내지 4는 도 1의 이벤트 스트림 싱크(120)의 실례이다.
라인 5 내지 10에서, 데이터를 소스로부터 싱크로 변환하는, 쿼리 로직 자체가 존재한다. 쿼리는 서로 결합된 상이한 소스/싱크 정의사항들로 구성된다. 본 실례에서, 먼저, 1 분의 윈도우에 걸친 평균이 계산된다. 이후에, 90도를 초과하는 온도를 갖는 모든 이벤트들이 필터링된다. 임의의 이러한 이벤트에 있어서, 경보가 "select" 변환을 사용하여 생성된다. 라인 5 내지 10은 도 1의 쿼리 변환 컴포넌트(130)의 실례이다.
라인 11에서, 쿼리가 이벤트 프로세싱 서비스(라인 11) 내에서 실행된다. 마지막 연산은 이벤트 프로세싱 서비스 내의 특정된 명칭을 갖는 쿼리의 실행 인스턴스를 생성할 것이다. 쿼리들을 서비스에 제공하기 위해서, 사용자는 라인 1에서 획득된 서비스 컨텍스트를 사용한다. 따라서, 라인 11은 도 1의 개시 명령(160)의 실례이다.
상기 실례가 C#로 주어졌지만, 이벤트 프로세싱 프로그래밍 모델은 언어와 무관할 수 있다. 예를 들어, 상기 모델은 C#, JavaScript, 등을 포함하는 상이한 언어로 SDK들을 제공할 수 있다.
이전의 섹션에서 도입된 이벤트 소스 정의사항의 개념은 이벤트 프로세싱 프로그래밍 모델이 라이브 및 이력적 데이터들 간 및 디바이스 및 클라우드 유래된 데이터들 간의 경험들을 통합하게 할 수 있다. 프로그래밍 모델 관점에서, 데이터가 (HttpSource의 경우에서와 같이) 온 더 플라이(on the fly) 방식으로 생성되는지, (AzureTableSource의 경우에서와 같이) 테이블로부터 취해지는지는 중요하지 않다(이는 특정 소스 정의 세부사항이다). 동일한 바가 디바이스 및 클라우드 유래된 소스 정의사항들에 대해서도 적용된다. 상이한 타입의 데이터 소스들을 통합함으로써, 프로그래밍 모델은 사용자로 하여금, 데이터 소스들이 차후에 변화되어도 동일하게 유지되는, 쿼리의 비지니스 로직에 집중하게 할 수 있다. 예를 들어, 도 1에서, 사용자는 쿼리 변환 컴포넌트(130)를 작성하는 것에 집중할 수 있으며, 동시에 기본 추상화(140)는 사용자가 적합한 소스, 싱크, 및 컨텍스트 식별사항들을 정의하게 하는데 사용될 수 있다.
이전의 시나리오로 돌아가면, HTTP 소스를 생성하는(위의 실례에서 라인 2)대신에 그리고 모든 데이터를 클라우드로 푸시하고 클라우드에서 데이터를 분석하는(위의 실례에서 라인 1 및 라인 11) 대신에, 사용자는 디바이스 상에서 인스턴스화될 빌트인 디바이스 소스 정의사항(예를 들어, 아래의 실례의 라인 1에서 service. GetDeviceSource)을 사용할 수 있다. 코드의 실례는 다음과 같을 수 있다:
Figure pct00006
데이터 변환 로직(라인 10)은 전혀 변화되지 않았다. 오직 2개의 주된 차이점들이 존재한다. 먼저, 디바이스에 이용가능한 것인과 같은 소스를 식별하기 위한, 라인 1의 소스 정의사항은 (이전 실례의 라인 2와 비교하여) 근소하게 변화되었다. 다음으로, 이전 실례의 라인 1은 제거되었으며, 이로써 라인 10의 개시 명령이 (예를 들어, 디바이스에 이용가능한 이벤트 프로세싱 서비스 상에서) 디폴트 컨텍스트에서 실행될 수 있다. 이어서, 서비스 자체는 쿼리를 보다 양호하게 분배 및 실행하는 방식을 결정할 수 있다. 상술한 실례에서, 오직 필요할 때에만 경보 이벤트들을 클라우드에 전파하면서, 평균 계산, 온도에 대한 필터링 및 경보 생성은 디바이스 상에서 발생할 수 있다고 가정하자. 동일한 방식으로, 쿼리 연산의 일부 부분들은 관계 데이터베이스, 맵/리듀스(map/reduce) 실행 엔진 등을 표현하는 소스 정의사항들로 푸시될 수 있다.
이벤트 프로세싱 프로그래밍 모델 원리 및 API
본 섹션은 이벤트 프로세싱 프로그래밍 모델 배후의 주요 원리들을 논의하며, 예시적인 애플리케이션 프로그램 인터페이스의 요소들을 보다 세부적으로 도입한다.
가상 시간으로 동작하는 이벤트 연산을 위해서, 애플리케이션 시간을 앞당기는 방식이 존재해야 한다. 통상적으로, 이벤트 프로세싱 엔진에서, 가상 시간 앞당김은 구두점으로 지칭되는 특정 이벤트에 의해서 전해진다. 쿼리 프로세싱 동안에, 가상 시간은 구두점 이벤트들에 의해서 구동된다. 구두점 이벤트들은 시간표의 특정 부분들이 이러한 특정 입력에 대해서 더 이상 변화되지 않을 것임을 서비스에 알림으로써 이벤트들을 수행하고 컴퓨팅된 결과들을 쿼리 출력에 릴리스하는데 사용된다: 시간 T에서 구두점을 인큐잉함으로써, 입력은 T 이전의 기간에 영향을 줄 임의의 후속 이벤트들을 생성하지 않을 것을 보장한다. 이러한 바는 구두점이 입력에 인큐잉된 후에, 모든 다른 이벤트들의 가상 시간이 인큐잉된 구두점보다 작게 되지 말아야 하는 것을 암시한다. 이러한 규칙 위배는 "구두점 위배"로 지칭된다. 구두점 위배를 대처하기 위한 상이한 정책들(즉, 이벤트들을 드롭시키는 것, 쿼리를 어보트하는 것 또는 이벤트 시간을 조절하는 것)이 존재할 수 있다.
이벤트 프로세싱 프로그래밍 모델에서, 모든 이벤트들은 또한 구두점으로 고려될 수 있으며, 이로써 사용자들은 구두점을 데이터 흐름 내로 명시적으로 삽입해야 하는 의무가 없다. 그러나, 구두점은 일부 경우들에서, 예를 들어, 사용자가 상태기반 연산자들의 현 상태를 플러시(flush)하고자 하는 경우에 여전히 사용될 수 있다. 예를 들어, 10분의 텀블링 윈도우에 걸친 평균이 고려된 도 5의 다음의 실례를 고려하자.
도 5에서, 연산자가 기간 T2에 속하는 가상 시간을 갖는 다음 이벤트를 경험하기까지 연산자는 기간 T1 동안에 임의의 출력을 생성하도록 허용되지 않는다. 이러한 바는, 이벤트들이 균일하게 분배되지 않고 새로운 이벤트들이 기간 T2의 끝에서만 오는 경우에 긴 레이턴시로 이어질 수 있다. 이러한 바를 대처하기 위해서, 사용자는 시간을 앞당겨서 연산자가 현 윈도우를 폐쇄하게 하는 구두점을 발행할 수 있다(도 5에서 우측).
가상 시간을 앞당기는 것에 추가하여, 다른 타입의 구두점, 예를 들어, "에러 시(on error)" 구두점 및 "완결 시(on complete)" 구두점이 존재할 수 있다. "에러 시" 구두점은 이벤트 프로세싱 동안에 에러가 발생한 경우에 다운스트림 연산자들에 전달된다. "완결 시" 구두점은 이러한 입력에 대한 이벤트들이 더 이상 예상되지 않을 때에 발행된다.
이벤트 프로세싱 프로그래밍 모델은 연산자들에서의 재현성을 제공한다. 연산자는 동일한 초기 상태 및 동일한 입력에 대해서, 해당 연산자가 동일한 출력을 결정론적으로 생성하면, 재현가능하다. 다음과 같은 재현 불가능성에 대한 2개의 주요한 원인들이 존재한다: 연산자의 비결정성(non-determinism) 및 (물리적 시간, 예를 들어, 타이머에 의존하는 연산자들의 경우에서와 같이) 동일한 입력을 제공할 수 없음. 비결정론적 연산자들은 내부적으로 비결정론적 연산자들(이들의 상태는 일부 형태의 램던 함수/외부적으로 변화되는 상태에 의존함) 및 비결정론적 입력(그 출력은 상이한 입력들 간의 이벤트들의 순서에 의좀함)으로 더 하위분할될 수 있다.
그룹핑 (grouping)
이벤트 프로세싱 프로그래밍 모델은 그룹핑 개념을 사용하여 이벤트 프로세싱 연산의 탄력적 스케일-아웃(elastic scale-out)을 제공한다. 예를 들어, 다음의 쿼리는 그룹핑을 사용한다:
Figure pct00007
이벤트 프로세싱 프로그래밍 모델 내의 이벤트 스트림들은 사용자-특정된 그룹핑 키를 사용하여 분리 그룹들(disjoint groups)로 하위분할될 수 있다. 이로써, 이벤트들의 각 스트림은 하위-스트림들의 세트이며, 일 하위-스트림은 해당 키의 고유 값마다 있다. 쿼리 내의 모든 연산자들은 하위-스트림들 각각에 독립적으로 적용되며 상태를 공유하지 않는다. 위의 쿼리에서, 사용자는 각 하위-스트림에 대해 독립적인 결과들(예를 들어, 5 분의 시간 윈도우마다 머신마다 일 평균 CPU 사용율 값)을 수신할 것이다.
이러한 실례에서, 그룹핑의 개념은 본 명세서에서 RegroupBy 연산자로 지칭되는 추상화들(140) 중 하나의 실례에 의해서 드러나며, 상기 연산자는 키 셀렉터를 파라미터로서 취한다. 그룹 기준이 특정되지 않으면, 데이터 흐름이 모든 이벤트들을 포함하는 단일 논리 그룹으로서 간주될 수 있다.
일부 이벤트 스트림 소스들은 편이성을 위해서 또한 그룹 함수를 파라미터로서 취한다. 다음은 이러한 이벤트 스트림 소스 정의사항의 실례이다:
Figure pct00008
모든 이벤트들에 걸쳐서 동작하도록, 사용자는 상수를 리턴하는 키 셀렉터로 데이터 흐름을 재-그룹핑할 수 있다.
예시적 API
본 섹션에서, 주 API의 실례들은(도 1의 추상화(140)의 각 실례들인)요소들을 구성한다. 하지만, 이러한 바는 단지 실례일 뿐이다.
정의 엔티티 개요
Source: 이벤트 스트림을 생성하기 위한 메커니즘 또는 연산을 정의한다. 예를 들어, HTTPSourceDefinition은 특정 HTTP URL에 전송된 모든 요청들로부터 이벤트들의 스트림을 생성하기 위한 메커니즘을 정의한다.
Sink: 이벤트 스트림을 사용하기 위한 메커니즘 또는 연산을 정의한다. 예를 들어, AzureBLOBSinkDefinition은 이벤트들의 스트림을 Azure BLOB 내에 저장하기 위한 메커니즘을 정의한다.
QueryDefinition: 소스로부터 모든 이벤트들을 취하고 이들을 싱크 내로 입력하는 연산을 정의한다. 예를 들어, 모든 이벤트들을 HTTPSource(ingressUri)로부터 취하여 이들을 AzureBLOBSink(blobUri, storageAccountConnectionString) 내로 입력한다.
런타임 엔티티 개요
이는 쿼리들을 사용하는 기본 이벤트 프로세싱 서비스에 크게 의존한다:
Query: QueryDefinition로부터 생성되며,(SourceDefinition으로부터 인스턴스화된)소스로부터 모든 이벤트들을 취하여 이들을(SinkDefinition으로부터 인스턴스화된)싱크 내에 입력하는 런타임 연산을 표현한다.
Stream: 서비스 내의 기능으로서, 이는 이벤트 프로세싱 서비스에 의해서 호스팅 및 제어된 스트림으로부터 인스턴스화된 이벤트 스트림이다. 서비스는 이벤트들을 사용 또는 생성하기 위한 Source 및 Sink를 Stream으로 제공한다.
이벤트 및 스트림
이벤트들은 기록들: 키-값/연관 집합들이다. 값들은 임의의 프리미티브 타입(.net/JSON), 어레이들 또는 연관 집합들(맵들/사전들)의 값일 수 있다.
스트림은 배열된 이벤트 및 시간 이벤트에 대한 결정성을 제공한다; 동일한 배열된 입력 및 동일한 쿼리가 주어지면, 스트림은 언제나 동일한 배열된 출력을 생성할 것이다.
이벤트 스트림은 그의 시간적 및 배열적 성질에 의해서 특성화된다. Stream에 대한 Source는 ISource를 구현한다. ISource는 그룹핑을 위한 셀렉터 표현으로 구성될 수 있다. 이러한 요소들 중 하나가 유실되면, 기본 소스는 해당 특정 요소에 대한 그의 디폴트 거동을 사용할 것이다. 다음은 예시적인 ISource 정의사항이다:
Figure pct00009
(ISink를 구현하는) Event Stream에 대한 싱크들은 Event Stream의 시간적 및 배열상의 특성들을 보유한다.
Figure pct00010
이벤트 스트림들은 그룹들로 하위분할될 수 있다. 그룹들은 그룹핑 키에 의해 특정화된다. 효과적으로, 이러한 경우에, 이벤트 스트림은 하위-스트림들의 세트이며, 하나의 하위-스트림은 해당 키의 각 고유 값에 대한 것이다. 연산은 각 하위-스트림에 독립적으로 적용된다. 재-그룹핑 구성은 그룹핑을 변경하는데 사용될 수 있다. 그룹들 간에서 모든 이벤트들에 걸쳐서 동작하도록, 사용자는 모든 그룹들은 일 그룹으로 재-그룹핑할 수 있다.
서비스 컨텍스트
쿼리들은 서비스 내측에서 전개된다. 서비스는 쿼리 정의사항들을 프로세싱할 수 있으며 쿼리들, 예를 들어, Start/Stop 쿼리에 대한 관리 동작들을 수행할 수 있다. 서비스 컨텍스트를 초기화하는 간단한 제스처는 다음과 같을 수 있다:
Figure pct00011
From/To
파라미터로서 ISource를 취하는 TemporalInput.From(source) 제스처로 시작하여 Event Stream에 대해 이용가능한 연산자들의 세트를 정의하는 IGroupedStream 인터페이스를 리턴시키는 쿼리들이 정의된다. IGroupedStream은 파티셔닝된 이벤트 스트림을 나타낸다. 쿼리 정의사항은, To 제스처가 파라미터로서 ISink를 갖는 IGroupeStream 상에서 호출되는 때에, 리턴된다.
SteamR 연산자들
필터(where)
각 개별 이벤트에 적용된 사용자 정의된 술어 표현에 기초하여, 어느 이벤트들이 Grouped Stream으로부터 제거되거나 유지되어야 하는지를 결정한다.
Figure pct00012
프로젝션(projection)(select)
사용자 표현을 각 개별 이벤트에 적용하고 잠재적으로 상이한 타입의 새로운 이벤트를 생성한다. 다음의 코딩 실례는 필터링 및 프로젝션이 사용되는 방식을 나타낸다:
Figure pct00013
멀티캐스트/ 유니온 ( multicast /union)
멀티캐스트 연산자는 각 Grouped Stream의 다수의 카피들을 생성한다(그룹 멤버쉽/키는 멀티캐스트에 의해서 수정되지 않는다). 유니온 연산자는 다수의 Grouped Stream을 단일 Grouped Stream으로 결합한다(그룹 멤버쉽/키는 수정되지 않으며, 동일한 키를 갖는 이벤트들이 동일한 그룹에서 종료될 것이다). 배열은 유니온에 의해서 보존된다.
집계(aggregate)
집계 연산자들은 집계 함수를 Grouped Stream의 하위-세트에 적용한다. 이러한 윈도우는 시간적 특성들(예를 들어, 윈도우 시간 지속시간), 각 그룹 내의 개별 이벤트들의 수(카운트 윈도우), 또는 하위-세트의 시작 및 종료를 정의하는 술어(predicate)(프레임 또는 조건 기반 윈도우)에 의해서 정의될 수 있다. 집계 함수들: Average, Min, Max, Count, Sum, 및 StdDev.
집계 연산자들은 다음과 같이 셋업될 수 있다:
Figure pct00014
다중-집계 연산이 또한 지원된다. API는 다수의 집계 함수들이 페이로드에 적용되게 할 수 있다. 다음의 실례는 3 개의 집계 함수들이 이벤트 페이로드에 적용한 것을 예시한다.
Figure pct00015
TopK
TopK는 Grouped Stream의 하위-세트를 형성하는 이벤트들을 등급화하고 Grouped Stream 내측의 각 그룹에 대한 상단 K 값들을 출력으로서 생성하는 집계 함수이다. 이러한 하위-세트(또는 윈도우)는 시간적 특성들(예를 들어, 윈도우 시간 지속시간), 각 그룹 내의 개별 이벤트들의 수(카운트 윈도우), 또는 하위-세트의 시작 및 종료를 정의하는 술어(predicate)(프레임 또는 조건)에 의해서 정의될 수 있다. 이는 위의 코드 부분에서 함수들이 적용되는 방식과 동일한 방식으로 적용된다.
윈도우 정의사항(*window)
윈도우는 카운트(카운트 윈도우) 또는 조건 또는 시간적 특성들(예를 들어, 윈도우 시간 지속시간)에 기초하여 이벤트 하위세트들을 버퍼링한다. 이어서, 연산자들의 임의의 세트가 이러한 하위-세트에 적용될 수 있다. 텀블링 윈도우 연산자의 Code 샘플은 다음과 같다:
Figure pct00016
이벤트 프로세싱 프로그래밍 모델은 모두가 윈도우 연산자로부터 유래되는 다음과 같은 4 개의 특정 윈도우들을 특정한다; 이들은 CountWindow, ConditionalWindow, TumblingWindow 및 HoppingWindow이다.
재그룹핑 /병합( regroupBy /merge)
regroupBy 연산자는 새로운 키잉(keying) 함수를 각 개별 이벤트에 적용함으로써 이벤트 그룹 멤버쉽을 재정의한다. 출력으로서, regroupBy 연산자는 새로운 키에 기초하여 Grouped Stream의 새로운 세트를 생성한다. 병합 연산자는 간단히 키가 상수 값을 갖는, regroupby에 기초한 매크로이다(상기 결과는 동일한 그룹 멤버쉽을 갖는 모든 이벤트, 즉 단지 하나의 그룹을 갖는 Grouped Stream의 세트를 갖는 것이다).
Figure pct00017
상관 연산자(join)
그의 가장 간단한 형태로, 이 연산자는 2개의 Grouped Stream을 카운트 윈도우에 걸쳐서 상관시킨다.
시간적 상관( TemporalJoin )
이벤트들의 쌍에 적용되는 사용자 정의된 술어 표현 및 사용자 정의된 프로젝션 표현에 기초하여, 소정의 시간적 윈도우(지속시간) 내에서 2개의 Grouped Stream를 상관시킨다.
시간 이동 상관(Time travel join)
시간적 상관과 유사하게, 2개의 Grouped Stream를, Grouped Stream의 세트 중 하나의 이력을 참조하는 추가 능력과 함께, 상관시킨다(aka 시간 이동). 다음은 이력적 및 라이브 스트림들을 갖는 쿼리의 실례이다.
Figure pct00018
시간 이동 상관은 좀 더 자세하게 살펴볼 만한 특별한 연산자이다. 라이브 및 이력적 데이터들에 대한 앞당겨진 분석을 실현하기 위해서, 이벤트 프로세싱 프로그래밍 모델은 시간 이동을 갖는 시간적 상관을 도입할 수 있다. 상기 샘플은 통상적인 시나리오를 나타낸다.
이러한 연산자는 이력적 데이터 상에서 시간적으로 거슬러 올라가는 것(rightTimeTravelShift 파라미터에 따라서 이벤트들을 재현하고 그들의 타임스탬프들을 수정하는 것) 및 이어서 이를 CEDR 시간적 상관을 통해서 라이브 스트림과 상관시키는 것을 가능하게 한다. rightDuration 파라미터는 이력적 이벤트들을 라이브 스트림으로부터의 시점 이벤트들과 상관시킬 수 있도록 이력적 이벤트들의 지속시간을 변경하는 방식을 특정한다. 시간 이동 상관의 매우 관심이 가는 측면은 이러한 상관이 라이브 스트림의 시간표에 의해서 구동된다는 것이다.
가장 간단한 구현예에서, 완전한 이력적 스트림이 시간의 개시점으로부터 판독되고 이를 라이브 스트림과 상관시킬 것이다. 그러나, 수많은 경우에, 이러한 바는 바람직하지 않은데, 그 이유는 이력적 스트림이 많은 불필요한 데이터를 가질 수 있으며 라이브 및 이력적 스트림들이 시간상 정렬되기 이전에 상당한 시간을 요구할 수 있기 때문이다. 예를 들어, 이력적 스트림이 최종 10 년으로부터 데이터를 포함하는 경우에, 실제로 상관될 수 있는 부분에 이르기 이전에 9년치의 데이터를 사전에 프로세싱하는 것을 요구할 것이다.
도 6은 하나는 동시간적인 것이며 하나는 이력적인 것인 2개의 이벤트 스트림들의 상관과 연관된 이벤트 흐름을 예시한다. 시작부터 모든 이벤트들을 재현하는 대신에, 관심 데이터만이 시간상 1 년을 거슬러 올라가도록 이력적 스트림의 소스로 전달하는 것이 보다 효율적일 것이다. 관심 시점은 쿼리의 컴파일링 국면에서 결정될 수 없다. 시작 시점은 라이브 스트림으로부터 제 1 이벤트를 상관 연산자가 수신할 때에만 발견된다.
맵핑
지금까지 논의한 사용자 표면 계층은 간단한 표준 데이터 변환들(예를 들어, "where", "select", 등)을 정의하고 사용자로부터 복잡성을 숨기는 역할을 한다. 이러한 계층은 클라이언트 측 SDK 또는 DSL에 의해 표현된다. 이 계층은 특정 프로그래밍 언어로 서비스 엔티티들에 대한 클라이언트 측 프락시를 포함하며, 컴포지션을 위한 수단을 제공한다. 이러한 계층 상에서, 사용자는 빌트인 정의사항들을 획득하고 이들을 쿼리로 컴포지션할 수 있다.
이러한 계층의 다른 일 책임은 언어 의존성 SDK 엔티티들을, 언어에 무관하며 엔티티 컴포지션 계층에 의해서 이해될 수 있는 그들의 내부 표현으로 변환하는 것이다. 이러한 프로세스는 정규화로 지칭된다. 이러한 프로세스는 에지 상의 클라우드에서 실행되는 엔진에서 이후에 맵핑될 수 있는 일부 표준적 형태로 쿼리들을 맵핑하는 것이다. 상이한 타입의 실제 이벤트 프로세싱 엔진이 존재할 수 있지만, 사용자에게는 모두가 동일하다.
본 문헌은 이벤트 프로세싱 프로그래밍 모델의 개념들을 기술하였다. 이벤트 프로세싱 프로그래밍 모델은 스트림 프로세싱의 상이한 차원들을 통합하며, 이로써 오프라인 및 온라인 분석결과들의 편리한 통합, 및 클라우드 내에서 그리고 디바이스 상에서의 데이터의 수집을 확장가능하면서 직관적인 방식으로 가능하게 한다.
다양한 정의사항들의 작성은 컴퓨팅 시스템, 및 이 컴퓨팅 시스템을 사용하여 실행된 대응하는 쿼리들을 사용하여 수행될 수 있기 때문에, 예시적인 컴퓨팅 시스템이 이제 기술될 것이다.
컴퓨팅 시스템들은 현재 점점 더 매우 다양한 형태를 취하고 있는 중이다. 컴퓨팅 시스템들은, 예를 들어, 핸드헬드 디바이스, 어플라이언스, 랩탑 컴퓨터, 데스크탑 컴퓨터, 메인프레임, 분산형 컴퓨팅 시스템들, 또는 통상적으로 컴퓨팅 시스템으로 고려되지 않았던 디바이스일 수 있다. 이러한 설명 및 청구항들에서, 용어 "컴퓨팅 시스템"는 적어도 하나 물리적 및 유형의 프로세서를 포함하는 임의의 디바이스 또는 시스템(또는 이들의 조합) 및 프로세서에 의해서 실행될 수 있는 컴퓨터-실행가능한 인스트럭션을 그 상에 가질 수 있는 물리적 및 유형의 메모리를 포함하는 것으로서 넓게 정의된다. 메모리는 임의의 형태를 취할 수 있으며 컴퓨팅 시스템의 성질 및 형태에 의존할 수 있다. 컴퓨팅 시스템은 네트워크 환경에 걸쳐서 분산될 수 있으며 다수의 구성요소 컴퓨팅 시스템들을 포함할 수 있다.
도 7에서 예시된 바와 같이, 그의 가장 기본적인 구성에서, 컴퓨팅 시스템 (700)은 통상적으로 적어도 하나 하드웨어 프로세싱 유닛(702) 및 메모리(704)를 포함한다. 메모리(704)는 휘발성, 비휘발성, 또는 이들의 일부 조합일 수 있는 물리적 시스템 메모리일 수 있다. 용어 "메모리"는 또한 비휘발성 대용량 저장부, 예를 들어, 물리적 저장 매체를 지칭하는데 본 명세서에서 사용될 수 있다. 컴퓨팅 시스템이 분산된 경우에, 프로세싱, 메모리 및/또는 저장 기능도 역시 분산될 수 있다. 본 명세서에서 사용되는 바와 같이, 용어 "실행가능한 모듈" 또는 "실행가능한 컴포넌트"는 컴퓨팅 시스템 상에서 실행될 수 있는 소프트웨어 객체, 라우팅, 또는 방법을 지칭할 수 있다. 본 명세서에서 기술된 상이한 컴포넌트, 모듈, 엔진, 및 서비스들은 (예를 들어, 개별 쓰레드로서) 컴퓨팅 시스템 상에 실행되는 객체들 또는 프로세스들로서 구현될 수 있다.
이하의 설명에서, 실시예들은 하나 이상의 컴퓨팅 시스템들에 의해서 수행되는 동작들을 참조하여 기술된다. 이러한 동작들이 소프트웨어로 구현되면, 동작을 수행하는 해당 컴퓨팅 시스템의 하나 이상의 프로세서는 컴퓨터-실행가능한 인스트럭션을 실행시킨 것에 응답하여 컴퓨팅 시스템의 동작을 제어한다. 예를 들어, 이러한 컴퓨터-실행가능한 인스트럭션은 컴퓨터 프로그램 제품을 형성하는 하나 이상의 컴퓨터-판독가능한 매체 상에 구현될 수 있다. 이러한 동작의 실례는 데이터 조작을 수반한다. 컴퓨터-실행가능한 인스트럭션(및 조작된 데이터)은 컴퓨팅 시스템 (700)의 메모리(704) 내에 저장될 수 있다. 컴퓨팅 시스템(700)은 또한 컴퓨팅 시스템(700)으로 하여금 예를 들어, 네트워크(710)를 통해서 다른 메시지 프로세서와 통신하게 하는 통신 채널(708)을 포함한다. 컴퓨팅 시스템(700)은 또한 시각적 표현들을 사용자에게 표시하는데 사용될 수 있는 디스플레이를 포함한다.
본 명세서에서 기술된 실시예들은 이하에서 보다 상세하게 기술될 바와 같이, 예를 들어, 하나 이상의 프로세서 및 시스템 메모리와 같은 컴퓨터 하드웨어를 포함하는 특정 목적용 또는 범용 컴퓨터를 포함하거나 사용할 수 있다. 본 명세서에서 기술된 실시예들은 또한 컴퓨터-실행가능한 인스트럭션 및/또는 데이터 구조를 반송 또는 저장하기 위한 물리적 및 다른 컴퓨터-판독가능한 매체를 포함한다. 이러한 컴퓨터-판독가능한 매체는 범용 또는 특정 목적용 컴퓨터 시스템에 의해서 액세스될 수 있는 임의의 이용가능한 매체일 수 있다. 컴퓨터-실행가능한 인스트럭션을 저장한 컴퓨터-판독가능한 매체는 물리적 저장 매체이다. 컴퓨터-실행가능한 인스트럭션을 반송하는 컴퓨터-판독가능한 매체는 전송 매체이다. 이로써, 예시적으로 그리고 비한정적으로, 본 발명의 실시예들은 적어도 2개의 개별적으로 상이한 종류들의 컴퓨터-판독가능한 매체: 컴퓨터 저장 매체 및 전송 매체를 포함할 수 있다.
컴퓨터 저장 매체는 RAM, ROM, EEPROM, CD-ROM 또는 다른 광학 디스크 저장부, 자기 디스크 저장부 또는 다른 자기 저장 디바이스, 또는 범용 또는 특정 목적용 컴퓨터에 의해서 액세스될 수 있으면서 컴퓨터-실행가능한 인스트럭션 또는 데이터 구조의 형태로 목표된 프로그램 코드 수단을 저장하는데 사용될 수 있는 임의의 다른 물리적 및 유형의 저장 매체를 포함한다.
"네트워크"는 컴퓨터 시스템들 및/또는 모듈들 및/또는 다른 전자 디바이스 간의 전자 데이터의 전송을 실현하는 하나 이상의 데이터 링크로서 정의된다. 정보가 네트워크 또는 다른 일 통신 접속부(유선, 무선, 또는 이들의 조합)를 통해서 컴퓨터로 전달되거나 전송되는 때에, 컴퓨터는 이러한 접속부를 전송 매체로서 적합하게 간주한다. 전송 매체는 범용 또는 특정 목적용 컴퓨터에 의해서 액세스될 수 있으면서 컴퓨터-실행가능한 인스트럭션 또는 데이터 구조의 형태로 목표된 프로그램 코드 수단을 반송하는데 사용될 수 있는 네트워크 및/또는 데이터 링크를 포함할 수 있다. 위의 조합들이 또한 컴퓨터-판독가능한 매체의 범위 내에 포함되어야 한다.
또한, 다양한 컴퓨터 시스템 컴포넌트들에 도달되면, 컴퓨터-실행가능한 인스트럭션 또는 데이터 구조의 형태의 프로그램 코드 수단은 전송 매체로부터 컴퓨터 저장 매체로(또는 이 반대로) 자동적으로 전달될 수 있다. 예를 들어, 네트워크 또는 데이터 링크를 통해서 수신된 컴퓨터-실행가능한 인스트럭션 또는 데이터 구조는 네트워크 인터페이스 모듈(예를 들어, "NIC") 내의 RAM 내에서 버퍼링되며 이어서 종국적으로 컴퓨터 시스템 RAM 및/또는 컴퓨터 시스템 내의 덜 휘발성의 컴퓨터 저장 매체에 전달될 수 있다. 이로써, 컴퓨터 저장 매체는 전송 매체를 추가적으로(또는 주로) 사용하는 컴퓨터 시스템 컴포넌트 내에 포함될 수 있다.
컴퓨터-실행가능한 인스트럭션은, 예를 들어, 프로세서에서 실행될 시에 범용 컴퓨터, 특정 목적용 컴퓨터, 또는 특정 목적용 프로세싱 디바이스로 하여금 특정 기능 또는 기능 그룹을 수행하게 하는 인스트럭션 및 데이터를 포함한다. 컴퓨터 실행가능한 인스트럭션은, 예를 들어, 중간 포맷 인스트럭션, 예를 들어, 어셈블리 언어, 또는 소스 코드와 같은, 프로세서에 의한 직접적 실행 이전에 일부 변환(예를 들어, 컴파일링)을 경험하는, 예를 들어, 바이너리 또는 인스트럭션일 수 있다. 논의 대상이 구조적 특징 및/또는 방법론적 동작들에 대해 특정된 언어로 기술되었지만, 첨부된 청구항들에서 정의된 청구 대상은 반드시 상술한 특징들 또는 동작들로 한정되지 않는다는 것이 이해되어야 하다. 이보다는, 기술된 특징들 및 동작들은 청구항들을 구현하는 예시적인 형태로서 개시된다.
본 기술 분야의 당업자는 본 발명이 개인용 컴퓨터, 데스크탑 컴퓨터, 랩탑 컴퓨터, 메시지 프로세서, 핸드헬드 디바이스, 멀티-프로세서 시스템들, 마이크로프로세서-기반 또는 프로그램가능한 소비자 전자장치, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 이동 전화, PDA, 페이저, 라우터, 스위치, 등을 포함하는 수많은 타입의 컴퓨터 시스템 구성을 갖는 네트워크 컴퓨팅 환경에서 실시될 수 있다는 것을 이해할 것이다. 본 발명은 또한 네트워크를 통해서 (유선 데이터 링크, 무선 데이터 링크, 또는 유선 및 무선 데이터 링크들의 조합에 의해서) 링크된 로컬 및 원격 컴퓨터 시스템들이 태스크를 수행하는 분산형 시스템 환경에서 실시될 수 있다. 분산형 시스템 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 저장 디바이스들 모두에 위치할 수 있다.
본 발명은 그의 사상 또는 필수 특성들을 벗어나지 않으면서 다른 특정 형태들로 실시될 수 있다. 기술된 실시예들은 모든 측면에서 오직 예시적으로 그리고 비한정적으로 해석되어야 한다. 따라서, 본 발명의 범위는 전술한 설명에 의해서 정의되기보다는 첨부된 청구항들에서 정의된다. 특허청구범위와 균등한 범위 및 의미 내에 해당되는 모든 변경사항들은 청구항들의 범위 내에 포함된다.

Claims (10)

  1. 컴퓨터-실행가능한 인스트럭션이 저장된 하나 이상의 컴퓨터-판독가능한 매체를 포함하는 컴퓨터 프로그램 제품으로서,
    상기 컴퓨터-실행가능한 인스트럭션은 하나 이상의 프로세서에 의해서 실행될 시에, 하나 이상의 상기 프로세서로 하여금,
    실행 컨텍스트에서 이용가능한 이벤트 스트림을 표현하는 이벤트 스트림 소스 표현과,
    변환 모듈에 의해 표현된 하나 이상의 입력 이벤트 스트림들에 대해 수행될 하나 이상의 변환들의 변환 세트를 식별하는 상기 변환 모듈 - 상기 변환 모듈은 상기 이벤트 스트림 소스 표현을 참조함으로써 상기 이벤트 스트림들 중 하나로서 상기 이벤트 스트림을 식별하고, 상기 이벤트 스트림 소스 표현을 참조함으로써 상기 입력 이벤트 스트림들 중 하나로서 상기 이벤트 스트림을 식별함 - 과,
    상기 변환 모듈을 해석하여, 상기 변환 세트가 상기 실행 컨텍스트에서 상기 식별된 입력 스트림들에 대해 수행되게 하여 결과적인 이벤트 스트림을 생성하는 실행 모듈,
    을 인스턴스화하고 수행하기 위한 시스템 아키텍처를 구현하게 하는,
    컴퓨터 프로그램 제품.
  2. 제 1 항에 있어서,
    상기 컴퓨터-판독가능한 매체의 컴퓨터-실행가능한 인스트럭션은,
    작성자로 하여금 상기 이벤트 스트림 소스 표현 및 상기 변환 모듈을 작성할 수 있게 하도록 구성된 작성 모듈을 더 포함하는,
    컴퓨터 프로그램 제품.
  3. 제 1 항에 있어서,
    상기 컴퓨터-판독가능한 매체의 컴퓨터-실행가능한 인스트럭션은,
    상기 실행 모듈이 상기 실행 컨텍스트에서 상기 변환 세트가 수행될 수 있도록 상기 실행 모듈에 대한 실행 컨텍스트를 식별하는 컨텍스트 식별 모듈을 더 포함하는,
    컴퓨터 프로그램 제품.
  4. 제 1 항에 있어서,
    상기 컴퓨터-판독가능한 매체의 컴퓨터-실행가능한 인스트럭션은,
    사용자 입력 검출 시에 상기 실행 모듈을 개시하도록 구성된 개시 컨트롤(initiation control)을 더 포함하는,
    컴퓨터 프로그램 제품.
  5. 하나 이상의 입력 이벤트 스트림들에 대해 변환 세트를 실행함으로써 결과적인 이벤트 스트림이 생성되게 하는 컴퓨터-구현 방법으로서,
    상기 컴퓨터-구현 방법은 하나 이상의 프로세서가 상기 컴퓨터-구현 방법을 위한 컴퓨터 실행가능한 인스트럭션을 실행함으로써 수행되며,
    상기 컴퓨터-구현 방법은,
    실행 컨텍스트에서 이용가능한 이벤트 스트림을 표현하는 이벤트 스트림 소스 표현에 액세스하는 단계와,
    변환 모듈이 상기 변환 모듈에 의해 표현된 하나 이상의 입력 이벤트 스트림들에 대해 수행될 하나 이상의 변환들의 변환 세트를 식별하는 단계 - 상기 변환 모듈은 상기 이벤트 스트림 소스 표현을 참조함으로써 상기 하나 이상의 입력 이벤트 스트림들 중 하나로서 특정 이벤트 스트림을 식별함 - 와,
    실행 모듈이 상기 변환 모듈을 해석하여, 상기 변환 세트가 상기 실행 컨텍스트에서 상기 식별된 입력 스트림들에 대해 수행되게 하여 상기 결과적인 이벤트 스트림이 생성되게 하는 단계를 포함하는,
    컴퓨터-구현 방법.
  6. 제 5 항에 있어서,
    상기 특정 이벤트 스트림은 동시간적인(contemporary) 이벤트 스트림이며,
    상기 이벤트 스트림 소스 표현은 동시간적인 이벤트 스트림 소스 표현인,
    컴퓨터-구현 방법.
  7. 제 6 항에 있어서,
    상기 실행 컨텍스트에서 이용가능한 이력(historical) 이벤트 스트림을 표현하는 이력 이벤트 스트림 소스 표현을 액세스하는 단계를 더 포함하는,
    컴퓨터-구현 방법.
  8. 제 5 항에 있어서,
    상기 하나 이상의 변환들은 상기 특정 이벤트 스트림에 적용된 필터링 동작을 포함하는,
    컴퓨터-구현 방법.
  9. 제 8 항에 있어서,
    상기 하나 이상의 변환들은 상기 결과적인 이벤트 스트림의 이벤트들을 생성하기 위한 이벤트 생성 로직을 포함하며,
    상기 이벤트 생성 로직은 상기 필터링된 특정 이벤트 스트림을 입력으로서 사용하는,
    컴퓨터-구현 방법.
  10. 제 5 항에 있어서,
    상기 하나 이상의 변환들은 상기 결과적인 이벤트 스트림의 이벤트들을 생성하기 위한 이벤트 생성 로직을 포함하며,
    상기 이벤트 생성 로직은 상기 특정 이벤트 스트림을 입력으로서 사용하는,
    컴퓨터-구현 방법.
KR1020177005572A 2014-08-29 2015-08-25 이벤트 스트림 변환 기법 KR102454201B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201462044090P 2014-08-29 2014-08-29
US62/044,090 2014-08-29
US14/515,382 2014-10-15
US14/515,382 US10235436B2 (en) 2014-08-29 2014-10-15 Event stream transformations
PCT/US2015/046622 WO2016032986A1 (en) 2014-08-29 2015-08-25 Event stream transformations

Publications (2)

Publication Number Publication Date
KR20170048373A true KR20170048373A (ko) 2017-05-08
KR102454201B1 KR102454201B1 (ko) 2022-10-12

Family

ID=54072990

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177005572A KR102454201B1 (ko) 2014-08-29 2015-08-25 이벤트 스트림 변환 기법

Country Status (11)

Country Link
US (1) US10235436B2 (ko)
EP (1) EP3186946B1 (ko)
JP (1) JP2017527024A (ko)
KR (1) KR102454201B1 (ko)
CN (1) CN106664322B (ko)
AU (1) AU2015306852A1 (ko)
BR (1) BR112017002834A2 (ko)
CA (1) CA2955838A1 (ko)
MX (1) MX2017002593A (ko)
RU (1) RU2017106150A (ko)
WO (1) WO2016032986A1 (ko)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10956422B2 (en) 2012-12-05 2021-03-23 Oracle International Corporation Integrating event processing with map-reduce
US10127903B2 (en) * 2014-12-02 2018-11-13 International Business Machines Corporation Discovering windows in temporal predicates
US10592500B2 (en) 2015-01-27 2020-03-17 International Business Machines Corporation Eviction stream for data joins
US10331693B1 (en) * 2016-09-12 2019-06-25 Amazon Technologies, Inc. Filters and event schema for categorizing and processing streaming event data
JP7018435B2 (ja) 2016-09-15 2022-02-10 オラクル・インターナショナル・コーポレイション スナップショットおよび状態のマイクロバッチ方式による管理
US11657056B2 (en) 2016-09-15 2023-05-23 Oracle International Corporation Data serialization in a distributed event processing system
US10496467B1 (en) 2017-01-18 2019-12-03 Amazon Technologies, Inc. Monitoring software computations of arbitrary length and duration
WO2018169429A1 (en) 2017-03-17 2018-09-20 Oracle International Corporation Framework for the deployment of event-based applications
WO2018169430A1 (en) 2017-03-17 2018-09-20 Oracle International Corporation Integrating logic in micro batch based event processing systems
WO2018215062A1 (en) * 2017-05-24 2018-11-29 Huawei Technologies Co., Ltd. System and method for stream processing
CN109542444B (zh) * 2017-07-31 2022-03-25 华为技术有限公司 Java应用的监控方法、装置、服务器和存储介质
WO2019057288A1 (en) 2017-09-21 2019-03-28 Huawei Technologies Co., Ltd. SYSTEM AND METHOD FOR PROCESSING FLOW
CN109614413B (zh) * 2018-12-12 2023-03-24 上海金融期货信息技术有限公司 一种内存流式计算平台系统
US11113270B2 (en) 2019-01-24 2021-09-07 EMC IP Holding Company LLC Storing a non-ordered associative array of pairs using an append-only storage medium
US11416496B2 (en) * 2019-03-01 2022-08-16 Hitachi Vantara Llc Computer implemented method for continuous processing of data-in-motion streams residing in distributed data sources
US11461345B2 (en) * 2019-05-31 2022-10-04 Microsoft Technology Licensing, Llc Providing access to state information associated with operators in a data processing system
US11599546B2 (en) 2020-05-01 2023-03-07 EMC IP Holding Company LLC Stream browser for data streams
US11604759B2 (en) 2020-05-01 2023-03-14 EMC IP Holding Company LLC Retention management for data streams
US11340834B2 (en) 2020-05-22 2022-05-24 EMC IP Holding Company LLC Scaling of an ordered event stream
US11360992B2 (en) 2020-06-29 2022-06-14 EMC IP Holding Company LLC Watermarking of events of an ordered event stream
US11599420B2 (en) 2020-07-30 2023-03-07 EMC IP Holding Company LLC Ordered event stream event retention
US11340792B2 (en) 2020-07-30 2022-05-24 EMC IP Holding Company LLC Ordered event stream merging
US11354444B2 (en) * 2020-09-30 2022-06-07 EMC IP Holding Company LLC Access control for an ordered event stream storage system
US11513871B2 (en) 2020-09-30 2022-11-29 EMC IP Holding Company LLC Employing triggered retention in an ordered event stream storage system
US11755555B2 (en) 2020-10-06 2023-09-12 EMC IP Holding Company LLC Storing an ordered associative array of pairs using an append-only storage medium
US11323497B2 (en) 2020-10-07 2022-05-03 EMC IP Holding Company LLC Expiration of data streams for application programs in a streaming data storage platform
US11599293B2 (en) 2020-10-14 2023-03-07 EMC IP Holding Company LLC Consistent data stream replication and reconstruction in a streaming data storage platform
US11354054B2 (en) 2020-10-28 2022-06-07 EMC IP Holding Company LLC Compaction via an event reference in an ordered event stream storage system
US11347568B1 (en) 2020-12-18 2022-05-31 EMC IP Holding Company LLC Conditional appends in an ordered event stream storage system
US11816065B2 (en) 2021-01-11 2023-11-14 EMC IP Holding Company LLC Event level retention management for data streams
US11526297B2 (en) 2021-01-19 2022-12-13 EMC IP Holding Company LLC Framed event access in an ordered event stream storage system
US11740828B2 (en) 2021-04-06 2023-08-29 EMC IP Holding Company LLC Data expiration for stream storages
US11513714B2 (en) 2021-04-22 2022-11-29 EMC IP Holding Company LLC Migration of legacy data into an ordered event stream
US11954537B2 (en) 2021-04-22 2024-04-09 EMC IP Holding Company LLC Information-unit based scaling of an ordered event stream
US11681460B2 (en) 2021-06-03 2023-06-20 EMC IP Holding Company LLC Scaling of an ordered event stream based on a writer group characteristic
US11681722B2 (en) * 2021-06-08 2023-06-20 Jpmorgan Chase Bank, N.A. System and method for configurable and automated data extraction, formatting and distribution
US11735282B2 (en) 2021-07-22 2023-08-22 EMC IP Holding Company LLC Test data verification for an ordered event stream storage system
US20230418800A1 (en) * 2022-06-02 2023-12-28 Barcelona Supercomputing Center-Centro Nacional De Supercomputación Method for optimizing the management of a flow of data

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110093490A1 (en) * 2009-10-21 2011-04-21 Microsoft Corporation Event Processing with XML Query Based on Reusable XML Query Template

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6567813B1 (en) * 2000-12-29 2003-05-20 Webex Communications, Inc. Quality of service maintenance for distributed collaborative computing
US20070150585A1 (en) * 2005-12-28 2007-06-28 Microsoft Corporation Multi-dimensional aggregation on event streams
CN1959724B (zh) * 2006-11-24 2010-08-11 清华大学 泛在计算环境中工作流上下文信息的获取方法和系统
US8069190B2 (en) 2007-12-27 2011-11-29 Cloudscale, Inc. System and methodology for parallel stream processing
US20100131556A1 (en) 2008-11-25 2010-05-27 Microsoft Corporation Unified event programming and queries
US8612983B2 (en) * 2009-09-07 2013-12-17 International Business Machines Corporation Scheduling event streams depending on content information data
CN102096848B (zh) * 2009-12-09 2015-11-25 Sap欧洲公司 用于在对流事件的查询模式匹配期间进行快速响应的调度
EP2348416A1 (en) * 2010-01-21 2011-07-27 Software AG Analysis system and method for analyzing continuous queries for data streams
US20110314019A1 (en) 2010-06-18 2011-12-22 Universidad Politecnica De Madrid Parallel processing of continuous queries on data streams
CN102340495B (zh) 2010-07-26 2014-09-03 中国移动通信集团广东有限公司 一种支撑跨系统业务联动的事件中心及其事件处理方法
US9166892B1 (en) * 2012-01-20 2015-10-20 Google Inc. Systems and methods for event stream management

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110093490A1 (en) * 2009-10-21 2011-04-21 Microsoft Corporation Event Processing with XML Query Based on Reusable XML Query Template

Also Published As

Publication number Publication date
AU2015306852A1 (en) 2017-02-16
EP3186946A1 (en) 2017-07-05
MX2017002593A (es) 2017-05-30
CN106664322A (zh) 2017-05-10
US10235436B2 (en) 2019-03-19
BR112017002834A2 (pt) 2017-12-19
CA2955838A1 (en) 2016-03-03
JP2017527024A (ja) 2017-09-14
CN106664322B (zh) 2020-05-15
KR102454201B1 (ko) 2022-10-12
EP3186946B1 (en) 2020-08-05
WO2016032986A1 (en) 2016-03-03
RU2017106150A (ru) 2018-08-28
US20160063080A1 (en) 2016-03-03

Similar Documents

Publication Publication Date Title
KR102454201B1 (ko) 이벤트 스트림 변환 기법
US11086688B2 (en) Managing resource allocation in a stream processing framework
US9946593B2 (en) Recovery strategy for a stream processing system
Shukla et al. Benchmarking distributed stream processing platforms for iot applications
da Silva Veith et al. Latency-aware placement of data stream analytics on edge computing
US20170085445A1 (en) Simplified entity engagement automation
Ikram et al. Approaching the Internet of things (IoT): a modelling, analysis and abstraction framework
US9990403B2 (en) System and a method for reasoning and running continuous queries over data streams
US20210050119A1 (en) Spreadsheet template control of data flow and processing
Steinbach et al. Tppfaas: Modeling serverless functions invocations via temporal point processes
EP3011456B1 (en) Sorted event monitoring by context partition
Pontisso et al. Analysis of distributed multiperiodic systems to achieve consistent data matching
Juhasz et al. A performance analyser and prediction tool for parallel discrete event simulation
Werle et al. Data stream operations as first-class entities in component-based performance models
Kashansky et al. Monte Carlo Approach to the Computational Capacities Analysis of the Computing Continuum
Vargas-Solar et al. Big continuous data: dealing with velocity by composing event streams
Simon et al. Design of real-time periodic control systems through synchronization and fixed priorities
Renaux et al. Parallel gesture recognition with soft real-time guarantees
Hu et al. GiPH: Generalizable Placement Learning for Adaptive Heterogeneous Computing
Villalba et al. Multi-tenant pub/sub processing for real-time data streams
Iatropoulou et al. Towards platform-agnostic and autonomous orchestration of big data services
US20230350650A1 (en) Distributed application development platform
Anderson Methods and Applications of Synthetic Data Generation
Palm et al. A Bayesian system for cloud performance diagnosis and prediction
Khare Resource Management Algorithms for Edge-Based, Latency-Aware Data Distribution and Processing

Legal Events

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