Metrik kustom untuk Load Balancer Aplikasi

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. Cloud de ConfianceDengan 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:

  1. Pilih grup instance atau grup endpoint jaringan (NEG) virtual machine (VM) backend yang akan menerima traffic.
  2. Pilih instance VM atau endpoint mana yang akan menerima traffic.
Load balancing dengan metrik kustom.
Load balancing dengan metrik kustom (klik untuk memperbesar).

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. Cloud de Confiance 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, dan application_utilization mengharapkan nilai dalam rentang 0.0 - 1.00, tetapi dapat melebihi 1.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 rentang 0 - 100. Metrik bernama yang ditentukan untuk kebijakan lokalitas load balancing WEIGHTED_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:
    1. orca.application_utilization
    2. orca.cpu_utilization
    3. 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 dan custom-metric-util2, load balancer akan memperlakukannya secara terpisah. Jika backend berjalan pada tingkat pemakaian yang tinggi dalam hal custom-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 sebagai currentUtilization / 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 metrik orca.eps dan orca.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 seperti orca.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 atau endpoint-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.

Cara kerja metrik kustom dengan Load Balancer Aplikasi.
Cara kerja metrik kustom dengan Load Balancer Aplikasi (klik untuk memperbesar).
  • Mode penyeimbangan CUSTOM_METRICS. Setiap backend Anda dalam layanan backend harus dikonfigurasi untuk menggunakan mode penyeimbangan CUSTOM_METRICS. Jika backend dikonfigurasi dengan mode penyeimbangan CUSTOM_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 ke WEIGHTED_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:

  1. Tentukan metrik kustom yang ingin Anda gunakan.
  2. 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.
  3. 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.

  1. 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 backend
    • NEG_NAME: nama NEG zonal atau hybrid
    • NEG_ZONE: zona tempat NEG dibuat
    • REGION: untuk load balancer regional, region tempat load balancer dibuat
    • 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 dan customUtilB (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 ke true 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 ke true, metrik tersebut dilaporkan ke Monitoring, tetapi sebenarnya tidak digunakan oleh load balancer.

    Untuk membatalkannya, perbarui layanan backend dengan tanda dryRun yang ditetapkan ke 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'
    

    Jika semua metrik kustom Anda dikonfigurasi dengan dryRun disetel ke true, menyetel mode penyeimbangan ke CUSTOM_METRICS atau kebijakan lokalitas load balancing ke WEIGHTED_ROUND_ROBIN tidak akan memengaruhi load balancer.

  2. 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