서론

만약 소규모가 사용하는서비스의 경우 크게 문제될경우가 없지만 만약 서비스의 크기가 점점 커져 단일 서버로 감당이 안될경우 어떻게될까??

가장 친근한 예시로는 예전 배달의민족에서 진행했던 치킨쿠폰 이벤트가 있다. ("블랙 후라이드데이" 검색)

2019년에 진행했던 이벤트로 당시 엄청난 유저가 몰렸으나 해당 서버가 감당을 못하여 대부분의 이용자가 쿠폰이 아닌 하얀화면만 잔뜩 보다가 쿠폰을 받지 못하게 되었다. (나도 못먹엇다!..  ;ㅅ; )

 

이를 해결하기 위한 방식중 1가지인 로드밸런싱에 대해서 알아보자

 

로드밸런싱

기본적인 개념을 이해하기 위해 다음과 같은 예시를 들어보겠다

극장에서 새로운 영화를 상영한다고 했을때 1개의 관에서 상영하는게 아닌 여러개의 관에서 동일한 영화를 상영하며 손님들은 각자 배정된 영화관에 들어가 영화를 보는것이다.

 

영화관으로 이동시켜주는 통로는 1개지만 여기서 직원들이 각각 1번관, 2번관, 3번관으로 흩어지게 하며 만약 A영화의 인기가 많은경우 B영화를 상영중인 다른관을 A영화를 상영하여 모든 손님이 관람에 문제가 없도록 만드는게 목적이다.

영화관 도면

이것을 네트워크에 적용시켜보자

영화를 보러 방문하는 사람은 Client가 될것이고

각각의 관은 각 서버(인스턴스)를 뜻하고

손님을 배정해주는 직원이 로드밸런서를 의미한다고 이해하면 쉽다.

 

그렇다면 소규모 서비스에서 1Gbps 사이즈 2개 돌릴바에 2Gbps 1개로 돌리면 문제가 없느냐? 라고 할수도 있다.

실제로 비교한 형태는 다음과 같다.

인스턴스 유형   개수 시간당 가격 총 메모리 네트워크 성능
m5.xlarge 1 $0.192 16 GB 최대 10 Gbps
t3.large 2 $0.0832 x 2 = $0.1664 16 GB (8 GB x 2) 최대 10 Gbps (각 5 Gbps, 합계 최대)

 

1개의 인스턴스를 돌리는것 보다 2개의 인스턴스를 돌리는게 더 저렴하며 로드밸런서를 사용해서 얻는 이점은 다음과 같다.

 

같이보기

하단의 링크에서 통상적으로 1Gbps의 네트워크는 1000명의 유저를 감당할수 있다고 나온다 (내가 사용하는 네트워크를 확인하려면 개발자도구 - network에서 확인 가능하다) 

https://www.highspeedinternet.com/resources/whats-the-difference-between-mbps-and-gbps


가용성

로드 밸런서는 요청을 서버로 라우팅하기 전에 서버의 상태를 확인하여 서버에 문제가 생기거나 업그레이드(블루 - 그린 배포 등)로 인해 오프라인일때, 로드 밸런서는 문제없이 작동하는 서버로 재라우팅하여 유저의 서비스 이용 중단을 방지하며 고가용성을 유지하게 된다. 

확장성

로드 밸런싱을 통해 네트워크 트래픽 부하가 많거나 적어도 문제없도록 온디맨드 고성능 인프라를 구현이 가능하다.

필요에 따라 물리적 서버, 가상 서버를 추가 또는 제거할 수 있다. (확장성에 유리)

보안

로드 밸런서에는 SSL 암호화, 웹 애플리케이션 방화벽(WAF), 멀티팩터 인증(MFA)과 같은 보안 기능이 포함될 수 있습니다.

애플리케이션 보안을 개선하기 위해 ADC(Application Delivery Controller)에 통합할 수도 있으며, 네트워크 트래픽을 안전하게 라우팅하거나 DDoS(분산 서비스 거부) 공격과 같은 보안 위험을 방어하는 데 도움이 될 수 있습니다.

 

즉, 다른 인스턴스에 문제가 생겼을경우나 과도한 트래픽이 몰릴경우 문제없도록 자동으로 분산해주며(DDos방지) 2중 보안도 가능하다

 

그렇다면 어떤 장점, 원리를 이해했으니 어떻게 동작되는지 확인해보자


로드밸런서 알고리즘

