개발자로서 살아남기

서버개발자로서 살아남기 - 로드 밸런서(Load Balancer)

코드 살인마 2022. 3. 27. 16:07
728x90

내가 피파와 같은 축구 게임을 만든 개발자라 가정해보자. (뜬금없지만 로드 밸런서를 알기 위한 사전 설명이다.)

 

평소 동시 접속자 수는 100명이지만 월드컵 기간에는 1000명으로 늘어 났다.

 

갑작스럽게 1000명으로 사용자가 늘어나, 서버가 터져버릴 수도 있는 상황이다.

 

서버 개발자로서 할 수 있는 방법은 뭐가 있을까?

 

  • Scale-up
    • 말 그대로 서버의 성능을 높이는 방법이다. 예를 들자면, 디스크를 추가하여 용량을 증가하거나, CPU를 추가하여 속도를 높이는 것이다.
  • Scale-out
    • 비슷한 서버의 개수를 추가하는 것이다. 이는 용량이 증가할 뿐만 아니라, 트래픽을 분산하여 성능을 높일 수 있다.

위와 같은 2가지 방법이 있는데, 대부분의 기업들은 비용문제, 확장성과 유연성의 문제로 Scale-out 방식을 채택하고 있다.

 

그래서, 축구 게임 개발자인 나도 Scale-out 방식을 채택하여 서버의 개수를 늘렸지만, 사용자를 어떻게 분산 시킬건지는 잘 모르는 상황이다.

 

이때 등장하는 게 로드밸런서이다.

 

🔍로드밸런서란

서버에 가해지는 부하(=로드)를 분산(=밸런싱)해주는 기술을 의미한다.


즉 서버에 가해지는 트래픽이 증가하면, 속도, 성능 등을 고려하여 분산처리 해주는 서비스라 생각하면 된다.

 

🔍로드밸런서의 기능

  • Health Check
    주기적인 Health Check를 통해 서버의 장애 여부를 확인할 수 있다. 이로 인해 몇몇 서버가 장애가 생겨도, 다른 정상작동 하는 서버로 보내 줄 수 있다
    또한, TCP/UDP 분석이 가능하기 때문에 방화벽과 같은 역할도 수행할 수 있다.
    • L3 : ICMP를 이용하여, 서버의 IP주소가 통신 가능한 상태임을 확인한다.
    • L4 : TCP 특성을 바탕으로 각 포트의 상태를 체크하는 방식이다.
    • L7 : 어플리케이션 계층에서 체크를 한다.
      눈치를 챘을 수도 있지만, 로드 밸런서 앞에 L번호가 붙는데 이것은 계층을 뜻한다. 이를 통해 계층에서 사용하는 통신 규칙에 따라 로드밸런서가 작동되는 방식이다.
  • Tunneling
    인터넷상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념이다. 데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있다.

 

  • NAT(Network Address Translation)
    IP 주소를 변환해주는 기능이다. 다수의 사용자의 사설 IP가 하나의 공인 IP(VIP)로 접속하기 위해 필요한 기능이다.
    내부 사설 IP -> 공인 IP로 변환이 가능하고 반대의 경우도 가능하다.

 

  • DSR(Dynamic Server Routing)
    서버에서 클라이언트로 되돌아가는 경우 로드 밸런서를 거치지 않고, 바로 클라이언트를 찾아가는 방식이다. 이 경우 로드 밸런서의 부하를 줄여줄 수 있다.

 

🔍로드밸런서의 종류

  1. L4 로드밸런싱
    네트워크 계층(IP), 트랜스포트 계층(TCP/UDP)의 정보를 바탕으로 로드를 분산한다.
    즉 IP주소나, 포트번호, MAC주소, 전송 프로토콜 등에 따라 트래픽을 분산처리가 가능하다. L4 로드밸런싱에는 다음과 같은 방법이 있다.
  • Round Robin
    • 단순히 Round Robin으로 분산하는 방식입니다.
  • Least Connections
    • 연결 개수가 가장 적은 서버를 선택하는 방식입니다.
    • 트래픽으로 인해 세션이 길어지는 경우 권장하는 방식입니다.
  • Source
    • 사용자의 IP를 Hashing하여 분배하는 방식입니다.
    • 사용자는 항상 같은 서버로 연결되는 것을 보장합니다.

 

  1. L7 로드밸런싱
    Application Layer(사용자의 Request) Level에서 로드밸런싱을 한다. 예를들어, 사용자가 인터넷 쇼핑중에 장바구니에 물건을 담았다면, 이는 다른 서버에서의 처리는 어려울 것이다. L7 로드밸런싱에는 다음과 같은 방법이 있다.
  • URL 스위칭 방식
    • 특정 하위 URL들은 특정 서버로 처리하는 방식이다.
  • 쿠키 지속성(Persistence with Cookies)
    • 쿠키정보를 바탕으로 클라이언트가 연결했었던, 동일한 서버에 계속 할당해주는 방식이다.
    • 사설 네트워크에 있던 클라이언트 IP 주소를 공인 IP주소로 변환하여 전송(X-Forwarded-For헤더에 클라이언트 IP 주소를 별도 기록)하는 방식을 지원한다.

 

참조

위키백과 - 로드밸런스

Steven - 네트워크 부하분산, 로드밸런싱 그리고 로드밸런서
nesoy - 로드밸런서란?

 

[이해하기] 네트워크의 부하분산, 로드밸런싱 (Load Balancing) 그리고 로드밸런서 (Load Balancer) | STEVEN

수백-수천만명의 접속자를 감당하기 위하여 서비스를 제공하는 측에서는 미리 트래픽을 예측하고 서버와 네트워크를 증설 해두게 됩니다. 특히, 한 서버의 성능을 높이는 스케일업 (Scale-up) 작

www.stevenjlee.net