마이크로서비스 패턴 4장

백종현·2024년 6월 4일
0
post-custom-banner

분산 트랜잭션 : 자바 EE 애플리케이션은 JTA 기술을 이용하여 분산 트랜잭션을 수행가능
하지만, 문제점이 많다. NoSQL DB와 메시지 브로커는 분산 트랜잭션을 제공하지 않음. 따라서 다른 메커니즘이 필요

사가 패턴

분산 트랜잭션 없이 데이터 일관성을 유지하는 메커니즘

사가는 보상 트랙잭션으로 변경분을 롤백. 중간에 실패했다면, 이전 N개의 트랜잭션을 언두하는 방식

코레오그래피 스타일

서비스 간 서로서로 이벤트를 주고 받으며 소통하는 방식

오케스트레이션 사가

오케스트레이션 클래스를 정의하고, 이 사가 오케스트레이터는 커맨드/비동기 응답 상호 작용을 하며 참여자와 통신.

비격리 문제 처리

하지만, 사가 패턴은 격리성(I)를 보장하지 못한다. 따라서, 소실된 업데이트, 더티 읽기, 퍼지/반복 불가능한 읽기가 발생한다.
따라서 아래와 같은 방식으로 해결한다.

• 시맨틱 락(semantic lock): 애플리케이션 수준의 락

• 교환적 업데이트(commutative updates): 업데이트 작업은 어떤 순서로 실행해도 되게끔 설계.

• 비관적 관점(pessimistic view): 사가 단계 순서를 재조정하여 비즈니스 리스크를 최소화.

• 값 다시 읽기(reread value): 데이터를 덮어 쓸 때 그 전에 변경된 내용은 없는지 값을 다시 읽고 확인하여 더티 쓰기(dirty writes)를 방지.

• 버전 파일(version file): 순서를 재조정할 수 있게 업데이트를 기록.

• 값에 의한(by value): 요청별 비즈니스 위험성을 기준으로 동시성 메커니즘을 동적 선택.
profile
노력하는 사람
post-custom-banner

0개의 댓글