Google Cloud PlatForm 의 NGINX Plus 및 Google 로드 밸런서

Google Cloud Platform 에서 실행되는 애플리케이션을 로드 밸런싱해야 하는 고객은 여러 가지 옵션이 있습니다.
NGINX Plus , Google Compute Engine (GCE) 로드 밸런싱 서비스 또는 NGINX Plus와 GCE 서비스의 조합입니다. 이 포스트에서는 각 솔루션을 비교하고, NGINX Plus를 GCE 로드 밸런싱 서비스와 함께 사용하면 풍부한 Layer 7 기능을 갖춘 고가용성 HTTP 로드 밸런서를 얻을 수 있다는 것을 보여줍니다.

목차

1. 개요
2. NGINX Plus 와 Google Cloud PlatForm GCE 로드 밸런싱 비교
 2-1. Google Cloud Platform GCE vs NGINX Plus: Request 라우팅
 2-2. Google Cloud Platform GCE vs NGINX Plus: 로드 밸런싱 방법
 2-3. Google Cloud Platform GCE vs NGINX Plus: 세션 지속성
 2-4. Google Cloud Platform GCE vs NGINX Plus: Health Checks
 2-5. Google Cloud Platform GCE vs NGINX Plus: SSL Termination
 2-6. Google Cloud Platform GCE vs NGINX Plus: HTTP/2 지원
3. NGINX Plus 의 추가 기능
 3-1. URL Rewrite 및 Redirection
 3-2. 연결 및 Rate Limit
 3-3. WebSocket 지원
 3-4. Access Logging
4. Google Cloud Platform GCE 로드 밸런싱 서비스의 추가 기능
 4-1. 자동 재구성을 통한 Backend 인스턴스 자동 확장
 4-2. UDP 지원
 4-3. Region 간 로드 밸런싱
5. Google Cloud Platform GCE 로드 밸런싱 서비스를 갖춘 NGINX Plus
 5-1. Active-Active HA
 5-2. Region 간 로드 밸런싱
 5-3. Backend 인스턴스 자동 확장
 5-4. NGINX Plus 인스턴스 자동 확장
6. 요약

1. 개요

Google Cloud PlatForm GCE에는 두 가지 로드 밸런싱 솔루션이 있습니다.
네트워크 로드 밸런싱과 HTTP/HTTPS 로드 밸런싱입니다. 전자는 GCE 지역 내에서 TCP/UDP (Layer 4/네트워크) 로드 밸런싱을 수행합니다. 후자는 HTTP/HTTPS (Layer 7/애플리케이션) 로드 밸런싱을 수행하며, Cross-Region 로드 밸런싱을 지원합니다 (편의상 이후 블로그에서는 일반적으로 “HTTP 로드 밸런싱”이라고 언급합니다).

다음은 NGINX Plus와 Google Cloud PlatForm Compute Engine 로드 밸런싱 서비스 간의 일반적인 비교입니다. (GCE NLB는 GCE 네트워크 로드 밸런싱을 의미하고, GCE HLB는 GCE HTTP/HTTPS 로드 밸런싱을 의미합니다.)

특징NGINX PlusGCE NLBGCE HLBNGINX Plus 및 GCE NLBNGINX Plus 및 GCE HLB
HTTP 인식
HTTP/2 인식
WebSocket 인식
TCP 로드 밸런싱
UDP 로드 밸런싱
로드 밸런싱 방법AdvancedSimpleAdvancedAdvancedAdvanced
SSL/TLS Termination
URL 요청 MappingAdvancedSimpleAdvancedAdvanced
URL Rewrite 및 Redirection
HTTP Health ChecksAdvancedSimpleSimpleAdvancedAdvanced
TCP Health ChecksAdvancedAdvanced
세션 지속성AdvancedSimpleAdvancedAdvanced
Active-Active NGINX Plus 클러스터
제한
지역 간 로드 밸런싱

2. NGINX Plus 와 Google Cloud PlatForm GCE 로드 밸런싱 비교

2-1. Google Cloud Platform GCE vs NGINX Plus: Requset 라우팅

NGINX Plus는 요청 URL, 헤더의 필드 또는 쿠키를 기반으로 백엔드 서버 그룹 간에 요청을 분산할 수 있습니다. 예를 들어, URL이 /store로 시작하는 모든 요청을 한 개의 업스트림 서버 그룹으로 보내고, URL이 /support로 시작하는 모든 요청을 다른 그룹으로 보낼 수 있습니다. 또 다른 예로는 URL이 .html, .jpg, .gif 또는 .png로 끝나는 모든 요청을 한 그룹으로 보내고, URL이 .php로 끝나는 모든 요청을 다른 그룹으로 보낼 수 있습니다.

