고급 부하 분산 개요

고급 부하 분산은 전역 부하 분산과 트래픽 분산을 미세 조정하여 가용성, 성능, 비용 효율성 목표를 가장 효과적으로 충족할 수 있는 기능으로 구성됩니다. 이 문서는 Traffic Director 및 부하 분산 개념에 대해 중급 이상의 이해가 있는 사용자를 대상으로 합니다.

고급 부하 분산을 구현하려면 백엔드 선택에 영향을 미치는 값이 포함된 서비스 부하 분산 정책(serviceLbPolicies 리소스)을 만듭니다. 그런 다음 서비스 부하 분산 정책을 백엔드 서비스에 연결합니다. 서비스 부하 분산 정책은 트래픽이 백엔드로 분산되는 방식을 결정하는 데 사용되는 알고리즘을 지정합니다.

고급 부하 분산에 사용할 수 있는 알고리즘 옵션은 다음과 같습니다.

  • 리전별 폭포(기본 알고리즘)
  • 리전에 분무
  • 세계에 분무
  • 영역별 폭포

사용할 수 있는 추가 옵션은 다음과 같습니다.

  • 선호하는 백엔드를 지정합니다. Traffic Director는 다른 백엔드로 트래픽을 전송하기 전에 해당 MIG 또는 NEG로 트래픽을 보냅니다.
  • 자동 용량 드레이닝을 설정합니다.
  • 장애 조치 동작을 맞춤설정합니다.

고급 부하 분산 옵션을 구성하기 전에 백엔드 서비스 리소스에 대한 문서를 검토하는 것이 좋습니다.

Traffic Director가 트래픽을 라우팅하고 부하 분산하는 방법

다음은 Traffic Director가 트래픽 라우팅을 결정하는 방법을 보여주는 다이어그램입니다.

Traffic Director가 부하 분산 결정을 내리는 방법
Traffic Director의 부하 분산 결정 방법(확대하려면 클릭)

먼저 Traffic Director는 배포 특성에 사용하는 API에 따라 요청 특성과 Route 리소스 또는 URL 맵의 라우팅 규칙을 기반으로 백엔드 서비스를 선택합니다.

두 번째로 Traffic Director는 클라이언트 위치, MIG 또는 NEG의 위치, 상태, 용량, 백엔드 서비스와 연결된 서비스 부하 분산 정책의 정보에 기반하여 백엔드 서비스와 연결된 백엔드 MIG 또는 NEG를 선택합니다.

마지막으로 Traffic Director는 MIG 또는 NEG 내에서 인스턴스 또는 엔드포인트를 선택합니다. 이 옵션은 백엔드 서비스의 지역별 부하 분산 정책에 있는 정보를 기반으로 합니다.

지원되는 백엔드와 지원되지 않는 백엔드

고급 부하 분산에는 다음과 같은 백엔드 유형이 지원됩니다.

  • 비관리형 인스턴스 그룹
  • 관리형 인스턴스 그룹(MIG)
  • 영역 네트워크 엔드포인트 그룹(GCE_VM_IP_PORT NEG)
  • 하이브리드 연결 네트워크 엔드포인트 그룹(NON_GCP_PRIVATE_IP_PORT NEG)

다음 백엔드 유형은 고급 부하 분산에서 지원되지 않습니다.

  • 리전 관리형 인스턴스 그룹
  • 인터넷 네트워크 엔드포인트 그룹(INTERNET_FQDN_PORT NEG)

사용 사례

다음 섹션에서는 각 알고리즘의 작동 방식과 특정 비즈니스 요구별로 어떤 알고리즘을 선택할지에 대해 설명합니다.

한 리전의 백엔드에서 트래픽 분산

리전별 기본 부하 분산 알고리즘은 리전 내 모든 MIG 또는 NEG에 트래픽을 고르게 분산합니다. 특별한 요구사항이 없으면 기본 알고리즘을 사용하는 것이 좋습니다.

