마이크로서비스 아키텍처 (MSA)



마이크로서비스 아키텍처

마이크로서비스는 독립적으로 확장될 수 있는 작은 규모로 분할 된 서비스이다.
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. 서비스 라우팅 패턴
      • 스프링 클라우드 + 넷플릭스 주울
      • 쿠버네티스
그림 1- 라우팅 패턴


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


  • 보안 패턴
    • 스프링 클라우드 시큐리티
    • OAuth2, JWT
그림 3 - 보안 패턴


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


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


  • 개발 패턴
    1. 핵심 마이크로서비스 패턴
      • 스프링 부트
    2. 구성 관리
      • 스프링 클라우드 컨피그
    3. 비동기 메시징
      • 스프링 클라우드 스트림