MSA소프트웨어 아키텍처를 설계함에 있어,
모놀리식 비즈니스 구조를 어떤 판단 기준에 따라 서비스를 분리할 것인지
에 대한 패턴
즉, "분해"를 해결하기 위한 패턴
- 복잡한 "비즈니스 능력"을 기준으로 서비스를 분해
- e.g. 송금 서비스, 주문 서비스,...
- 복잡한 비즈니스일지라도, 포함된 내부의 하위 도메인을 단위로 분리.
- e.g. 계좌 도메인, 내부 머니 도메인, 뱅킹(외부 은행과 통신만 담당), ...
MSA 설계를 통해 도출된 서비스를 사용하여 트랜잭션을 해결해 주기 위한 패턴 즉, "트랜잭션"을 해결하기 위한 패턴
2PC (2Phase Commit)
"트랜잭션의 완료"를 2(N) 단계를 거쳐서 결정
Commit Request --> (정말 commit? )
->(실패 시) -> Rollback
->(성공 시) -> Commit
Compensating Transactions (보상 트랜잭션)
특정 요청과 그 요청에 대해 정상적이고 완전히 종료된 "행동"(트랜잭션)을 그 이전 상태로 되돌리기 위한 "행동"(트랜잭션)
Saga Pattern(사가 패턴)
트랜잭션의 선, 후 관계를 사전에 정의하고 필요에 따라 Cordinator가 보상 트랜잭션을 이용, 관리하여 분산 시스템 환경에서 트랜잭션을 구현하기 위한 패턴
데이터 쿼리
의 어려움을 해결하기 위한 패턴Command(Write, Update, Delete)작업과, Query(Read) 작업의 EndPoint를 분리하고 Command 에서 발생된 데이터의 변경을 이벤트 발행을 통해 원하는 포맷대로 Query를 위한 전용 데이터 구조를 만들어 이곳에 복잡한 Query를 담당
e.g. 강남구에 사는 모든 주민들의 잔액 총합을 실시간으로 알고 싶다면?
MSA 소프트웨어 아키텍처를 설계하면서 생긴 로깅, 모니터링의 어려움(가시성의 부재)
로깅 및 메트릭의 중앙집중 및 필터링 등을 통한 한곳에서의 모니터링
하나의 트랜잭션에 대해 여러개의 각 서비스 요청들을 하나의 요청처럼 볼 수 있게 하는 트레이싱
로깅 : 누락없이 왜?, 언제?, 어디서? 어떤 영향을 미쳤는지 알기 위해 사용
메트릭: 외부 지표들을 시리얼 방식으로 저장(프로메테우스, influx)
시간에 따라서 증감하는 수치를 보는 것에 대한 의의
구체적으로 어떻게 로깅, 메트릭을 저장하고 인덱싱하여 검색할 지에 집중하는 패턴
서킷 브레이커 (Circuit Breaker)
신뢰성을 높이기 위한 패턴의 일종으로, 분산 시스템에서 장애 전파를 막포 피해를 최소화 하기 위한 패턴