로드 밸런서 종류와 동작방식
왜 필요할까?
서버에 대용량 트래픽이 발생하면 이를 해결하기 위한 방법은 장비를 업그레이드 하는 방법(Scale-up)과 여러대의 장비르 두는 방법(Scale-out)이 있다.
만약 Scale-out 방식으로 여러대의 서버를 둔다면 ?
- 해당 서비스에 접근하기 위해서는 여러 IP가 필요하다
- 여러 IP를 둔다면 사용자마다 각각 다른 IP로 접속 할 것이다.
- 이렇게 된다면 개발자 입장에서 원하는 방식으로 요청을 처리하기 어렵다. (A서버에 99개의 요청이 오고 B서버에 1개의 요청 올 수 있지)
- 이를 방지하기 위해 서버를 분산하고 요청을 적절하게 분산하는 작업이 필요하다
이렇게 두 개 이상의 컴퓨터 자원에 작업을 나누는 것을 로드 밸런싱(Load Balancing)
이라고 하고 이 작업을 담당하는 장비를 로드 밸런서(Load Balancer)
라고 한다.
로드밸런서 종류는 뭐가 있을까?
L2 |
Data link 계층을 사용, Mac주소 기반 부하 분산 |
|
L3 |
Network 계층을 사용, IP주소 기반 부하 분산 |
|
L4 |
Transport 계층을 사용, Port 기반 부하 분산 |
TCP, UDP |
L7 |
Application 계층을 사용, 요청(URL) 기반 부하 분산 |
HTTP, HTTPS 등 |
OSI 7계층을 기준으로 어떻게 부하를 분산하는지에 따라 종류가 결정
상위 계층으로 갈 수록 가격이 비싸지지만, 성능은 좋다
로드 밸런서의 주요기능은?
- NAT( Network Address Translation) : Private IP -> Public IP
- Tunneling: 데이터를 캡슐화 하여 연결된 노드만 캡슐을 해체할 수 있음
- Dynamic Source Routing protocol(DSR): 요청에 대한 응답을 할 떼 로드밸런서가 아닌 클라이언트 IP로 응답
그래서.. 로드밸런서 동작방법은?
기초적인 방법인 Bridge/Transparent Mode에서는 요청과 응답이 모두 로드밸런서를 경유한다.
- 유저가 로드밸런서로 서비스 요청 (요청)
- 로드밸런서는 NAT를 적용하여 IP/MAC주소 변조 후 해당 서버로 트래픽을 전송 (요청)
- 서버가 로드밸런서로 요청에 대한 응답 전송 (응답)
- 로드밸런서는 NAT를 적용하여 출발지 IP주소를(실제 서버 IP) 를 로드밸런서의 가상 IP주소로 변조하여 유저에게 전달
요청이 왔을 때 로드밸런서가 서버를 어떻게 선택할까?
- Round Robin : 요청이 들어오는 대로 서버마다 균등하게 분배
- Weighted Round Robin Scheduling: 서버마다 가중치 + Round Robin
- Least Connection: 서버마다 연결된 커넥션이 몇개인지 체크 > 가장 적은 서버로 요청 분배
- Weighted Least Connection: 서버마다 가중치 + Least Connection
- Fastest Response Time: 응답이 가장 빠른 서버를 체크하여 요청을 분배
- Source Hash Scheduling: 사용자의 IP는 고유하다. > 사용자 IP 해싱 > 결과에 따라 서버로 요청을 분배 ( 같은 요청은 같은 서버로)
Reference
https://deveric.tistory.com/m/91?fbclid=IwAR0z8Ydkz_5mR5sb9S4yTZQSzQkJQkibfOcRZ4tcM4IeCR2POkdobP25DqY