What is Load balancing?
로드 밸런싱은 부하 분산이라고도 한다. 이름 그대로, 서버에 가해지는 부하를 분산 시켜주는 장치 또는 기술을 의미한다.
ec2 인스턴스를 예로 들어보자. 하나의 인스턴스에는 하나의 IP 그리고 하나의 도메인이 존재한다. 클라이언트가 한 두 명에 불과하다면 서버는 여유롭게 클라이언트의 모든 요청에 응답할 수 있겠지만, 클라이언트가 수천 수만명이 된다면 과부하에 걸릴 것이 분명하다. 이러한 문제를 해결하기 위해서는 두 가지 방법이 있다. 첫 번째는 스케일 업 scale-up 이다. 스케일 업은 말 그대로, 상위의 장비로 스케일을 상승시키는 것이다. 코드나 아키텍쳐의 변경 등이 없어 쉬워보이지만, 높은 비용 대비 성능의 효율성이 낮다. 두 번째 방법은 스케일 아웃 scale-out 이다. 사용 중인 장비를 교체하는 것이 아니라, 같은 수준의 장비를 여러 대로 재구성하는 방식이다. 다수의 서버로 구성하기 때문에 비용이 절감되고, 일부 서버에 장애가 발생하더라도 전체 서비스가 중단되는 치명적인 문제를 방지할 수 있다. 또, 추가 확장도 용이하다.
스케일 아웃의 방식으로 서버를 증설하기로 결정했다면 여러 대의 서버에 트래픽을 균등하게 분산 시켜주는 시스템이 필수적으로 동반되어야 할 것이다. 그게 바로 로드 밸런싱이다.
OSI 7 layers
로드 밸런싱의 종류에 대해 설명하기 전에 네트워크 통신 시스템의 일곱 가지 계층, OSI 7 계층에 대하여 먼저 알아보자. OSI 7 계층은 국제표준화기구(International Standard Organization, ISO)에서 1984년에 발표한 네트워크 표준 모델이다. 네트워크 통신의 각 과정을 계층별로 개념화하여, 구간 별로 데이터의 움직임을 알 수 있고 각 계층간에 오가는 데이터 통신을 이해하기 쉽게 도와준다.
하위 계층으로 갈수록 하드웨어에 가까워지고 상위 계층으로 갈수록 소프트웨어에 가까워진다. L1 계층부터 L4 계층에 해당하는 계층들을 하위계층, L5 계층부터 L7 계층에 해당하는 계층들을 상위계층이라 분류한다. 상위계층은 하위계층의 기능을 이어받아 사용할 수 있다.
각 계층에 해당하는 대표적인 프로토콜로는 아래의 것들이 있다.
types of load balancer
L4 load balancer
전송 계층인 L4 에서는 TCP/UDP 포트 정보를 바탕으로 로드 밸런싱을 한다. IP 주소나 포트번호, MAC 주소, 전송 프로토콜에 따라 트래픽을 분산시킬 수 있다.
L7 load balancer
응용 계층인 L7 에서는 HTTP 헤더, 쿠키 등과 같은 사용자의 요청을 기준으로 특정 서버에 트래픽을 분산하는 것이 가능하다. 쉽게 말하자면, 패킷의 내용을 확인하고 그 내용에 따라 부하를 특정 서버에 분배한다는 의미이다. 클라이언트의 요청을 보다 세분화하여 서버에 전달하는 것이 가능하며, DoS/DDoS와 같은 비정상적인 트래픽을 필터링할 수 있어 네트워크 보안 분야에서도 사용되고 있다.
아래의 표를 보면 L4 load balancer 와 L7 load balancer 를 보다 더 자세하게 비교해 볼 수 있다.
health check
로드 밸런서에 의해 여러 대의 웹 서버가 문제없이 작동되고 있다면 상관 없지만, 특정 웹 서버가 다운되거나 정상적인 서비스가 불가능한 상태라면 그 서버가 정상적인 상태가 되기 전까지 해당 서버에 부하를 분산해서는 안될 것이다. 그렇다면 서버가 정상적으로 작동하는지 어떻게 확인할까? load balancer 를 이중화하여 서로의 상태를 확인하는 방법을 사용한다. 이를 health check 기법이라고 한다.
'basement' 카테고리의 다른 글
객체지향의 사실과 오해 (0) | 2021.10.06 |
---|---|
tcp / udp (0) | 2021.05.03 |
development process (0) | 2021.04.28 |
clean architecture (0) | 2021.04.27 |
OOP (0) | 2021.04.27 |