오늘은 로드밸런싱, 그중 클라이언트단에서 서비스 디스커버리 및 로드밸런싱을 담당하는 클라이언트 사이드 로드밸런싱에 대해 정리하고자 합니다.
앞선 "2024.08.01"포스팅에서 정리했듯이 많은 것을 넘어 방대한 수의 애플리케이션의 "부하를 어떻게 분산하는 지"에 대해서 해결 방법 중 하나 가 트래픽을 효율적으로 분산하는 "로드 밸런싱"입니다.
네트워크 트래픽을 여러 서버 또는 서비스 인스턴스에 고르게 분산하여, 서버의 부하를 줄이고, 시스템의 성능을 높입니다.
그런데 이러한 로드 밸런싱을 클라이언트 App이 담당하는 것이 바로 "클라이언트 사이드 로드 밸런싱"입니다.
위와 같은 그림처럼 클라이언트는 서버의 목록을 가지고 있으며, 이를 바탕으로 로드 밸런싱을 수행합니다.
이러한 "Client Side Load Balancing" 중 하나인 FeignClient는 Eureka와 같은 서비스 디스커버리와 연동하여 동적으로 서비스 인스턴스를 조회하고 로드 밸런싱을 수행합니다.
FeignClient의 주요 특징
- 선언적 인터페이스
- 자동 서비스 디스커버리
- 내장 로드 밸런싱
- 간단한 사용법
위와 같은 특징 중 내장 로드 밸런싱. FeginClient는 Ribbon과 통합되어있습니다.
Ribbon이란?
- Neflix가 개발한 Ribbon은 클라이언트 사이드에서 로드 밸런싱을 지원하는 도구로, 서비스 인스턴스 간의 부하를 효과적으로 분산시킬 수 있습니다.
Ribbon의 주요 특징 중 하나는 Eureka와 같은 서비스 디스커버리 도구로부터 서비스 인스턴스 리스트를 제공받는 기능입니다. 또한, Ribbon은 다양한 로드 밸런싱 알고리즘을 지원하여, 이를 통해 간편하게 로드 밸런싱을 수행할 수 있습니다.
자세한 내용은 아래의 포스팅에서 확인 가능합니다.▼
유레카 서버 하나에 주문 인스턴스 1개와 같은 기능의 포트만 다른 상품 인스턴스 3개를 연결합니다.
상품을 요청(http://localhost:19091/order/1) 하면 응답하는 인스턴스의 포트를 받아서 노출합니다.
이를 통해 라운드로빈으로 로드밸런싱이 되는 것을 확인합니다.
위 내용을 그림을 그려보았는데, 강의와 모르는 부분이나 헷갈리는 부분을 구글링 해서 검색을 하다 보니, 아직 확실하지 않은 부분들이 엉켜 애매한 그림이 완성되었다..
- Eureka에 product-service로 order 인스턴스가 입력이 되어있으니깐 order를 통해서 product의 포트를 가져올 수 있는 것인데 로드밸런싱도 하는 예제이다 보니깐 그림에 Ribbon이 아닌 (Ribbon, Load Balancer, FeignClient)로 바꿔야 하는지?
- FeignClient를 통해서 외부 서비스를 호출하는데 Ribbon(로드 밸런싱)만 생각한 것 같아서 맞게 그렸나? 라는 생각이 든다.
위 2개의 질문을 오늘 튜터님에게 질문을 했다.
튜터님께서 하신 말씀은 "아주 틀린 것은 아니지만, 또 정확히 표현했다고 말하기에는 애매한 부분이 있다."
Eureka는 애플리케이션이 뭐가 있다 이런 정보 제공만한다. 그래서 물론 정보를 제공해 주지만 product와 order를 연결시키에는 애매한 부분이 있다고 말씀하셨다.
또한 그림에 Fegin을 추가하는 것이 좋을 것 같고, 서비스 호출과 서비스 등록부분을 나눠서 작성하는 방안을 제시해 주셨다.
order가 Feginclient를 포함하니까 order 서버를 한덩이로 묶었고, Ribbon이 Eureka에서 로드밸린싱하는 정보를 받아온다는 의미로 order 박스 밖에서 받아오는 의미의 화살표를 추가했다.
그리고 서비스 인스턴스는 주기적으로 자신을 등록한 Eureka 서버에 헬스 체크 정보를 보내는 부분을 추가하면 좋을 것 같아서 추가했다.
- 각 서비스가 Eureka서버에 등록
- Load Balancing
- FeignClient
이러한 위 요청 라이프 사이클을 그리면서 위와 같은 개념을 잘 익힐 수 있었고, 또 하나 든 생각은 완벽히 이해하지 않은 상태에서 오히려 많은 정보가 들어오면 더 헷갈린다는 생각이 들었다..
그래도 라이프 사이클을 그리는 과정을 통해 전체적인 흐름을 이해할 수 있었고, 다시 한번 내용을 복기하며 잘 이해했는지 확인할 수 있었다!!
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.08.05 - Spring Cloud Gateway의 중요성 및 MSA 아키텍처에서의 역할 (0) | 2024.08.05 |
---|---|
[TIL,일일 회고] 2024.08.04 - Spring Security를 통한 로그인 구현 (0) | 2024.08.04 |
[TIL,일일 회고] 2024.08.03 - SpringCloud 서킷 브레이커 (0) | 2024.08.03 |
[TIL,일일 회고] 2024.08.01 - 서비스 디스커버리 (1) | 2024.08.01 |
[TIL,일일 회고] 2024.07.31 - MSA란 무엇일까? (0) | 2024.07.31 |