Esper (CEP)

in #bitcoin5 years ago

Esper라고 complex event processing (cep) 프레임웤이 있다.

거의 이건 나에게는 한줄기 빛과같은 프레임웤으로 다가왔다.
대량의 이벤트(데이터)를 통해, 어떤 데이터를 만들어 내야할때, 간단한 데이터들은 만들수있겠지만,

24시간 평균값, 5분 평균값, 합계등 특정조건과 기간(분,초,시)안에 발생한 이벤트(데이터)에 대해서 이런 데이터를 만들어 내기란 너무 번거롭고, 무식한 방법밖에 없었다.

결국은 시간안에 데이터를 어딘가에 모아서 가지고 있다가 평균을 구하던, 갯수를 세던, 분포도를 뽑던하는 방법말이다.

하지만, 이런 일들을 Esper를 사용하면, 너무나 간단하고 쉽게 그리고 유연하게 데이터를 만들어 낼수있다.

ESPER전용 SQL로 심지어 만들어낼수가 있다.ㅎㄸㄷ

심지어 2000년초기에 만들어진 프레임웤이라 안전하고 많은곳에서 이미 널리 사용하고있다.

특히 거래소를 제작할때, 매수매도등의 거래 트래이딩과 차트등에서 정말 ESPER의 진가가 뽑난다.

아마 많은 거래소 제작업체들은 ESPER를 사용하고 있지않을듯한테, 사장님을 만나면(?) 알려주고 싶다..공짜로..

ESPER에서의 가장 중요한 개념은 역시, 윈도우개념이다.

MYSQL같이 정적 테이블에서는 그 버킷의 사이즈가 정해진 상태이기 때문에 별다른 개념을 도입하지 않아도 되지만,

스트리밍, 이벤트방식의 환경에서는 정적 버킷의 사이즈를 정할수없기때문에(시간에 따라 이벤트가 흘러 지나가 버리니까요, 흐르는 강물처럼, 연어처럼..), 그 버킷의 크기를 정하기 위해 윈도우라는 개념을 도입하게 된다.

윈도우는 어떠한 조건(시간이나, 크기등)에 따른 이벤트의 집합이다.

5초간격으로 들어온 이벤트의 집합이되기도,

5초마다들어온 이벤트의 집합이 되기도,

100개의 이벤트가 들어온 시점의 이벤트의 집합이 되기도,

이렇게 흐르는 이벤트,스트리밍환경에서의 어떤 데이터를 뽑아내기위한 기준 모집합을 정하는 개념이다.

example

*중요 : 윈도우의 개념은 이런 느낌이다...투망!!!
이벤트라는 강에서 이벤트들은 계속적으로 내앞을 스쳐 지나가고, 그 이벤트를 사용하기위해서

나는 투망을 던져야한다.

투망을 던져 이벤트를 낚아야하고, 해당 낚은 이벤트를 사용해야한다.

투망을 던지는 방법은 여러가지가 있다.

  1. 강가에 앉아서 투망을 던지는법, (강가라는 정적 시점에서 이벤트를 낚는경우)

  2. 흐르는 강물에 뗏목을 띄우고 던지는법, (같은 속도로 흘러가며, 동적 시점에서 이벤트를 낚는 경우)

  3. 투망을 설치해놓는법 (정적이며, 해당 이벤트를 계속적으로 일정 크기만큼 낚는경우)

이렇듯 투망을 어떻게 사용하느냐가 바로 윈도우의 개념이다.

이해할수있을까...

참고로, esper + storm조합으로 만든 실시간 분석 프레임웤을 소개한다.

https://github.com/dk-stationery/stationery-ink

dk-stationery/stationery-ink

Distributed SQL base Realtime Streaming Computation Framework On Apache Storm, Spark - dk-stationery/stationery-ink

github.com
이걸 만들고 사람들이 진면목을 알아주지않아 많이 섭섭했는데...2년정도 지났나??...

STORM 오픈소스진영에서 결국은 내가 만든 프레임웤과 비슷한 프로젝트를 시작하는것을 보고,

나의 생각이 틀리지는 않았구나 라는 생각을 하게됬다.

이 당시 자바를 거의 잘하지못하는 실력이여서 내 머릿속의 생각을 그냥 옮겨놓는정도로 구현을 빠르게 했지만,

지금봐도, 정말..이건 대단한 물건인거 같긴하다. 물론 나만 그렇게 생각을 하고있지만..