개발 일지

Netflix OSS란 (feat. Service Mesh)

북극곰은콜라 2024. 1. 5. 15:21
반응형


개요

1. Netflix OSS 및 Spring Cloud Netflic 구성 요소 소개
2. Spring with Netflix에서 제시한 MSA 구조 소개
3. 부록으로 MSA 서비스간의 통신을 infra로 풀어낸 side-car 패턴의 구성방안에 대해 소개

 


Service Mesh란?

Service Mesh는 여러 서비스(MSA등)간의 의사소통을 책임지는 Layer를 말한다.
Layer가 어떻게 구성되는지 장단점이 존재하며, 각 솔루션들이 존재한다.
방식 솔루션 설명
PaaS Azure fabric, lagom… 플랫폼 서비스로 mesh구조를 풀어낸 방안
개발자는 Mesh 구성 및 동작에 대해서 신경 쓰지 않는다.
Framework 형태로 제공되며, 특화된 코드를 필요로 합니다.
Side car Proxy Istio, Consul… Service 형태로 mesh구조를 관리하는 방안
sideCar 패턴으로 Application Binding 된다.
개발자는 sideCar를 바라보고 호출하며, sideCar들에 대한 control을 중앙에서 한다.
이는 오케스트레이션에 매우 유리한 구조로, 쿠버네티스와 조합이 많이 된다.
Library Netflix OSS, Spring Cloud 라이브러리 형태로 mesh구조를 제공하는 방안
개발자는 library API를 통해 직접 Service Mesh를 구성 및 Custom 할 수 있다.

 


Netflix OSS 란?

Netflix는 2007년 DB 문제로 인한 서비스 중단을 겪고 나서, 신뢰성 높고 scale-out이 가능한 시스템을 구축하기로 결정했다.
Netflix는 명확한 목적성을 가지고 신규 시스템 개발을 진행했다.
 - 고가용성: fail-over처리, 장애 확산 방지 등 서비스 안정성 확보
 - scale-out: 수평적 확장이 가능한 시스템
 - Easy Deploy: 손쉬운 배포 / 관리 환경
Netflix는 위 목적성을 가지고 7년 이상 개발을 진행했으며, 그 노하우를 Netflix OSS라는 이름으로 공개하였다.
2015년 Spring은 Netflix OSS를 Integration한 Spring Cloud Netflix 1.0 Release
2018년 Netflix가 Spring Cloud Netflix 기여

 


Spring Cloud Netflix?

Spring Cloud Netflix provides Netflix OSS integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms. With a few simple annotations, you can quickly enable and configure the common patterns inside your application and build large distributed systems with battle-tested Netflix components. The patterns provided include Service Discovery (Eureka).

 


Spring with Netflix OSS

https://dzone.com/articles/microservices-journey-from-netflix-oss-to-istio-se

항목 상세
Eureka Service Discovery를 담당하는 모듈
Service Registry (ex: Zookeeper)와 연동하여, Enable Service정보를 찾을 수 있게 하는 역할
API gateway
Zuul
Single Endpoint를 제공해주는 모듈
MSA 구조에서 쪼개진 Service들을 통합하여 사용하는 효과를 보이고, 인증 등 공통으로 필요한 기능을 통합 관리 할 수 있다.
Zuul API Gateway의 구현체에 해당되며, 핵심은 filter를 통해 pre → routing → post → error 단계로 요청을 수행하는 구조를 가지고 있다.
Ribbon Client Side Load Balancer
정적 분산 또는 Eureka와 연동하여 동적 분산도 가능
분산 룰을 custom 할 수 있으며 netflix는 지역별 서버 대응하기 위해 사용 (Zone Aware Load Balancer)
hystrix Circuit breaker
MSA 환경에서 장애 확산을 최대한 억제하기 위한 circuit breaker
서비스 장애, 응답지연, 과 트레픽 상황의 전체 시스템으로 확산 되는 것을 막을 수 있다.
Config Server 통합 Config 관리
외부에서 config를 주입받을 수 있는 기능을 제공
OpenFeign MSA의 네트워크 Client를 제공

 


Spring Cloud에서 제시하는 MSA 구조

전체 application의 config 관리, 모니터링, 장애 확산 방지, 서비스 디스커버리 등 MSA 환경의 scale-out, 고가용성을 제공할 수 있는 구조
다수의 유사한 서비스를 scale-out할 수 있는 구조에 대한 예시이다.

 


Appendix: Side Car Proxy를 통한 Service Mesh 구성

Sidecar Pattern

모든 Application(Container)에 추가로 sidecar(Container)를 배포하고 Application의 통신은 sidecar를 통해서 진행하도록 세팅
Service ↔︎ Service간의 직접 통신을 infra로 분리하여 MSA 환경의 필요 기능을 비즈니스에서 분리합니다.
MSA 운영 배포에 필요한 기능을 sidecar가 가지는 구조는, Application의 수정 없이, MSA 환경에 대응할 수 있는 이점을 기집니다.
sidecar로 Istio, Consul 같은 솔루션들은 MSA 환경에서 필요한 대부분의 기능들을 제공
 - Service Discovery
 - load balancing
 - Dynamic Routing
 - Circuit Breaking
 - TLS
 - 인증
 - Health check, retry,timeout
 - Metric

 


REFERENCE

https://spring.io/projects/spring-cloud-netflix/

https://bravenamme.github.io/2020/07/21/msa-netflix/

https://programmaticponderings.com/2016/02/15/diving-deeper-into-getting-started-with-spring-cloud/

https://velog.io/@tedigom/MSA-제대로-이해하기-4Service-Mesh-f8k317qn1b

 

 

 

 

반응형