개발일지
로드밸런싱이란? 본문
로드밸런싱 (Load Balancing)
사용자가 늘고 트래픽이 증가하다보면 하나의 서버로 감당하기 힘든 순간이 올 것이다. 이때 트래픽 관리를 위해 서버를 확장하게 되는데 확장 방법으로 스케일 업, 그리고 스케일 아웃이 있다.
스케일 업 (Scale-up): 단일 서버 그 자체의 성능을 업그레이드 하는 방식
스케일 아웃 (Scale-out): 서버를 증설하여 전체 시스템 성능을 향상하는 방식
스케일 아웃 방식을 선택했다면 트래픽을 여러 서버로 균등하게 분산하기 위한 기술이 필요한데 이때 사용하는게 로드밸런싱 이다.
로드밸런서 동작 방식
- 도메인 주소를 입력하면 클라이언트는 DNS 쿼리를 로컬 DNS로 전송한다.
- 로컬 DNS는 로드밸런서의 가상 IP 주소(Virtual IP)를 찾아 클라이언트에 반환한다.
- 클라이언트는 VIP 주소로 HTTP(S) 요청을 보낸다.
- 로드밸런서는 내부 알고리즘으로 선택한 하나의 서버에 요청을 전달한다.
- 로드밸런서는 서버의 응답 결과를 받아 클라이언트에 전송한다.
L4 로드밸런서 vs. L7 로드밸런서
주로 L4 로드밸런서와 L7 로드밸런서를 사용하는데 이는 전송계층(L4)부터 IP와 Port를 기반으로 한 부하 분산이 가능하기 때문이다.
- L4 로드밸런서는 네트워크(IP/Port) 또는 전송 계층(TCP/UDP) 정보를 바탕으로 부하를 분산한다. 패킷 레벨에서만 부하를 분산하기 때문에 속도가 빠르고 효율이 높다.
- L7 로드밸런서는 TCP/UDP는 물론 HTTPS, FTP 등 애플리케이션 계층의 부하 분산 관리가 가능하다. 더 세밀한 제어가 가능하지만 그만큼 더 높은 비용이 발생한다.
로드밸런싱 알고리즘
로드밸런서는 더 적합한 서버에 부하를 분배하기 위해 미리 설정된 분산 알고리즘을 적용하여 부하 분산을 관리한다. 크게 정적 로드밸런싱과 동적 로드밸런싱, 두 범주로 나뉜다.
정적 로드밸런싱 vs. 동적 로드밸런싱
- 정적 로드밸런싱은 미리 정해진 규칙에 맞춰 로드밸런싱이 이루어진다. 주로 서비스 시작 시점에 설정되어 그 뒤에는 변경되지 않는 경우가 많다. 라운드 로빈 등이 속한다.
- 동적 로드밸런싱은 요청이 들어올 때 각 서버의 상태에 따라 할당할 서버를 결정하는 방식이다. 최소 연결 방식, 최소 응답 방식 등이 속한다.
라운드 로빈 방식 (Round Robin)
- 서버에 요청이 들어온 순서대로 분배하는 방식
- 서버 간의 성능 및 부하 차이가 크지 않을 경우
- 서버들 간의 요청 처리 시간이 비슷할 경우
가중 라운드 로빈 방식 (Weighted Round Robin)
- 서버마다 가중치를 할당하여 가중치가 높은 서버에 더 많은 트래픽을 분배하는 방식
- 서버 간의 성능 및 부하 차이가 클 경우
최소 연결 방식 (Least Connections)
- 연결된 Connection 수가 가장 적은 서버에 트래픽을 분배하는 방식
- 서버 간 성능 차이가 크지 않을 경우
- 서버 간 트래픽 부하가 일정하지 않을 경우
- 연결 지속 시간이 긴 경우 ex) 실시간 웹 소켓 통신
가중 최소 연결 방식 (Weighted Least Connections)
- 서버에 가중치를 할당하고 연결된 Connection과 가중치를 고려하여 트래픽을 분배하는 방식
- 서버 간의 성능 및 부하 차이가 크고, 현재 Connection 수를 고려하여 트래픽을 동적 관리해야할 경우
최소 응답 시간 방식 (Least Response Time)
- 서버의 응답 시간을 측정하고 응답 속도가 가장 빠른 서버에 트래픽을 분배하는 방식
- 서버 간의 성능, 부하, 응답시간이 일정하지 않고 예측이 어려운 경우
- 빠른 응답 시간이 중요한 경우 ex) 실시간 서비스, 대화형 애플리케이션
IP 해시 방식 (IP Hash)
- 클라이언트 IP 주소를 해싱한 결과에 따라 특정 서버와 매핑하는 방식
- IP 주소는 고정된 값이기 때문에 동일한 서버와의 연결을 보장 함
참고한 글
https://post.naver.com/viewer/postView.nhn?volumeNo=27046347&memberNo=2521903
https://aws.amazon.com/ko/what-is/load-balancing/
https://steady-coding.tistory.com/535
'CS, WEB' 카테고리의 다른 글
DNS(Domain Name System) 알아보기 (0) | 2024.08.24 |
---|---|
프로세스와 스레드 (0) | 2024.02.28 |
OAuth 2.0 알아보기 (0) | 2022.12.12 |
PASETO (Platform-Agnostic SEcurity TOkens) (0) | 2022.11.25 |
JWT(Json Web Token) (0) | 2022.11.20 |