서비스 매시(Service Mesh) 패턴

Updated:

서비스 매시(Service Mesh) 패턴

지금까지 여러가지 마이크로서비스 패턴들을 살펴 봤다. Service Discovery, Load Balancing, Dynamic Request Routing, Circuit Breaking, Distributed Tracing등의 패턴들인데 마이크로서비스를 연계하고 관리/운영하기 위한 용도이고 마이크로서비스의 비지니스 기능과 함께 탑재되어야 하는 기능들이다. 기능 구현에 집중해야 해야하는 마이크로서비스 입장에서 이러한 공통기능들이 번거롭기도 하다.

그래서 이런 통신 네트워크 기능을 비지니스로직 기능과 분리하여 네트워크 인프라 계층에서 수행하게 하는 서비스 메시(Service Mesh)를 선호하기도 한다. 서비스 메시는 모든 서비스 인프라 레이어로 서비스간의 통신을 처리하며 위에 언급된 많은 패턴들을 포함한다.

아래 그림과 같이 어플리케이션과 완전히 격리되는 사이드카(Side Car)패턴 을 적용해서 서비스 디스커버리, 라우팅, 로드 밸란싱 로깅, 모니터링, 보안, 트레이싱등의 구현하는데 주요 구현체로 구글 프로젝트인 이스티오(Isto) 가 있다. 이스티오는 기본적으로 쿠버네티스 에 탑재되어 이런 서비스 메시 기능을 지원한다.

서비스 매시 개념도

위의 그림을 보면 왼쪽의 스피링 클라우드,넷플릭스 OSS를 이용한 경우에는 스프링 클라우드로 기반 서비스를 먼저 구축하고 마이크로서비스 어플리케이션 자체도 내부 코드에 이런 관리/운영 기능을 제공하는 클라이언트 코드가 탑재 되어야 한다.

그렇지만 서비스 메시를 적용하게 되는 경우에는 마이크로서비스는 순수 비지니스 로직에 집중하고 컨테이너에 관리/운영 기능을 제공하는 별도의 사이드카 프록시를 같이 배포하면 된다.

그러면 아래 그림과 같이 사이드카 끼리 통신하고 관련 운영기능들을 위해 작동하게 된다. 마이크로서비스의 비지니스 로직과는 완벽하게 독립적이게 된다. 쿠버네티스의 컨테이너 단위인 파드(POD)에 서비스와 사이드카 구현체인 엔보이(Envoy)가 함께 배포 된 것 을 볼 수 있다.

이스티오는 엔보이를 통제하는 Control Plain 기능에 의해 기존에 넷플릿스 OSS가 제공하는 관리/운영 기능을 제공한다.

서비스 매시의 통신

아래와 같이 이스티오는 스프링 클라우드 &넷플릭스 OSS가 제공했던 대 부분의 기능을 모두 제공하고 다음과 같은 차별점을 가진다.

 주요 기능

  • 트래픽 관리(Traffic Management) : 동적 라우팅, 로드 밸렁싱
  • 보안 : 보안통신 채널(TLS) , 인증/인가/암호화
  • 관측성(Observability) : 매트릭, 분산 트레이싱, 로깅

 스프링 클라우드 &넷플릭스 OSS과의 차별점

  • 어플리케이션 코드의 변경이 거의 없다. 스프링 클라우드 &넷플릭스 OSS기반은 비지니스 로직과 함께 코드로 표현되어야 하지만 이스티오는 완전히 사이드카로 격리되며 yaml파일과 같은 설정 파일에 의해 정의된다.

  • 폴리그랏 어플리케이션도 지원한다. 스프링 클라우드 & 넷플릭스 기반은 자바언어만 지원하나 이스티오는 각 마이크로서비스를 다른 언어로 작성(자바 및 node.js, C#) 했을 경우에도 지원가능하다.

  • 이스티오는 쿠버네티스와 완벽하게 통합된 환경을 지원한다. 최근에는 쿠버네티스가 각광을 받으며 이스티오를 많이 사용하지만 스프링 클라우드 제품군고같이 사용할 수도 있는데 트레이싱이나 로깅의 경우 어플리케이션 차원의 세밀한 관리 및 제어가 를 위해 코드 차원의 제어가 편리하기 때문이다.