로드밸런서(load balancer) 훑어보기

로드 밸런서 종류와 동작방식

왜 필요할까?

서버에 대용량 트래픽이 발생하면 이를 해결하기 위한 방법은 장비를 업그레이드 하는 방법(Scale-up)과 여러대의 장비르 두는 방법(Scale-out)이 있다.

만약 Scale-out 방식으로 여러대의 서버를 둔다면 ?

image

  1. 해당 서비스에 접근하기 위해서는 여러 IP가 필요하다
  2. 여러 IP를 둔다면 사용자마다 각각 다른 IP로 접속 할 것이다.
  3. 이렇게 된다면 개발자 입장에서 원하는 방식으로 요청을 처리하기 어렵다. (A서버에 99개의 요청이 오고 B서버에 1개의 요청 올 수 있지)
  4. 이를 방지하기 위해 서버를 분산하고 요청을 적절하게 분산하는 작업이 필요하다

이렇게 두 개 이상의 컴퓨터 자원에 작업을 나누는 것을 로드 밸런싱(Load Balancing) 이라고 하고 이 작업을 담당하는 장비를 로드 밸런서(Load Balancer) 라고 한다.

image


로드밸런서 종류는 뭐가 있을까?

L2 Data link 계층을 사용, Mac주소 기반 부하 분산
L3 Network 계층을 사용, IP주소 기반 부하 분산
L4 Transport 계층을 사용, Port 기반 부하 분산 TCP, UDP
L7 Application 계층을 사용, 요청(URL) 기반 부하 분산 HTTP, HTTPS 등

OSI 7계층을 기준으로 어떻게 부하를 분산하는지에 따라 종류가 결정

상위 계층으로 갈 수록 가격이 비싸지지만, 성능은 좋다

image


로드 밸런서의 주요기능은?

  • NAT( Network Address Translation) : Private IP -> Public IP
  • Tunneling: 데이터를 캡슐화 하여 연결된 노드만 캡슐을 해체할 수 있음
  • Dynamic Source Routing protocol(DSR): 요청에 대한 응답을 할 떼 로드밸런서가 아닌 클라이언트 IP로 응답

그래서.. 로드밸런서 동작방법은?

기초적인 방법인 Bridge/Transparent Mode에서는 요청과 응답이 모두 로드밸런서를 경유한다.

  1. 유저가 로드밸런서로 서비스 요청 (요청)
  2. 로드밸런서는 NAT를 적용하여 IP/MAC주소 변조 후 해당 서버로 트래픽을 전송 (요청)
  3. 서버가 로드밸런서로 요청에 대한 응답 전송 (응답)
  4. 로드밸런서는 NAT를 적용하여 출발지 IP주소를(실제 서버 IP) 를 로드밸런서의 가상 IP주소로 변조하여 유저에게 전달

요청이 왔을 때 로드밸런서가 서버를 어떻게 선택할까?

  1. Round Robin : 요청이 들어오는 대로 서버마다 균등하게 분배
  2. Weighted Round Robin Scheduling: 서버마다 가중치 + Round Robin
  3. Least Connection: 서버마다 연결된 커넥션이 몇개인지 체크 > 가장 적은 서버로 요청 분배
  4. Weighted Least Connection: 서버마다 가중치 + Least Connection
  5. Fastest Response Time: 응답이 가장 빠른 서버를 체크하여 요청을 분배
  6. Source Hash Scheduling: 사용자의 IP는 고유하다. > 사용자 IP 해싱 > 결과에 따라 서버로 요청을 분배 ( 같은 요청은 같은 서버로)

Reference

https://deveric.tistory.com/m/91?fbclid=IwAR0z8Ydkz_5mR5sb9S4yTZQSzQkJQkibfOcRZ4tcM4IeCR2POkdobP25DqY


Written by@[HongDongUk]
공부한 것을 소소하게 적는 블로그.

GitHubFacebook