EDM은 특정한 경계 컨텍스트를 구현하기 위해 개발한 작은 애플리케이션이라고 함.
consumer microservice
producer microservice
이벤트 브로커는 이벤트 스트림을 제공한다고 함..
EDM은 이벤트 브로커에 이벤트를 생산/소비하는 공통 기능을 공유하며 비동기로 통신하다고 함...
마이크로서비스가 이벤트를 받아들이고, 처리, 출력하는 구성을 의미
변환, 저장, 방출등을 data driven operation이라고 함..
key가 있는 이벤트이지만 entity를 나타내는건 아닌 이벤트라고 함..
예) (상품 id, 상품 스트림?)
entity event가 특정 시점의 엔티티 상태라면 keyed event는 여러 시점에서의 엔티티 상태들을 value로 가진다고 보면 되나..?
엔티티 이벤트 스트림에서 흘러온 엔티티 이벤트를 순서대로 적용하면 stateful table(상태 저장 테이블)을 구체화할 수 있다..??
테이블-스트림 이원성..?(table stream duality)
이벤트들이 upsert되어 상태 테이블을 이루거나, 반대로 각 업데이트들을 이벤트 스트림에 발행하여 테이블을 엔티티 이벤트의 스트림으로 바꿀 수도 있다는 것을 의미..
붙임 전용(append only) 파일?
mysql binlog가 예시라는데, binlog는 모든 데이터 변경에 대한 로그임.
docs / mysql binary log overview
append only라는게 replication 위한 거고, 현재 존재하는 데이터를 변경없이 그대로 append하게 해주는 속성을 말하는듯.
그래서 붙임 전용 불변 로그라고도 부르는 듯
키 있는 이벤트는 툼스톤 이벤트(값이 null인데 key는 있는 이벤트)로 삭제한다고 함...
붙임 전용 불변 로그는 compaction이 필요하다고 함..
compaction은 이벤트 브로커가 내부 로그 크기를 줄이려고 key별로 가장 최근 이벤트 하나만 보관하는 거라고 함..
(compaction도 tradeoff가 있음을 추측 가능.)
이벤트 브로커의 역할은 이벤트를 받아서 queue 또는 이벤트 스트림에 저장하고, 다른 프로세스가 이것을 소비할 수 있도록 제공하는거라고 함..
scalability, durability, high availability, high performance 특징이 필요하다고 함.
이벤트 보관과 처리에 관련된 여러 요건들이 있음..
근데 하나도 안 와 닿아서 일단 스킵
이것도 안 와닿아서 일단 스킵
이벤트 브로커는 메세지 브로커 대신 쓸 수 있지만,
메세지 브로커는 이벤트 브로커 기능을 완전히 대체할 수 없다고 함...
메세지 브로커
발행/구독 메세지 큐를 이용.
producer가 큐에 메세지를 쓰면 consumer는 메세지를 받아 소비하고 ACK를 보냄.
ACK 신호가 확인되면 메세지는 삭제됨
이벤트 브로커
순서대로 쌓은 로그를 제공할 목적으로 설계되었다고 함.
메세지 브로커와 달리 여러 컨슈머가 이벤트에 마음껏 접근 가능하다고 함.
파티션된 이벤트 스트림이라는거 때문에 가능한듯.
(메세지 브로커는 큐 단위로만 처리되어 한 이벤트는 한 컨슈머만 소비가능하다고 함)
그리고 이벤트 브로커에서는 이벤트를 소비해도 이벤트가 보존됨.
컨슈머는 이벤트 스트림이나 큐로 이벤트를 소비한다고 함..
이벤트 브로커는 서비스가 데이터를 생산,소비하는 유일한 장소가 된다고 함..
이벤트 브로커가 single source of truth이 되면, 개발이 편해진다고 함..
마이크로서비스는 수가 많아지면 관리하기 어려워진다고 함
마이크로서비스를 소유한 팀별로 관리/배포할 수 있어야 한다고 함
도커같은 컨테이너 기술로 애플리케이션 격리시키고, 쿠버네티스 같은 컨테이너 관리 소프트웨어로 관리하면 됨.
경계 컨텍스트 개념이 그리 와닿지 않음
이벤트를 소비한다는게 구체적으로 어떤 동작을 하는건지 모름
이벤트 스트림에 이벤트를 생산한다는게 어떤 동작을 하는건지 모름
이벤트 브로커가 어떻게 생겼는지 모름
keyed event는 이벤트 스트림의 한 파티션 내에서 data locality를 보장하기 위해 이벤트 스트림을 파티셔닝하는 용도로 쓰인다는데.. 무슨 말인지 모름
table stream duality에서 테이블을 이벤트 스트림으로 만든다는게,
구체적으로는 SQL 쿼리들 모아놓은걸 이벤트 스트림으로 만드는거 아님?
구글 프로토콜 버퍼가 뭐하는 것이고, 왜 쓰는지 모름
컨슈머가 이벤트를 소비하는 방법(이벤트 스트림 또는 큐) 이해 안 됨