리전별 폭포식 구조를 사용하면 백엔드가 용량에 비례하여 트래픽을 수신하여 백엔드 과부하 보호를 제공합니다. 리전 내에서 백엔드를 균일하게 로드하기 위해 필요한 경우 트래픽이 영역 경계 간에 전송됩니다. 클라이언트에 로컬인 영역의 용량이 남아 있어도 영역 간 트래픽이 존재합니다. 각 클라이언트의 요청은 리전의 여러 영역 MIG 또는 NEG에 분산될 수 있으므로 클라이언트의 트래픽 부하가 균일하지 않을 때 MIG 또는 NEG의 부하를 균일하게 유지할 수 있습니다.

클라이언트에서 트래픽을 여러 영역에 분산하여 복원력 향상

리전별 기본 폭포식 알고리즘은 여러 영역 MIG 또는 NEG에서 용량 사용량의 균형을 유지하려고 합니다. 하지만 단일 알고리즘에서 시작되는 알고리즘 요청은 모든 영역으로 일관적으로 전송되지 않으며, 단일 클라이언트의 요청은 일반적으로 단일 영역의 MIG 또는 NEG로 라우팅됩니다.

클라이언트가 리전의 모든 MIG 또는 NEG로 요청을 분산하도록 하려면 '리전에 분무' 알고리즘을 사용하여, 국지적으로 트래픽 볼륨이 급증할 때 단일 영역에서 MIG 또는 NEG가 과부하될 위험을 줄이세요.

'리전에 분무' 알고리즘을 사용하면 A와 B라는 2개 영역이 있고 영역 B에서 트래픽 급증이 발생하는 경우 트래픽이 두 영역 사이에 분할됩니다. 기본 알고리즘을 사용하면 영역 B가 급증하면 Traffic Director가 변경에 반응하기 전에 영역에서 과부하가 발생하게 됩니다.

'리전에 분무' 알고리즘을 사용하면 각 클라이언트의 트래픽이 항상 리전의 백엔드 영역에 분산됩니다. 이렇게 하면 로컬 영역에 남은 용량이 있어도 교차 영역 트래픽이 일관되게 더 높기 때문에 두 개의 Traffic Director 클라이언트가 동일한 영역에 트래픽을 전송하는 경우 Traffic Director가 보내는 트래픽이 영향을 미치는 영역이 더 커지게 됩니다.

여러 리전의 모든 백엔드로 클라이언트의 트래픽 분산

이전 섹션에서 설명한 것처럼 리전별 알고리즘은 각 클라이언트에서 리전의 모든 영역으로 트래픽을 분산합니다. 여러 리전에 MIG 또는 NEG가 있는 서비스의 경우 Traffic Director는 가장 가까운 리전으로 트래픽을 전송하여 전체 지연 시간을 최적화합니다.

더 큰 분산 반경을 선호하는 경우 '세계에 분무' 알고리즘을 사용하세요. 이 알고리즘을 사용하면 클라이언트가 전 세계 모든 MIG 또는 NEG에 여러 리전으로 요청을 분산합니다.

이 알고리즘을 사용하면 모든 트래픽이 전역적으로 모든 백엔드로 분산된다는 점에 유의해야 합니다. 결함이 있는 쿼리는 배포의 모든 백엔드에 손상을 줄 수 있습니다. 이 알고리즘은 리전 간 트래픽을 더 많이 발생시키므로 요청 지연 시간이 증가하고 추가 비용이 발생할 수 있습니다.

영역 간 트래픽 최소화

'영역별 폭포' 설정을 사용하면 전체 지연 시간을 최적화하고 영역 간 트래픽을 줄일 수 있습니다. 한 영역에 여러 MIG 또는 NEG가 구성된 경우 클라이언트 트래픽은 먼저 영역에서 가장 가까운 MIG 또는 NEG로 라우팅된 후에 영역의 다음 MIG 또는 NEG로 전송되는 식으로 영역에 있는 모든 MIG 또는 NEG 용량이 사용될 때까지 계속해서 전송됩니다. 그런 다음에만 트래픽은 다음으로 가장 가까운 영역으로 스필링됩니다.

