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 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:

  1. Pilih grup instance VM backend atau grup endpoint jaringan yang harus menerima traffic
  2. Pilih instance VM atau endpoint 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 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 dan custom-metric-util2, load balancer akan memperlakukannya secara terpisah. Jika backend berjalan pada tingkat penggunaan yang tinggi dalam hal custom-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 sebagai currentUtilization / 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 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. Misalnya, orca.cpu_utilization = 0.5 dan metrik kustom seperti orca.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 di endpoint-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.

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

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

  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_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 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 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 disetel ke true, metrik tersebut akan dilaporkan ke Monitoring, tetapi tidak benar-benar digunakan oleh load balancer.

    Untuk membaliknya, perbarui layanan backend dengan flag 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, menetapkan 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