ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [매일읽기] SAGA Pattern
    개발자 라이프/매일읽기 2020. 8. 27. 19:46
    반응형

    원문 : https://medium.com/@omererakman/saga-pattern-2413e636ab16

     

    SAGA Pattern

    If you are working with Microservices and database per service then SAGA will be a topic for you to think about. With database per service…

    medium.com

    문제 상황

    • MSA에서는 각 서비스가 각자의 DB를 가지고 있음
    • 단순한 하나의 요청이라도 여러 서비스를 경유하는 트랜잭션이 될 수 있음
    • 이러한 트랜잭션 과정에서 ACID 원칙이 지켜져야 함
    • 전통적인 해결 방법으로 Two Phase Commit(2PC) 방식이 있음
      • NoSQL 에서 안됨
      • 블록킹 프로토콜

    사가(SAGA)란?

    • 분산 트랜잭션 문제를 해결하기 위한 패턴
    • 다중 데이터베이스들이 트랜잭션으로 묶이다보니 ACD만 지켜짐 (Isolation x)
    • Isolation 이 지켜지지 않으니 트랜잭션 간에는 영향을 줄 수 있고, 그렇기 때문에 다음과 같은 방법으로 보완할 수 있음
      • 상대적인 변경 : 특정 값으로의 변경이 아닌 증감을 통한 상대적인 변경
      • 상태 유지 : 각 레코드 별로 상태 값(PENDING 등)을 가지게 함
      • 버저닝 : 레코드들의 버전을 관리. (ex. 낙관적 잠금, optimistic locking)
    • 기존 데이터베이스는 트랜잭션이 도중에 실패하면 롤백으로 처리할 수 있었지만, 사가는 보상 트랜잭션(compensating transaction)을 별도로 진행해야 함
      • 레코드를 삽입하는 트랜잭션이 삽입 후 실패하게 되면, 해당 레코드를 삭제하는 별도의 보상 트랜잭션을 진행해야 함

    사가 패턴 구현

    코레오그래피(choreography) 방식 구현

    • 서비스들이 서로에게 이벤트를 발행/구독하는 방식
    • 서비스가 몇 개 없는 MSA에서는 간단히 구현할 수 있지만 시스템이 복잡해질수록 적합하지 않음

    코디네이터(coordinator) 방식 구현

    • 중앙에 이벤트 로직을 제어하는 코디네이터가 존재하는 방식
    • 구현에는 어렵지만 트랜잭션의 상태들을 살피거나 디버깅하기에 용이함

     

    반응형

    댓글

Designed by Tistory.