본문 바로가기

Spring Cloud

🌱 Spring Cloud - API Gateway Service (Load Balancing) 🌱

Github 소스코드

Spring Cloud Gateway를 이용한 Routing, Load Balancing Test

  • API Gateway 프로젝트 설정
    • Spring-boot: 2.4.x
    • Dependency
      • Lombok, Spring Cloud Routing(Gateway), Eureka Client
  • 테스트를 위한 서비스 프로젝트 설정
    • Spring-boot: 2.4.x
    • Dependency
      • Spring web, Eureka Client
      • Eureka Server는 이전 포스트에서 구현한 서버를 사용
  • 단순 Routing에 대한 정보는 이전 포스트를 확인해주세요.

Load Balancing을 위한 Routing 설정 변경

  • API gateway service yml설정
    • 기존 단순히 Routing만을 수행하는 api gateway service의 설정이다.
    • 부하분산을 테스트 하기 위해 변경해보자.
  • yml 설정 변경
    • 부하분산을 위해 일단 eureka서버에 클라이언트로 등록한다.
    • uri가 변경되었다. lb는 Load Balancer의 약자이고 // 이하 문자열은 식별할 서비스의 이름이다.
    • eureka server의 대시보드를 확인하면 쉽게 알 수 있다.
    • 서비스의 uri, 포트번호로 서비스를 식별하지 않기 때문에 동적으로 요청을 분산시킬 수 있는 것이다.

Load Balancing Test

  • first-service만으로 Test를 진행한다.
    • first-service에는 아래 메서드가 정의되어 있다.
    • 요청을 받은 경우 단순히 자신의 포트번호를 출력하는 메서드이다.
  • 테스트 방식
    • first-service를 2개 실행한다.
    • eureka서버에는 api-gateway service와 두 개 first-service가 등록된다.
    • 동일한 서비스의 동일한 요청을 보낸다.
    • 정상적으로 부하분산이 이루어진다면 매 요청마다 다른 포트 번호가 출력되어야 한다. (spring cloud에서는 Round Robbin방식으로 부하분산을 처리하는 듯 하다..)
  • 테스트 수행
    • Eureka server
    • api gateway service와 2개 first-service가 등록되었다.
    • 첫 번째 요청 (postman)
      • 51638번 포트로 요청되었다.
    • *두 번째 요청 *
      • 51754번 포트로 요청되었다.
  • 같은 포트, 같은 서비스 이름으로 같은 api 호출에 대해 부하분산 처리가 되었다. :)