개발놀이터

로드 밸런싱전략 (동적 로드밸런싱, 정적 로드밸런싱) 본문

CS 지식/네트워크

로드 밸런싱전략 (동적 로드밸런싱, 정적 로드밸런싱)

마늘냄새폴폴 2023. 3. 18. 23:52

이번 포스팅에서는 로드 밸런싱에 대해서 알아볼 예정입니다. 

 

로드 밸런싱이란 쉽게 말해서 트래픽을 분산 처리 해주는 시스템인데요. 이름 그대로 짐 (Load) 을 나눠주는 (Balancing) 시스템이죠. 

 

요즘 IT 대기업을 필두로 엄청난 트래픽이 유발되고 있죠? 점심시간에 폭주하는 트래픽을 감당해야 하는 배달의 민족이나 명절 때 엄청난 트래픽을 감당해야 하는 쿠팡까지 로드 밸런싱을 사용하지 않는 기업은 없을 것 같은데요. 우리는 이번 포스팅에서 로드 밸런싱이 무엇인지, 로드 밸런싱을 구현한 알고리즘은 뭐가 있는지, 로드 밸런싱에는 어떤 것들이 있는지에 대해서 알아보도록 하겠습니다. 

 

 

로드 밸런싱 (Load Balancing)

로드 밸런싱은 둘 이상의 컴퓨터 사이에서 작업을 분산시켜주는 작업을 뜻합니다. 인터넷 세상에서 로드 밸런싱은 서버들 사이에서 네트워크 트래픽을 분산하기위해 사용하는 방법입니다. 

 

이 로드 밸런싱을 사용하게 되면 각각의 서버가 부담해야하는 일이 줄어들고 서버가 더 효율적으로 굴러가며 성능이 올라가고 레이턴시가 줄어듭니다. 이렇기 때문에 로드 밸런싱은 인터넷 애플리케이션이 잘 구동되기 위해서 필수적인 요소가 되었습니다. 

 

이해를 돕기 위해 뒤에서도 사용할 예시를 들어보겠습니다. 

 

편의점에 8개의 줄이 있고 하나만 활성화 되어있다면 줄이 길어지고 처리가 느려지겠죠? 반대로 8개가 모두 활성화 되어있다면 줄을 한줄로 서서 처리해서 8배나 빨라지는겁니다. 

 

이렇듯 로드 밸런싱은 효율이 참 정직해서 로드 밸런싱을 많이하면 많이 좋아지고 적게하면 적게 좋아지는 시스템입니다. 

 

로드 밸런싱에는 하드웨어 로드 밸런싱과 소프트웨어 로드 밸런싱이 있습니다. 각각의 장단점에 대해서 알아보고 넘어가죠

 

소프트웨어 로드 밸런싱 장점

  • 클라이언트의 요구에 따라 유연하게 처리할 수 있다
  • 소프트웨어 인스턴스를 추가함으로써 초기용량를 확장하고 시작할 수 있다
  • 물리적인 기기를 사고, 유지하는 것보다 비용이 싸다
  • 클라우드 로드 밸런서에 백업을 할 수 있다

 

소프트웨어 로드 밸런싱 단점

  • 초기용량을 확장할 때 로드 밸런서 소프트웨어가 작동할 동안 딜레이가 생길 수 있다
  • 업그레이드 함에 있어서 비용이 지속적으로 든다

 

하드웨어 로드 밸런싱 장점

  • 특정 프로세서때문에 높은 수율(throughput)을 보장할 수 있다
  • 회사가 물리적으로 서버를 늘리게 되면 보안적으로 안전해진다
  • 비용이 지속적으로 들지는 않는다. (고정 비용이 발생하기는 함)

 

하드웨어 로드 밸런싱 단점

  • 물리적인 기기를 작동하기위한 더 많은 전문가가 필요하다
  • 서버를 두기위한 물리적인 공간이 필요하고 유지보수가 필요하다
  • 물리적인 네트워크 로드 밸런서를 유지하고 구매하는데 높은 가격이 들어간다

 

이렇게 로드 밸런싱에 대한 개략적인 내용과 하드웨어, 소프트웨어 로드 밸런싱에 대한 특징까지 알아봤습니다. 다음은 로드 밸런싱을 구현한 알고리즘을 알아보도록 하겠습니다.

 

 

