시스템이 너무 복잡해져서 ROI 등을 따져서 적절하게 MSA로 전환하는데,

이벤트 방식으로 데이터 변경 사항을 전파시(loose 커플링, 장애 복구성 등의 장점 때문에) 순서에 대한 보장의 문제 등을 겪게 될겁니다.

 

이런 순서에 대한 문제를 해결하기 위한 방법이 있기는 하지만, 코드 및 아키텍쳐의 복잡성을 낮추기 위해서 저는 보통 zero-payload방식을 사용(추천)합니다.

 

간단히 핵심 내용만 정리하자면 아래와 같습니다.

 

zero-payload events

  1. 데이터 발생서비스는 메시지큐(kafka, aws sqs 등)에 변경이 발생한 데이터의 id(예. 주문ID와 같은 RDB에서의 PK)만 메시지큐에 발행(pub)
  2. 전파받아야하는 서비스(메시지 큐를 sub)하는 서비스는 해당 id로 메시지 발행 서비스에 API로 최신정보를 조회 

 

 

참고 링크: reflectoring.io/microservice-communication-patterns/

 

Microservice Communication Patterns

A discussion of several different communication patterns between distributed micro services.

reflectoring.io

 

 

 

 

2023-07-13 내용 추가

배민 회원시스템쪽에서 자세히 설명해두셔서 링크 추가

  - https://youtu.be/b65zIH7sDug?t=1094 

 - https://techblog.woowahan.com/7835/ 

Transactonal Outbox Pattern

 

 

테이블 DDL 샘플

----

 

분산트랙잭션을 구현하는 여러 가지 방법이 있는데 그 중 outbox 패턴 방식 메모

 - 많이 쓰는 로컬 RDB를 이용하는 방법이라서 쉽게 적용 가능한 장점이 있음

 

참고 링크

 - https://www.popit.kr/msa%EC%97%90%EC%84%9C-%EB%A9%94%EC%8B%9C%EC%A7%95-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0

 

MSA에서 메시징 트랜잭션 처리하기 | Popit

비동기 메시지를 사용하여 상호 간에 통신하는 방식을 메시징 Messaging[1] 이라고 부른다. 마이크로서비스 환경에서 비동기 처리 시 보통 카프카 Kafka 나 래빗엠큐 RabbitMQ 같은 메시지 브로커 Message

www.popit.kr

 - https://debezium.io/blog/2019/02/19/reliable-microservices-data-exchange-with-the-outbox-pattern/

 

Reliable Microservices Data Exchange With the Outbox Pattern · Debezium

In order to provide their functionality, microservices will typically have their own local data store. For instance, the order service may use a relational database to persist the information about purchase orders. When a new order is placed, this may resu

debezium.io

 

- https://sarc.io/index.php/cloud/1944-msa-transactional-outbox-pattern

 

MSA - Transactional Outbox Pattern

Tech Note 정보 애리얼 님이 작성하신 글입니다. 카테고리: [ Cloud Computing & MSA ] 게시됨: 19 May 2020 작성됨: 19 May 2020 최종 변경: 26 May 2020 조회수: 3664 1. 개요 MSA에서는 서비스 간 결합도가 낮아야 하기

sarc.io

 


메모

- MSA 아키텍쳐, 그 중에 outbox pattern

  ( RDB 트랜잭션을 이용한 atomiccally 처리)


https://microservices.io/patterns/data/transactional-outbox.html

+ Recent posts