[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)
      • 오픈 상태에서 대기 시간이 지나면 하프-오픈 상태로 전환
      • 제한된 수의 요청을 허용하여 시스템이 정상 상태로 복구되었는지 확인
      • 요청 성공시, 클로즈드 상태로 전환 / 요청 실패시, 오픈 상태로 전환
  • Fallback: 호출 실패 시 대체 로직을 제공하여 시스템 안정성 확보
  • 모니터링: 서킷 브레이커 상태를 모니터링하고 관리할 수 있는 다양한 도구 제공

API GW

  • 클라이언트의 요청을 받아 백엔드 서비스로 라우팅하고, 다양한 부가 기능을 제공하는 중간 서버
  • 클라이언트와 서비스 간의 단일 진입점 역할을 하며, 보안, 로깅, 모니터링, 요청 필터링 등을 처리

 

Spring Cloud Gateway

  • Spring 프로젝트의 일환으로 개발된 API 게이트웨이
  • 동적 라우팅: 요청의 URL 패턴에 따라 동적으로 라우팅
  • 필터링: 요청 전후에 다양한 작업을 수행할 수 있는 필터 체인 제공
    • Global Filter: 모든 요청에 대해 작동하는 필터
    • Gateway Filter: 특정 라우트에만 적용되는 필터
    • PreFilter: 요청이 처리되기 전에 실행
    • PostFilter: 요청이 처리된 후, 응답이 반환되기 전에 실행
  • 모니터링: 요청 로그 및 메트릭을 통해 서비스 상태 모니터링
  • 보안: 요청의 인증 및 권한 검증

 

✏️ gw 가 없으면 사용자가 다 다른 호스트로 api 요청해야함

✏️ gw 가 있으면 gw 로 요청하면 gw 가 알아서 라우팅!


+ Recent posts