https://www.youtube.com/watch?v=TDhknOIYvw4
https://www.youtube.com/watch?v=12EGxMB8SR8
이벤트 소싱은 도메인 모델에서 발생하는 모든 이벤트를 기록하는 저장 기법이다.
이벤트 소싱은 클라우드에서 구동되는 메시지 중심의 분산 시스템에 적합하기 때문에 점점 주목받고 있다.
하지만 기존의 데이터 저장 방식과는 많이 다르기 때문에 진입장벽이 높다.
이벤트 소싱은 데이터 저장하는 기법임
이벤트 드리븐 메세지 드리븐 패턴과는 다른것. 이벤트 소싱은 이벤트 드리븐과 궁합이 잘맞을뿐. 두개를 구분해야함.
장바구니 넣다 뺐다..맞춤광고 빡!하고싶을것..
이 이벤트를 재생해서 상태를 만들어 낸다.
이벤트는 절대 삭제되거나 수정되지 않는다. 오직 추가만된다.
깃!!! 변경된 내용만 기록
명령은 검증대상임(성공 /실패할 수 있음. 명령형 동사로 이름지음)
이벤트는: 이미 벌어진 돌이킬 수 없는 사실임. 검증대상아님. 과거형동사임.
정책이 바뀌어서 명령은 검증을 해도 이벤트는 돌이킬수 없기에 검증 x
state n = Seed + 시그마(i=1~n) Event i
분산시스템의 경우 모가 잘못되면 일반적으로 최종상태만 볼수 있기에 과거 상태 볼 수 없지만 이벤트는 볼수 있다.
과거 특정시점으로 복원할 수 있다.
key : Object Id ,version
value: Event Type , Serialized Payload
ShoppingCartId, Version , EventType, payload 이렇게 RDBMS에 저장하면됨
백만개의 이벤트를 가지는 도메인 개체
state n = state m + 시그마(i=m+1~n) Event i
스냡샷 저장소 만든다. 롤링해 나간다.
key: object Id value: version, serialized state
메시징
이벤트 소싱과 메시지 중심 아키텍처
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery -Mathias Verraes
1.정확히 한번 배달
2PC ,무거움 MSA에서 요즘 없다!
2.최대한 한번 배달
메세지 유실 가능성 열어두겠다.
3.최소한 한번 배달
최소한 한번 가고 문제가 있을때 더 갈 수 있다.