마이크로 서비스 아키텍처는 독립적인 서비스에 책임을 분산합니다. 이러한 독립성으로 다음과 같은 일반적인 아키텍처 문제를 처리하는 방법이 변경됩니다.
- 분산 트랜잭션이 없는 데이터 일관성 유지 관리
- 서비스 간 통신 관리
- 오류가 연속되지 않도록 오류 격리
- 마이그레이션 중 레거시 시스템 통합
이 문서의 디자인 패턴은 이러한 문제를 직접 해결합니다. 각 패턴은 마이크로 서비스를 디자인, 빌드 및 작동할 때 발생할 수 있는 특정 문제를 대상으로 합니다.
일반적인 디자인 패턴
손상 방지 계층 은 동일한 의미 체계를 공유하지 않는 하위 시스템 간에 외관 또는 어댑터 계층을 구현합니다. 이 패턴은 하위 시스템 간의 요청을 변환하고 호환되지 않는 도메인 모델이 있는 레거시 시스템 또는 기타 서비스에 대한 종속성이 새 서비스의 디자인을 제한하는 것을 방지합니다.
프런트 엔드의 백 엔드는 데스크톱 및 모바일과 같은 다양한 유형의 클라이언트에 대해 별도의 백 엔드 서비스를 만듭니다. 이 방법을 사용하면 단일 백 엔드 서비스가 다양한 클라이언트 유형의 충돌하는 요구 사항을 처리할 필요가 없습니다. 이 패턴은 클라이언트별 문제를 구분하여 각 마이크로 서비스를 단순하게 유지하는 데 도움이 됩니다.
Bulkhead 는 각 워크로드 또는 서비스에 대한 연결 풀, 메모리 및 CPU와 같은 중요한 리소스를 격리합니다. 이 격리는 단일 워크로드 또는 서비스가 모든 리소스를 사용하지 못하게 합니다. 이 패턴은 하나의 서비스가 연속 오류를 발생시키는 것을 방지하여 워크로드 복원력을 높입니다.
안무를 사용하면 각 서비스가 중앙 오케스트레이터에 의존하지 않고 비즈니스 작업을 처리하는 시기와 방법을 결정할 수 있습니다. 이 패턴은 서비스 간의 결합을 줄이고 빈번한 서비스 업데이트 또는 변경을 지원합니다.
CQRS(명령 쿼리 책임 분리) 는 읽기 작업을 쓰기 작업에서 별도의 데이터 모델로 분리합니다. 이 패턴은 읽기 및 쓰기에 다른 성능 또는 크기 조정 요구 사항이 있는 마이크로 서비스의 성능, 확장성 및 보안을 향상시킵니다.
게이트웨이 라우팅은 API 게이트웨이를 역방향 프록시로 사용하여 클라이언트 요청을 요청에 따라 다른 서비스로 라우팅합니다. 이 방법은 클라이언트에 많은 엔드포인트 대신 단일 엔드포인트를 제공합니다.
게이트웨이 집계 는 게이트웨이를 사용하여 여러 클라이언트 요청을 단일 요청으로 결합합니다. 이 방법을 사용하면 클라이언트와 서비스 간의 대화가 줄어듭니다.
게이트웨이 오프로드는 개별 서비스에서 이러한 문제를 별도로 구현할 필요가 없도록 SSL(Secure Socket Layer) 종료, 인증 및 속도 제한과 같은 교차 절단 기능을 게이트웨이로 중앙 집중화합니다.
자세한 내용은 마이크로 서비스에 대한 API 게이트웨이를 참조하세요.
Saga 는 독립적인 데이터 저장소가 있는 마이크로 서비스에서 데이터 일관성을 관리합니다. 사가는 각 서비스가 작업을 수행하고 다음 단계를 트리거하는 로컬 트랜잭션의 시퀀스입니다. 단계가 실패하면 사가는 이전 변경 내용을 실행 취소하기 위해 보상 트랜잭션을 실행합니다. 이 패턴은 마이크로 서비스 아키텍처에서 비실용적인 분산 트랜잭션을 대체합니다.
Sidecar 는 애플리케이션의 도우미 구성 요소를 별도의 컨테이너 또는 프로세스로 배포하여 격리 및 캡슐화를 제공합니다. 이 패턴을 사용하여 로깅, 모니터링 및 네트워킹 구성과 같은 일반적인 기능을 서비스 코드에 포함하지 않고 서비스에 연결합니다.
Strangler Fig 는 특정 기능을 새 서비스로 점진적으로 대체하여 레거시 시스템에서 증분 마이그레이션을 지원합니다. 레거시 시스템을 완전히 대체할 때까지 소비자는 마이그레이션이 진행되고 있다는 사실을 모르고 동일한 인터페이스를 계속 사용합니다.
지원 패턴
서비스 간 통신은 서비스 간 호출의 복원력을 위한 재시도 및 서킷 브레이커 패턴을 설명합니다.
Azure 아키텍처 센터의 클라우드 디자인 패턴의 전체 카탈로그는 클라우드 디자인 패턴을 참조하세요.
다음 단계
- 교육: .NET을 사용하여 첫 번째 마이크로 서비스 빌드
- 마이크로 서비스란?
- 마이크로 서비스 아키텍처