Spring : cloud loadbalancer randomLoadBalancer 출력

김용재·2024년 9월 17일

상황

loadBalancer의 알고리즘으로 기본 설정인 round robin 말고 다른 알고리즘인 random 알고리즘을 사용하는 중 숫자가 port가 랜덤이 아닌것처럼 느꼈다.

해결

여러가지 가능성을 고려하여 하나의 서비스를 port를 4개로 세팅한 뒤
랜덤 알고리즘을 적용하여 어떤 port가 어떻게 출력되는지 확인했다.
랜덤 알고리즘 적용 글은 아래 글을 참고바란다.
https://velog.io/@uzjaee/Spring-Execution-failed-for-task-compileJava.-%EA%B4%80%EB%A0%A8-%EC%98%A4%EB%A5%98

유레카를 통해 서비스가 4개가 정상됨을 확인했다 .

아래 코드를 통해 port번호가 api를 호출했을 때 서버와 클라이언트 양쪽으로 출력될 수 있도록 의도했다. 서비스를 사용하는 다른 서비스의 서버에서 로그가 찍히도록 했다.


@Value("${server.port}")
  private String serverport;

  @GetMapping("/product/{id}")
  public String getProduct(@PathVariable("id") String id) {
    return "Product" + id + " info!!!!!  From port : " + serverport;
  }

서비스를 호출해보니 반복적으로 port 순서가 5>2>4>3 순으로 호출되었다.
랜덤이 한번 고정되면 그게 랜덤인가.. ?
아무래도 처음 랜덤시드를 설정한 뒤 그 값으로 반복 되는것 같았다.

시드를 매번 동적으로 변경하는 방법을 ..찾아봤으나 ..아직은 내가 알고있는 지식 내에선 거의 심연에 가까웠다...
대충 훑어봤을땐 제공하는 기능을 extends하여 custom하게 bean을 생성해야만 할 것 같았다..
반드시 공부해서 강해져야겠다.

정리

기본적으로 제공하는 loadBalancer random 알고리즘은 처음 랜덤한 seed 값을 제공하면 다시 서버를 실행시키기 전까지는 해당 랜덤 순서가 반복될 뿐이다.

profile
멋진 내가 되기 위한 발걸음

0개의 댓글