2020-8-20 로드밸런싱 알고리즘

배경

  • 서버부하 분산을 어떻게 할거냐고 물으면 로드밸런싱을 이용한다고 대답한다. L4, L7장비를 이용하거나 HAProxy와 같은 소프트웨어를 사용한다고 한다. 하지만 구체적으로 어떻게 분산이 이루어지고 어떤 알고리즘으로 동작하는지 모르기때문에 정리를 해봤다.

로드밸런싱

  • L4, L7 로드밸런싱이 존재한다.

L4 로드밸런싱

  • L4는 Transport Layer계층을 말한다. 여기서는 IP, 포트, 세션 기반으로한 로드밸런싱이 있다. 포트정보가 들어있기때문에 디테일한 로드밸런싱이 가능하다. L4스위치에 가상서버가 존재한다.
  • 보통 주기적인 Health Check를 통해 장애여부를 판단한다.
  • 몇몇 서버에 이상이 생겨도 대신 작업하는 Failover가 가능하고, UDP/TCP패킷 분석이 가능하기때문에 Firewall수행도 가능하다.

L4 로드밸런싱 알고리즘

  • 라운드로빈 : 서버에 들어온 요청을 순서대로 배정.Round-robin알고리즘으로 경로를 지정한다. 모든 클라이언트를 동일하게 취급하고. 같은 처리량을 보유해야한다. 서버마다 다른 처리 능력이 있을때는 weighted-round-robin 알고리즘이 더 효율적이다.
  • Weighted-Round-Robin : 가중치를 두어 더 많은 성능별로 분산. A서버가 5라는 성능을 B서버가 2라는 성능이 있을때 5:2의 비율로 전달한다.
  • Least Connection : 연결수가 가장 적은 서버로 분산. 동적분산 알고리즘으로 각 서버에 대한 현재 연결 수 를 동적으로 카운팅한다. 가장 많이 쓰이는 방식이다.
  • Response Time : 실제 서버들이 다루는 Resource양, Connection time, 데이터 양이 다르면 적합하다. 로드밸런서가 서버컴퓨터와 직접 통신하면서 응답시간이 빠른쪽으로 많은 세션을 할당
  • IP Hash : 새로운 TCP/UDP연결시 각 클라이언트에 대해 Hashing Key를 가지고 경로를 지정. 경로가 보장되고 접속자가 많을수록 분산 및 효율이 뛰어난다. 접속자가 적을때 공평하게 분산이 안될 수 있다. Hashing Key는 클라이언트의 IP+PORT 또는 IP로만 결정
  • Bandwidth Based Loadbalancing : 서버들의 대역폭을 고려하여 분산
  • Minimum Missis : 해시기법과 유사하지만 특정 다운시 해시값의 재할당이 이루어진다. Source IP기반으로 해싱하기 때문에 Proxy를 사용하면 Hashing이나 Min Miss를 사용하면 안된다.

L7 로드밸런싱

  • L4로드밸런싱의 경우 IP,PORT, MAC주소, 전송프로토콜에 따라 트랙픽을 나누지만, L7의 경우 애플리케이션 계층에서 분산하기 때문에 HTTP 헤더, 쿠키 등과 같은 사용자 요청을 기준으로 서버에 트래픽을 분산하는게 가능하다.
  • L7이 애플리케이션 계층에서 분산도 하지만 TCP/UDP정보로도 가능하다. 애플리케이션계층의 HTTP, FTP, SMTP와 같은 프로토콜로도 나눌 수 있어서 세부적인 로드밸런싱이 가능
  • 캐싱기능을 제공한다.
  • 패킷 내용을 복호화 해야되서 더 높은 비용이 든다. 클라이언트가 로드밸런서와 인증서를 공유해야되서 공격자가 로드밸런서를 통해 클라이언트에 접근할 수 있다.

L7 주요특징

  • L4가 TCP/UDP에 대해서만 동작하지만 L7은 HTTP에 대해서도 작동한다. HTTP라우팅에 대한 처리를한다.
  • Persitence with Cookie : 주로 쿠키를 활용한 Connection Persistence를 유지하고 쿠키정보를 분석한다. WAS로 이루어지는 연결을 동일한 서버로 연결되게끔 해준다.
  • Context Switching : 클라이언트가 요청한 리소스에 대해 Context 전환할 수 있다. Static 리소서에 대해 로드밸런서가 ImageServer로 연결해줄 수 있다.
  • Content Rewriting : 전달받은 Request를 변환해서 재전송 가능
  • 일반적으로 L7은 L4보다 비싸지만 상위 프로토콜에서 유연성을 보여준다.

느낀점

  • AWS의 ELB를 이용해서 로드밸런싱 설정을 해봤는데 그게 어떤 로드밸런싱 알고리즘이였는지는 몰랐고, 로드밸런싱에 알고리즘이 존재하는지도 몰랐다. 이번 기회에 L4, L7 단계에서의 로드밸런싱의 차이에 대해서. 또 어떻게 분산하는지에 대해서 알 수 있었다. 더 열심히 공부하자.
Written on August 20, 2020