필요성
측면
느려지는 개발, 배포 과정으로 인해 필요한 비즈니스 개발지 지연된 적이 있나?
Business Capability
가능 여부
측면
사내 엔지니러이 최고 책임자 MSA 전환에 대한 충분한 필요성 공감?
분해패턴
: 분해를 해결하기 위한 패턴
모놀리식에서는 1개의 서비스였지만 MSA로 이동하며 1개의 서비스를 N개로 분리
비즈니스와 하위 도메인 패턴별 분리 2가지는 유동적임
비즈니스 능력에 대한 분해
: Business Ability
복잡한 비즈니스 능력을 기준
장점
단점
서비스, 즉 도메인 별 팀의 구조가 희석될 가능성 높음
하위 도메인 패턴별 분해(Sub-Domain) from DDD
복잡한 비즈니스여도, 포함된 내부의 하위 도메인을 단위로 분리
장점
단점
송금 서비스 예시
통신패턴
서비스가 쪼개졌으니까 어떻게 통신 할래? 해결
Sync Pattern : 동기
Response 받을 때까지 멈취있어도 되는 경우
Async Pattern : 비동기
Response를 당장 받을 필요 없는 경우
트랜젝션패턴
2PC
: 2 Phase Commit, 고전적 방식
코디네이터
: 2PC manage2단계로 관리
2번의 커밋 전부 성공해도 코디네이터에게 알려주는 과정에서도 Error 발생 가능성이 있음
보상 트랜젝션
: Compensating Transactions
완정히 종료된 트랜젝션을 그 이전 상태로 되돌리기 위한 트랜젝션
사가 패턴
: Sage Pattern
보상 트랜젝션의 장점 + 2PC 장점
2PC
보상 트랜젝션
사용안하는 것이 가장 BEST
Saga
Saga 시작 후, 일정시간 동안 코디네이터에게 롤백/커밋 이 날라오지 않으면 자동으로 보상트랜젝션 사용
데이터 쿼리 패턴
: MSA 설계하면서 생긴 데이터 쿼리의 어려움을 해결하는 패턴
2가지 패턴 모두 목적은 동일
API Aggregation 패턴
: API 조합 패턴
API 조합기
를 통해 여러개의 도메인에 대한 데이터 요청
후, 받아와서 1개의 값으로 return
하는 패턴CQRS 패턴
: Command와 Query 분리 패턴
Command
: Write, Update, Delete
Query
: Read
가시성
: Visibility, Observability
로깅, 모니터링의 어려움 해결하기 위한 패턴
한곳에서 모니터링
하나의 요청처럼 보이게 하는 트레이싱
(여러개의 트랜잭션을)로깅
: 트러블 슈팅, 누락 X
문제를 디테일
하게 봐야하기 때문에 누락이 되면 안됨.메트릭
: 시계열 지표들 저장, 누락 가능
증감률을 확인하는 것
이 목적, 따라서 누락 가능일정 시간으로 확인
: N second
구체적으로 로깅, 메트릭을 저장
하고 인덱싱하여 검색
할 지에 집중하는 패턴신뢰성
: Reliablilty
MSA 설계하면서 분리/분해로 인해 떨어진 신뢰성을 해결하기 위한 패턴
서킷 브레이커
: Circuit Breaker
분산 시스템에서 장애 전파를 막고 피해를 최소화 하기 위한 패턴
서킷 브레이커 있는 경우
200과 msg 전달
, 이를 통해 A는 신뢰할 수 있는 서비스서킷 브레이커 없는 경우
장애복구, 자가 치유, 무정지 배포
MSA로 인한 문제 발생 후, 해결 방법 패턴
테스트 패턴
테스트 본질을 해결하기 위한 패턴
외부 API 패턴
MSA에서 서비스 호출 시, 직접 호출이 아닌 외부 API를 통해 호출
통신과 관련된 종속성을 해결하기 위한 패턴
디스커버리 패턴