이 알고리즘을 사용하면 불필요한 영역 간 트래픽을 최소화할 수 있습니다. 가장 가까운 로컬 백엔드가 선호되므로 전체 지연 시간이 약간 개선될 수 있습니다. 그러나 이렇게 하면 리전 내 MIG 또는 NEG 간에 트래픽이 균등하지 않을 수 있습니다.

부하 분산 알고리즘 비교

다음 표에서는 4개의 Traffic Director 부하 분산 알고리즘을 자세히 비교합니다.

동작 리전별 폭포 리전에 분무 세계에 분무 영역별 폭포
안정적인 상태에서 리전 내에서 균일한 용량 사용 아니요
안정적인 상태에서 여러 리전에 걸쳐 균일한 용량 사용 아니요 아니요 아니요
안정적인 상태에서 리전 내에서 균일한 트래픽 분할 아니요 아니요
영역 간 트래픽 예. 이 알고리즘은 네트워크 지연 시간을 최적화하면서 리전의 영역 간에 트래픽을 고르게 분산합니다. 필요한 경우 여러 영역 간에 트래픽이 전송될 수 있습니다. 예, 트래픽이 가장 가까운 영역의 용량부터 채웁니다. 그런 후 다음 영역으로 이동합니다.
로컬 영역 트래픽 급증에 대한 민감도 평균. 영역 간 분산을 위해 이미 얼마나 많은 트래픽 양이 이동되었는지에 따라 달라집니다. 낮음. 단일 영역 급증이 리전의 모든 영역에 분산됩니다. 낮음. 단일 영역 급증이 모든 리전에 분무됩니다. 높음. 단일 영역 급증은 Traffic Director가 대응할 수 있을 때까지 단일 영역에서 완전히 서빙될 가능성이 높습니다.

추가 고급 부하 분산 옵션

다음 섹션에서는 Traffic Director 부하 분산을 수정하는 옵션에 대해 설명합니다.

선호 백엔드

백엔드 서비스의 백엔드 그룹이 원하는 대로 지정되도록 부하 분산을 구성할 수 있습니다. 이러한 벡엔드는 후속 요청이 나머지 백엔드로 라우팅되기 전에 완전히 사용됩니다. Traffic Director는 클라이언트 트래픽을 선호 백엔드에 먼저 분산하여 클라이언트의 요청 지연 시간을 최소화합니다.

선호 백엔드의 구성된 용량을 초과하는 모든 트래픽은 선호되지 않는 백엔드로 라우팅됩니다. 부하 분산 알고리즘은 선호하지 않는 백엔드 간에 트래픽을 분산합니다.

한 가지 사용 사례는 요청이 자동 확장된 Google Cloud 백엔드 MIG 또는 NEG로 라우팅되기 전에 하이브리드 연결 NEG로 표시되는 온프레미스 컴퓨팅 리소스를 완전히 사용하도록 지정하는 Google Cloud로 오버플로입니다. 이러한 구성은 Google Cloud 컴퓨팅 소비를 최소화할 수 있고 필요할 때 Google Cloud로 점진적으로 스필링 또는 장애 조치할 수 있는 복원력을 확보할 수 있습니다.

자동 용량 드레이닝

백엔드가 비정상인 경우에는 일반적으로 부하 분산 결정에서 가능한 한 빨리 제외하는 것이 좋습니다. 백엔드를 제외하면 비정상 백엔드로의 요청 전송이 차단됩니다. 또한 백엔드 과부하를 방지하고 전체 지연 시간을 최적화하기 위해 트래픽이 정상 백엔드 간에 분산됩니다.

