Flipkart Aesop 대충 정리
Linkedin 의 Databus 를 wrapping 한 Flipkart 의 aesop 문서를 읽으며 적은 글입니다. 번역이 아닙니다. 원문을 참고하세요.
introduce
Flipkart/aesop Change Propagation Approach
aesop 은 링크드인 Databus 처럼 변경된 데이터를 발견하여 로그를 수집하는 방식을 사용한다.
또한 변경 이벤트를 제공하기 위해 데이터버스의 인프라 구성요소를 사용한다.
Event Producer, Relay, Event Buffer, Bootrap, Event Consumer 와 System Change Number(SCN) 은 매우 매력적이고, Aesop 에서 대부분 사용된다.
Aesop 은 NGDATA Hbase-sep 기반으로 Event Producer 를 구현하여, HBase 데이터 저장소의 변화 탐지에 대한 지원을 확장한다.
MySQL의 경우, Aesop은 데이터 버스에서 사용할 수 있는 producer 구현을 생성한다.
Aesop 은 Push Producer, Pull Producer 를 제공하는데,
Push Producer 는 변경을 감지, Relay (Databus 로 데이터를 push 하는 것이고,
The log mining approach has limitations if data is distributed across database tables (when updates are not part of a single transaction) where-in it is hard to correlate multiple updates to a single change. It also has limitations when data is distributed across types of data stores - for e.g. between an RDBMS and a Document database. Aesop addresses this problem by implementing a “Pull” producer that uses an application-provided “Iterator” API to periodically scan the entire datastore and detect changes between scan cycles. This implementation is based off Netflix Zeno.
디자인 원칙
Aesop은 스트리밍 ETL 의 능력을 가진 시스템이다.
ETL 프로세스의 각 부분을 정의하는 유연함을 제공한다.
Change Propagation 시스템처럼, 데이터베이스 데이터 변경을 감지하기 위해 ETL 기능을 확장한다.
Aesop 디자인의 원칙:
- 신뢰할수 있는 변화 감지 머신. 프로세스 실패 및 복구 및 재개 할 수 있는 능력으로 생존 해야한다.
- 변경 이벤트의 최소 한번 전송됨을 보장으로 부터 최종 일관선을 가능하게 한다.
- 어디서 어떻게 생성되는 이벤트 소스이던 상관없이, 변경 이벤트 소비자를 위한 통합 인터페스.
- Horizontally scalable event sourcing and consumption
- 수평적 확장 이벤트 생성 및 소비
- 변경 전파(change propagation) 파이프라인의 다양한 컴퍼넌트를 위한 고가용성
- 메트릭과 모니터링
Aesop 아키텍쳐의 중요 컴포넌트
컴포넌트 | 기능 설명 | 구현 노트 |
---|---|---|
Runtime container | 컴포넌트를 배포하고, 배포된 컴포넌트의 생명주기를 관리한다. | 스프링 어플리케이션 컨텍스트를 제공하는 DI 를 제공하는 스프링 어플리케이션 컨텍스트를 관리하는 Trooper Runtime |
Module management | 독립적으로 다양한 구성 요소를 배포하고 관리할 수 있는 능력. | LinkedIn Databus ServerContainer 인스턴스의 Runtime 등록기, 그것은 Spring 설정 파일로 부터 만들어진다. 또한 classloader 의 격리, ServerContainer 인스턴스를 독립적으로 시작/중지 할 수 있는 능력을 제공한다. |
Relay | 호스트들의 이벤트 생성자와 소비자들을 등록하고 이벤트롤 소비할 수 있게 한다. | LinkedIn Databus Relay. Aesop 에서 설정, 지표 수집과 Admin console를 위해 강화 되었다. |
Event Producer | 소스 데이터 저장소로 부터 소스 이벤트 | LinkedIn Databus 구현을 이식하고 Aesop에서 강화했다. Push 와 Pull 메카니즘을 지원한다. Pull 은 데이터 스냅샷을 Trooper 배치, netflix Zeno 를 이용해서 생성된다. |
Client & Event Consumer | Relay 또는 Bootstrap server 에 연결하여 변경 이벤트를 듣는다. | LinkedIn Databus 컨슈머 구현. bootstrapping, 설정과 admin console 을 위해 Aesop 에서 향상된 기능. |
Bootstrap producer | Relay client, 그것은 이벤트를 소비하고 스냅샷 데이터베이스에 저장한다. | mysql 데이터베이스에 데이터를 저장하는 LinkedIn Databus Bootstrap producer. 설정을 위해 Aesop 에서 향상됬다. |
Bootstrap server | 새로운 이벤트 컨슈머 bootstrapping 을 위한, Relay 로부터 떨어진 서버 | LinkedIn Databus Bootstrap server. 설정을 위해 Aesop 에서 강화됨 |
Aesop 논리적 아키텍쳐
일반적으로 파이프라인에서 변화 전파 흐름은 :
- Aesop Relay 는 하나 이상의 설정된 Event Producer 와 시작된다. Relay 와 Event producer 의 단순 설정은 여기있다 : Sample Relay Configuration.. 설정 파일의 이름은 spring-relay-config.xml 처럼 고정되어 있다. 또한 배포 디렉토리에 이러한 여러 파일을 갖을 수 있다.
Trooper runtime 은 이 파일들에 정의된 Relay 와 Event Producer 인스턴스를 선택하고 로드한다.
각 설정 파일은 Trooper 에 의해 분리된 배포 모듈로 관리된다.
- 각 Relay의 설정은
RelayConfig
의 인스턴스에 의해 정의된다.RelayConfig
는 listening port, 이벤트 버퍼 할당 정책, checkpoing 저장 위치등 자세한 정보를 담고 있다. - Event Producer 는 Relay 가 사용하는 소스 설정과 관련있다. 즉,
PhysicalSourceConfig
가 포함하는 하나 이상의LogicalSourceConfig
정의.
Relay 구성 파일의 정의가 포함되어 있다. [어렵다.. Sample Relay Configuration xml 파일을 보자;;;] - Relay 인스턴스는 Factory 에 의해 생성된다. 즉
DefaultRelayFactory
. 이 Factory 는 relay 설정과ProducerRegistration
의 하나 이상의 인스턴스를 획득한다. 그것은 Event Producer 와 source configuration 을 연결한다.
Sample Relay Configuration. 과 같이 보자;;;
- 각 Relay의 설정은
- 각 Event Producer 는 마지막 바라본 SCN(System Change Number) 를 사용하여 초기화 된 후 Relay에 의해 시작된다. 각 Event Producer 구현은 event sourcing/production 의 주기로(Cycle) 실행하고 각 주기의(Cycle) 끝에서 마지막 바라본 SCN 을 checkpoint 한다.
Cycle 은 위 그림에서 확인!! - Aesop Client 는 하나 이상으로 설정된 Event Consumer 와 시작된다. Client 와 Event Consumer 의 단순 설정은 여기 있다: Sample Client Configuration. 설정 파일의 이름은
spring-client-config.xml
처럼 고정되어 있다. 또한 배포 디렉토리에 이러한 여러 파일을 갖을 수 있다. Trooper runtime 은 이 파일들에 정의된 Relay 와 Event Producer 인스턴스를 선택하고 로드한다. 각 설정 파일은 Trooper 에 의해 분리된 배포 모듈로 관리된다.- 각 Client 의 설정은
ClientConfig
의 인스턴스에 의해 정의된다.ClientConfig
는 listening ports, data puller 속성, checkpoint를 저장하는 위치 등 이러한 자세한 정보를 담고 있다. - Consumer에 관심이 있는 Event Consumer 는 실행중인 Relay 와 Avro 변경 이벤트의 유형을 가리키는
RelayClientConfig
를 사용하여 Client와 연결되어 있다. Client 설정 파일은 그 정의들을 담고 있다. [어렵다.. Sample Client Configuration xml 파일을 보자;;;] - Client 인스턴스는 Factory 로부터 생성된다. 즉
DefaultClientFactory
. 이 Factory 는 client 설정과 하나 이상의ConsumerRegistration
의 인스턴스를 보유하고, source 구성과 Event consumer 를 연결한다. - Client 설정은 선택적으로
BootstrapClientConfig
를 갖을 수 있다. client 의 cold start 나 relay 로 부터 떨어졌을때, 이 설정은 Bootstrap Server 를 참조한다. client 는 Bootstrap server 로 부터 Relay 를 따라 잡기 위해 snapshot 을 소비하고, 온라인 소비모드로 변경한다.
- 각 Client 의 설정은
- 각 Event Consumer 는 마지막 바라본 SCN(System Change Number)을 사용하여 초기화 된 후 Client 에 의해 시작된다. 각 Event Consumer 는 Relay 또는 Bootstrap Server 를 소비하는 각 변경 이벤트에 대해 Callback 이벤트를 수신한다. 이벤트 payload 는 Avro 변경 이벤트 타입니다.
- 각 consumer 는 변경 이벤트를 다르게 처리 할 수 있다. 변경 전파 파이프라인 안의 실제 Consumer 는 downstream 데이터 저장소에 쓸 수 있다. log 파일 또는 검색이 가능한 보조인덱스에..
- Bootstrap producer 는 변경 이벤트를 Mysql snapshot 데이터베이스에 작성하는 Event Consumer 의 특별한 종류다. 이 데이터베이스는 위에 서술한 것 처럼 소비자에게 데이터를 제공하기 위한 Bootstrap server 에 의해 사용된다.
- Aesop 과 Databus 는 통계 수집은 통계를 수집하고 JMX 를 통해 노출한다. dashboard 는 실시간 변경 뷰를 제공하기 위해 이 집계데이터를 사용한다. Aesop 의 특정 사용자 또한 JMX 메트릭을 직접 사용하고, StatsD / Graphite 같은 time series database 로 넣을 수 있고, Skyline 같은 알림 툴을 사용 할 수 있다. JMX 모니터 컴포넌트는 곧 오픈소스화 될 것이다. 대안으로 jmxtrans 같은걸 포함.
- [정리] 정보이론: 정보량 (Information), 엔트로피 ( Entropy ), 쿨백 라이블러 발산 (KL-Divergence), 크로스 엔트로피 ( Cross - Entropy ), maximum likelihood
- [발번역] Bag of words (BoW) - Natural Language processing
- Installing Anaconda and Jupyter notebook
- 다시 보는 Java : FileChannel transferTo()
- 다시 보는 Java : NIO Channel
- 다시 보는 Java : Socket-Direct-Protocol
- 다시 보는 Java
- Streamsets DataCollector Source Build
- Apache Helix Core Concepts
- Introduce Flipkart Aesop