[스프링][리본] 클라이언트측 부하분산이란?
클라이언트측 부하분산(client-side load balancing)은 말 그대로 클라이언트쪽에서 수행하는 부하분산을 이야기합니다.
만약 스프링 MSA구조에서 클라이언트측 부하분산이 없다면.. 특정 서비스를 부를 때마다 유레카에.. 그 특정 서비스의 주소가 어디인지 물어봐야 합니다. 이는 유레카(서비스 디스커버리 엔진)에 강한 의존성을 만들어 문제가 생깁니다.
MSA에서 서비스들이 죽고 새로 살아나서 IP 변경이 일어나긴 하지만 빈번한 일은 아닐겁니다. 그런데 매번 유레카에 묻는 것은 비효율적이기도 합니다.
그래서 클라이언트측에 특정 서비스의 위치를 캐시하는 방법을 떠올릴 수 있습니다. 자신(클라이언트)의 캐시를 검사하여 특정 서비스의 위치가 있으면 바로 그 주소를 이용하면 됩니다. 만약 특정 서비스의 위치가 없다면 그때는 유레카에 문의해서 로컬 캐시에 저장해놓고 쓰면 됩니다. 서비스들의 주소를 미리 알고 있으면 그냥 클라이언트에서 부하분산을 수행하면 됩니다. 가장 심플한 것이 라운드 로빈 방법이죠 ㅎㅎ
스프링 클라우드에서 제공하는 리본(ribbon)을 사용하면 클라이언트에서 주기적으로 유레카에 접속해 서비스들의 위치를 갱신한다고 합니다.
저는 처음에 클라이언트측 부하분산이라고 하여..
서버, 클라이언트 모델이 떠올라 클라이언트측 부하분산이.. 앱과 같은 클라이언트에만 해당한다고 생각했었는데, 스프링 클라우드 리본에서 말하는 클라이언트측 부하분산은 요청을 하는 마이크로 서비스를 말하는 거였네요 ㅎㅎ
흠.. 안드로이드나 아이폰 앱에서도 클라이언트측 부하분산을 할 수 있을텐데
그 경우는 어떻게 처리하는지 궁금하네요.
생각해보니 안드로이드나 아이폰 앱 같은 클라이언트측에선.. 구현에 따라 다르겠지만 API 게이트웨이만 접근이 가능할 것이라.. api 게이트웨이 부하분산이 가능하도록만 하면 될 것 같네요.
흠.. ㅎㅎ
댓글 영역