이 옵션은 용량을 0으로 설정하는 것과 유사합니다. 백엔드가 개별 인스턴스 또는 상태 확인을 통과하는 엔드포인트의 25% 미만일 때 백엔드 용량을 0으로 축소하도록 Traffic Director에 요청합니다. 이 옵션을 사용하면 비정상 백엔드가 전역 부하 분산에서 삭제됩니다.

자동 드레이닝된 백엔드가 다시 정상이면 엔드포인트 또는 인스턴스의 35% 이상이 60초 동안 정상이면 드레이닝되지 않습니다. Traffic Director는 백엔드 상태에 관계없이 백엔드 서비스의 엔드포인트를 50% 이상 드레이닝하지 않습니다.

한 가지 사용 사례는 선호 백엔드에서 자동 용량 드레이닝을 사용할 수 있다는 것입니다. 백엔드 MIG 또는 NEG가 선호되고 해당 엔드포인트의 상당 부분이 비정상인 경우 이 설정은 MIG 또는 NEG에서 트래픽을 전환하여 MIG 또는 NEG의 나머지 엔드포인트를 보호합니다.

장애 조치 동작 맞춤설정

Traffic Director는 일반적으로 여러 요소를 고려하여 백엔드에 트래픽을 전송합니다. 안정적인 상태에서 Traffic Director는 앞에서 설명한 알고리즘을 기반으로 선택된 백엔드로 트래픽을 전송합니다. 선택한 백엔드는 지연 시간과 용량 사용률 측면에서 최적의 백엔드로 간주됩니다. 이를 기본 백엔드라고 합니다.

또한 Traffic Director는 기본 백엔드가 비정상이고 트래픽을 수신할 수 없을 때 사용할 백엔드를 추적합니다. 이러한 백엔드를 장애 조치 백엔드라고 합니다. 일반적으로 용량이 남아 있는 인접한 백엔드입니다.

백엔드가 비정상이면 Traffic Director는 백엔드로의 트래픽 전송을 방지하고 대신 정상 백엔드로 트래픽을 전환합니다.

serviceLbPolicy 리소스에는 장애 조치 동작을 제어하도록 값을 맞춤설정할 수 있는 failoverHealthThreshold 필드가 포함됩니다. 설정한 임곗값에 따라 트래픽이 기본 백엔드에서 장애 조치 백엔드로 이동하는 시점이 결정됩니다.

기본 백엔드의 일부 엔드포인트가 비정상이면 Traffic Director가 반드시 트래픽을 즉시 이동하지는 않습니다. 대신 Traffic Director는 트래픽을 안정화하기 위해 기본 백엔드의 정상 엔드포인트로 트래픽을 이동할 수 있습니다.

백엔드의 엔드포인트 다수가 비정상이면 나머지 엔드포인트에서 추가 트래픽을 처리할 수 없습니다. 이 경우 장애 임곗값은 장애 조치의 트리거 여부를 결정하는 데 사용됩니다. Traffic Director는 임곗값까지 비정상을 허용한 후 트래픽 일부를 기본 백엔드에서 장애 조치 백엔드로 이동합니다.

장애 조치 상태 임곗값은 백분율 값입니다. 설정한 값은 Traffic Director가 트래픽을 장애 조치 백엔드로 전달하는 시기를 결정합니다. 값을 1~99 사이의 정수로 설정할 수 있습니다. Traffic Director의 기본값은 Envoy의 경우 70, 프록시리스 gRPC의 경우 50입니다. 값이 클수록 작은 값보다 더 빠르게 트래픽 장애 조치가 시작됩니다.

문제 해결

트래픽 분산 패턴은 백엔드 서비스에서 새 serviceLbPolicy를 설정하는 방법에 따라 변경될 수 있습니다.

트래픽 문제를 디버깅하려면 기존 모니터링 시스템을 사용하여 트래픽이 백엔드로 어떻게 전송되는지 검사하세요. 추가 Traffic Director 및 네트워크 측정항목은 부하 분산 결정을 내리는 방법을 이해하는 데 도움이 될 수 있습니다. 이 섹션에서는 일반적인 문제 해결 및 완화 방법을 제공합니다.