GCE HTTP 로드 밸런서는 전자 유형의 라우팅을 지원하지만 후자는 지원하지 않습니다.

GCE HTTP 로드 밸런서와 NGINX Plus 모두 요청 헤더의 Host 필드를 기반으로한 요청 라우팅을 수행할 수 있습니다.

GCE 네트워크 로드 밸런서는 HTTP 로드 밸런싱을 지원하지 않으므로 이러한 유형의 요청 라우팅을 지원하지 않습니다.

2-2. Google Cloud Platform GCE vs NGINX Plus: 로드 밸런싱 방법

NGINX Plus는 여러 가지 로드 밸런싱 방법을 선택할 수 있습니다. 기본적으로 Round Robin 방식을 사용하지만 다음과 같은 방법들도 있습니다:

  • 최소 연결 (Least Connections) – 가장 적은 활성 연결을 가진 서버로 요청을 보냅니다.
  • 최소 시간 (Least Time) – 평균 대기 시간과 활성 연결 수가 가장 낮은 서버로 요청을 보냅니다.
  • IP 해시 (IP Hash) – 요청의 소스 IP 주소에 따라 서버를 결정하여 요청을 보냅니다.
  • 일반 해시 (Generic Hash) – 사용자 정의 키를 기반으로 서버를 결정하여 요청을 보냅니다. 이 키에는 텍스트와 NGINX 변수의 조합이 포함될 수 있으며, 예를 들어 Source IP 주소와 Source Port 헤더 필드 또는 URI에 해당하는 변수 등이 있을 수 있습니다.
  • 모든 방법은 각 백엔드 서버에 다른 가중치 값을 추가함으로써 확장할 수 있습니다.

Google Cloud Platform GCE 네트워크 로드 밸런서는 Hash 방식에 해당하는 방법만 지원합니다. 기본적으로 Source IP 주소, Source Port, Destination IP 주소, Destination Port 및 프로토콜 헤더 필드를 기반으로 백엔드 서버를 선택하는 키를 사용합니다.

GCE HTTP 로드 밸런서는 지역 내에서 먼저 백엔드 서버 인스턴스 그룹의 남은 용량을 기준으로 요청을 분산시킨 후, 그룹 내의 인스턴스들 사이에서 요청을 균등하게 분배합니다.

2-3. Google Cloud Platform GCE vs NGINX Plus: 세션 지속성

세션 지속성(Session Persistence), 또는 스티키 세션(Sticky Sessions) 또는 세션 어피니티(Session Affinity)라고도 알려진 것은 특정 클라이언트의 모든 요청이 동일한 백엔드 서버로 전송되어야 하는 경우에 필요합니다. 이는 클라이언트 상태가 백엔드 서버 간에 공유되지 않기 때문입니다.

NGINX Plus는 세 가지 고급 세션 지속성 방법을 지원합니다:

  • Sticky Cookie: NGINX Plus는 특정 클라이언트에 대한 첫 번째 업스트림 그룹 응답에 세션 쿠키를 추가합니다. 이 쿠키는 요청을 처리한 백엔드 서버를 식별합니다. 클라이언트는 이 쿠키를 후속 요청에 포함시키고, NGINX Plus는 이를 사용하여 요청을 동일한 백엔드 서버로 전달합니다.
  • Sticky Learn: NGINX Plus는 요청과 응답을 모니터링하여 세션 식별자(일반적으로 쿠키)를 찾고, 이를 사용하여 세션의 후속 요청에 대한 서버를 결정합니다.
  • Sticky Route: 경로 값과 백엔드 서버 간의 매핑을 구성하여 NGINX Plus가 경로 값에 대한 요청을 모니터링하고 일치하는 백엔드 서버를 선택합니다. 이 메커니즘은 종종 Tomcat의 JVMRoute 기능과 함께 사용되는데, Tomcat은 JSESSIONID에 값을 추가하여 요청을 처리한 서버를 식별합니다.

NGINX Plus는 또한 위에서 설명한 로드 밸런싱 방법 중 두 가지 기본 세션 지속성 방법을 제공합니다:

  • IP Hash: 백엔드 서버는 요청의 IP 주소에 의해 결정됩니다.
  • Hash: 백엔드 서버는 사용자 정의 키(예: Source IP 주소 및 Source Port 또는 URI)에 의해 결정됩니다.

Google Cloud Platform GCE 네트워크 로드 밸런서는 NGINX Plus의 Hash 방법과 동등한 방식을 지원하지만, 키는 Source IP 주소, Source Port, Destination IP 주소, Destination Port 및 프로토콜 헤더 필드의 특정 조합으로 제한됩니다.