1. 라운드 로빈 (Round Robin)

  • 방법: 각 서버에 요청이 들어온 순서대로 할당
  • 장점: 구현이 간단하며 모든 서버에 균등하게 요청을 분산시킬 수 있다
  • 단점: 서버의 성능 차이가 있을 때 문제가 발생할수도 있다

2. 가중치 라운드 로빈 (Weighted Round Robin)

  • 방법: 서버마다 가중치(우선순위)를 부여해 더 성능이 좋은 서버에 더 많은 요청을 할당합니다.
  • 장점: 서버의 성능을 고려해 요청을 분배할 수 있다
  • 단점: 서버마다 가중치 설정을 해야하며 동적으로 가중치를 조정하기 어렵다.

3. 최소 연결 (Least Connections)

  • 방법: 현재 연결된 세션 수가 가장 적은(여유있는) 서버에 요청을 할당합니다.
  • 장점: 현재 서버의 부하 상태를 고려하여 요청을 분배할 수 있습니다.
  • 단점: 연결 수를 계속 확인해야 하므로 관리가 복잡할 수 있습니다.

4. 가중치 최소 연결 (Weighted Least Connections)

  • 방법: 최소 연결 알고리즘에 서버 가중치(우선순위)를 추가하여 부하를 분산합니다.
  • 장점: 서버의 성능과 현재 부하를 모두 고려하여 효율적으로 요청을 분배할 수 있습니다.
  • 단점: 설정과 관리가 복잡할 수 있습니다.

5. IP 해시 (IP Hash)

  • 방법: 클라이언트의 IP 주소를 해싱하여 특정 서버에 요청할당
  • 장점: 같은 클라이언트는 항상 같은 서버로 연결되어 세션 지속성을 유지
  • 단점: 특정 서버로의 트래픽이 집중

6. URL 해시 (URL Hash)

  • 방법: 요청 URL을 해싱해 특정 서버에 요청을 할당
  • 장점: 같은 URL 요청은 항상 같은 서버로 연결되어 캐싱 효율성을 높일 수 있다
  • 단점: 특정 서버로의 트래픽이 집중

7. 랜덤 할당 (Random Allocation)

  • 방법: 무작위로 서버에 요청을 할당
  • 장점: 구현이 간단
  • 단점: 분산이 균등하지 않다

8. 최소 응답 시간 (Least Response Time)

  • 방법: 응답 시간이 가장 짧은 서버에 요청을 할당
  • 장점: 서버 응답 속도를 고려해 효율적인 부하
  • 단점: 응답 시간의 모니터링이 필요

9. 가중치 최소 응답 시간 (Weighted Least Response Time)

  • 방법: 최소 응답 시간 알고리즘에 서버 가중치를 추가하여 부하를 분산
  • 장점: 서버의 성능과 응답 속도를 모두 고려하여 효율적으로 요청을 분배
  • 단점: 설정과 관리가 복잡

단어 설명

라우팅 (Routing) - 네트워크 내에서 데이터를 적절한 경로를 통해 전달하는 과정 (특정 네트워크 패킷이 출발지에서 목적지로 이동하는 최적의 경로를 결정하는 것)

가용성 유지 (High Availability) - 시스템이 지속적으로 동작하도록 유지하는 능력 (시스템이 문제없이 작동하고 장애가 생겨도 문제없이 서비스가 가능하도록 설계된 구조)

온디맨드 고성능 인프라 (On-Demand High-Performance Infrastructure) - 필요에 따라 성능을 확장할 수 있는 인프라로 클라우드 서비스의 특징이며 사용자가 필요로하는 시점에 자원을 늘리거나 줄일수 있다 (인스턴스 추가).

확장성 자동화 (Scalability Automation) - 시스템이 자동으로 자원의 양을 늘리거나 줄일 수 있는 능력.  (로드 밸런서에선 A인스턴스, B 인스턴스 각각에 라우팅되는 트래픽을 조절할수 있다)

SSL 암호화 (SSL Encryption) - 데이터 전송 시 보안을 위해 사용하는 암호화 프로토콜 HTTPS와 같은 보안 웹 통신에서 사용됨. (URL 옆 자물쇠 아이콘)

멀티팩터 인증 (MFA, Multi-Factor Authentication) - 사용자가 두 개 이상의 인증 방법을 통해 신원을 확인하는 보안 절차. 비밀번호 외에 추가적인 인증 수단을 요구하는것

ADC (Application Delivery Controller) - 애플리케이션의 성능, 보안, 가용성을 최적화하기 위한 장비 또는 소프트웨어. 로드 밸런싱, SSL 오프로딩, 애플리케이션 가속화 등의 기능을 제공함.

 

+ Recent posts