전반적으로 Traffic Director는 백엔드가 구성된 용량 미만으로 실행되도록 트래픽을 할당하려고 시도합니다. 단, 이러한 시도가 반드시 성공하는 것은 아닙니다. 자세한 내용은 백엔드 서비스 문서를 참조하세요.

그런 다음 사용하는 알고리즘에 따라 트래픽이 할당됩니다. 예를 들어 WATERFALL_BY_ZONE의 알고리즘을 사용하면 Traffic Director가 가장 가까운 영역으로 트래픽을 유지하려고 합니다. 네트워크 측정항목을 확인하면 전체 RTT 지연 시간을 최적화하기 위한 요청을 보낼 때 Traffic Director에서 RTT 지연 시간이 가장 짧은 백엔드를 선호합니다.

다음 섹션에서는 서비스 부하 분산 정책 및 선호하는 백엔드 설정과 관련하여 발생할 수 있는 문제를 설명합니다.

트래픽이 더 먼 MIG 또는 NEG로 전송된 후에 더 가까운 MIG 또는 NEG로 전송됨

이는 선호 백엔드가 더 멀리 있는 MIG 또는 NEG로 구성된 경우의 의도된 동작입니다. 이 동작을 원하지 않으면 선호하는 백엔드 필드의 값을 변경하세요.

비정상 엔드포인트가 많은 MIG 또는 NEG로 트래픽이 전송되지 않음

이는 autoCapacityDrain이 구성되었으므로 MIG 또는 NEG가 드레이닝될 때 의도된 동작입니다. 이 설정을 사용하면 비정상 엔드포인트가 많은 MIG 또는 NEG가 부하 분산 결정에서 삭제되므로 트래픽이 전송되지 않습니다. 이러한 동작을 원하지 않으면 autoCapacityDrain 설정을 사용 중지할 수 있습니다. 하지만 이는 비정상 엔드포인트가 많은 MIG 또는 NEG로 트래픽이 전송될 수 있으므로 요청이 오류와 함께 실패할 수 있습니다.

선호되는 MIG 또는 NEG가 있는 경우 트래픽이 일부 MIG 또는 NEG로 전송되지 않음

이는 선호 벡엔드로 구성된 MIG 또는 NEG가 아직 용량에 도달하지 않은 경우에 의도된 동작입니다.

선호 백엔드가 구성되고 이들 벡엔트가 용량 한도에 도달하지 않으면 트래픽은 다른 MIG 또는 NEG로 전송되지 않습니다. 선호 MIG 또는 NEG는 이러한 백엔드에 대한 RTT 지연 시간을 기준으로 우선적으로 할당됩니다.

트래픽을 다른 곳으로 보내려면 선호하는 백엔드 없이 또는 원하는 MIG 또는 NEG에 대해 보다 보수적인 용량을 추정하여 백엔드 서비스를 구성할 수 있습니다.

단일 소스에서 너무 많은 MIG 또는 NEG로 트래픽이 전송되고 있음

이는 '리전에 분무' 또는 '세계에 분무' 알고리즘을 사용하는 경우에 의도된 동작입니다. 하지만 이런 알고리즘에서는 트래픽의 분산이 넓어질 수 있습니다. 예를 들어 백엔드에서 다양한 클라이언트의 트래픽을 확인하여 캐시 적중률이 줄어들 수 있습니다. 이 경우에는 '리전별 폭포' 같은 다른 알고리즘을 사용하는 것이 좋습니다.

백엔드 상태 변경 시 트래픽이 원격 클러스터로 전송됨

failoverHealthThreshold가 높은 값으로 설정되면 이는 의도한 동작입니다. 일시적인 상태가 변경될 때 트래픽이 기본 백엔드에 유지되도록 하려면 failoverHealthThreshold를 더 낮은 값으로 설정합니다.

