마이크로서비스 아키텍처 (MSA)
08 Apr 2021마이크로서비스 아키텍처
마이크로서비스는 독립적으로 확장될 수 있는 작은 규모로 분할 된 서비스이다.
Service Discovery, API Gateway, Orchestration, Choreography, Context Boundary 등의 서비스들의 조합으로 이루어진다.
- 관리 컨테이너
- 개별 서비스 인스턴스를 구동/관리 할 컨텍스트.
- VM, Docker 등
- 외부 게이트웨이
- 외부에 api 형태로 기능 노출
- 외부 엑세스 관리, 트래픽 관리, 보안 정책 등 내부 마이크로서비스 환경 보호
- 서비스 메쉬 기능
- 서비스 간 통신을 느슨하게 결합 (유연성)
- 서비스 분리, 버전관리 전략 지원, Auto Scaling 관리 등 가능
- 서비스 라우팅
- 로드 밸런싱
- 서비스 디스커버리 : 서비스 레지스트리를 사용하여 구현. (마이크로 서비스간에 호출, 종속성관리)
- Config 저장소
- ID 공급자 : 서비스 인스턴스는 (신뢰할 수 있는)ID를 사용하여 통신.
- 서비스 이미지 레지스트리
- 빌드되고 테스트 된 서비스의 불변 이미지를 저장하는 레지스트리
- 코드 저장소 or Docker 이미지 레지스트리 or VM 이미지 BLOB 등등..
- 메시지 지향 미들웨어
- (게시/가입/화재/잊어버리기 등 과 같은)이벤트 및 메시지 중심 패턴을 지원하기 위해 비동기 메시징 채널이 필요.
- 빌드/테스트 자동화
- 배포 자동화
- 배포 뿐만 아니라 외부 아키텍처 자체의 변경 자동화 지원이 필요.
- 서비스 라우팅 설정
- 로드 균형 조정
- 서비스 검색 및 서비스 구성 데이터 업데이트 등
- 배포 뿐만 아니라 외부 아키텍처 자체의 변경 자동화 지원이 필요.
- 플랫폼 자동화
- 컨테이너의 프로비저닝
- 각 마이크로 서비스의 실행중인 인스턴스 관리 등
- 모니터링/경고
- 로깅/진단
- ID 제공
- 토큰 기반 인증/인가 서비스 사용하여 신뢰성 보장
마이크로 서비스 패턴 종류
마이크로 서비스를 구성하는 여러가지 패턴이 있다.
아래 패턴을 편하게 구현하도록 도와주는 여러 오픈소스들을 같이 적어놨습니다.
넷플릭스 OSS 는 MSA 관련 패턴들을 정형화하여 오픈소스화 한 프로젝트 입니다.
하지만 넷플릭스 OSS 또한 각 패턴별 러닝커브가 존재하고 알아야 할 종류들이 많습니다.
보통 대규모 시스템을 운영하는 기업들은 쿠버네티스를 사용하여 여러 패턴에 쓰이는 기술들을 안정적이고 효율적으로 운영합니다.
( 쿠버네티스 알아보기 )
- 라우팅 패턴
- 서비스 디스커버리 패턴
- 스프링 클라우드 + 넷플릭스 유레카
- 쿠버네티스
- 서비스 라우팅 패턴
- 스프링 클라우드 + 넷플릭스 주울
- 쿠버네티스
- 서비스 디스커버리 패턴

그림 1- 라우팅 패턴
- 회복성 패턴
- 클라이언트 부하 분산
- 스프링 클라우드 + 넷플릭스 리본
- 쿠버네티스
- 회로차단기 패턴
- 스프링 클라우드 + 넷플릭스 히스트릭스
- 폴백 패턴
- 스프링 클라우드 + 넷플릭스 히스트릭스
- 벌크 헤드 패턴
- 스프링 클라우드 + 넷플릭스 히스트릭스
- 클라이언트 부하 분산

그림 2 - 회복성 패턴
- 보안 패턴
- 스프링 클라우드 시큐리티
- OAuth2, JWT

그림 3 - 보안 패턴
- 로그 패턴
- 스프링 클라우드
- 슬루스
- 페이퍼 트레일
- 집킨

그림 4 - 로그 패턴
- 빌드/배포 패턴
- 지속적 통합(CI)
- Travis CI
- 쿠버네티스
- 코드형 인프라스트럭처 (IaC)
- 도커
- 불변서버
- 도커
- 피닉스서버
- Travis CI
- 도커
- 지속적 통합(CI)

그림 5 - 빌드/배포 패턴
- 개발 패턴
- 핵심 마이크로서비스 패턴
- 스프링 부트
- 구성 관리
- 스프링 클라우드 컨피그
- 비동기 메시징
- 스프링 클라우드 스트림
- 핵심 마이크로서비스 패턴