Note: GCE 네트워크 로드 밸런서 또는 NGINX IP Hash, 또는 키에 Source IP 주소가 포함된 NGINX Hash를 사용하는 경우, 세션 지속성은 클라이언트의 IP 주소가 세션 동안 동일한 경우에만 올바르게 작동합니다. 이는 항상 그렇지 않을 수 있으며, 예를 들어 모바일 클라이언트가 WiFi 네트워크에서 셀룰러 네트워크로 전환하는 경우 등이 있습니다. 요청이 계속해서 동일한 백엔드 서버로 전달되도록 하려면, 위에서 나열한 고급 NGINX Plus 세션 지속성 메커니즘 중 하나를 사용하는 것이 좋습니다.

Google Cloud Platform GCE HTTP 로드 밸런서는 세션 지속성을 지원하지 않습니다.

2-4. Google Cloud Platform GCE vs NGINX Plus: Health Checks

Google Cloud Platform GCE의 두 가지 로드 밸런싱 서비스는 간단한 애플리케이션 Health Checks을 지원합니다. 로드 밸런서가 요청하는 URL을 지정하고, 기대하는 HTTP 200 응답 코드를 받으면 백엔드 서버를 Healthy한 상태로 간주합니다. 또한, 상태 확인 빈도와 서버가 비정상으로 간주되기 전의 timeout 기간을 지정할 수 있습니다.

NGINX Plus는 Advanced Health Checks 기능을 제공하여 이 기능을 확장합니다. URL을 지정하는 것 외에도, NGINX Plus를 사용하면 요청에 헤더를 삽입하고 다른 응답 코드를 확인하며, 응답의 헤더와 본문을 검사할 수 있습니다.

NGINX Plus의 유용한 관련 기능 중 하나는 슬로 스타트(Slow Start)입니다. NGINX Plus는 새로운 서버나 최근에 복구된 서버에 대한 부하를 천천히 증가시켜 연결이 과부하되지 않도록 합니다. 이는 백엔드 서버가 일정한 시간 동안 워밍업 시간이 필요하고, Healthy한 상태로 표시된 후에 즉시 전체 트래픽을 처리하면 실패하는 경우에 유용합니다.

NGINX Plus는 또한 TCP 및 UDP 서버에 대한 상태 확인을 지원합니다. 이를 통해 보낼 문자열과 응답에서 찾을 문자열을 지정할 수 있습니다.

흥미로운 점은 Google Cloud Platform GCE 네트워크 로드 밸런서가 TCP 상태 확인을 지원하지 않는다는 것입니다. TCP 서버의 상태를 확인하려면, HTTP 상태 확인에 응답하는 웹 서버를 각 서버에 실행해야 합니다. 심지어 HTTP 트래픽을 로드 밸런싱하지 않더라도 HTTP 상태 확인에 응답하기 위해 각 서버에서 웹 서버를 실행해야 합니다.

2-5. Google Cloud Platform GCE vs NGINX Plus: SSL Termination

NGINX Plus는 SSL Termination를 지원하며, GCE HTTP 로드 밸런서도 지원합니다. 그러나 Google Cloud Platform GCE 네트워크 로드 밸런서는 SSL Termination를 지원하지 않습니다.

2-6. Google Cloud Platform GCE vs NGINX Plus: HTTP/2 지원

NGINX Plus는 HTTP/2를 지원하며, Google Cloud Platform GCE HTTP 로드 밸런서도 지원합니다.

GCE 네트워크 로드 밸런서는 네트워크 계층(Layer 4)에서 작동하기 때문에 HTTP/2 트래픽의 TCP 로드 밸런싱을 제공할 수 있지만, 어떠한 애플리케이션 계층(Layer 7) 기능도 지원하지 않습니다.

3. NGINX Plus 의 추가 기능

NGINX Plus는 Google Cloud Platform GCE 로드 밸런서가 제공하지 않는 많은 기능을 제공합니다.

3-1. URL Rewrite 및 Redirection

NGINX Plus를 사용하면 백엔드 서버로 전달하기 전에 요청의 URL을 재작성(Rewrite)할 수 있습니다. 이를 통해 파일의 위치 또는 요청 경로를 수정할 수 있으며, 클라이언트에게 공개된 URL을 수정하지 않고도 변경할 수 있습니다. 또한, 요청을 리다이렉션할 수도 있습니다. 예를 들어, 모든 HTTP 요청을 HTTPS 서버로 리다이렉션할 수 있습니다.

3-2. 연결 및 Rate Limit

