본문 바로가기
IT/Teckweek

로드밸런싱

by YEON-DU 2021. 6. 10.
반응형

면접 질문으로 이런 류의 질문을 꽤 들어봤을 것이다. (특히나 이커머스 계열의 회사이거나 서버 직무라면)

 

"안정적인 인프라를 만들기 위해서는 어떻게 해야할까요?"

"블랙프라이데이와 같은 많은 트래픽이 예상되는 상황에서 미리 대처할 수 있는 방법은 무엇이 있을까요?"

 

그냥 로드밸런서를 사용해서, 서버를 계층화하여 부하를 분산시킨다. 와 같은 심플한 대답을 하다가, 최근에 본 다대다 면접에서 어플리케이션 / 서버 파트별로 꽤 상세하게 대답한 다른 면접자를 보면서 한 번 되짚어볼 필요가 있다고 생각해서 주제를 선정하게 되었다.

 

기본적으로 많은 트래픽이 발생한 경우 서버에서 대처하는 방법은 크게 2가지이다.

 

스케일 업(Scale Up): 서버에 CPU나 RAM 등을 추가하여 서버의 하드웨어 스펙을 향상시키는 방법

스케일 아웃(Scale Out): 서버를 여러 대 추가하여 시스템을 증가시키는 방법. 보통 이 방식을 사용하는데, 서버 성능을 향상시키는 것보다 여러 대의 서버를 증설하는 것이 비용적 측면에서 효과적이기 때문이다.

 

이 두 방법은 서버의 스케일을 조절하여 트래픽을 분산시키는 방법인데, 서버 스케일링은 전략이 필요하다. 어떠한 방식을 사용할 것인지, 얼마나 할 것인지에 대한 전략이 중요하다. 트래픽을 예측하여 적절하게 스케일링 해주는 방식으로는 트래픽을 모니터링하여 *오토 스케일링 하는 방식이 있다.

 

*오토 스케일링 : 사용자가 미리 지정한 오토 스케일링 정책에 따라 트래픽이 발생하였을 때 미리 지정된 만큼의 자원이 늘어나게 설정하는 기술을 말한다. 이를 통해서 클라우드 회사는 과금 정책을 사용할 수 있고 고객사는 갑작스런 트래픽으로 서비스가 죽어버리는 것을 막을 수 있다.

 

 

서버 확장을 위한 두 가지 방법 [출처] https://hooni.net/95321

 

수많은 트래픽이 발생했을 때 서버의 부하를 분산시키기 위해서는 무엇을 사용할까?

로드밸런싱 기술을 사용한다. 로드 밸런서를 사용하여 서버를 계층화시킬 수 있고 많은 트래픽을 분산시킬 수 있게된다.

 

로드 밸런싱

 

로드밸런싱은 분산식 웹 서비스이다. 서버를 계층화 시켜서 여러 서버에 load를 balancing하는 것이다. 말 그대로 부하를 나누어서 웹 서버가 다운되지 않도록 만드는 목적을 가지고 있다.

 

로드 밸런서는 서버를 라운드 로빈, least connections, source 방식 등으로 선택한다.

 

CPU 스케줄링과 동일한 라운드 로빈 방식이 있고,

가장 적게 연결된 서버를 선택하는 방식,

그리고 사용자 IP를 해싱하여 분배하는 방식이 있다.

Source 방식을 사용하면 특정 사용자가 항상 같은 서버로 연결되는 것이 보장된다.

 

로드 밸런서에 문제가 생기게 되면 서버에 큰 타격이 올 수 있으므로 로드 밸런서를 이중화 시켜 문제를 대비하여야 한다.

 

L4 로드 밸런싱과 L7 로드 밸런싱

L4 로드 밸런싱은 Layer 4(네트워크 계층 또는 트랜스포트(전송) 계층) 의 정보를 바탕으로 트래픽을 분산하는 방식이다.

즉, TCP, UDP, IP 정보들을 바탕으로 트래픽을 분산시킨다.

이는 정보가 어떻게 생겼는지 보지 않고 패킷 레벨에서만 트래픽을 분산하기 때문에 속도가 빠르고 효율성이 높다.

그리고 L7 로드 밸런싱보다 비용이 저렴하다.

 

반면, L7 로드 밸런싱은 Layer 7(애플리케이션(응용) 계층) 의 정보를 바탕으로 요청을 분산한다.

HTTP Header, Cookie 등과 같이 사용자가 요청한 정보들을 바탕으로 트래픽을 분산하기 때문에 섬세한 라우팅이 가능하고 비정상적인 트래픽을 판별할 수 있다.

 

참고 자료

https://www.sharedit.co.kr/posts/12821

https://wedul.site/427

https://maivve.tistory.com/269

https://mangkyu.tistory.com/95

반응형

'IT > Teckweek' 카테고리의 다른 글

SCM (Software Configuration Management)  (0) 2022.10.26
CI/CD  (0) 2022.10.06
Reactive Programing이란?  (0) 2021.04.28
프로세스와 스레드  (0) 2021.04.25
반복자 패턴(Iterator Pattern)  (0) 2021.03.27

댓글