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 수집