서비스 메쉬(Service Mesh)란 오픈소스 프로젝트 istio처럼 애플리케이션의 다양한 부분들이 서로 데이터를 공유하는 방식을 제어하는 방법이다.
서비스 메쉬는 애플리케이션에 구축된 전용 인프라 계층이다.
인프라 계층
서비스 메시의 이점은 다음과 같이 대표적으로 4가지로 분류 할 수 있다.
Service mesh는 현재 크게 세가지 유형으로 구분할 수 있다.
1) PaaS (Platform as a Service)의 일부로 서비스 코드에 포함되는 유형
Microsoft Azure Service fabric, lagom, SENECA 등이 이 유형에 해당되며, 프레임워크 기반의
프로그래밍 모델이기 때문에, 서비스메쉬를 구현하는데에 특화된 코드가 필요하다. ( Mesh-native Code )
2) 라이브러리로 구현되어 API 호출을 통해 Service mesh에 결합되는 유형
Spring Cloud, Netflix OSS(Ribbon/Hystrix/Eureka/Archaius), finagle 등이 이
유형에 해당되며, 프레임워크 라이브러리를 사용하는 형태이다. 이중 Netfilix의 Prana는 sidecar 형태로 동작한다.
3) Side car proxy를 이용하여 Service mesh를 마이크로서비스에 주입하는 유형
Istio/Envoy, Consul, Linkerd 등이 이 유형에 해당되며, sidecar proxy 형태로 동작됩니다. 따라서 서비스메시와 무관하게 코드를 작성할 수 있다.
Sidecar pattern(컨테이너 배포방식의 경우)
모든 응용 프로그램 컨테이너에 추가로 sidecar 컨테이너가 배포된다.
Sidecar는 서비스에 들어오거나 나가는 모든 네트워크 트래픽을 처리하게 된다.
가장 큰 특징은, 비즈니스 로직이 포함된 실제 서비스와 sidecar이 병렬로 구성되어있기 때문에,
서비스 호출에서 서비스가 직접 서비스를 호출하는 것이 아니라 proxy 를 통해서 호출하게된다.
따라서, 대규모의 마이크로서비스 환경이라고 하여도 개발자가 별도의 작업 없이 서비스의 연결 뿐만 아니라, 로깅, 모니터링, 보안, 트래픽 제어와 같은 다양한 이점을 누릴 수 있다.
최근의 Service Mesh는 Sidecar pattern 유형이 recommended 되고 있는 추세이다.
일반적으로, Istio나 consul, Linkerd와 같은 Service Mesh 프레임워크들은 다음과 같은 기능들을 지원한다.