NGINX Plus 인스턴스의 트래픽을 제어하기 위해 여러 가지 제한을 구성할 수 있습니다. 이에는 Inbound 연결 제한, Backend 노드로의 연결 제한, 인바운드 요청 Rate Limit, 그리고 NGINX Plus에서 클라이언트로의 데이터 전송 속도 제한 등이 포함됩니다.

3-3. WebSocket 지원

NGINX Plus는 WebSocket을 지원하며, 클라이언트 요청의 본문과 헤더를 검사할 수 있는 기능, 고급 세션 지속성 옵션 및 기타 Layer 7 기능을 포함합니다.

HTTP/2 트래픽과 마찬가지로 Google Cloud Platform GCE 네트워크 로드 밸런서는 TCP 수준에서 WebSocket 트래픽을 로드 밸런싱할 수 있지만, Layer 7 기능은 지원하지 않습니다.

3-4. Access Logging

NGINX Plus는 로컬 디스크 또는 syslog로 로그를 기록할 수 있으며, 구성할 수 있는 다양한 값들을 로그로 기록할 수 있도록 제공합니다.

4. Google Cloud Platform GCE 로드 밸런싱 서비스의 추가 기능

Google Cloud Platform GCE 로드 밸런서는 Google Compute Engine에서 관리되는 고가용성 솔루션입니다.

4-1. 자동 재구성을 통한 Backend 인스턴스 자동 확장

Google Cloud Platform GCE 로드 밸런서는 GCE Autoscaler와 함께 사용될 때 자동으로 자체 재구성을 수행합니다. NGINX Plus는 NGINX Plus API를 사용하여 백엔드 인스턴스를 추가하거나 제거하여 동적으로 구성할 수 있습니다.

4-2. UDP 지원

GCE 네트워크 로드 밸런서는 UDP 로드 밸런싱을 지원합니다.

4-3. Region 간 로드 밸런싱

Google Cloud Platform GCE HTTP 로드 밸런서는 교차 지역 로드 밸런싱을 지원하여 백엔드를 각 지역별로 단일 IP를 통해 여러 지역에서 사용할 수 있게 합니다. 클라이언트 요청은 충분한 용량을 갖춘 가장 가까운 지역으로 전송됩니다.

5. Google Cloud Platform GCE 로드 밸런싱 서비스를 갖춘 NGINX Plus

NGINX Plus를 단독으로 사용하거나 GCE 로드 밸런서와 함께 사용할 수 있습니다.

5-1. Active-Active HA

한 지역 내에서 여러 가용 영역에 걸쳐 여러 NGINX Plus 인스턴스를 배치하고 Google Cloud Platform GCE 네트워크 로드 밸런서 뒤에 두면 해당 지역 내에서 고가용성 로드 밸런서 세트를 얻을 수 있습니다.

5-2. Region 간 로드 밸런싱

지역 간 전역 로드 밸런싱을 수행하기 위해 Google Cloud DNS에서 제공하는 DNS 기반 로드 밸런싱을 사용하거나, Google Cloud Platform GCE HTTP 로드 밸런서를 NGINX Plus 앞에 두어 애플리케이션에 대해 지역 간 단일 IP를 제공할 수 있는 기능을 활용할 수 있습니다.

5-3. Backend 인스턴스 자동 확장

Google Cloud Platform GCE Autoscaler를 사용하면 백엔드 인스턴스의 CPU 이용률 또는 기타 표준 또는 사용자 정의 지표에 따라 백엔드 인스턴스의 자동 스케일링을 설정할 수 있습니다. 그러나 여전히 백엔드 인스턴스를 NGINX 구성에서 추가하거나 제거해야 합니다. 이는 구성 파일을 편집하거나 NGINX Plus API를 사용하여 수행할 수 있습니다.

5-4. NGINX Plus 인스턴스 자동 확장

유사하게, NGINX Plus 인스턴스의 자동 스케일링을 설정할 수 있습니다. 그러나 여전히 NGINX 구성 파일이 동기화되도록 해야 합니다.

6. 요약

Google Cloud Platform GCE에서 제공하는 로드 밸런싱 솔루션이 요구 사항을 충족시키지 못할 때, NGINX Plus는 다양한 고급 기능을 갖춘 좋은 선택입니다. NGINX Plus를 GCE 로드 밸런서와 함께 사용하면 고가용성 및 확장 가능한 NGINX Plus 설정을 얻을 수 있습니다.

GCE에서 고가용성 NGINX Plus 로드 밸런싱 구성을 배포하기 위해 NGINX STORE에 문의하여 사용 사례에 대해 상담 받아보세요.

아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.

NGINX STORE를 통한 솔루션 도입 및 기술지원 무료 상담 신청

* indicates required