SpringCloud - Service mesh
By on May 22, 2024
MSA 서비스 관리의 필요성 증가
프로젝트를 진행 하면서 다양한 서비스들을 만들게 되고 MSA 환경으로 작은 단위의 서비스가 분산 되는 형태로 구성 되다 보니 점점 관리의 필요성이 생깁니다. 하나의 서비스를 만들더라도 인증서버, 수신서버, 처리서버, 외부통신서버 등등 분산이 되게 되고 각각의 서비스의 상태 관리 자원관리 로깅, 미터링, 정산 등등 다양한 기능들이 필요합니다. 점점 증가하는 마이크로 서비스들의 통신을 관리 하고 모니터링 하기 위해 서비스 메시가 필요합니다.
Service Mesh
서비스 메시란? 어플리케이션 서비스간에 모든 통신을 처리하는 소프트웨어 계층을 말합니다. 어플리케이션에 사이드카로 연결 되어 어플리케이션 관리, 라우팅, 장애, 인증/인가, 모니터링 등 기능을 제공 합니다.
서비스 메시
주요 기능
-서비스 검색 : 엔드포인트를 동적으로 관리 하고 추적
-로드 벨런싱 : 다양한 알고리즘을 사용하여 여러 서비스 인스턴스에 분산 처리
-트래픽 관리 : 요청 트래픽을 컨트롤 하고 관리
-보안 : 서비스 인증 및 권한을 관리
-모니터링 및 추적 : 서비스간 통신을 모니터링 하고 추적 하여 성능 분석 및 오류 분석
다양한 서비스 메시 기술
SpringCloud Project
프로젝트에서 서비스 메시를 구성하기 위해 다양한 기술들을 비교 하였고 후보군으로 envoy 와 SpringCloud-Gateway 비교 하였고 최종적으로는 SpringCloud Stack으로 선정.
비교
특징 | Envoy | Spring Cloud Gateway |
---|---|---|
언어 | C++ | Java |
성능 | 매우 높음 | 적당함 |
설정 및 구성 | YAML, 동적 API | YAML, Java 코드 |
주요 통합 | Istio, 서비스 메쉬 | Spring Boot, Spring Cloud |
로드 밸런싱 | 고급 기능 | 기본 기능 (Spring Cloud LoadBalancer) |
확장성 | 필터, 플러그인 | 커스텀 필터, 프레디케이트 |
관찰 가능성 | 고급 모니터링 및 로깅 | 기본 모니터링 (Spring Boot Actuator) |
사용 사례 | 대규모 마이크로서비스, 고성능 요구 | Spring 애플리케이션, 간단한 API Gateway |
지원 프로토콜 | http/1.1 , http/2, websocket, gRpc, tcp, udp …. | http/1.1, http/2, gRpc, websocket |
LB | L3, L4, L7 | ㅣL4, L7 |
SpringCloud Architecture
스프링 클라우드 기술 스택 매핑
역할 | 프로젝트 |
---|---|
configuration | SpringCloud-Config & Bus |
Service discovery | SpringCloud-Eureka |
load Balancing, Routing | SpringCloud-Gateway |
Resiliency | SpringCloud-CircuitBreaker |
Security , AuthN/AuthZ | SpringCloud-Security, SpringCloud-vault |
Instrumentation | Spring-Actuator |
샘플 프로젝트
목표
스프링 클라우드 기능을 최소 단위로 테스트 해보고 업데이트 하기 위함.
샘플 프로젝트에서는 Gateway, Eureka 를 사용하여 라우팅하고 필터링을 테스트 해보기 위한 구성으로 되어있음.
환경
- SpringBoot 3.2.5
- spring-cloud-starter-gateway
- spring-cloud-starter-netflix-eureka-server
- spring-cloud-starter-netflix-eureka-client
- spring-cloud-circuitbreaker-resilience4j
- Java 17+
- Gradle 8.7+
- Github : https://github.com/ParkHyeokJin/spring-cloud-sample