로드 밸런싱 알고리즘

로드 밸런싱 알고리즘은 크게 Static Load Balancing Algorithm과 Dynamic Load Balancing Algorithm이 있습니다. 우선 각각에 대한 설명과 어떤 것이 포함되어 있는지 알아보죠

 

Static Load Balancing Algorithm

정적인 로드 밸런싱 알고리즘은 말 그대로 정적입니다. 현재 시스템의 상태를 체크하는 것 없이 작업을 분할하는 특징이 있습니다. 작업을 순서에 맞춰 균등 분배한다고 생각하시면 됩니다. 

 

정적 로드 밸런싱 알고리즘에서는 옆에있는 서버가 작업을 느리게하는지 잘 운용되고 있는지 신경을 안씁니다. 그냥 순서에 맞춰서 일을 분배할 뿐이죠. 그래서 어찌보면 굉장히 비효율적이라고 느낄 수도 있습니다. 

 

위의 편의점 예시를 다시 가져와서 설명해드리자면, 8개의 카운터에 줄 서는 것을 지휘하는 로드 밸런서가 있고 이 사람은 각각의 계산대의 상황과 관계없이 매뉴얼대로 사람을 분배합니다. 

 

이러한 알고리즘은 모든 창구가 정상적으로 돌아가고 있으면 정말 효율적이겠지만 만약 어떤 계산대에서 문제가 생겨서 한쪽 줄이 길게 늘어진 상황에서도 로드 밸런서가 이 문제있는 계산대에 사람을 보낼 수도 있다는 얘기입니다. 

 

정적인 로드 밸런싱 알고리즘에 어떤 알고리즘이 있는지 알아보도록 하죠

 

Round Robin Algorithm

라운드 로빈 알고리즘은 DNS 순서에 맞게 트래픽을 서버에 보냅니다. DNS에 적혀있는 리스트 목록대로 서버에 보내기 때문에 구현이 굉장히 간단하다는 특징이 있습니다. 라운드 로빈 알고리즘은 여러대의 서버가 동일한 스펙을 갖고 있고, 서버와의 연결이 오래 지속되지 않는 경우에 활용하기 적합합니다. 

 

Weighted Round Robin Algorithm

가중치가 있는 라운드 로빈 알고리즘은 각 서버의 가중치를 부여하고 그 가중치에 기반하여 트래픽을 서버에 보낸다는 특징이 있습니다. 더 많은 트래픽을 처리할 수 있는 서버에는 더 많은 트래픽을 보내고 조금 성능이 딸리는 서버에는 조금만 보냅니다. 

 

IP Hash Algorithm

클라이언트의 IP주소를 특정 서버로 매핑하여 요청을 처리하는 방식입니다. 사용자의 IP를 해싱해서 로드를 분배하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장한다는 특징이 있습니다. 

 

 

Dynamic Load Balancing Algorithm

역동적인 로드 밸런싱 알고리즘은 말 그대로 역동적입니다. 위의 정적인 상황이랑 반대되는 알고리즘을 가지고 있습니다. 역동적인 이 알고리즘은 현재 가용성, 작업상황, 각각의 서버의 상태등을 체크합니다. 

 

이렇게 체크하고 너무 줄이 긴 곳이나 문제가 생긴 창구에는 사람을 보내지 않고 안정적인 창구로 사람을 보냅니다. 이런 알고리즘이 위의 정적인 알고리즘보다 더 효율적인 것 처럼 보이긴합니다. 

 

하지만 이러한 알고리즘은 구성하기 매우 복잡합니다. 서버의 가용성은 많은 요인에 의해서 바뀌기 때문에 그때그때 상황을 봐가면서 트래픽(사람)을 보내야하기 때문에 오버헤드도 꽤 있는 편입니다. 

 

위의 편의점 예시에서 계산대로 사람을 보내기 전 로드 밸런서가 각각의 계산대의 상황을 고려해서 사람을 계산대로 보낸다면 이 로드 밸런서는 계산 양이 많아지겠죠? 그리고 굉장히 빠릿빠릿하게 일을 해야 하겠죠. 

 

