
서비스 매시란 무엇인가?
분산 네트워크에서 MicroServices 간의 통신, 보안 및 관리(로깅, 부하분산 등)를 강화하기 위한 아키텍처 패턴이다.
MicroServices 에서는 여러개의 작은 서비스로 구성되는 애플리케이션으로 구축되는데, 이러한 작은 서비스들 간의 통신은 네트워크 상에서 발생하기 때문에 이를 관리하기 위한 인프라 스트럭쳐가 필요하다.
여기서 Service Mesh는 서비스간의 통신을 추상화하여 관리하여 서비스들 간 통신이 이루어지는 네트워크 인프라를 쉽게 관리할 수 있도록 도와준다.
서비스매시는 쿠버네티스와 같은 컨테이너 오케스트레이션 환경에서 일반적으로 애플리케이션 코드(사이드카 패턴)와 함께 배치된 확장 가능한 네트워크 프록시 모듈로 구현된다. 프록시에서는 MicroService 간의 통신을 처리한다.
대표적인 Service Mesh 아키텍처에는 Istio(이스티오)가 있다.
기능
- Service Discovery (서비스 검색)
인스턴스가 다른 서비스와 상호작용 해야 하는 경우 다른 서비스 중 사용가능한 인스턴스를 찾아야 한다. 일반적으로 인스턴스를 찾을 때 DNS 조회를 수행하게 되는데, 컨테이너 오케스트레이션 프레임워크( 예 k8s)는 요청을 수신할 준비가 된 인스턴스 목록을 유지하고 DNS 쿼리에 대한 인터페이스를 제공한다.
- LoadBalancing (로드밸런싱)
이미 대부분의 오케스트레이션 프레임워크는 4계층(전송계층) 로드밸런싱을 제공한다. 여기서 Service Mesh는 더 강력한 트래픽 관리를 위해 7계층(애플리케이션계층) 로드밸런싱을 제공한다. 로드밸런싱의 매개변수는 API를 통해 수정할 수 있으므로 Blue-Green 또는 Canary 배포 등을 조정할 수 있다.
- Encryption (암호화)
서비스 매시는 요청과 응답을 암호화하고 복호화하는 기능을 가지고 있어 각 서비스에서의 부담을 줄여준다. 또한, 서비스 매시에서는 기존 영구 연결을 재사용하는데 우선순위를 지정할 수 있어 성능 개선에 도움을 주므로 계산 cost가 많이 드는 새 연결을 생성할 필요성이 줄어들게 된다. traffic 암호화를 위한 가장 일반적인 구현은 PKI(공개 키 인프라)가 사이드카 프록시에서 사용할 인증서와 키를 생성하고 배포하는 상호 TLS 이다.
- Authentication and Authorization (인증 및 승인)
서비스 매시는 앱 외부와 내부에서 생성된 요청을 인증하고 승인하여 검증된 요청만을 인스턴스로 보낼 수 있다.
- Circuit Breaker (회로 차단기) 패턴 지원
서비스 매시는 비정상 인스턴스를 격리한 후 보증되는 경우 조금씩 정상 인스턴스 Pool로 가져오는 회로 차단기 패턴을 지원한다.
API Gateway와의 차이점
쿠버네티스 생태계가 점점 시장의 표준이 되어 가면서 Service Mesh의 중요성이 커지고 있는 현재 기존에 있던 API Gateway와의 혼돈이 되는데 차이점은 아래와 같다.
API Gateway는 중앙 집중식 제어 영역이지만, 서비스 매시는 애플리케이션의 기능을 인프라 계층에 의해 관리하는 MicroService로 분리하는 방법이다.
또한 API Gateway는 회사 외부에 있는 애플리케이션의 연계를 위한 라우팅을 지원하지만 서비스 매시는 내부 엔터프라이즈 서비스의 범위 내 인프라 계층에서 동작한다.
참고
서비스매시란? - 이데아텍
서비스매시란 무엇인가? - Nginx