1. 로드밸런싱 (Load Balancing)
로드밸런싱은 여러 서버에 트래픽을 분산시켜 서버의 부하를 효율적으로 관리하는 기술입니다.
이를 통해 특정 서버에 과부하가 걸리는 것을 방지하고, 시스템의 가용성과 성능을 향상시킬 수 있습니다.
예를 들어, 웹 서비스에서 수많은 사용자가 동시에 접속할 경우, 하나의 서버만으로는 처리할 수 없으므로 여러 대의 서버가 필요합니다.
로드밸런서는 이 트래픽을 서버들 간에 고르게 분산시킴으로써 효율적인 자원 활용과 장애 대비를 가능하게 합니다.
예시:
쇼핑몰 웹사이트에서 사용자가 많아지면 하나의 서버만으로는 사용자 요청을 모두 처리할 수 없습니다.
로드 밸런서는 이러한 요청을 여러 서버로 나누어 처리합니다.
A 서버, B 서버, C 서버가 있다고 가정하면, 로드밸런서는 각 요청을 서버의 상태에 따라 적절히 분배하여 응답 속도를 유지하고 서버 과부하를 방지합니다.
2. 로드밸런싱 알고리즘 (Load Balancing Algorithms)
로드 밸런서는 여러 가지 알고리즘을 통해 클라이언트의 요청을 서버에 분배합니다.
각각의 알고리즘은 특정 상황에 적합하게 설계되어 있으며, 주요 알고르짐은 다음과 같습니다.
1) 라운드 로빈 (Round Robin)
요청을 순차적으로 서버에 할당하는 방식입니다. 즉, 첫 번째 요청은 A 서버, 두 번째 요청은 B 서버, 세 번째 요청은 C 서버로 전달되는 식입니다.
서버의 상태와 관계없이 균등하게 요청을 분배합니다.
2) 가중치 라운드 로빈 (Weighted Round Robin)
A 서버의 성능이 높아 3개의 요청을 처리할 수 있고, B 서버는 2개, C 서버는 1개의 요청만 처리할 수 있다면, A 서버에 더 많은 요청을 할당합니다.
3) 최소 연결 (Least Connections)
현재 연결이 가장 적은 서버에 요청을 할당하는 방식입니다.
각 서버의 현재 부하를 고려하여, 가장 적은 연결 수를 가진 서버에 요청을 전달함으로써 효율적인 자원 활용을 가능하게 합니다.
A 서버가 5개의 연결을 유지하고 있고, B 서버는 3개, C 서버는 2개의 연결만 유지하고 있다면, C 서버에 새로운 요청을 전달하여 부하를 균등하게 분산합니다.
4) IP 해싱 (IP Hashing)
클라이언트의 IP 주소를 해싱하여 고유 값을 생성하고, 그 값에 따라 특정 서버에 요청을 할당하는 방식입니다.
이를 통해 특정 클라이언트는 항상 동일한 서버로 연결됩니다.
특정 사용자가 접속할 때마다 A 서버로 연결된다면, 이 사용자는 동일한 서버에서 서비스가 제공되어 세션 정보 등을 쉽게 유지할 수있습니다.
3. 헬스체크 (Health Check)
헬스체크는 로드밸런서가 각 서버의 상태를 모니터링하여 정상적으로 작동하는지 확인하는 과정입니다.
서버가 정상적으로 작동하지 않을 경우, 로드밸런서는 해당 서버에 요청을 보내지 않고, 다른 정상 서버로 요청을 분배합니다.
이를 통해 서버 장애가 발생하더라도 사용자는 서비스 중단 없이 계속해서 서비스를 이용할 수 있습니다.
로드 밸런서가 A 서버, B 서버, C 서버의 상태를 주기적으로 확인하는 헬스체크 기능을 수행합니다.
만약 B 서버가 응답하지 않는다면, 로드밸런서는 B 서버로 트래픽을 보내지 않고, A 서버와 C 서버로만 요청을 분배하여 서비스의 가용성을 유지합니다.
4. 마무리
로드밸런싱의 핵심은 서버 간 트래픽을 효율적으로 분산하여 가용성을 높이고, 서버의 장애 시에도 안정적인 서비스를 제공하는 것입니다.
예를 들어, 라운드 로빈 알고리즘을 통해 요청을 분산하되, 헬스체크를 통해 A 서버가 장애 상태라면 해당 서버는 요청에서 제외하고, 정상적으로 작동 중인 B 서버와 C 서버에만 요청을 분배합니다.
이때 가중치 라운드 로빈 알고리즘을 적용한다면, 성능이 더 좋은 C 서버에 더 많은 요청을 할당할 수 있습니다.
이러한 시스템을 통해 사용자는 서버 장애 여부를 인식하지 못한 채 안정적인 서비스 품질을 유지하게 됩니다.
'TIL' 카테고리의 다른 글
게임 프로그래밍과 삼각함수는 무슨연관이 있을까? (4) | 2024.10.30 |
---|---|
대칭키, 비대칭키 암호화에 대하여 (0) | 2024.10.17 |
전송 계층 프로토콜에 대하여 (0) | 2024.10.16 |
메모리란? (0) | 2024.10.11 |
CPU란? (기초) (0) | 2024.10.10 |