Halaman ini menjelaskan cara menggunakan metrik kustom dengan Load Balancer Aplikasi Anda. Metrik kustom memungkinkan Anda mengonfigurasi perilaku distribusi traffic load balancer berdasarkan metrik khusus untuk persyaratan aplikasi atau infrastruktur, bukan metrik berbasis kapasitas atau kapasitas standar Google Cloud. Menentukan metrik kustom untuk load balancer memberi Anda fleksibilitas untuk merutekan permintaan aplikasi ke backend instance dan endpoint yang paling optimal untuk workload Anda.
Load balancer menggunakan nilai metrik kustom untuk membuat keputusan berikut:
- Pilih grup instance VM backend atau grup endpoint jaringan yang harus menerima traffic
- Pilih instance VM atau endpoint yang akan menerima traffic
Berikut adalah beberapa contoh kasus penggunaan untuk metrik kustom:
Maksimalkan penggunaan kapasitas komputasi global Anda dengan membuat keputusan load balancing berdasarkan metrik kustom yang paling relevan dengan aplikasi Anda, bukan kriteria default seperti afinitas regional atau latensi jaringan.
Jika aplikasi Anda sering memiliki latensi pemrosesan backend dalam urutan detik, Anda dapat menggunakan kapasitas komputasi global secara lebih efisien dengan permintaan load balancer berdasarkan metrik kustom, bukan latensi jaringan.
Maksimalkan efisiensi komputasi dengan membuat keputusan load balancing berdasarkan kombinasi metrik yang unik untuk deployment Anda. Misalnya, pertimbangkan skenario saat permintaan Anda memiliki waktu pemrosesan dan persyaratan komputasi yang sangat bervariasi. Dalam skenario tersebut, load balancing yang hanya didasarkan pada rasio permintaan per detik akan menghasilkan distribusi beban yang tidak merata. Dalam hal tersebut, Anda mungkin ingin menentukan metrik kustom yang menyeimbangkan beban berdasarkan kombinasi kecepatan permintaan serta penggunaan CPU atau GPU untuk menggunakan fleet komputasi Anda secara paling efisien.
Penskalaan otomatis backend berdasarkan metrik kustom yang paling relevan dengan persyaratan aplikasi Anda. Misalnya, Anda dapat menentukan kebijakan penskalaan otomatis untuk melakukan penskalaan otomatis pada instance backend saat metrik kustom yang dikonfigurasi melebihi 80%. Hal ini dicapai dengan menggunakan metrik penskalaan otomatis berbasis traffic (
autoscaling.googleapis.com|gclb-capacity-fullness
). Untuk informasi selengkapnya, lihat Penskalaan otomatis berdasarkan traffic load balancer.
Load balancer dan backend yang didukung
Metrik kustom didukung untuk Load Balancer Aplikasi berikut:
- Load Balancer Aplikasi eksternal global
- Load Balancer Aplikasi eksternal regional
- Load Balancer Aplikasi internal lintas region
- Load Balancer Aplikasi internal regional
Metrik kustom didukung dengan jenis backend berikut:
- Grup instance terkelola
- NEG Zona (dengan endpoint
GCE_VM_IP_PORT
) - NEG dengan konektivitas hybrid
Cara kerja metrik kustom
Agar load balancer dapat membuat keputusan distribusi traffic berdasarkan metrik kustom, Anda harus menentukan metrik yang paling relevan untuk aplikasi tertentu terlebih dahulu. Setelah mengetahui metrik yang ingin digunakan, Anda dapat mengonfigurasi backend untuk mulai melaporkan aliran metrik yang stabil ini ke load balancer. Google Cloud memungkinkan Anda melaporkan metrik sebagai bagian dari header setiap respons HTTP yang dikirim dari backend ke load balancer. Metrik ini dienkapsulasi dalam header respons HTTP kustom dan harus mengikuti standar Open Request Cost Aggregation (ORCA).
Metrik dapat dikonfigurasi di dua tingkat:
- Di tingkat backend, untuk memengaruhi pemilihan backend (MIG atau NEG)
- Di tingkat layanan backend, untuk memengaruhi pemilihan instance VM atau endpoint
Bagian berikut menjelaskan cara kerja metrik kustom.
Menentukan metrik kustom yang akan memengaruhi keputusan load balancing
Menentukan metrik kustom yang akan memengaruhi keputusan load balancing sangat bersifat subjektif dan didasarkan pada kebutuhan aplikasi Anda. Misalnya, jika aplikasi Anda memiliki latensi pemrosesan backend dalam urutan detik, sebaiknya Anda melakukan load balancing permintaan berdasarkan metrik kustom lainnya, bukan latensi jaringan standar.
Setelah menentukan metrik yang ingin digunakan, Anda juga harus menentukan nilai minimum penggunaan maksimum untuk setiap metrik. Misalnya, jika ingin menggunakan penggunaan memori sebagai metrik, Anda juga harus menentukan nilai minimum penggunaan memori maksimum untuk setiap backend.
Misalnya, jika Anda mengonfigurasi metrik yang disebut example-custom-metric
, dengan
nilai minimum penggunaan maksimumnya ditetapkan ke 0,8, load balancer akan menyesuaikan secara dinamis
distribusi traffic di seluruh backend agar metrik example-custom-metric
yang dilaporkan oleh backend tidak lebih dari 0,8, sebanyak mungkin.
Ada dua jenis metrik kustom yang dapat Anda gunakan:
Metrik yang direservasi. Ada 5 nama metrik yang dicadangkan; nama ini dicadangkan karena sesuai dengan kolom standar level teratas di ORCA API.
orca.cpu_utilization
orca.mem_utilization
orca.application_utilization
orca.eps
orca.rps_fractional
Metrik bernama Ini adalah metrik unik untuk aplikasi Anda yang Anda tentukan menggunakan kolom
named_metrics
ORCA dalam format berikut:orca.named_metrics.METRIC_NAME
Semua metrik kustom yang ditentukan pengguna ditentukan menggunakan peta
named_metrics
ini dalam format pasangan nama, nilai.
Metrik yang diperlukan
Agar load balancer dapat menggunakan metrik kustom untuk grup instance VM backend atau pemilihan grup endpoint jaringan, Anda harus menentukan setidaknya salah satu metrik penggunaan berikut dari daftar berikut dalam laporan beban ORCA yang dikirim ke load balancer:
orca.cpu_utilization
, atau,orca.application_utilization
, atau,orca.mem_utilization
, atau,orca.named_metrics
, yang merupakan peta metrik yang ditentukan pengguna dalam bentuk pasangan nama, nilai.
Selain itu, agar load balancer dapat menggunakan metrik kustom untuk lebih memengaruhi pemilihan instance atau endpoint VM backend, Anda harus memberikan semua metrik berikut dalam laporan beban ORCA yang dikirim ke load balancer. Load balancer menggunakan bobot yang dihitung dari metrik yang dilaporkan ini untuk menetapkan beban ke setiap backend.
orca.rps_fractional
(permintaan per detik),orca.eps
(error per detik), dan,- metrik penggunaan dengan urutan prioritas berikut:
orca.application_utilization
orca.cpu_utilization
- metrik yang ditentukan pengguna di peta
orca.named_metrics
Catatan tambahan:
Ada batas 2 metrik kustom per backend. Namun, Anda dapat melakukan pengujian
dryRun
dengan maksimal 3 metrik kustom.Jika dua metrik disediakan, load balancer akan memperlakukannya secara terpisah. Misalnya, jika Anda menentukan dua dimensi:
custom-metric-util1
dancustom-metric-util2
, load balancer akan memperlakukannya secara terpisah. Jika backend berjalan pada tingkat penggunaan yang tinggi dalam halcustom-metric-util1
, load balancer akan menghindari pengiriman traffic ke backend ini. Umumnya, load balancer mencoba menjaga semua backend tetap berjalan dengan kepadatan yang kira-kira sama. Kelengkapan dihitung sebagaicurrentUtilization
/maxUtilization
. Dalam hal ini, load balancer menggunakan nilai kepenuhan yang lebih tinggi dari dua nilai yang dilaporkan oleh kedua metrik untuk membuat keputusan load balancing.Ada batas 2 metrik kustom per layanan backend. Namun, Anda dapat melakukan pengujian
dryRun
dengan maksimal 3 metrik kustom. Batas ini tidak mencakup metrikorca.eps
danorca.rps_fractional
yang diperlukan. Batas ini juga tidak bergantung pada metrik yang dikonfigurasi di tingkat backend.Metrik yang dicadangkan dan metrik bernama dapat digunakan bersama. Misalnya,
orca.cpu_utilization = 0.5
dan metrik kustom sepertiorca.named_metrics.queue_depth_util = 0.2
dapat disediakan dalam satu laporan beban.Nama metrik kustom tidak boleh berisi informasi rahasia, sensitif, dapat diidentifikasi, atau informasi rahasia lainnya yang tidak boleh dilihat oleh siapa pun di luar organisasi Anda.
Encoding yang tersedia untuk spesifikasi metrik kustom
JSON
Contoh encoding JSON laporan pemuatan:
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 Biner
Untuk kode yang mendukung Protocol Buffers, ini adalah protobuf OrcaLoadReport berenkode base64 yang diserialisasi biner di
endpoint-load-metrics-bin
atau diendpoint-load-metrics: BIN
.HTTP Native
Pasangan nilai kunci yang dipisahkan koma di
endpoint-load-metrics
. Ini adalah representasi teks datar dari 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
Spesifikasi gRPC mewajibkan metrik disediakan menggunakan metadata akhir menggunakan kunci
endpoint-load-metrics-bin
.
Konfigurasi backend untuk melaporkan metrik kustom
Setelah menentukan metrik yang ingin digunakan load balancer, Anda akan mengonfigurasi backend untuk mengompilasi metrik kustom yang diperlukan dalam laporan beban ORCA dan melaporkan nilainya di setiap header respons HTTP yang dikirim ke load balancer.
Misalnya, jika Anda memilih orca.cpu_utilization
sebagai metrik kustom untuk backend, backend tersebut harus melaporkan penggunaan CPU saat ini ke load balancer dalam setiap paket yang dikirim ke load balancer. Untuk mengetahui petunjuknya, lihat bagian Melaporkan metrik ke load balancer di halaman ini.
Konfigurasi load balancer untuk mendukung metrik kustom
Agar load balancer dapat menggunakan nilai metrik kustom yang dilaporkan oleh
backend untuk membuat keputusan distribusi traffic, Anda harus menetapkan mode
penyeimbangan setiap backend ke CUSTOM_METRICS
dan menetapkan kebijakan lokalitas load balancing
layanan backend ke WEIGHTED_ROUND_ROBIN
.
Mode balancing
CUSTOM_METRICS
. Setiap backend Anda dalam layanan backend harus dikonfigurasi untuk menggunakan mode penyeimbanganCUSTOM_METRICS
. Jika backend dikonfigurasi dengan mode balancingCUSTOM_METRICS
, load balancer akan mengarahkan traffic ke backend sesuai dengan nilai minimum penggunaan maksimum yang dikonfigurasi untuk setiap metrik kustom.Setiap backend dapat menentukan kumpulan metrik yang berbeda untuk dilaporkan. Jika beberapa metrik kustom dikonfigurasi per backend, load balancer akan mencoba mendistribusikan traffic sehingga semua metrik tetap berada di bawah batas penggunaan maksimum yang dikonfigurasi.
Traffic di-load balancing di seluruh backend berdasarkan algoritma load balancing yang Anda pilih; misalnya, algoritma
WATERFALL_BY_REGION
default mencoba mempertahankan semua backend berjalan dengan kapasitas yang sama.Kebijakan lokalitas load balancing
WEIGHTED_ROUND_ROBIN
. Kebijakan lokalitas load balancing layanan backend harus ditetapkan keWEIGHTED_ROUND_ROBIN
. Dengan konfigurasi ini, load balancer juga menggunakan metrik kustom untuk memilih instance atau endpoint yang optimal dalam backend untuk menayangkan permintaan.
Mengonfigurasi metrik kustom
Anda akan melakukan langkah-langkah berikut untuk mengaktifkan Application Load Balancer agar dapat membuat keputusan load balancing berdasarkan metrik kustom:
- Tentukan metrik kustom yang ingin Anda gunakan.
- Konfigurasikan backend untuk melaporkan metrik kustom ke load balancer. Anda harus membuat aliran data yang dapat dikirim ke load balancer untuk digunakan dalam keputusan load balancing. Metrik ini harus dikompilasi dan dienkode dalam laporan beban ORCA, lalu dilaporkan ke load balancer menggunakan header respons HTTP.
- Konfigurasikan load balancer untuk menggunakan nilai metrik kustom yang dilaporkan oleh backend.
Menentukan metrik kustom
Langkah ini sangat subjektif berdasarkan kebutuhan aplikasi Anda sendiri. Setelah menentukan metrik yang ingin digunakan, Anda juga harus menentukan nilai minimum penggunaan maksimum untuk setiap metrik. Misalnya, jika ingin menggunakan penggunaan memori sebagai metrik, Anda juga harus menentukan nilai minimum penggunaan memori maksimum untuk setiap backend.
Sebelum melanjutkan untuk mengonfigurasi load balancer, pastikan Anda telah meninjau jenis metrik kustom yang tersedia untuk Anda (disertai nama dan direservasi) serta persyaratan untuk pemilihan metrik di bagian Cara kerja metrik kustom.
Mengonfigurasi backend untuk melaporkan metrik ke load balancer
Metrik kustom dilaporkan ke load balancer sebagai bagian dari setiap respons HTTP dari backend aplikasi Anda menggunakan standar ORCA. Bagian ini menunjukkan cara mengompilasi metrik kustom dalam laporan beban ORCA dan melaporkan metrik ini di setiap header respons HTTP yang dikirim ke load balancer.
Misalnya, jika Anda menggunakan encoding teks HTTP, header harus melaporkan metrik dalam format berikut.
endpoint-load-metrics: TEXT BACKEND_METRIC_NAME_1=BACKEND_METRIC_VALUE_1,BACKEND_METRIC_NAME_2=BACKEND_METRIC_VALUE_2
Apa pun format encoding yang digunakan, pastikan Anda menghapus
awalan orca.
dari nama metrik saat mem-build laporan pemuatan.
Berikut adalah cuplikan kode yang menunjukkan cara menambahkan dua metrik kustom
(customUtilA
dan customUtilB
) ke header HTTP Anda. Cuplikan kode ini menunjukkan
enkode teks HTTP native dan encoding base64. Perhatikan bahwa contoh ini
melakukan hard code pada nilai untuk customUtilA
dan customUtilB
hanya untuk memudahkan.
Load balancer Anda akan menerima nilai untuk metrik yang telah Anda tentukan untuk memengaruhi load balancing.
...
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{"", ""}
}
}
...
Mengonfigurasi load balancer untuk menggunakan metrik kustom
Agar load balancer dapat menggunakan metrik kustom ini saat memilih backend, Anda
harus menetapkan mode balancing untuk setiap backend ke CUSTOM_METRICS
.
Selain itu, jika Anda ingin metrik kustom juga memengaruhi pemilihan endpoint, Anda harus menetapkan kebijakan lokalitas load balancing ke WEIGHTED_ROUND_ROBIN
.
Langkah-langkah yang dijelaskan di bagian ini mengasumsikan bahwa Anda telah men-deploy load
balancer dengan backend NEG zonal. Namun, Anda dapat menggunakan flag --custom-metrics
yang sama yang ditunjukkan di sini untuk mengupdate backend yang ada dengan menggunakan perintah gcloud compute backend-services update
.
Anda dapat menetapkan mode penyeimbangan backend ke
CUSTOM_METRICS
saat menambahkan backend ke layanan backend. Anda menggunakan flag--custom-metrics
untuk menentukan metrik kustom dan nilai minimum yang akan digunakan untuk keputusan load balancing.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'
Ganti kode berikut:
- BACKEND_METRIC_NAME: Nama metrik kustom yang digunakan di sini harus cocok dengan nama metrik kustom yang dilaporkan oleh laporan ORCA backend.
- MAX_UTILIZATION_FOR_METRIC: Penggunaan maksimum yang harus ditargetkan oleh algoritma load balancing untuk setiap metrik.
Misalnya, jika backend Anda melaporkan dua metrik kustom,
customUtilA
dancustomUtilB
(seperti yang ditunjukkan di bagian Mengonfigurasi backend untuk melaporkan metrik ke load balancer), Anda akan menggunakan perintah berikut untuk mengonfigurasi load balancer agar menggunakan metrik ini: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'
Atau, Anda dapat memberikan daftar metrik kustom dalam file JSON terstruktur:
{ "name": "METRIC_NAME_1", "maxUtilization": MAX_UTILIZATION_FOR_METRIC_1, "dryRun": true } { "name": "METRIC_NAME_2", "maxUtilization": MAX_UTILIZATION_FOR_METRIC_2, "dryRun": false }
Kemudian, lampirkan file metrik dalam format JSON ke backend sebagai berikut:
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'
Jika ingin menguji apakah metrik dilaporkan tanpa benar-benar memengaruhi load balancer, Anda dapat menetapkan tanda
dryRun
ketrue
saat mengonfigurasi metrik sebagai berikut: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'
Jika metrik dikonfigurasi dengan
dryRun
disetel ketrue
, metrik tersebut akan dilaporkan ke Monitoring, tetapi tidak benar-benar digunakan oleh load balancer.Untuk membaliknya, perbarui layanan backend dengan flag
dryRun
yang ditetapkan kefalse
.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'
Jika semua metrik kustom Anda dikonfigurasi dengan
dryRun
disetel ketrue
, menetapkan mode penyeimbangan keCUSTOM_METRICS
atau kebijakan lokalitas load balancing keWEIGHTED_ROUND_ROBIN
tidak akan memengaruhi load balancer.Untuk mengonfigurasi load balancer agar menggunakan metrik kustom untuk memengaruhi pemilihan endpoint, Anda menetapkan kebijakan lokalitas load balancing layanan backend ke
WEIGHTED_ROUND_ROBIN
.Misalnya, jika Anda memiliki layanan backend yang sudah dikonfigurasi dengan backend yang sesuai, Anda dapat mengonfigurasi kebijakan lokalitas load balancing sebagai berikut:
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
Seperti yang ditunjukkan sebelumnya untuk metrik tingkat backend, Anda juga dapat memberikan daftar metrik kustom dalam file JSON terstruktur di tingkat layanan backend. Gunakan kolom
--custom-metrics-file
untuk melampirkan file metrik ke layanan backend.
Langkah berikutnya
- Memecahkan masalah Load Balancer Aplikasi eksternal
- Memecahkan masalah Load Balancer Aplikasi internal