State
- 상태 정보, 요청에 대해 서버가 어떻게 행동할지를 결정하는데 필요한 정보
- stateful server
- 각각의 서버는 클라이언트 상태를 유지함
- ex)
distributed DB
- stateless server
- 모든 서버가 동일한 정보를 갖고 있어야 함
- ex)
replicated DB
Load Balancing

- 로드 밸런싱은
stateless servers 를 위한 것
- 클라이언트 요청을 여러 서버로 고르게 나누어 처리함
- 트래픽을 서버에 고르게 분배하여 전체 시스템 자원을 효율적으로 사용
why load balancing?
- 트래픽 분산 : 트래픽을 여러 서버에 균등하게 분산시켜, 서버 과부하를 방지함
- 가용성 : 하나의 서버가 장애를 겪더라도, 나머지 서버가 요청을 처리하여 서비스의 가용성을 유지
- 확장성 : 서버가 추가되거나 제거되더라도 유연하게 대응
algorithm
Round Robin

- 순차적으로 요청을 각 서버에 분배함
- 서버들의 성능이나 상태와 상관없이 요청을 균등하게 분배함
➡️ 모든 서버가 동일한 양의 요청을 처리함
- 단점
- ex) A → B → C → A → B → C → ...
Weighted Round Robin

- 서버의 성능이나 처리 능력에 따라 가중치를 부여하여 요청을 분배함
- 순차적으로 요청을 분배하나 서버의 가중치만큼 요청이 처리되도록 함
- 장점
- 단점
- 서버 상태 변화에 실시간으로 반영하기 어렵기 때문에, 동적인 트래픽 변화에 대응하기 어려움
- ex) A → A → B → C → A → A → B → C ...
Least Connections

- 현재 연결 수가 가장 적은 서버에 새로운 트래픽을 할당함
- 각 서버의 연결 상태를 실시간으로 모니터링하고, 연결이 적은 서버에 우선적으로 트래픽을 분배함
- 장점
- 단점
- 서버의 연결 상태를 추적하기 때문에, 시스템 복잡도가 증가함
- ex) 그림의 상황에서 B 서버에 트래픽 전달
Hash Based

- 클라이언트의 IP 주소나 요청 URL을 해시 키로 사용하여 요청을 특정 서버에 매핑함
- 클라이언트가 이전에 연결했던 서비스에 다시 연결되므로, 세션 기반 서비스에 이용
- 장점
- 같은 클라이언트가 동일한 서버에 연결되므로, 세션 정보가 유지됨
- 해시 함수를 통해 균등하게 트래픽을 분배할 수 있음
- 단점
- 서버 추가/제거 시 서버의 해시 값이 달라짐
➡️ 클라이언트가 이전과 다른 서버에 할당
- 해시 분배가 고르게 이루어지지 않으면, 일부 서버 과부하
L4 Load Balancer
- transport layer 에서 동작함
- 트래픽을 클라이언트의 IP 주소와 포트 번호 등을 기반으로 분석한 후, 요청을 여러 서버로 분산시킴
- 장점 : 빠른 라우팅
- 단점 : application layer 정보는 처리하지 않기 때문에 IP와 포트 기반 단순한 로드밸런싱만 가능함
- ex)
AWS의 Network Load Balancer, GCP의 TCP/UDP Load Balancing
L7 Load Balancer
- application layer 에서 동작함
- HTTP/HTTPS와 같은 프로토콜의 데이터를 기반으로 트래픽을 분산
- 장점 : URL이나 쿠키, 헤더 등의 세부 정보 기반 트래픽 분배가 가능함
- 단점 : L4에 비해 처리 속도가 느림
- ex)
AWS의 Application Load Balancer, GCP의 HTTP(S) Load Balancing