ice rabbit programming

[Infra] Load Balancing 알고리즘 본문

Development/Infra

[Infra] Load Balancing 알고리즘

판교토끼 2021. 5. 24. 00:12

로드 밸런싱은 서버에 가해지는 부하를 분산해주는 컴퓨터 네트워크 기술로, 서버 풀(pool) 앞에 위치한다. 본인은 학부 때 클라우드 VM을 사용하면서 처음 접해보았다.

Scale Up vs Scale Out

서비스 초창기, 혹은 개발 단계에서는 서버를 한 대만 구축할 수 있다. 이 때는 트래픽이 많지도 않고, 한 대 뿐이므로 분산할 수도 없다. 하지만 점점 커지면서, 이러한 요청들을 처리(수행)하기에 빡빡해지는데, 보통 두 가지의 선택지가 있다.

  • Scale Up : 서버 자체의 성능을 확장하는 것으로, 쉽게 말하면 서버의 사양을 높이는 것. RAM 메모리 용량을 키운다거나, CPU 성능을 높이는 등이다.
  • Scale Out : 여러 서버를 증설하여 운영하는 것이다. 즉, 같거나 비슷한 수준의 서버를 여러대 운영한다.

최근에는 Scale Out 방식이 선호된다. Scale Out 방식을 사용한다면 거의 반드시 로드 밸런서를 사용한다.

Load Balancing 알고리즘

LB가 각 서버에 부하를 분산하는 방법은 여러가지가 있다. 우선, 상술했듯이 로드 밸런서는 서버 풀과 클라이언트 사이에 위치하여, 클라이언트의 요청을 알맞은 서버로 보내 준다.

  • Round Robin(라운드 로빈) : 가장 기본적인 방법으로, 돌아가면서 서버에 요청을 보내는 방식이다. 각 서버의 성능 차이가 크지 않을 때 많이 사용된다.
  • Weighted Round Robin(가중치 라운드 로빈) : 기본적으로는 위의 라운드 로빈과 같은데, 각 서버마다 가중치를 두어, 우선적으로 갈 곳을 지정한다. 서버의 성능 차가 유의미할 때 많이 사용된다.
  • Source IP(소스 IP) : 클라이언트 IP를 Hash 값을 사용해 특정 서버에 매핑하여 요청을 보낸다. 사용자가 항상 같은 서버로 연결되므로, 이러한 동작이 필요할 경우 사용된다.
  • Least Connection(최소 연결) : 현재 연결된 클라이언트가 가장 적은 서버로 요청을 보낸다.
  • Least Response Time(최소 응답 시간) : 각 서버의 현재 연결 상태와, 응답 시간을 모두 고려하여 요청을 보낸다.

부하 분산에는 L4, L7(OSI 7계층) 로드 밸런서가 가장 많이 활용되는데, 이는 L4부터 포트 정보를 바탕으로 부하를 분산할 수 있기 때문이다.