hailey-it
hailey-IT
hailey-it
전체 방문자
오늘
어제
  • 전체보기 (29)
    • MSA (4)
    • Redis (2)
    • CS (4)
      • Nerwork (3)
      • Security (1)
    • JPA (1)
    • 대규모 스트림처리 (3)
    • Git (2)
    • Mac M1 (9)
      • Mac (4)
      • App (4)
    • Programming (4)
      • Android (2)
      • IntelliJ (1)
      • React (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

hailey-it

hailey-IT

클라이언트 사이드 로드 밸런싱 FeignClient
MSA

클라이언트 사이드 로드 밸런싱 FeignClient

2024. 8. 20. 10:00

 

로드 밸런싱이란?

- 네트워크 트래픽을 여러 서버로 분산시켜 서버의 부하를 줄이고,

시스템의 성능과 가용성을 높이는 기술

 

- 서버 간 트래픽을 고르게 분배하여

특정 서버에 부하가 집중되는 것을 방지

 

- 종류: 클라이언트 사이드 로드 밸런싱, 

서버 사이드 로드 밸런싱

 

클라이언트 사이드 로드 밸런싱이란? 

- 클라이언트가 직접 여러 서버 중 하나를

선택하여 요청을 보내는 방식

 

- 클라이언트는 서버의 목록을 가지고 있으며,

이를 바탕으로 로드 밸런싱을 수행

 

FeignClient란?

- FeignClient는 Spring Cloud에서 제공하는 HTTP 클라이언트로,

선언적으로 RESTful 웹 서비스를 호출할 수 있음

 

- Eureka와 같은 서비스 디스커버리와 연동하여

동적으로 서비스 인스턴스를 조회하고 로드밸런싱을 수행

 

FeignClient의 주요 특징

- 선언적 HTTP 클라이언트

: 인터페이스와 어노테이션을 사용하여 REST API를 호출할 수 있음

 

- Eureka 연동

: Eureka와 통합하여 서비스 인스턴스 목록을 동적으로 조회하고

로드밸런싱을 수행

 

- 자동 로드밸런싱 

: Ribbon이 통합되어 있어 자동으로 로드 밸런싱을 수행

 

Ribbon이란?

- 넷플릭스가 개발한 클라이언트 사이드 로드 밸런서로,

마이크로서비스 아키텍처에서 서비스 인스턴스 간의 부하를 분산

 

- 다양한 로드 밸런싱 알고리즘을 지원하며,

Eureka와 같은 서비스 디스커버리와 연동하여 사용

 

Ribbon의 주요 특징

- 서버리스트 제공자

: Eureka 등으로부터 서비스 인스턴스 리스트를 제공받아

로드밸런싱에 사용

 

- 로드 밸런싱 알고리즘

: 라운드 로빈, 가중치 기반 등 다양한 로드 밸런싱 알고리즘 지원

 

- Failover

: 요청 실패 시 다른 인스턴스로 자동 전환

 

로드 밸런싱 알고리즘

- 라운드 로빈

: 각 서버에 순차적으로 요청을 분배하는 방식

- 간단하고 공평하게 트래픽을 분산

 

- 가중치 기반 로드 밸런싱

- 각 서버에 가중치를 부여하고, 

가중치에 비례하여 요청을 분배하는 방식

- 서버의 성능이나 네트워크 상태에 따라 가중치를 조절

 

FeignClient와 Ribbon 동작 원리

1. 서비스 이름

: @FeignClient(name = "my-service") 어노테이션은

Eureka에 등록된 서비스 이름을 참조

 

2. 서비스 인스턴스 조회

: Eureka 서버에서

my-service라는 이름으로 등록된 서비스 인스턴스 목록을 조회

 

3. 로드밸런싱

: 조회된 서비스 인스턴스 목록 중 하나를 선택하여 요청을 보냄

기본적으로 Ribbon을 사용하여 로드 밸런싱을 수행

 

4. 요청 분배

: 여러 서비스 인스턴스가 있을 경우,

Round Ribbon 또는 다른 설정된 로드밸런싱 알고리즘을

사용하여 요청을 분배

 

FeignClient와 Ribbon 설정

	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
	implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
@FeignClient(name = "product-service")
public interface ProductClient {
    // 상품 조회
    @GetMapping("/products/{productId}")
    ProductResponseDto getProduct(@PathVariable("productId") Long productId);
}

 

 

저작자표시 (새창열림)

'MSA' 카테고리의 다른 글

API 게이트웨이 (Spring Cloud Gateway)  (0) 2024.08.21
Eureka 서비스 디스커버리  (0) 2024.08.19
MSA와 Spring Cloud  (0) 2024.08.07
    'MSA' 카테고리의 다른 글
    • API 게이트웨이 (Spring Cloud Gateway)
    • Eureka 서비스 디스커버리
    • MSA와 Spring Cloud
    hailey-it
    hailey-it

    티스토리툴바