MSA 구현 패턴
1. API First Design
타 서비스나 화면에서 필요한 기능을 제공하는 인터페이스로 API를 식별
물리적으로 서비스가 분리되지만, runtime coupling이 발생하여 강결합 상태가 됨
--> API Gateway, Service Meshg, LB, Service Registry, Circuit breaker 등을 활용한 추가 구성 필요
(1) 동기 호출 구성 : 직관적이며 이해하기 쉬움. callee가 항상 가용해야 함. 2PC가 가능함
(2) 비동기 구성 : 응답이 필요없거나 트랜잭션 분리가 가능하거나 호출대상 API 처리 시간이 길 경우 사용
--> callback 함수, 서비스 간 공유 cache/DB 를 활용하여 처리 결과 폴링
https://mangdan.github.io/api-first-design-and-development-1
API-Design First & Microservice 개발 1탄 - API 디자인 및 프로토타입
API 설계부터 구현, CI/CD 파이프라인, 컨테이너 배포 및 API 퍼블리시까지 전반적인 API Development Lifecycle을 오라클 솔루션을 사용해서 실습해 볼 수 있도록 작성되었습니다. 내용이 좀 많기 때문에
mangdan.github.io
Synchronous / Asynchronous
Notification vs Request/Async Response
Publish/Sucscribe
분산 트랜잭션
NoSQL, MSA에 기반한 App 별 분리된 DB 사용, 서비스 간 데이터 일관성 필요
ACID 에 대응하는 BASE
Atomicity (원자성)
Consistency (일관성)
Isolation (독립성)
Durability (지속성)
BA (Basically Available)
S (Soft-State)
E (Eventually Consistency)
Compensating Transaction (보상 트랜잭션)
서비스 간 트랜잭션 처리 과정에서 실패/에러가 발생하는 경우, 명시적(프로그래밍)으로 실패에 대한 처리를 해야 한다.
SAGAS
1987년도 Hector Garcia-Molina 가 작성한 논문에서 제안된 용어이다.
Orchestration
중앙(한곳)에서 비즈니스와 트랜잭션을 제어하는 방법.
Command 기반으로 동작한다.
Choreography
상호간 서비스 실행 결과에 따라 정상/비정상 처리 결과에 따른 로직을 수행한다.
Event 기반으로 동작하며, 서비스들 간 발행/구독된 이벤트에 따라 로직이 실행됨.
분산 데이터 조회
API Composition
각 서비스들의 API를 호출하고, 그 결과를 조합하여 하나의 Response를 만들어 제공
CQRS (Command Query Responsibility Segregation)
Command와 Query를 분리하는 패턴 (저장과 조회를 분리)
데이터 복제 방식
CDC (Changed Data Capture)
Batch/ETL
Message Queue
MSA를 구성하는 기술들
API Gateway
https://aws.amazon.com/ko/api-gateway/
Service Mesh
https://www.redhat.com/ko/topics/microservices/what-is-a-service-mesh
Backing Service
MSA 제대로 이해하기-(5)Backing Service
이번 시간에는 MSA의 Outer Architecture 중 Backing Service에 대해 알아보도록 하겠습니다. Backing service 우선 Backing Service란, 어플리케이션이 실행되는 가운데 네트워크를 통해서 사용할 수 있는 모든 서
velog.io
MSA School
MSA 핵심패턴만 빠르게 이해하기
마이크로서비스 패턴: 핵심패턴만 빠르게 이해하기
크리스 리처드슨의 '마이크로서비스 패턴'에 나오는 44가지 패턴 중 핵심 패턴인 Saga. Event sourcing, API composition, CRQS, External API, Transactional Outbox/Polling publisher/Transaction Log tailing..
happycloud-lee.tistory.com

비동기 메시지 기반 주문 처리



