Halaman ini menjelaskan cara menggunakan metrik kustom dengan Load Balancer Aplikasi Anda. Metrik kustom memungkinkan Anda mengonfigurasi perilaku distribusi traffic load balancer agar didasarkan pada metrik khusus untuk persyaratan aplikasi atau infrastruktur Anda, bukan metrik pemakaian standar atau berbasis rasio. Google CloudDengan menentukan metrik kustom untuk load balancer, Anda dapat merutekan permintaan aplikasi ke instance dan endpoint backend yang paling optimal untuk workload Anda.
Untuk GKE, Anda juga dapat menggunakan metrik kustom yang berasal dari layanan atau aplikasi yang Anda jalankan. Untuk mengetahui detailnya, lihat Mengekspos metrik kustom.
Load balancer menggunakan nilai metrik kustom untuk membuat keputusan berikut:
- Pilih grup instance atau grup endpoint jaringan (NEG) virtual machine (VM) backend yang akan menerima traffic.
- Pilih instance VM atau endpoint mana 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 mengalami latensi pemrosesan backend dalam urutan detik, Anda dapat menggunakan kapasitas komputasi global secara lebih efisien dengan menyeimbangkan beban permintaan 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 seperti itu, load balancing yang hanya didasarkan pada kecepatan permintaan per detik akan menghasilkan distribusi beban yang tidak merata. Dalam kasus seperti itu, Anda mungkin ingin menentukan metrik kustom yang menyeimbangkan beban berdasarkan kombinasi laju permintaan dan penggunaan CPU atau GPU untuk menggunakan armada komputasi secara paling efisien.
Menskalakan 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 mengetahui 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 terlebih dahulu metrik yang paling relevan untuk aplikasi spesifik Anda. Setelah mengetahui metrik yang ingin digunakan, Anda dapat mengonfigurasi backend untuk mulai melaporkan aliran metrik ini yang stabil 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 layanan backend, untuk memengaruhi pemilihan backend (MIG atau NEG)
- Di tingkat backend, untuk memengaruhi pemilihan instance VM atau endpoint
Bagian berikut menjelaskan cara kerja metrik kustom.
Menentukan metrik kustom mana yang memengaruhi keputusan load balancing
Menentukan metrik kustom mana yang memengaruhi keputusan load balancing sangatlah subjektif dan didasarkan pada kebutuhan aplikasi Anda. Misalnya, jika aplikasi Anda memiliki latensi pemrosesan backend dalam urutan detik, Anda mungkin ingin menyeimbangkan beban permintaan berdasarkan metrik kustom lain, bukan latensi jaringan standar.
Setelah menentukan metrik yang ingin digunakan, Anda juga harus menentukan batas penggunaan maksimum untuk setiap metrik. Misalnya, jika Anda ingin menggunakan pemakaian memori sebagai metrik, Anda juga harus menentukan batas pemakaian memori maksimum untuk setiap backend.
Misalnya, jika Anda mengonfigurasi metrik yang disebut example-custom-metric
, dengan
batas penggunaan maksimumnya ditetapkan ke 0,8, load balancer akan menyesuaikan
distribusi traffic di seluruh backend secara dinamis untuk menjaga metrik example-custom-metric
yang dilaporkan oleh backend kurang dari 0,8, sebisa mungkin.
Ada dua jenis metrik kustom yang dapat Anda gunakan:
Metrik yang dicadangkan. Ada lima nama metrik yang dicadangkan; nama-nama ini dicadangkan karena sesuai dengan kolom standar tingkat teratas di ORCA API.
orca.cpu_utilization
orca.mem_utilization
orca.application_utilization
orca.eps
orca.rps_fractional
Metrik
mem_utilization
,cpu_utilization
, danapplication_utilization
mengharapkan nilai dalam rentang0.0 - 1.00
, tetapi dapat melebihi1.00
untuk skenario saat pemakaian resource melebihi anggaran.Metrik bernama. Ini adalah metrik unik untuk aplikasi Anda yang Anda tentukan menggunakan kolom ORCA
named_metrics
dalam format berikut:orca.named_metrics.METRIC_NAME
Semua metrik kustom yang ditentukan pengguna ditentukan menggunakan peta
named_metrics
ini dalam format pasangan nama dan nilai.Metrik bernama yang ditentukan untuk mode penyeimbangan
CUSTOM_METRICS
harus menyertakan nilai dalam rentang0 - 100
. Metrik bernama yang ditentukan untuk kebijakan lokalitas load balancingWEIGHTED_ROUND_ROBIN
tidak memiliki rentang yang diharapkan.
Metrik wajib
Agar load balancer dapat menggunakan metrik kustom untuk pemilihan grup instance VM backend atau grup endpoint jaringan, Anda harus menentukan satu atau beberapa metrik pemanfaatan berikut dalam laporan beban ORCA yang dikirim ke load balancer.
orca.named_metrics
adalah peta metrik yang ditentukan pengguna dalam bentuk
pasangan nama dan nilai.
orca.cpu_utilization
orca.application_utilization
orca.mem_utilization
orca.named_metrics
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)- metrik pemanfaatan dengan urutan prioritas berikut:
orca.application_utilization
orca.cpu_utilization
- metrik buatan pengguna di peta
orca.named_metrics
Batasan dan persyaratan
Ada batas dua metrik kustom per backend. Namun, Anda dapat melakukan pengujian
dryRun
dengan maksimal tiga metrik kustom.Jika dua metrik disediakan, load balancer akan menanganinya 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 pemakaian yang tinggi dalam halcustom-metric-util1
, load balancer akan menghindari pengiriman traffic ke backend ini. Secara umum, load balancer mencoba membuat semua backend tetap berjalan dengan ketersediaan yang hampir sama. Kelengkapan dihitung sebagaicurrentUtilization
/maxUtilization
. Dalam hal ini, load balancer menggunakan nilai kecukupan yang lebih tinggi dari dua nilai yang dilaporkan oleh dua metrik untuk membuat keputusan load balancing.Ada batas dua metrik kustom per layanan backend. Namun, Anda dapat melakukan pengujian
dryRun
dengan maksimal tiga 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-sama. Misalnya,
orca.cpu_utilization = 0.5
dan metrik kustom sepertiorca.named_metrics.queue_depth_util = 0.2
dapat disediakan dalam satu laporan pemuatan.Nama metrik kustom tidak boleh berisi informasi yang diatur, sensitif, dapat mengidentifikasi, 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}}.
Binary Protobuf
Untuk kode yang kompatibel dengan Protocol Buffers, ini adalah base64 yang diserialisasi biner yang dienkode OrcaLoadReport protobuf dalam
endpoint-load-metrics-bin
atauendpoint-load-metrics: BIN
.HTTP Native
Pasangan nilai kunci yang dipisahkan koma di
endpoint-load-metrics
. Berikut adalah representasi teks yang disederhanakan 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 mengharuskan metrik disediakan menggunakan metadata trailing menggunakan kunci
endpoint-load-metrics-bin
.
Konfigurasi backend untuk melaporkan metrik kustom
Setelah menentukan metrik yang ingin digunakan load balancer, Anda 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 pemanfaatan CPU saat ini ke load balancer di setiap respons 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 load balancing setiap backend ke CUSTOM_METRICS
dan menetapkan kebijakan lokalitas load balancing layanan backend ke WEIGHTED_ROUND_ROBIN
.
Mode penyeimbangan
CUSTOM_METRICS
. Setiap backend Anda dalam layanan backend harus dikonfigurasi untuk menggunakan mode penyeimbanganCUSTOM_METRICS
. Jika backend dikonfigurasi dengan mode penyeimbanganCUSTOM_METRICS
, load balancer akan mengarahkan traffic ke backend sesuai dengan batas pemakaian maksimum yang dikonfigurasi untuk setiap metrik kustom.Setiap backend dapat menentukan serangkaian 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 balance di seluruh backend berdasarkan algoritma load balancing yang Anda pilih; misalnya, algoritma
WATERFALL_BY_REGION
default mencoba memastikan semua backend tetap berjalan dengan tingkat kepenuhan yang sama.Kebijakan lokalitas load balancing
WEIGHTED_ROUND_ROBIN
. Kebijakan lokalitas load balancing layanan backend harus disetel keWEIGHTED_ROUND_ROBIN
. Dengan konfigurasi ini, load balancer juga menggunakan metrik kustom untuk memilih instance atau endpoint yang optimal dalam backend untuk melayani permintaan.
Mengonfigurasi metrik kustom
Untuk mengaktifkan Load Balancer Aplikasi Anda agar dapat menggunakan metrik kustom, lakukan hal berikut:
- Tentukan metrik kustom yang ingin Anda gunakan.
- Konfigurasi backend untuk melaporkan metrik kustom ke load balancer. Anda harus membuat aliran data yang dapat dikirim ke load balancer untuk digunakan dalam load balancing. Metrik ini harus dikompilasi dan dienkode dalam laporan beban ORCA, lalu dilaporkan ke load balancer menggunakan header respons HTTP.
- Konfigurasi load balancer untuk menggunakan nilai metrik kustom yang dilaporkan oleh backend.
Menentukan metrik kustom
Langkah ini sangat subjektif berdasarkan kebutuhan aplikasi Anda. Setelah menentukan metrik yang ingin digunakan, Anda juga harus menentukan batas penggunaan maksimum untuk setiap metrik. Misalnya, jika Anda ingin menggunakan pemakaian memori sebagai metrik, Anda juga harus menentukan batas pemakaian memori maksimum untuk setiap backend.
Sebelum melanjutkan untuk mengonfigurasi load balancer, pastikan Anda telah meninjau jenis metrik kustom yang tersedia untuk Anda (dicadangkan dan diberi nama) serta persyaratan untuk pemilihan metrik, yang dijelaskan di bagian Cara kerja metrik kustom di halaman ini.
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.
Saat menggunakan Google Kubernetes Engine, Anda juga memiliki opsi untuk menggunakan metrik kustom untuk load balancer.
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
Terlepas dari format encoding yang digunakan, pastikan Anda menghapus
awalan orca.
dari nama metrik saat membuat laporan beban.
Berikut cuplikan kode yang menunjukkan cara menambahkan dua metrik kustom (customUtilA
dan customUtilB
) ke header HTTP Anda. Cuplikan kode ini menunjukkan
encoding teks HTTP native dan encoding base64. Perhatikan bahwa contoh ini
meng-hardcode nilai untuk customUtilA
dan customUtilB
hanya untuk mempermudah.
Load balancer Anda menerima nilai untuk metrik yang Anda tentukan akan 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 menggunakan metrik kustom ini saat memilih backend, Anda perlu menyetel mode load balancing untuk setiap backend ke CUSTOM_METRICS
.
Selain itu, jika Anda ingin metrik kustom juga memengaruhi pemilihan endpoint, Anda 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 seperti yang ditunjukkan di sini untuk memperbarui 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_SERVICE_NAME
: nama layanan backendNEG_NAME
: nama NEG zonal atau hybridNEG_ZONE
: zona tempat NEG dibuatREGION
: untuk load balancer regional, region tempat load balancer dibuatBACKEND_METRIC_NAME
: nama metrik kustom yang digunakan di sini harus cocok dengan nama metrik kustom yang dilaporkan oleh laporan ORCA backendMAX_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 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 memengaruhi load balancer, Anda dapat menyetel flag
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
yang ditetapkan ketrue
, metrik tersebut dilaporkan ke Monitoring, tetapi sebenarnya tidak digunakan oleh load balancer.Untuk membatalkannya, perbarui layanan backend dengan tanda
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
, menyetel 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 pada Load Balancer Aplikasi eksternal
- Memecahkan masalah pada Load Balancer Aplikasi internal