[MSA] Micro Service Architecture: Outer - Service Mesh


MSA의 Outer Architecture 중 Service Mesh에 대해 알아보자.



MSA 개념 설명 읽어보기




Service Mesh


  • 마크크로서비스 간의 통신(네트워크)을 제어하는 역할
    • 통신 및 네트워크 기능을 비즈니스 로직과 분리한 네트워크 통신 인프라
    • 모든 서비스의 인프라 layer로 서비스들 간의 통신 처리
  • service discovery, service routing, load balancing(트래픽 관리) 및 보안 등을 담당함



API Gateway와의 차이점


먼저 [MSA] Micro Service Architecture: Outer - External Gateway를 읽고 아래 표를 보는 것을 추천한다.

  • 최근 MSA에서 다음과 같이 사용:
    • API Gateway는 노출되는 부분(External)에 위치하며 내부서비스를 보호 및 제어하는 역할로 사용
    • Service Mesh는 내부 서비스(Internal)에 위치하여 서비스를 관리하는 구조로 사용
API Management Service Mesh
적용되는 위치 마이크로서비스 그룹의 외부 경계에 위치하여 역할 수행 경계 내부에서 역할 수행
아키텍쳐 형태 중앙집중형 아키텍쳐 = SPOF(Single Point of Failure) 생성 분산형 아키텍쳐 = SPOF를 생성하지 않고 확장이 용이
패턴 - Gateway proxy pattern 사용
- Consumer(호출자)가 구현 내용을 알 필요없이 Gateway를 호출하는 방법만 알면 Gateway가 알아서 수행해주는 방식
- Sidecar proxy pattern 사용
- Consumer(호출자)의 코드에 Provider(공급자)의 주소를 찾는 방법, failover와 관련된 코드 등의 내용이 들어가게 설정
- 호출자의 코드는 어플리케이션 코드(비즈니스 로직)에 내장되지 x, sidecar 형태로 별개로 관리됨
라우팅 주체 서버 요청하는 서비스
라우팅 구성요소 별도의 네티워크를 도입하는 독립적인 API gateway 구성 요소 서비스 내 sidecar로 Local network 스택의 일부가 됨
로드 밸런싱 - 단일 엔드포인트를 제공
- API Gateway 내 로드밸런싱을 담당하는 구성요소에 요청을 redirection하여 해당 구성 요소가 처리함
- Service Registry에서 서비스 목록을 수신함
- sidecar에서 로드밸런싱 알고리즘을 통해 수행함
네트워크 외부 인터넷과 내부 서비스 네트워크 사이 - 내부 서비스 네트워크 사이
- 응용 프로그램의 네트워크 경계 내에서만 통신이 가능하게 함
분석 API에 대한 사용자 및 공급자에 대한 모든 호출에 대해 수집되고 분석 Mesh 내 모든 마이크로서비스 구성요소에 대해 분석



Service Mesh의 종류


PaaS (Platform as a Service)의 일부로 서비스 코드에 포함되는 유형

  • Microsoft Azure Service fabric, lagom, SENECA
  • 프레임워크 기반의 프로그래밍 모델 -> service mesh를 구현하는데 특화한 코드가 필요함(Mesh-native Code)

라이브러리로 구현되어 API 호출을 통해 Service mesh에 결합되는 유형

  • Spring Cloud, Netflix OSS(Ribon/Hystrix/Eureka/Archaius), finagle
  • 프레임워크 라이브러리를 사용
    • Netflix의 Prana는 sidecar 형태로 동작함
  • Service mesh를 이해하고 코드를 작성해야 함 (Mesh Aware Code)

Sidecar proxy를 이용하여 Service mesh를 마이크로서비스에 주입하는 유형

  • Istio/Envoy, Consul, Linkerd
  • sidecar proxy 형태로 동작
  • service mesh와 무관하게 코드 작성

    sidecar pattern

    • 컨테이너 배포방식의 경우 모든 응용 프로그램 컨테이너에 추가로 sidecar 컨테이너가 배포됨
    • 서비스에 들어오거나 나가는 모든 네트워크 트래픽을 처리
    • 비즈니스 로직이 포함된 실제 서비스와 sidecar가 병렬로 구성됨 = 서비스 호출에서 proxy를 통해 호출(서비스가 직접 서비스 호출x)
    • 대규모 마이크로서비스 환경이여도 개발자가 별도의 작업 없이 서비스의 연결, 로깅, 모니터링, 보안, 트래픽 제어를 할 수 있음
    • 최근 Service Mesh에서 Sidecar pattern 유형을 많이 사용하는 추세



Service Mesh의 주요 기능


일반적으로 Istio나 consul, Linkerd와 같은 Service Mesh 프레임워크들에서 기능 지원

  • Service Discovery
  • Load balancing (지연시간 기반 / 대기열 기반)
  • Dynamic Request Routing
  • Circuit Breaking
  • 암호화 (TLS)
  • 보안
  • Health check, Retry and Timeout
  • Metric 수집

Author: Ruby Kim
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Ruby Kim !
Comments
  TOC