하지만 구현할 수만 있다면 그리고 관리를 잘 할 수 있다면 정말 효율적으로 굴러가는 알고리즘입니다. 

 

역동적인 로드 밸런싱 알고리즘에는 어떤 알고리즘이 있는지 알아보도록 하죠

 

Least Connection Algorithm

이 알고리즘은 말 그대로 적은 연결을 맺고있는 서버 (널널한 서버) 에 트래픽을 보낸다는 특징이 있습니다. 서버에 분배된 트래픽들이 일정하거나 자주 세션이 길어지는 경우에 사용하면 적합한 방식입니다. 

 

Weighted Least Connection Algorithm

위의 최소 연결 알고리즘에서 가중치를 부여한 알고리즘입니다. 위의 가중치 기반 라운드 로빈 알고리즘과 비슷한 방식을 채택하고 있습니다. Least Connection Algorithm의 특징에 더 많은 처리가 가능한 서버에 더 많은 트래픽을 보냅니다. 

 

Weighted Response Time Algorithm

가중치 기반의 응답시간을 고려한 알고리즘입니다. 가운데 로드 밸런서는 각각의 서버까지 응답시간을 체크해서 응답시간이 짧은 서버로 트래픽을 보냅니다. 응답시간이 길다는건 그만큼 처리하고 있는 열결이 많다고 해석될 수 있기 때문에 위의 Least Connection과 비슷해 보이지만 다른 알고리즘으로 구현되어 있습니다. 

 

Resource-Based Algorithm

이 알고리즘은 각각의 서버가 얼마나 리소스를 많이 가지고 있는지에 따라 트래픽을 분배하는 방식을 사용하고 있습니다. 이 알고리즘을 처리하는 전문적인 소프트웨어 (docs 에선 agent라고 표현하고 있습니다) 가 각각의 서버의 CPU와 메모리 상황을 체크해서 트래픽을 보낸다는 특징이 있습니다. 

 

 

L4 / L7 Load Balancing

이렇게 로드 밸런싱을 구현한 알고리즘에 대해서 알아봤습니다. 로드 밸런싱은 OSI 7계층에서 로드 밸런서가 일하고 있는 위치에 따라 이름을 달리 부르고 있습니다. 요즘 가장 많이 쓰이는 로드 밸런서은 L4 로드 밸런싱과 L7 로드 밸런싱이 있습니다. 이름에서 알 수 있듯이 Layer 4인 전송계층과 Layer 7인 애플리케이션 계층에서 작동하는 로드 밸런싱입니다. 이 둘에 대해서 알아보도록 하죠

 

OSI 7계층에 대한 개념적인 이해가 필요하시다면 아래의 링크를 확인해주세요!

 

https://coding-review.tistory.com/298

 

OSI 7 계층, TCP / IP 4 계층

네트워크를 공부할 때 OSI 7계층이나 TCP 4계층에 대해서 들어본적이 있을겁니다. 우리는 이번 포스팅에서 OSI 7계층, TCP 4계층이 무엇인지, 이 둘의 차이는 무엇인지, 이 계층을 알면 뭐가 좋은지에

coding-review.tistory.com

 

Layer 4 Load Balancing

Layer 4 로드 밸런싱은 OSI 7계층에서 4번째에 위치한 전송 계층에서 애플리케이션 포트나 프로토콜과 같은 네트워크 정보를 기반으로 트래픽을 관리합니다. 

 

전송 계층에서 작동되기 때문에 메세지의 실제 컨텐츠를 볼 수 없다는 특징을 가지고 있습니다. 이러한 로드 밸런싱은 간단한 패킷 레벨의 로드 밸런싱에서 사용하면 효율적입니다. 

 

메시지(패킷)은 면밀히 관찰되지도 않고, encrypt 되어있는 메시지를 decrypt하지도 않기 때문에 매우 빠른 속도로, 효율적으로, 안정적으로 트래픽을 분배할 수 있다는 특징이 있습니다. 

 

하지만 L4 로드 밸런싱은 메세지를 확실히 볼 수 없기 때문에 미디어의 타입이나, 위치에 기반한 정보, 라운드 로빈처럼 DNS를 기반으로 하는 알고리즘과 같은 라우팅 방식을 사용할 수 없다는 단점이 있습니다. 

 

 