https://happycloud-lee.tistory.com/188
MSA특성과 MSA 12 Factors 이해
Microservice의 4가지 정의와 정렬하여 MSA특성과 MSA 12 Factors를 정리하면 아래와 같습니다. 좀 더 이해하기 쉽게 각 Microservice정의별로 설명하면 아래와 같습니다. Loosely Coupled Build, Deploy Indivi..
happycloud-lee.tistory.com
이벤트 스토밍
도메인 주도 설계
1. 전략적 설계
1.1. 바운디드 컨텍스트
1.2. 유비쿼터스 언어 (보편언어)
1.3. 컨텍스트 매핑
- 공유커널 (shared kernel): 바운디드컨텍스트 사이에 공통 모델 공유하는 관계
- 고객공급자 유형(customer-supplier): 고객이 원하는 것을 공급자가 제공해주는 관계
- 준수자 유형(confirmist): 공급자의 모델을 그대로 따르는 방식의 관계
- 충돌방지계층(anti-corruption layer): 공급자 모델과 고객 모델 사이에 번역 계층을 만드는 방법
- 공개 호스트 서비스(open host service): 바운디드 컨텍스트에 접근할 수 있는 인터페이스를 정의하는 방법
- 발행된 언어(publiched language): 바운디드 컨텍스트의 규모와 상관없이 사용과 번역을 가능하게 하는 문서화된 정보교환언어를 제공하는 방법
2. 전술적 설계
2.1. 애그리거트
2.2. 엔티티, 값객체
2.3. 도메인 서비스
2.4. 애플리케이션 서비스
MSA
MSA 전환 접근 전략
- 빅뱅 방식
- 미트 인 미들
- 현행 시스템 중심 비즈니스 요구에 의한 점진적 전환
MSA 서비스 도출 과정
1. 후보 서비스를 도출
- 대상 업무를 기능 레벨로 분해하여 후보 서비스를 도출한다.
- 조직 구성 (운영팀 등)에 따라 기능을 분해한다.
- 공통 기능(업무)를 한곳에 모은다.
- 분해된 기능 목록을 특정 레벨 기준으로 후보 서비스를 도출한다.
- bounded context 와 shared kernel 로 구분
2. 도출된 서비스 평가
- 도출된 서비스를 평가한다.
- 서비스의 현재 업무 연관도와 database (분산) 를 분석한다.
- 업무 요건에 따라 평가 지표 항목을 정의한다.
- 독립 배포 (서비스 간 연관도, 데이터 상관 관계 등)
- 트랜잭션 증가 (데이터 용량, 증가 등)
- 빠른 배포/반영 여부
- 요구사항 변경 빈도 (업무변경)
- 조직 구성 형태 (운영 조직)
- business agility
3. 평가 결과에 따른 서비스 정의
- bounded context 정의
- shared kernel 정의
- 서비스별 분산 데이터베이스 정의
- 분산 또는 scale out 대상 정의
- 서비스 별 아키텍처 정의
4. 설계
- tobe 시스템 설계 : cqrs, circuit breaker, saga, 비동기 등
- 데이터 설계 : 파티셔닝, 조인 등
- shar kernel 설계시
- DB 복제
- Cache 활용
- 배치, 리포트
- 신속하고 빠른 배포를 위해 분리
- 사용량 증가/폭증에 대비한 유연한 확장 구조를 위한 분리
- 장애 격리를 위해 분리
- 서비스 독립성을 고려하여 비동기 호출 설계 (noti, async response, pub/sub)
- callee 서비스의 응답이 필요없거나, 처리시간이 오래 걸릴 경우 : ntification
- 1:N 형태로 event 전달이 필요한 경우 : pub/sub
- 조회 업무가 대부분인 경우 CQRS로 분리 (데이터 정합성을 위해 DB 복제 사용. 데이터 복제는 event/message queue 활용, 통계/조회 업무 등) -> 필요한 데이터가 서비스 내에 존재하므로 API Composition과 달리 독립된 서비스 제공 가능
- 다수의 팀이 협업/설계하는 경우 shared kernel로 식별하여 통합 (공통 업무 등)
- 신기술 적용 및 검증을 용이하게 하기 위한 분리
- 실시간 데이터 정합성이 중요할 경우 서비스 통합 (2PC 가 중요하거나 기존 테이블 조인 분리가 어려울 경우)
- 서비스 간 프로세스 및 데이터 공유가 빈번할 경우 서비스 통합
5. 개선
Service Mesh
istio
istio와 envoy란
istio는 Serive Mesh를 구성하는 방식의 하나로 Side Car 역할을 하는 Proxy(envoy)와 이를 제어하는 ...
blog.naver.com
CQRS
shared kernel 설계시,
- 변경이 거의 없는 코드값 같은 데이터 : cache
- 일정 시간 내에만 동기화 되면 되는 경우 : message queue
- 변경시 즉시 조회 (정합성 높은 경우) : API 연계 나 Shared DB
휴리스틱 예외 ***********************
Eventual Consistency (결과적 일관성, 최종 일관성)
결과적 일관성을 위한 주문/재고/결제 MSA 구성방법 예시
REST 기반의 간단한 분산 트랜잭션 구현 - 3편 TCC Confirm(Eventual Consistency) | Popit
REST 기반의 간단한 분산 트랜잭션 구현 -1편 TCC 개관 REST 기반의 간단한 분산 트랜잭션 구현 - 2편 TCC Cancel, Timeout REST 기반의 간단한 분산 트랜잭션 구현 - 3편 TCC Confirm(Eventual Consistency) REST 기반의
www.popit.kr
SAGA 패턴
[Architecture] MSA : SAGA 패턴이란 - Azderica
[Architecture] MSA : SAGA 패턴이란 Posted 22. December 2020. 7 min read. MSA : SAGA 패턴의 정의과 종류 이전에 MSA 개념에 대해 잡아보았습니다. 오늘은 MSA를 듣다보면 꼭 듣게 되는 SAGA 패턴에 대해 공부해보겠
azderica.github.io
비동기메시징 이슈 및 해결방안
비동기메시징 이슈 및 해결방안
아래 글과 크리스리처드슨의 '마이크로서비스 패턴'을 참고했습니다. 비동기메시징시스템 이해: https://victorydntmd.tistory.com/343 kafka vs RabbitMQ 비교: https://coding-nyan.tistory.com/129 메시지 처리..
happycloud-lee.tistory.com
쿠버네티스
쿠버네티스 문서
쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하기 위한 오픈소스 컨테이너 오케스트레이션 엔진이다. 오픈소스 프로젝트는 Cloud Native Computing Foundation에서 주관한다.
kubernetes.io
MSA로 구성시 단점
다수의 micro App 으로 구성되므로, 구성요소 간 네트워크 트래픽이 비약적으로 증가됨 (모놀리틱과 비교하여)
- 네트워크 지연 발생
- 네트워크 트래픽 증가 (서비스 패킷 + 복제 + 하트비트 등 관리용 등등)
- 네트워크에 대한 신뢰성 문제 (네트워크 장애시, 또는 공격/해킹 등)
Service Mesh
네트워크 관련 비용 증가로 인해 통신 및 네트워크 기능을 어플리케이션 로직과 분리하여 제공하기 위한 인프라
- service discovery
- load bvalancing
- dynamic request routing
- circuit braking
- failure recovery
- health check
- metrics and telemetry
- authentication and security
PaaS 형태의 제공, Library를 활용한 API 활용, Sidecar proxy 형태 (istio/envoy )
Message Broker를 통해 데이터를 전달하게 되면, 2 Phase commit 이 불가능하게 된다.
또한 NoSQL DB 를 사용하거나 서비스별 DB가 분리되어 있다면 2PC가 불가능하게 되어 데이터 정합성을 유지하기 위한 방법이 필요하다. --> SAGA , 재처리, 보상트랜잭션, Batch 기반 실패건 처리 등 필요
- Orchestration 방식으로 중앙에서 보상처리 -> 구현이 쉬움
- Choreography 방식으로 서비스들 간 message/event 를 pub/sub 해서 처리함
기존 모놀리틱 App를 MSA구조로 변경시 DB 분리가 될 수 있는데, 이 때 join 이 필요할 경우는 API Composition을 활용하거나, DB복제를 통해 CQRS 패턴 적용
좀 더 읽어보기
https://www.nirs.go.kr/newsletter/2015-12/issue.html
정부통합전산센터 제12호 Newsletter
IT HOT ISSUE (광주) 정보시스템1군 운영 및 유지관리 / 대신정보통신컨소시엄 양시영 이사 2015.12 | Newsletter >> 대용량 웹서비스를 위한 마이크로 서비스 아키텍처의 이해 << :: 배경 :: 마이크로 서비
www.nirs.go.kr
'IT > Study' 카테고리의 다른 글
MSA가 어렵다고 하는 이유는 무엇일까 (0) | 2022.03.07 |
---|---|
IoT / oneM2M - 용어 정리 (0) | 2021.03.25 |