load balancing
부하분산은 네트워크 기술로 작업을 나누어 자원들에게 할당하는 것을 의미한다.
서버가 확장되고 클라이언트 수가 증가시 증가된 트래픽에 대처하는 방법 :
- scale up : 서버자체를 증강 전형적으로 프로세서를 추가하거나 프로세서 자체를 고성능모델로 옮기는것을 말한다.
- scale out : 접속 서버의 대수를 늘려 가상적으로 복수 서버를 구축하거나 추가하는 것이다.=> 분산처리 시스템으로 설계해야함
Scale-out방식시 트래픽을 분산처리해주는 로드밸런싱이 필요함
알고리즘
- 라운드 로빈
서버에 들어온 요청을 순서대로 배정 => 서버와의 연결이 오래 지속되지 않는 경우 적합
- 가중 라운드로빈 방식
각 서버에 가중치를 매기고 가중치순 우선배정으로 서버 트래픽처리 능력이 다른경우 사용
- 최소 연결 방식
요청이 들어온 시점에 가장 여유로운 서버에 트래픽을 배정=> 서버 분배된 트래픽이 일정하지 않은경우 적합
- IP 해시 방식
클라이언트의 IP주소를 특정 서버로 매핑해 요청처리
L4 로드 밸런싱
- transport 계층에서 로드 분산 => TCP, UDP 포트정보 바탕
- 데이터 내부까지 해석하지 않고 패킷수준에서만 분산하기에 빠름 => 섬세한 라우팅 불가능 but! L7로드 밸런서보다 저렴
- 로드밸런싱의 기준점이 IP와 Port이기 때문에 TCP/UDP의 header를 분석해 밸런싱에 활용하진 않음
L7 로드 밸런싱
- application 계층에서 로드 분산
- HTTP 헤더,쿠기 등과 같은 사용자 요청 기준 특정 서버에 트래픽 분산 가능
- 섬세한 라우팅 가능하며 비정상 트래픽 필터링 가능 but! 패킷내용 복호화 필요하기에 더 많은 cost 필요!
- IP와 Port로 로드밸런싱을 하지만 Layer7 프로토콜을 통해 사용자 정의 로드밸런싱 실시하거나 Layer 7프로토콜 헤더를 조작/활용한다는 특징이 있다.
L7 스위치가 cost가 가장 높으며 모든 계층 대체 가능하지만 자원 낭비... L4도 L2스위치로 대체 가능하지만 낭비다!!
=> 단순 TCP/UDP 로드밸런싱 서버 부하분산만 필요하면 L4, 그 이상의 해석하는 리소스는 낭비
L7 로드밸런싱은 L4 프로토콜과 Profile을 활용할 수 있으며 L7 프로토콜 헤더를 읽고 활용도 가능함
좋은 글 감사합니다.