로드 밸런싱(Load Balancing)

로드밸런싱은 서버 환경에서 부하를 분산하는 것을 다루는 기술을 말한다.

요지는, 요청을 받으면 여러개의 서버로 일감을 나눠주는 것이다. 이렇게.

https://tecoble.techcourse.co.kr/post/2021-11-07-load-balancing/
기본적인 아이디어는 단순하다.

로드밸런서는 단순한 브로커 역할만 하기 때문에 요청을 많이 받더라도 싱글 머신으로도 꽤 버틸 수 있고, 무겁고 오래걸리는 작업들은 하위서버들로 처리하는 것이다.

여러모로 확징과 교체에 이점이 커서, 현대의 서버 시스템은 대부분이 이러한 구조를 따른다.

이것도 네트워크 레이어에 따라 종류가 갈린다.

이거 말이다.

가장 많이 사용되는 것은 네트워크 레이어 4, 7의 로드밸런서다. 어떤 프로토콜에서 로드밸런싱 작업을 수행하는지에 따라 달라지는 것이다.

둘다 nginx 같은 리버스 프록시를 사용하면 직접 구현할 수 있다.



L4 로드밸런서

TCP/UDP 소켓 프로토콜 수준에서 로드밸런싱을 처리하는 것을 말한다.

성능이 L7에 비하면 빠른 편이지만, 섬세한 라우팅 처리가 어렵고, 캐싱이나 필터링 처리에 한계가 있다.

AWS에서는 Network Loadbalancer가 L4 로드밸런서를 제공하는 서비스다.




L7 로드밸런서

HTTP 단계에서 로드밸런싱을 처리하는 것을 말한다.
HTTP의 헤더 등을 활용할 수 있기 때문에 여러가지 필터링과 캐싱 등의 처리가 가능하다는 장점이 있다.

다만 그만큼 받고 처리하는게 많아서 성능면에서는 L4보다 비효율적일 수 있다.

AWS에서는 Application LoadBalancer가 L7 로드밸런서를 제공하는 서비스다.



L3 로드밸런서

흔히 사용하는 방식은 아니지만, L3 레벨에서도 로드밸런싱을 수행하는 경우가 있다.

예를 들어, AWS의 Gateway 로드밸런서는 L3와 L4에서 로드밸런싱을 처리한다.

VPC 라우팅테이블을 기반으로 해서 특정 IP와 로드밸런서를 매핑시키는 것이다.

L4, L7에 비하면 제한적인 사용처에만 쓰는 생뚱맞은 사용구조라 여기서 이걸 완전 이해할 필요는 없다..
이런게 있다는 것만 알아두자




로드밸런싱 알고리즘

하위서버들에 일감을 어떻게 나눠줄지에 대한 방법도 여러가지가 있다. 여기에서는 대표적인것들 몇개만 소개한다.
케이스에 따라 다 적합한 알고리즘들이 있다.

라운드로빈(Round Robin)
가장 흔하고, 자주 사용되는 알고리즘이다.
요청이 들어오면 순서대로 A서버, B서버, C서버, 다시 A서버...에 분산하는 방식이다.
알고리즘 자체가 단순하면서도 빨라서, 대부분의 리버스프록시나 로드밸런서 서비스는 이게 기본값이다.

최소 연결(Least Connection)
연결이 가장 적은 서버에 부하를 우선적으로 분배하는 알고리즘이다.
라운드로빈 다음으로 꽤 자주 사용되는 편이다.
서버 API 자체가 완료에 시간이 오래 걸릴 수 있고, 그게 높은 부하를 줄 수 있는 경우에 이점이 있다.

IP 해시
이건 꽤 특이한데, 클라이언트의 IP를 해싱해서 그 해시값과 하위서버를 바로 매핑하는 방식이다.
특정 클라이언트가 특정 서버와 계속해서 연결된다는 것을 보장한다는 것에 메리트가 있다.


참조
https://aws.amazon.com/ko/elasticloadbalancing/features/