[241121 TIL]
MSA 학습
- 서비스 디스커버리
- 로드 밸런싱
- 서킷 브레이커
- API GW
서비스 디스커버리
- 마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리하고 찾아주는 기능
- 각 서비스는 등록 서버에 자신의 위치를 등록하고, 다른 서비스는 이를 조회하여 통신
Eureka
- 넷플릭스가 개발한 서비스 디스커버리
- 모든 서비스 인스턴스의 위치를 저장하는 중앙 저장소 역할을 하며, 서비스 인스턴스의 상태를 주기적으로 확인하여 가용성 보장
- 여러 인스턴스를 지원하여 고가용성 유지
- Eureka Server
- 설정 파일을 통해 서버를 구성하고, 클라이언트가 등록할 수 있도록 준비
- Eureka Client
- spring-cloud-starter-netflix-eureka-client 의존성 사용
- 서비스 디스커버리
- RestTemplate 사용 - @LoadBalanced
- FeignClient 사용 - @EnableFeignClients, @FeignClient
로드 밸런싱
- 네트워크 트래픽을 여러 서버로 분산시켜 서버의 부하를 줄이고, 시스템의 성능과 가용성을 높이는 기술
- 서버 간 트래픽을 고르게 분배하여 특정 서버에 부하가 집중되는 것을 방지
- 클라이언트 사이드 로드 밸런싱
- 클라이언트가 직접 여러 서버 중 하나를 선택하여 요청을 보내는 방식
- 클라이언트는 서버 목록을 가지고 있으며, 이를 바탕으로 로드 밸런싱 수행
FeignClient
- Spring Cloud 에서 제공하는 HTTP 클라이언트로, 선언적으로 RESTful 웹 서비스를 호출할 수 있음
- Eureka 와 같은 서비스 디스커버리와 연동하여 동적으로 서비스 인스턴스를 조회하고 로브 밸런싱 수행
- 선언적 HTTP 클라이언트: 인터페이스와 어노테이션을 사용하여 REST API 를 호출할 수 있음
- Eureka 연동: Eureka 와 통합하여 서비스 인스턴스 목록을 동적으로 조회하고 로드 밸런싱 수행
- 자동 로드 밸런싱: Ribbon 이 통합되어 있어 자동으로 로드 밸런싱 수행
Ribbon
- 넷플릭스가 개발한 클라이언트 사이드 로드 밸런서
- 다양한 로드 밸런싱 알고리즘 지원하며, Eureka 와 같은 서비스 디스커버리와 연동하여 사용
- 서버 리스트 제공자: Eureka 등으로부터 서비스 인스턴스 리스트를 제공 받아 로드 밸런싱에 사용
- 로드 밸런싱 알고리즘: 라운드 로빈, 가중치 기반 등 다양한 로드 밸런싱 알고리즘 지원
- Failover: 요청 실패 시 다른 인스턴스로 자동 전환
✏️ Ribbon 기본이 라운드 로빈 방식인듯!
서킷 브레이커
- 마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴
- 외부 서비스 호출 실패 시 빠른 실패를 통해 장애를 격리하고, 시스템의 다른 부분에 영향을 주지 않도록 함
- 상태 변화: 클로즈드 -> 오픈 -> 하프 오픈
Resilience4j
- 서킷 브레이커 라이브러리
- 상태
- 클로즈드(Closed)
- 기본 상태로 모든 요청 통과, 호출 실패시 실패 카운터 증가
- 실패율이 설정된 임계값을 초과하면 서킷 브레이커가 오픈 상태로 전환
- 오픈(Open)
- 오픈 상태로 전환시, 모든 요청을 즉시 실패 처리, 바로 에러 응답 반환
- 설정된 대기 시간 경과 후, 하프-오픈 상태로 전환
- 하프-오픈(Half-Open)
- 오픈 상태에서 대기 시간이 지나면 하프-오픈 상태로 전환
- 제한된 수의 요청을 허용하여 시스템이 정상 상태로 복구되었는지 확인
- 요청 성공시, 클로즈드 상태로 전환 / 요청 실패시, 오픈 상태로 전환
- 클로즈드(Closed)
- Fallback: 호출 실패 시 대체 로직을 제공하여 시스템 안정성 확보
- 모니터링: 서킷 브레이커 상태를 모니터링하고 관리할 수 있는 다양한 도구 제공
API GW
- 클라이언트의 요청을 받아 백엔드 서비스로 라우팅하고, 다양한 부가 기능을 제공하는 중간 서버
- 클라이언트와 서비스 간의 단일 진입점 역할을 하며, 보안, 로깅, 모니터링, 요청 필터링 등을 처리
Spring Cloud Gateway
- Spring 프로젝트의 일환으로 개발된 API 게이트웨이
- 동적 라우팅: 요청의 URL 패턴에 따라 동적으로 라우팅
- 필터링: 요청 전후에 다양한 작업을 수행할 수 있는 필터 체인 제공
- Global Filter: 모든 요청에 대해 작동하는 필터
- Gateway Filter: 특정 라우트에만 적용되는 필터
- PreFilter: 요청이 처리되기 전에 실행
- PostFilter: 요청이 처리된 후, 응답이 반환되기 전에 실행
- 모니터링: 요청 로그 및 메트릭을 통해 서비스 상태 모니터링
- 보안: 요청의 인증 및 권한 검증

✏️ gw 가 없으면 사용자가 다 다른 호스트로 api 요청해야함
✏️ gw 가 있으면 gw 로 요청하면 gw 가 알아서 라우팅!

'[내일배움캠프] AI 를 활용한 백엔드 아카데미 심화 과정 > TIL' 카테고리의 다른 글
MSA 프로젝트 (0) | 2024.11.25 |
---|---|
MSA(보안구성, Config, 분산추적, 이벤트 드리븐) (1) | 2024.11.22 |
MA(Monolithic Architecture), MSA(Microservice Architecture), Spring Cloud (1) | 2024.11.20 |
AI 검증 비즈니스 프로젝트 마무리 (0) | 2024.11.19 |
[Spring] Soft Delete 적용 - IsDeletedFalse 활용 (2) | 2024.11.18 |