일부 엔드포인트가 비정상인 경우 정상 엔드포인트에 과부하 발생

failoverHealthThreshold가 낮은 값으로 설정되면 이는 의도한 동작입니다. 일부 엔드포인트가 비정상이면 이러한 비정상 엔드포인트에 대한 트래픽이 동일한 MIG 또는 NEG의 나머지 엔드포인트 간에 분산될 수 있습니다. 장애 조치 동작을 조기에 트리거하려면 failoverHealthThreshold를 더 높은 값으로 설정합니다.

제한사항 및 고려사항

다음은 고급 부하 분산을 구성할 때 알아야 하는 제한사항 및 고려사항입니다.

영역별 폭포

  • 투명한 유지보수 이벤트 중에 로컬 영역 외부에서 트래픽이 일시적으로 분산될 수 있습니다.

  • 일부 MIG 또는 NEG의 용량은 가득 차고, 동일한 리전의 다른 MIG 또는 NEG는 사용률이 낮은 경우가 생길 수 있습니다.

  • 서비스에 대한 트래픽 소스가 엔드포인트와 동일한 영역에 있는 경우 교차 영역 트래픽이 감소합니다.

  • 영역은 Google 데이터 센터 내에서 여러 내부의 물리적 하드웨어에 매핑될 수 있습니다. 예를 들면 영역 가상화 때문입니다. 이 경우 동일 영역에 있는 VM이 균등하게 로드되지 않을 수 있습니다. 일반적으로 전체 지연 시간이 최적화됩니다.

리전에 분무

  • 한 MIG 또는 NEG의 엔드포인트가 다운되면 일반적으로 더 큰 클라이언트 집합에 분산됩니다. 즉, 더 많은 수의 메시 클라이언트가 영향을 받을 수 있지만 심각도가 떨어질 수 있습니다.

  • 클라이언트가 리전의 모든 MIG 또는 NEG로 요청을 전송하면 경우에 따라 영역 간 트래픽 양이 늘어날 수 있습니다.

  • 엔드포인트에 열려 있는 연결 수가 늘어날 수 있으며 이로 인해 리소스 사용량이 증가합니다.

선호 백엔드

  • 선호 백엔드로 구성된 MIG 또는 NEG가 클라이언트에서 멀리 떨어져 있어 클라이언트의 평균 지연 시간이 길어질 수 있습니다. 지연 시간을 단축하여 클라이언트에 제공할 수 있는 다른 MIG 또는 NEG가 있는 경우에도 이 문제가 발생할 수 있습니다.

  • 전역 부하 분산 알고리즘(리전별 폭포, 리전에 분무, 영역별 폭포)은 선호 백엔드로 구성된 MIG 또는 NEG에 적용되지 않습니다.

자동 용량 드레이닝

  • 드레이닝되지 않은 최소 MIG 수는 serviceLbPolicies를 사용하여 구성할 때 설정된 값과 다릅니다.

  • 기본적으로 드레이닝되지 않는 최소 MIG 수는 1입니다.

  • serviceLbPolicies가 설정된 경우 드레이닝되지 않은 MIG 또는 NEG의 최소 비율은 50%입니다. 두 구성 모두에서 MIG 또는 NEG의 인스턴스 또는 엔드포인트의 25% 미만이 정상이면 MIG 또는 NEG가 비정상으로 표시됩니다.

  • 드레이닝 후 MIG 또는 NEG가 드레이닝되려면 인스턴스/엔드포인트의 35% 이상이 정상이어야 합니다. 이는 MIG 또는 NEG가 드레이닝 상태와 드레이닝되지 않은 상태 사이에 변동되지 않도록 하기 위해 필요합니다.

  • 분산 모드를 사용하지 않는 백엔드의 용량 확장 처리에도 동일한 제한사항이 적용됩니다.

다음 단계