고급 부하 분산 개요
고급 부하 분산은 전역 부하 분산과 트래픽 분산을 미세 조정하여 가용성, 성능, 비용 효율성 목표를 가장 효과적으로 충족할 수 있는 기능으로 구성됩니다. 이 문서는 Cloud Service Mesh 및 부하 분산 개념에 대해 중급 이상의 이해가 있는 사용자를 대상으로 합니다.
고급 부하 분산을 구현하려면 백엔드 선택에 영향을 미치는 값이 포함된 서비스 부하 분산 정책(serviceLbPolicies
리소스)을 만듭니다. 그런 다음 서비스 부하 분산 정책을 백엔드 서비스에 연결합니다. 서비스 부하 분산 정책은 트래픽이 백엔드로 분산되는 방식을 결정하는 데 사용되는 알고리즘을 지정합니다.
고급 부하 분산을 위해 다음 알고리즘 옵션 중에서 선택할 수 있습니다.
- 리전별 폭포(기본 알고리즘)
- 리전에 분무
- 세계에 분무
- 리전별 폭포
다음과 같은 추가 옵션을 사용할 수 있습니다.
- 선호 백엔드를 지정합니다. Cloud Service Mesh는 다른 백엔드로 트래픽을 전송하기 전에 해당 MIG 또는 NEG로 트래픽을 보냅니다.
- 자동 용량 드레이닝을 설정합니다.
- 장애 조치 동작 맞춤설정
고급 부하 분산 옵션을 구성하기 전에 백엔드 서비스 리소스에 대한 문서를 검토하는 것이 좋습니다.
Cloud Service Mesh에서 트래픽을 라우팅하고 부하를 분산하는 방법
다음 다이어그램은 Cloud Service Mesh가 트래픽 라우팅을 결정하는 방법을 보여줍니다.
먼저 Cloud Service Mesh는 배포 특성에 사용하는 API에 따라 요청 특성과 Route
리소스 또는 URL 맵의 라우팅 규칙을 기반으로 백엔드 서비스를 선택합니다.
두 번째로 Cloud Service Mesh는 클라이언트 위치, MIG 또는 NEG의 위치, 상태, 용량, 백엔드 서비스와 연결된 서비스 부하 분산 정책의 정보에 기반하여 백엔드 서비스와 연결된 백엔드 MIG 또는 NEG를 선택합니다.
마지막으로 Cloud Service Mesh는 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가 급증하면 Cloud Service Mesh가 변경에 반응하기 전에 영역에서 과부하가 발생하게 됩니다.
'리전에 분무' 알고리즘을 사용하면 각 클라이언트의 트래픽이 항상 리전의 백엔드 영역에 분산됩니다. 이렇게 하면 로컬 영역에 남은 용량이 있어도 교차 영역 트래픽이 일관되게 더 높기 때문에 두 개의 Cloud Service Mesh 클라이언트가 동일한 영역에 트래픽을 전송하는 경우 Cloud Service Mesh에서 보내는 트래픽이 영향을 미치는 영역이 더 커지게 됩니다.
여러 리전의 모든 백엔드에 클라이언트의 트래픽을 분산합니다.
이전 섹션에서 설명한 대로 '리전에 분무' 알고리즘은 각 클라이언트의 트래픽을 리전의 모든 영역에 분산합니다. 여러 리전에 MIG 또는 NEG가 있는 서비스의 경우 Cloud Service Mesh는 가장 가까운 리전으로 트래픽을 전송하여 전체 지연 시간을 최적화합니다.
더 큰 분산 반경을 선호하는 경우 '세계에 분무' 알고리즘을 사용하세요. 이 알고리즘을 사용하면 클라이언트가 전 세계 여러 리전의 모든 MIG 또는 NEG로 요청을 분산할 수 있습니다.
이 알고리즘을 사용하면 모든 트래픽이 전 세계 모든 백엔드로 확산된다는 점에 유의해야 합니다. 결함이 있는 쿼리는 배포의 모든 백엔드에 손상을 줄 수 있습니다. 또한 이 알고리즘은 리전 간 트래픽을 증가시켜 요청 지연 시간이 늘어나고 추가 비용이 발생할 수 있습니다.
영역 간 트래픽을 최소화합니다.
리전별 폭포형 설정을 사용하면 전체 지연 시간을 최적화하고 영역 간 트래픽을 줄일 수 있습니다. 한 영역에 여러 MIG 또는 NEG가 구성된 경우 클라이언트 트래픽은 먼저 영역에서 가장 가까운 MIG 또는 NEG로 라우팅된 후에 영역의 다음 MIG 또는 NEG로 전송되는 식으로 영역에 있는 모든 MIG 또는 NEG 용량이 사용될 때까지 계속해서 전송됩니다. 그런 다음에만 트래픽은 다음으로 가장 가까운 영역으로 스필링됩니다.
이 알고리즘을 사용하면 불필요한 영역 간 트래픽을 최소화할 수 있습니다. 가장 가까운 로컬 백엔드가 우선되므로 전반적인 지연 시간이 약간 개선될 수 있습니다. 그러나 이렇게 하면 한 리전 내의 MIG 또는 NEG 간에 트래픽이 고르지 않게 발생할 수도 있습니다.
부하 분산 알고리즘 비교
다음 표에서는 네 가지 Cloud Service Mesh 부하 분산 알고리즘을 자세히 비교합니다.
동작 | 리전별 폭포 | 리전에 분무 | 세계에 분무 | 리전별 폭포 |
---|---|---|---|---|
안정적인 상태에서 리전 내에서 균일한 용량 사용 | 예 | 예 | 예 | 아니요 |
안정적인 상태에서 여러 리전에 걸쳐 균일한 용량 사용 | 아니요 | 아니요 | 예 | 아니요 |
안정적인 상태에서 리전 내에서 균일한 트래픽 분할 | 아니요 | 예 | 예 | 아니요 |
영역 간 트래픽 | 예. 이 알고리즘은 네트워크 지연 시간을 최적화하면서 리전의 영역 간에 트래픽을 균등하게 분산합니다. 필요한 경우 영역 간에 트래픽이 전송될 수 있습니다. | 예 | 예 | 예, 트래픽이 가장 가까운 영역의 용량부터 채웁니다. 그런 후 다음 영역으로 이동합니다. |
로컬 영역 트래픽 급증에 대한 민감도 | 평균. 영역 간 분산을 위해 이미 얼마나 많은 트래픽 양이 이동되었는지에 따라 달라집니다. | 낮음. 단일 영역 급증이 리전의 모든 영역에 분산됩니다. | 낮음. 단일 영역 급증이 모든 리전에 분무됩니다. | 높음. 단일 영역 급증은 Cloud Service Mesh가 대응할 수 있을 때까지 단일 영역에서 완전히 서빙될 가능성이 높습니다. |
추가 고급 부하 분산 옵션
다음 섹션에서는 Cloud Service Mesh 부하 분산을 수정하는 옵션에 대해 설명합니다.
선호 백엔드
백엔드 서비스의 백엔드 그룹이 선호됨으로 지정되도록 부하 분산을 구성할 수 있습니다. 이러한 벡엔드는 후속 요청이 나머지 백엔드로 라우팅되기 전에 완전히 사용됩니다. Cloud Service Mesh는 클라이언트 트래픽을 먼저 선호하는 백엔드에 분산하여 클라이언트의 요청 지연 시간을 최소화합니다.
선호 백엔드의 구성된 용량을 초과하는 트래픽은 비선호 백엔드로 라우팅됩니다. 부하 분산 알고리즘이 비선호 백엔드 간에 트래픽을 분산합니다.
한 가지 사용 사례는 Google Cloud로의 오버플로입니다. 여기서는 요청이 자동 확장된 Google Cloud 백엔드 MIG 또는 NEG로 라우팅되기 전에 하이브리드 연결 NEG로 표시되는 온프레미스 컴퓨팅 리소스를 완전히 사용하도록 지정합니다. 이 구성을 사용하면 Google Cloud 컴퓨팅 소비를 최소화하면서도 필요한 경우 점진적으로 스필하거나 Google Cloud로 장애 조치할 수 있는 탄력성을 유지할 수 있습니다.
자동 용량 드레이닝
백엔드가 비정상인 경우 일반적으로 가능한 한 빨리 부하 분산 결정에서 제외하는 것이 좋습니다. 백엔드를 제외하면 요청이 비정상 백엔드로 전송되지 않습니다. 또한 백엔드 과부하를 방지하고 전반적인 지연 시간을 최적화하기 위해 트래픽이 정상 백엔드 간에 분산됩니다.
이 옵션은 capacityscalar를 0으로 설정하는 것과 유사합니다. 백엔드의 개별 인스턴스 또는 엔드포인트 중 상태 점검을 통과하는 비율이 25% 미만일 때 Cloud Service Mesh에 백엔드 용량을 자동으로 0으로 축소하도록 요청합니다. 이 옵션을 사용하면 비정상 백엔드가 전역 부하 분산에서 삭제됩니다.
자동으로 드레이닝된 백엔드가 다시 정상 상태가 되면 60초 동안 엔드포인트 또는 인스턴스의 35% 이상이 정상이면 드레이닝이 취소됩니다. Cloud Service Mesh는 백엔드 상태에 관계없이 백엔드 서비스의 엔드포인트 중 50% 넘게 드레이닝하지 않습니다.
한 가지 사용 사례는 선호 백엔드에서 자동 용량 드레이닝을 사용할 수 있다는 것입니다. 백엔드 MIG 또는 NEG가 선호되고 해당 엔드포인트의 상당 부분이 비정상인 경우 이 설정은 MIG 또는 NEG에서 트래픽을 전환하여 MIG 또는 NEG의 나머지 엔드포인트를 보호합니다.
장애 조치 동작 맞춤설정
Cloud Service Mesh는 일반적으로 여러 요소를 고려하여 백엔드로 트래픽을 전송합니다. 안정 상태에서 Cloud Service Mesh는 이전에 설명한 알고리즘을 기반으로 선택된 백엔드로 트래픽을 전송합니다. 선택한 백엔드는 지연 시간과 용량 사용률 측면에서 최적의 백엔드로 간주됩니다. 이러한 백엔드를 기본 백엔드라고 합니다.
또한 Cloud Service Mesh는 기본 백엔드가 비정상적이고 트래픽을 수신할 수 없는 경우 사용할 백엔드를 추적합니다. 이러한 백엔드를 장애 조치 백엔드라고 합니다. 일반적으로 용량이 남아 있는 인접한 백엔드입니다.
백엔드가 비정상이면 Cloud Service Mesh는 백엔드로의 트래픽 전송을 방지하고 대신 정상 백엔드로 트래픽을 전환합니다.
serviceLbPolicy
리소스에는 값을 맞춤설정하여 장애 조치 동작을 제어할 수 있는 failoverHealthThreshold
필드가 포함됩니다. 설정하는 기준점에 따라 트래픽이 기본 백엔드에서 장애 조치 백엔드로 전환되는 시점이 결정됩니다.
기본 백엔드의 일부 엔드포인트가 비정상이면 Cloud Service Mesh가 반드시 트래픽을 즉시 이동하지는 않습니다. 대신 Cloud Service Mesh는 트래픽을 안정화하기 위해 기본 백엔드의 정상 엔드포인트로 트래픽을 이동할 수 있습니다.
백엔드의 엔드포인트 다수가 비정상이면 나머지 엔드포인트에서 추가 트래픽을 처리할 수 없습니다. 이 경우 장애 조치가 트리거되는지 여부를 결정하는 데 장애 기준점이 사용됩니다. Cloud Service Mesh는 기준점까지 비정상을 허용한 후 트래픽 일부를 기본 백엔드에서 장애 조치 백엔드로 이동합니다.
장애 조치 상태 기준점은 백분율 값입니다. 설정하는 값에 따라 Cloud Service Mesh가 트래픽을 장애 조치 백엔드로 전달하는 시점이 결정됩니다. 값을 1~99 사이의 정수로 설정할 수 있습니다. Cloud Service Mesh의 기본값은 Envoy의 경우 70이고 프록시리스 gRPC의 경우 50입니다. 값이 클수록 작은 값보다 더 빠르게 트래픽 장애 조치가 시작됩니다.
문제 해결
트래픽 분산 패턴은 백엔드 서비스에서 새 serviceLbPolicy
를 설정하는 방식에 따라 달라질 수 있습니다.
트래픽 문제를 디버깅하려면 기존 모니터링 시스템을 사용하여 트래픽이 백엔드로 어떻게 전송되는지 검사하세요. 추가 Cloud Service Mesh 및 네트워크 측정항목을 통해 부하 분산 결정이 이루어지는 방식을 파악할 수 있습니다. 이 섹션에서는 일반적인 문제 해결 및 완화 제안사항을 제공합니다.
전반적으로 Cloud Service Mesh는 구성된 용량으로 백엔드를 계속 실행할 수 있도록 트래픽을 할당하려고 시도합니다. 단, 이러한 시도가 반드시 성공하는 것은 아닙니다. 자세한 내용은 백엔드 서비스 문서를 참고하세요.
그런 다음 사용하는 알고리즘에 따라 트래픽이 할당됩니다. 예를 들어 WATERFALL_BY_ZONE 알고리즘을 사용하면 Cloud Service Mesh는 가장 가까운 영역으로 트래픽을 유지하려고 합니다. 네트워크 측정항목을 확인하면 Cloud Service Mesh가 전체 RTT 지연 시간을 최적화하기 위해 요청을 전송할 때 가장 작은 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가 드레이닝 상태와 드레인 해제 상태 간에 흔들리지 않도록 하기 위해 필요합니다.
분산 모드를 사용하지 않는 백엔드의 용량 확장 처리에 적용되는 동일한 제한사항이 여기에도 적용됩니다.
다음 단계
- 설정 지침은 고급 부하 분산 설정 참조하기