일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- var
- generic
- VUE
- machine learning
- git
- bash
- condition
- 앙상블
- webpack
- vue.js
- BOJ
- vuetify
- C#
- loop
- security
- Python
- npm
- TypeScript
- type
- AI
- property
- dotenv
- C++
- docker
- JavaScript
- Clone
- leetcode
- scss
- nginx
- 보안
Archives
- Today
- Total
ice rabbit programming
[Infra] Load Balancing 알고리즘 본문
로드 밸런싱은 서버에 가해지는 부하를 분산해주는 컴퓨터 네트워크 기술로, 서버 풀(pool) 앞에 위치한다. 본인은 학부 때 클라우드 VM을 사용하면서 처음 접해보았다.
Scale Up vs Scale Out
서비스 초창기, 혹은 개발 단계에서는 서버를 한 대만 구축할 수 있다. 이 때는 트래픽이 많지도 않고, 한 대 뿐이므로 분산할 수도 없다. 하지만 점점 커지면서, 이러한 요청들을 처리(수행)하기에 빡빡해지는데, 보통 두 가지의 선택지가 있다.
- Scale Up : 서버 자체의 성능을 확장하는 것으로, 쉽게 말하면 서버의 사양을 높이는 것. RAM 메모리 용량을 키운다거나, CPU 성능을 높이는 등이다.
- Scale Out : 여러 서버를 증설하여 운영하는 것이다. 즉, 같거나 비슷한 수준의 서버를 여러대 운영한다.
최근에는 Scale Out 방식이 선호된다. Scale Out 방식을 사용한다면 거의 반드시 로드 밸런서를 사용한다.
Load Balancing 알고리즘
LB가 각 서버에 부하를 분산하는 방법은 여러가지가 있다. 우선, 상술했듯이 로드 밸런서는 서버 풀과 클라이언트 사이에 위치하여, 클라이언트의 요청을 알맞은 서버로 보내 준다.
- Round Robin(라운드 로빈) : 가장 기본적인 방법으로, 돌아가면서 서버에 요청을 보내는 방식이다. 각 서버의 성능 차이가 크지 않을 때 많이 사용된다.
- Weighted Round Robin(가중치 라운드 로빈) : 기본적으로는 위의 라운드 로빈과 같은데, 각 서버마다 가중치를 두어, 우선적으로 갈 곳을 지정한다. 서버의 성능 차가 유의미할 때 많이 사용된다.
- Source IP(소스 IP) : 클라이언트 IP를 Hash 값을 사용해 특정 서버에 매핑하여 요청을 보낸다. 사용자가 항상 같은 서버로 연결되므로, 이러한 동작이 필요할 경우 사용된다.
- Least Connection(최소 연결) : 현재 연결된 클라이언트가 가장 적은 서버로 요청을 보낸다.
- Least Response Time(최소 응답 시간) : 각 서버의 현재 연결 상태와, 응답 시간을 모두 고려하여 요청을 보낸다.
부하 분산에는 L4, L7(OSI 7계층) 로드 밸런서가 가장 많이 활용되는데, 이는 L4부터 포트 정보를 바탕으로 부하를 분산할 수 있기 때문이다.