MSA 전환을 위해 풀어야할 문제 식별 + 패턴
분해, 통신 , 트랜잭션 패턴
1. 분해 패턴
어떤 판단 기준에 따라 서비스를 분리할 것인지? 정의.
상황에 따라, Biz.의 복잡도에 따라 다르기에 절대적인 정답은 없다.
(1) Biz. 성격에 따른 분해
e.g. 송금 서비스, 주문 서비스..
장점: 비즈니스가 복잡, 대규모조직인경우, 비즈니스 특성으로 내부 서비스간 통신이 빈번할 경우
단점: 서비스 간 응집도,결합도,종속성 증가
(2) 하위 도메인 패턴별 분해 (sub -domain) from DDD - 도메인 주도 패턴
하위도메인을 기준으로 서비스를 하나씩 만든다.
e.g. 계좌 도메인, 내부 머니 도메인, 뱅킹(외부 은행 통신만 담당)..
장점: 서비스간 독립성,격리성 증가/결합도 감소, 장애 영향도 최소화
단점: 서비스간 불필요한 통신 가능성 (HTTP, gRPC) 성능 이슈, 지나치게 많은 서비스로 분리될 가능성
송금이라는 도메인 하위에 각각의 기능을 하위도메인으로 정의하여 하위도메인 패턴 분해에 대한 결과물도 됨.
송금 도메인 -> 송금서비스, AML , CTR 등..
2. 통신
MSA 설계를 통해 도출된 서비스 간 어떤 방식으로 통신할지 결정하는 패턴
(1) 동기 패턴
e.g. http, gRPC..
Request이후 Response받을 때까지 멈춰있어도 되는 경우 (멈춰 있어야만 하는 경우, 2닷?)
(2) 비동기 패턴
e.g. Kafka 를 이용한 메세지 큐잉
Request 이후 Response를 당장 받지 않아도 되는 경우
응답없이도 request를 다양한 서비스에 계속 날릴수있다.
컴퓨팅 자원을 효율적으로 사용가능하다. 멈춰있지않으니..
Callback - 호출이후 응답을 줬을때, 트리거 메소드 개념
Polling - 일정 주기마다 http/gRPC콜을 통해 아까 request가 잘 되었는지 (동작이 잘 실행되었는지) response를 요청함
3. 트랜잭션 패턴
트랜잭션을 해결하기 위한 패턴
(1) 2PC (2 Phase Commit)
2단계의 커밋작업
커밋 리퀘스트를 하고... 검증을 거쳐 성공하면 그때 진짜 커밋함
성공/실패를 판단하는 코디네이터를 향한 요청에서 문제가 발생할수있어서 불안정함
(2) 보상 트랜잭션 (Compensating Transactions)
특정 요청과 그 요청에 대해 정상적이도 완전 종료된 행동을 rollback하기 위한 행동
오류난 서비스에서 보상트랜잭션을 실행하기에 아예 보상트랜잭셩이 실행안될수도있음..
(3) Saga 패턴
트랜잭션으 ㅣ선/후 관계를 정의하고 코디네이터가 보상 트랜잭션을 이용,관리하여 분산 시스템 환경에서 트랜잭션을 구현하기 위한 패턴.
2PC+ 보상트랜잭션의 장점을 합친 것..
특정 서비스에서 하나의 트랜잭션이 시작되고 정상완료가되면 saga가 생성되어 코디네이터로 전달된다.
각 서비스간 통신을 진행하다가 어떤 서비스에서 오류가 난다면 코디네이터쪽에 오류알림을 보낸다.
그러면 코디네이터가 보상트랜잭션을 실행하고 어떤 이전 트랜잭션을 실행할지 정의해둠
하지만 위와같이 오류난 서비스에서 다 오류나서 wrong요청 자체를 못할수도있다.
이를 해결하기위해 코디네이터 쪽에서도 특정 주기를 걸고 특정 시간이 지나도 succes,fail등의 응답이 없다면
자동으로 보상 트랜잭션을 실행하게 하는 기능을 추가할 수있다. (Timeout)
간편결제 MSA 초격차 패키지 강의
'프로그래밍 > MSA' 카테고리의 다른 글
[MSA] 레이어드 아키텍처란? (0) | 2024.08.05 |
---|---|
[MSA] MSA의 여러 패턴들 (1) | 2024.07.24 |
[MSA] MSA의 단점과 진입장벽이 높은 이유 (3) | 2024.07.22 |
[MSA] MSA의 핵심 원칙 (0) | 2024.07.09 |
[MSA] 아키텍처의 발전 과정 (모놀리식, SOA, MSA) (0) | 2024.07.03 |