이 페이지에서는 애플리케이션 부하 분산기에서 커스텀 측정항목을 사용하는 방법을 설명합니다. 커스텀 측정항목을 사용하면 Google Cloud의 표준 사용량 또는 비율 기반 측정항목이 아닌 애플리케이션 또는 인프라 요구사항에 맞는 측정항목을 기반으로 부하 분산기의 트래픽 분산 동작을 구성할 수 있습니다. 부하 분산기에 커스텀 측정항목을 정의하면 워크로드에 가장 적합한 백엔드 인스턴스와 엔드포인트로 애플리케이션 요청을 유연하게 라우팅할 수 있습니다.
부하 분산기는 맞춤 측정항목 값을 사용하여 다음과 같은 결정을 내립니다.
- 트래픽을 수신할 백엔드 VM 인스턴스 그룹 또는 네트워크 엔드포인트 그룹을 선택합니다.
- 트래픽을 수신할 VM 인스턴스 또는 엔드포인트를 선택합니다.
다음은 맞춤 측정항목의 몇 가지 사용 사례입니다.
지역 어피니티 또는 네트워크 지연 시간과 같은 기본 기준 대신 애플리케이션과 가장 관련성이 높은 맞춤 측정항목을 기반으로 부하 분산 결정을 내려 전 세계 컴퓨팅 용량을 최대한 활용하세요.
애플리케이션에 백엔드 처리 지연 시간이 초 단위로 자주 발생하는 경우 네트워크 지연 시간 대신 맞춤 측정항목을 기반으로 요청을 부하 분산하여 전 세계 컴퓨팅 용량을 더 효율적으로 사용할 수 있습니다.
배포에 고유한 측정항목 조합을 기반으로 부하 분산 결정을 내려 컴퓨팅 효율을 극대화합니다. 예를 들어 요청의 처리 시간과 계산 요구사항이 매우 다양한 시나리오를 생각해 보세요. 이러한 시나리오에서는 초당 요청 비율만을 기준으로 부하 분산을 수행하면 부하가 고르게 분산되지 않습니다. 이 경우 컴퓨팅 환경을 가장 효율적으로 사용하기 위해 요청 비율과 CPU 또는 GPU 사용률을 조합하여 부하의 균형을 맞추는 맞춤 측정항목을 정의하는 것이 좋습니다.
애플리케이션 요구사항과 가장 관련성이 높은 커스텀 측정항목을 기반으로 백엔드를 자동 확장합니다. 예를 들어 구성된 맞춤 측정항목이 80%를 초과하면 백엔드 인스턴스를 자동 확장하도록 자동 확장 정책을 정의할 수 있습니다. 트래픽 기반 자동 확장 측정항목(
autoscaling.googleapis.com|gclb-capacity-fullness
)을 사용하면 됩니다. 자세한 내용은 부하 분산기 트래픽 기반 자동 확장을 참고하세요.
지원되는 부하 분산기 및 백엔드
맞춤 측정항목은 다음 애플리케이션 부하 분산기에서 지원됩니다.
- 전역 외부 애플리케이션 부하 분산기
- 리전 외부 애플리케이션 부하 분산기
- 리전 간 내부 애플리케이션 부하 분산기
- 리전 내부 애플리케이션 부하 분산기
맞춤 측정항목은 다음 백엔드 유형에서 지원됩니다.
- 관리형 인스턴스 그룹
- 영역 NEG (
GCE_VM_IP_PORT
엔드포인트 포함) - 하이브리드 연결 NEG
맞춤 측정항목의 작동 방식
부하 분산기가 맞춤 측정항목을 기반으로 트래픽 분산 결정을 내릴 수 있도록 하려면 먼저 특정 애플리케이션에 가장 관련성 높은 측정항목을 결정해야 합니다. 사용할 측정항목을 알면 백엔드를 구성하여 이러한 측정항목의 꾸준한 스트림을 부하 분산기에 보고하도록 합니다. Google Cloud 를 사용하면 백엔드에서 부하 분산기로 전송되는 각 HTTP 응답의 헤더의 일부로 측정항목을 보고할 수 있습니다. 이러한 측정항목은 맞춤 HTTP 응답 헤더에 캡슐화되며 개방형 요청 비용 집계(ORCA) 표준을 따라야 합니다.
측정항목은 다음 두 가지 수준에서 구성할 수 있습니다.
- 백엔드 수준에서 백엔드 (MIG 또는 NEG) 선택에 영향을 미치기 위해
- 백엔드 서비스 수준에서 VM 인스턴스 또는 엔드포인트 선택에 영향을 주기 위해
다음 섹션에서는 맞춤 측정항목의 작동 방식을 설명합니다.
부하 분산 결정에 영향을 미쳐야 하는 맞춤 측정항목 결정
부하 분산 결정에 영향을 미칠 맞춤 측정항목을 결정하는 것은 매우 주관적이며 애플리케이션의 요구사항에 따라 달라집니다. 예를 들어 애플리케이션의 백엔드 처리 지연 시간이 초 단위인 경우 표준 네트워크 지연 시간 대신 다른 맞춤 측정항목을 기반으로 요청을 부하 분산하는 것이 좋습니다.
사용할 측정항목을 결정한 후에는 각 측정항목의 최대 사용률 기준도 결정해야 합니다. 예를 들어 메모리 사용률을 측정항목으로 사용하려면 각 백엔드의 최대 메모리 사용률 기준점도 결정해야 합니다.
예를 들어 최대 사용률 기준을 0.8로 설정하여 example-custom-metric
라는 측정항목을 구성하면 부하 분산기는 백엔드 간에 트래픽 분포를 동적으로 조정하여 백엔드에서 보고된 example-custom-metric
측정항목을 최대한 0.8 미만으로 유지합니다.
사용할 수 있는 맞춤 측정항목에는 두 가지 유형이 있습니다.
예약된 측정항목 예약된 측정항목 이름은 5개가 있습니다. 이러한 이름은 ORCA API의 최상위 사전 정의된 필드에 해당하므로 예약되어 있습니다.
orca.cpu_utilization
orca.mem_utilization
orca.application_utilization
orca.eps
orca.rps_fractional
이름이 지정된 측정항목: 다음 형식의 ORCA
named_metrics
필드를 사용하여 지정하는 애플리케이션 고유의 측정항목입니다.orca.named_metrics.METRIC_NAME
모든 사용자 정의 맞춤 측정항목은 이
named_metrics
맵을 사용하여 이름, 값 쌍 형식으로 지정됩니다.
필수 측정항목
부하 분산기에서 백엔드 VM 인스턴스 그룹 또는 네트워크 엔드포인트 그룹 선택에 커스텀 측정항목을 사용하도록 하려면 부하 분산기에 전송된 ORCA 부하 보고서에서 다음 목록의 다음 사용률 측정항목 중 하나 이상을 지정해야 합니다.
orca.cpu_utilization
또는orca.application_utilization
또는orca.mem_utilization
또는orca.named_metrics
: 이름, 값 쌍 형식의 사용자 정의 측정항목 맵입니다.
또한 부하 분산기에서 커스텀 측정항목을 사용하여 백엔드 VM 인스턴스 또는 엔드포인트 선택에 더 많은 영향을 미치도록 하려면 부하 분산기로 전송되는 ORCA 부하 보고서에 다음 측정항목을 모두 제공해야 합니다. 부하 분산기는 이러한 보고된 측정항목에서 계산된 가중치를 사용하여 개별 백엔드에 부하를 할당합니다.
orca.rps_fractional
(초당 요청 수)orca.eps
(초당 오류 수)- 다음과 같은 우선순위가 적용된 사용률 측정항목:
orca.application_utilization
orca.cpu_utilization
orca.named_metrics
지도의 사용자 정의 측정항목
기타 참고사항:
백엔드당 맞춤 측정항목은 2개로 제한됩니다. 하지만 최대 3개의 맞춤 측정항목으로
dryRun
테스트를 실행할 수 있습니다.두 개의 측정항목이 제공되면 부하 분산기는 이를 독립적으로 처리합니다. 예를 들어
custom-metric-util1
및custom-metric-util2
라는 두 측정기준을 정의하면 부하 분산기는 이를 독립적으로 처리합니다. 백엔드가custom-metric-util1
측면에서 높은 사용률 수준으로 실행 중인 경우 부하 분산기는 이 백엔드로 트래픽을 전송하지 않습니다. 일반적으로 부하 분산기는 모든 백엔드를 대략적으로 동일한 가용률로 실행하려고 합니다. 전체 크기는currentUtilization
/maxUtilization
로 계산됩니다. 이 경우 부하 분산기는 두 측정항목에서 보고된 두 개의 가용성 값 중 더 높은 값을 사용하여 부하 분산 결정을 내립니다.백엔드 서비스당 맞춤 측정항목은 2개로 제한됩니다. 하지만 최대 3개의 맞춤 측정항목으로
dryRun
테스트를 실행할 수 있습니다. 이 한도에는 필수orca.eps
및orca.rps_fractional
측정항목은 포함되지 않습니다. 이 한도는 백엔드 수준에서 구성된 측정항목과도 무관합니다.예약된 측정항목과 이름이 지정된 측정항목을 모두 함께 사용할 수 있습니다. 예를 들어
orca.cpu_utilization = 0.5
및orca.named_metrics.queue_depth_util = 0.2
과 같은 맞춤 측정항목을 단일 로드 보고서에 제공할 수 있습니다.맞춤 측정항목 이름에는 규제 대상, 민감한 정보, 식별 가능한 정보 또는 조직 외부의 사용자가 보지 못하도록 하는 기타 기밀 정보가 포함되어서는 안 됩니다.
맞춤 측정항목 사양에 사용할 수 있는 인코딩
JSON
로드 보고서의 샘플 JSON 인코딩:
endpoint-load-metrics-json: JSON {"cpu_utilization": 0.3, "mem_utilization": 0.8, "rps_fractional": 10.0, "eps": 1, "named_metrics": {"custom-metric-util": 0.4}}.
바이너리 Protobuf
Protocol Buffers 인식 코드의 경우
endpoint-load-metrics-bin
또는endpoint-load-metrics: BIN
에 있는 바이너리 직렬화된 base64 인코딩 OrcaLoadReport protobuf입니다.네이티브 HTTP
endpoint-load-metrics
의 쉼표로 구분된 키-값 쌍입니다. 다음은 OrcaLoadReport의 평면화된 텍스트 표현입니다.endpoint-load-metrics: TEXT cpu_utilization=0.3, mem_utilization=0.8, rps_fractional=10.0, eps=1, named_metrics.custom_metric_util=0.4
gRPC
gRPC 사양에 따라
endpoint-load-metrics-bin
키를 사용하여 후행 메타데이터를 사용하여 측정항목을 제공해야 합니다.
맞춤 측정항목을 보고하는 백엔드 구성
부하 분산기에서 사용할 측정항목을 결정한 후에는 ORCA 부하 보고서에서 필요한 맞춤 측정항목을 컴파일하고 부하 분산기에 전송되는 각 HTTP 응답 헤더에 값을 보고하도록 백엔드를 구성합니다.
예를 들어 백엔드의 맞춤 측정항목으로 orca.cpu_utilization
를 선택한 경우 백엔드는 부하 분산기로 전송되는 각 패킷에서 부하 분산기에 현재 CPU 사용률을 보고해야 합니다. 자세한 내용은 이 페이지의 부하 분산기에 측정항목 보고 섹션을 참고하세요.
맞춤 측정항목을 지원하는 부하 분산기 구성
부하 분산기가 백엔드에서 보고한 맞춤 측정항목 값을 사용하여 트래픽 분산 결정을 내릴 수 있도록 하려면 각 백엔드의 분산 모드를 CUSTOM_METRICS
로 설정하고 백엔드 서비스 부하 분산 지역 정책을 WEIGHTED_ROUND_ROBIN
로 설정해야 합니다.
CUSTOM_METRICS
분산 모드 백엔드 서비스의 각 백엔드는CUSTOM_METRICS
분산 모드를 사용하도록 구성되어야 합니다. 백엔드가CUSTOM_METRICS
분산 모드로 구성된 경우 부하 분산기는 각 맞춤 측정항목에 구성된 최대 사용률 기준점을 기준으로 트래픽을 백엔드로 전달합니다.각 백엔드는 보고할 측정항목 집합을 다르게 지정할 수 있습니다. 백엔드당 여러 맞춤 측정항목이 구성된 경우 부하 분산기는 모든 측정항목이 구성된 최대 사용률 한도 미만으로 유지되도록 트래픽을 분산하려고 시도합니다.
선택한 부하 분산 알고리즘에 따라 백엔드 간에 트래픽이 부하 분산됩니다. 예를 들어 기본
WATERFALL_BY_REGION
알고리즘은 모든 백엔드를 동일한 가용률로 실행하려고 시도합니다.WEIGHTED_ROUND_ROBIN
부하 분산 지역 정책 백엔드 서비스의 부하 분산 지역 정책은WEIGHTED_ROUND_ROBIN
로 설정해야 합니다. 이 구성을 사용하면 부하 분산기는 커스텀 측정항목을 사용하여 백엔드 내에서 최적의 인스턴스 또는 엔드포인트를 선택해 요청을 처리합니다.
맞춤 측정항목 구성
애플리케이션 부하 분산기에서 커스텀 측정항목을 기반으로 부하 분산 결정을 내릴 수 있도록 하려면 다음 단계를 따르세요.
- 사용할 맞춤 측정항목을 결정합니다.
- 부하 분산기에 맞춤 측정항목을 보고하도록 백엔드를 구성합니다. 부하 분산 결정에 사용되도록 부하 분산기에 전송할 수 있는 데이터 스트림을 설정해야 합니다. 이러한 측정항목은 ORCA 부하 보고서에서 컴파일 및 인코딩한 후 HTTP 응답 헤더를 사용하여 부하 분산기에 보고해야 합니다.
- 백엔드에서 보고하는 맞춤 측정항목 값을 사용하도록 부하 분산기를 구성합니다.
맞춤 측정항목 결정
이 단계는 애플리케이션의 요구사항에 따라 매우 주관적입니다. 사용할 측정항목을 결정한 후에는 각 측정항목의 최대 사용률 기준도 결정해야 합니다. 예를 들어 메모리 사용률을 측정항목으로 사용하려면 각 백엔드의 최대 메모리 사용률 기준점도 결정해야 합니다.
부하 분산기 구성을 진행하기 전에 커스텀 측정항목 작동 방식 섹션에서 사용 가능한 커스텀 측정항목 유형 (예약된 측정항목 및 이름이 지정된 측정항목)과 측정항목 선택 요구사항을 검토해야 합니다.
부하 분산기에 측정항목을 보고하도록 백엔드 구성
맞춤 측정항목은 ORCA 표준을 사용하여 애플리케이션 백엔드의 각 HTTP 응답의 일부로 부하 분산기에 보고됩니다. 이 섹션에서는 ORCA 부하 보고서에서 맞춤 측정항목을 컴파일하고 부하 분산기에 전송되는 각 HTTP 응답 헤더에서 이러한 측정항목을 보고하는 방법을 설명합니다.
예를 들어 HTTP 텍스트 인코딩을 사용하는 경우 헤더는 다음 형식으로 측정항목을 보고해야 합니다.
endpoint-load-metrics: TEXT BACKEND_METRIC_NAME_1=BACKEND_METRIC_VALUE_1,BACKEND_METRIC_NAME_2=BACKEND_METRIC_VALUE_2
사용되는 인코딩 형식과 관계없이 로드 보고서를 빌드할 때 측정항목 이름에서 orca.
접두사를 삭제해야 합니다.
다음은 두 개의 맞춤 측정항목(customUtilA
및 customUtilB
)을 HTTP 헤더에 추가하는 방법을 보여주는 코드 스니펫입니다. 이 코드 스니펫은 네이티브 HTTP 텍스트 인코딩과 base64 인코딩을 모두 보여줍니다. 이 예에서는 편의상 customUtilA
및 customUtilB
의 값을 하드코딩합니다.
부하 분산에 영향을 미쳐야 한다고 판단한 측정항목의 값이 부하 분산기에 수신되어야 합니다.
...
type OrcaReportType int
const (
OrcaText OrcaReportType = iota
OrcaBin
)
type HttpHeader struct {
key string
value string
}
const (
customUtilA = 0.2
customUtilB = 0.4
)
func GetBinOrcaReport() HttpHeader {
report := &pb.OrcaLoadReport{
NamedMetrics: map[string]float64{"customUtilA": customUtilA, "customUtilB": customUtilB}}
out, err := proto.Marshal(report)
if err != nil {
log.Fatalf("failed to serialize the ORCA proto: %v", err)
}
return HttpHeader{"endpoint-load-metrics-bin", base64.StdEncoding.EncodeToString(out)}
}
func GetHttpOrcaReport() HttpHeader {
return HttpHeader{
"endpoint-load-metrics",
fmt.Sprintf("TEXT named_metrics.customUtilA=%.2f,named_metrics.customUtilB=%.2f",
customUtilA, customUtilB)}
}
func GetOrcaReport(t OrcaReportType) HttpHeader {
switch t {
case OrcaText:
return GetHttpOrcaReport()
case OrcaBin:
return GetBinOrcaReport()
default:
return HttpHeader{"", ""}
}
}
...
맞춤 측정항목을 사용하도록 부하 분산기 구성
부하 분산기가 백엔드를 선택할 때 이러한 맞춤 측정항목을 사용하려면 각 백엔드의 분산 모드를 CUSTOM_METRICS
로 설정해야 합니다.
또한 맞춤 측정항목이 엔드포인트 선택에도 영향을 주도록 하려면 부하 분산 지역 정책을 WEIGHTED_ROUND_ROBIN
로 설정합니다.
이 섹션에 설명된 단계에서는 영역별 NEG 백엔드가 있는 부하 분산기를 이미 배포했다고 가정합니다. 하지만 여기에 설명된 것과 동일한 --custom-metrics
플래그를 사용하여 gcloud compute backend-services update
명령어를 통해 기존 백엔드를 업데이트할 수 있습니다.
백엔드 서비스에 백엔드를 추가할 때 백엔드의 분산 모드를
CUSTOM_METRICS
로 설정할 수 있습니다.--custom-metrics
플래그를 사용하여 부하 분산 결정에 사용할 커스텀 측정항목과 임곗값을 지정합니다.gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-zone=NEG_ZONE \ [--global | region=REGION] \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics='name="BACKEND_METRIC_NAME_1",maxUtilization=MAX_UTILIZATION_FOR_METRIC_1' \ --custom-metrics='name="BACKEND_METRIC_NAME_2",maxUtilization=MAX_UTILIZATION_FOR_METRIC_2'
다음을 바꿉니다.
- BACKEND_METRIC_NAME: 여기에서 사용되는 맞춤 측정항목 이름은 백엔드의 ORCA 보고서에서 보고되는 맞춤 측정항목 이름과 일치해야 합니다.
- MAX_UTILIZATION_FOR_METRIC: 부하 분산 알고리즘이 각 측정항목에 대해 타겟팅해야 하는 최대 사용률입니다.
예를 들어 백엔드에서 두 개의 맞춤 측정항목인
customUtilA
및customUtilB
를 보고하는 경우 (부하 분산기에 측정항목을 보고하도록 백엔드 구성 섹션 참고) 다음 명령어를 사용하여 이러한 측정항목을 사용하도록 부하 분산기를 구성합니다.gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-zone=NEG_ZONE \ [--global | region=REGION] \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics='name="customUtilA",maxUtilization=0.8' \ --custom-metrics='name="customUtilB",maxUtilization=0.9'
또는 구조화된 JSON 파일에 맞춤 측정항목 목록을 제공할 수 있습니다.
{ "name": "METRIC_NAME_1", "maxUtilization": MAX_UTILIZATION_FOR_METRIC_1, "dryRun": true } { "name": "METRIC_NAME_2", "maxUtilization": MAX_UTILIZATION_FOR_METRIC_2, "dryRun": false }
그런 다음 다음과 같이 JSON 형식의 측정항목 파일을 백엔드에 연결합니다.
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-zone=NEG_ZONE \ [--global | region=REGION] \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics-file='BACKEND_METRIC_FILE_NAME'
부하 분산기에 실제로 영향을 주지 않고 측정항목이 보고되는지 테스트하려면 다음과 같이 측정항목을 구성할 때
dryRun
플래그를true
로 설정하면 됩니다.gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-zone=NEG_ZONE \ [--global | region=REGION] \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="BACKEND_METRIC_NAME",maxUtilization=MAX_UTILIZATION_FOR_METRIC,dryRun=true'
측정항목이
dryRun
가true
로 설정된 상태로 구성되면 측정항목이 Monitoring에 보고되지만 실제로는 로드 밸런저에서 사용되지 않습니다.이를 역으로 하려면
dryRun
플래그를false
로 설정하여 백엔드 서비스를 업데이트합니다.gcloud compute backend-services update-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-zone=NEG_ZONE \ [--global | region=REGION] \ --balancing-mode=CUSTOM_METRICS \ --custom-metrics 'name="BACKEND_METRIC_NAME",maxUtilization=MAX_UTILIZATION_FOR_METRIC_,dryRun=false'
모든 맞춤 측정항목이
dryRun
를true
로 설정하여 구성된 경우 균형 모드를CUSTOM_METRICS
로 설정하거나 부하 분산 지역 정책을WEIGHTED_ROUND_ROBIN
로 설정해도 부하 분산기에 영향을 미치지 않습니다.커스텀 측정항목을 사용하여 엔드포인트 선택에 영향을 주도록 부하 분산기를 구성하려면 백엔드 서비스 부하 분산 지역 정책을
WEIGHTED_ROUND_ROBIN
로 설정합니다.예를 들어 적절한 백엔드로 이미 구성된 백엔드 서비스가 있는 경우 다음과 같이 부하 분산 지역 정책을 구성합니다.
gcloud compute backend-services update BACKEND_SERVICE_NAME \ [--global | region=REGION] \ --custom-metrics='name=BACKEND_SERVICE_METRIC_NAME,dryRun=false' \ --locality-lb-policy=WEIGHTED_ROUND_ROBIN
이전에 백엔드 수준 측정항목에 대해 설명한 대로 백엔드 서비스 수준에서 구조화된 JSON 파일에 맞춤 측정항목 목록을 제공할 수도 있습니다.
--custom-metrics-file
필드를 사용하여 측정항목 파일을 백엔드 서비스에 연결합니다.