Layer 7 Load Balancing

Layer 7 로드 밸런싱은 OSI 7계층에서 마지막 계층인 애플리케이션 계층에서 HTTP나 SMTP 프로토콜을 기반으로 한 정보를 기반으로 트래픽을 관리합니다. 때문에 메세지를 모두 확인할 수 있다는 특징이 있습니다. 

 

메세지를 읽지 않고 트래픽을 관리하는 4계층 로드 밸런싱과는 다르게 encrypt되어있는 메세지를 decrypt하여 메세지를 면멸히 관찰합니다. 그리고 이를 기반으로 라우팅을 시도하죠. 

 

7계층에서는 메세지를 확실히 봐야하기 때문에 성능적인 패널티를 초래하기도 합니다. 하지만 이는 큰 문제는 아니긴 합니다. SSL offload 기능을 사용하면 어느정도 커버가 됩니다. 

 

URL에 따라 부하를 분산시키거나, HTTP 헤더의 쿠키값에 따라 부하를 분산하는 등 클라이언트의 요청을 보다 세분화해서 서버에 전달할 수 있습니다. 

 

또한 L7 로드 밸런싱의 경우 특정 패턴을 지닌 바이러스를 감지해 네트워크를 보호할 수 있으며, Dos / DDos와 같은 비정상적인 트래픽을 필터링할 수 있어 네트워크 보안 분야에서도 활용되고 있습니다. 

 

https://tecoble.techcourse.co.kr/post/2021-11-07-load-balancing/

 

 

여기까지 로드 밸런싱에 대해서 알아봤습니다. 네트워크 기본 지식이라고 해서 굉장히 방심했는데 큰코 다쳤습니다... 정말 심오한 주제였다는 것을 새삼 느끼고 있습니다. 

 

또한, 어느정도 트래픽이 나오는 회사에서는 로드 밸런싱을 적극적으로 사용할 것이 분명하기 때문에 면접에서도 충분히 물어볼 수 있는 내용인 것 같습니다. 

 

정보들이 한군데에 있지 않고 퍼져있어서 이번엔 구글링에 시간을 꽤나 쏟았던 것 같습니다. 하지만 늘 그렇듯 시간이 오래걸리면 완성도가 올라가기 때문에 이번 포스팅도 알차게 끝낼 수 있었던 것 같습니다. 

 

이렇게 긴 글 읽어주셔서 감사합니다. 오늘도 즐거운 하루 되세요~

 

 

출처

https://www.cloudflare.com/ko-kr/learning/performance/what-is-load-balancing/

=> 로드 밸런싱에 대한 개념, Static / Dynamic 알고리즘에 대한 내용

 

https://avinetworks.com/what-is-load-balancing/

 

Load Balancing 101 - Learn All About Load Balancers

Learn what load balancing is, what load balancing is used for, its various types, algorithms, benefits, and app insights.

avinetworks.com

=> 하드웨어 로드 밸런싱, 소프트웨어 로드 밸런싱에 대한 내용

 

https://www.cloudflare.com/ko-kr/learning/performance/types-of-load-balancing-algorithms/

=> 로드 밸런싱의 알고리즘에 대한 내용

 

https://www.a10networks.com/glossary/how-do-layer-4-and-layer-7-load-balancing-differ/

 

Layer 4 vs Layer 7 Load Balancing | Glossary | A10 Networks

L4-7 load balancers manage traffic based on a set of network services across ISO layer 4 through layer 7 that provide data storage, manipulation, and comm services.

www.a10networks.com

=> L4 로드 밸런싱과 L7 로드 밸런싱에 대한 차이와 각각의 특징

 

'CS 지식 > 네트워크' 카테고리의 다른 글

검색창에 www.google.com 을 검색했을 때  (0) 2023.03.23
Stateless, Stateful 프로토콜  (0) 2023.03.22
동기, 비동기 프로그래밍  (0) 2023.03.16
OSI 7 계층, TCP / IP 4 계층  (0) 2023.03.02
GraphQL  (2) 2023.02.25