Anda dapat menggunakan fitur ConcurrencyLimitingPolicy dari suite penjadwalan lalu lintas ASM untuk membatasi jumlah permintaan bersamaan yang dikirim ke layanan (yaitu, jumlah permintaan yang sedang diproses), sehingga mencegah kelebihan beban layanan. Kebijakan ini mencatat jumlah permintaan yang sedang diproses dan menolak permintaan baru jika jumlah tersebut melebihi ambang batas tertentu. Topik ini menjelaskan cara menggunakan ConcurrencyLimitingPolicy untuk membatasi jumlah permintaan bersamaan.
Prasyarat
Sebuah kluster Container Service for Kubernetes (ACK) dikelola telah ditambahkan ke instance ASM Anda, dengan versi instance ASM V1.21.6.97 atau lebih baru. Untuk informasi lebih lanjut, lihat Tambahkan kluster ke instance ASM.
Injeksi proxy sidecar otomatis diaktifkan untuk namespace default di kluster ACK. Untuk informasi lebih lanjut, lihat Kelola namespace global.
Anda telah terhubung ke kluster ACK menggunakan kubectl. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
Suite penjadwalan lalu lintas ASM diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan suite penjadwalan lalu lintas ASM.
Aplikasi HTTPBin telah diterapkan dan dapat diakses oleh layanan sleep melalui gateway. Untuk informasi lebih lanjut, lihat Terapkan aplikasi HTTPBin.
Langkah 1: Buat kebijakan pembatasan konkurensi menggunakan bidang ConcurrencyLimitingPolicy
Gunakan kubectl untuk terhubung ke instance ASM. Untuk informasi lebih lanjut, lihat Gunakan kubectl pada control plane untuk mengakses sumber daya Istio.
Buat file ConcurrencyLimitPolicy.yaml dengan konten berikut:
apiVersion: istio.alibabacloud.com/v1 kind: ConcurrencyLimitingPolicy metadata: name: concurrencylimit namespace: istio-system spec: concurrency_limiter: max_concurrency: 1 parameters: max_inflight_duration: 60s selectors: - service: httpbin.default.svc.cluster.localTabel berikut menjelaskan beberapa bidang. Untuk informasi lebih lanjut, lihat Deskripsi Bidang ConcurrencyLimitingPolicy.
Bidang
Deskripsi
max_concurrency
Jumlah maksimum permintaan bersamaan. Dalam contoh ini, bidang ini disetel ke 1, yang menunjukkan bahwa layanan hanya diizinkan memproses satu permintaan pada satu waktu.
max_inflight_duration
Periode timeout untuk pemrosesan permintaan. Karena kejadian tak terduga seperti restart pod dalam kluster, suite penjadwalan lalu lintas ASM mungkin gagal mencatat peristiwa penghentian permintaan. Untuk mencegah permintaan semacam itu memengaruhi penilaian algoritma pembatasan konkurensi, Anda perlu menentukan periode timeout untuk pemrosesan permintaan. Jika permintaan belum direspons sebelum periode timeout ini, sistem menganggap bahwa permintaan tersebut telah diproses. Anda dapat menyetel bidang ini dengan mengevaluasi waktu respons maksimum yang diharapkan dari sebuah permintaan. Dalam contoh ini, bidang ini disetel ke 60 detik.
selectors
Layanan tempat kebijakan pembatasan konkurensi diterapkan. Dalam contoh ini, layanan httpbin.default.svc.cluster.local digunakan, yang menunjukkan bahwa kebijakan pembatasan konkurensi diterapkan pada layanan httpbin.default.svc.cluster.local.
Jalankan perintah berikut untuk mengaktifkan kebijakan pembatasan konkurensi:
kubectl apply -f ConcurrencyLimitingPolicy.yamlKeluaran yang Diharapkan:
concurrencylimitingpolicy.istio.alibabacloud.com/concurrencylimit created
Langkah 2: Verifikasi bahwa kebijakan pembatasan konkurensi berlaku
Jalankan perintah berikut untuk membuka baris perintah shell untuk layanan sleep:
kubectl exec -it deploy/sleep -- shJalankan perintah berikut untuk mengirim permintaan dari backend yang membutuhkan waktu 30 detik untuk selesai, lalu kirim permintaan kedua dalam waktu 30 detik.
curl httpbin:8000/delay/30 -I & curl httpbin:8000 -IKeluaran yang Diharapkan:
HTTP/1.1 429 Too Many Requests date: Fri, 26 Jul 2024 13:50:55 GMT server: envoy x-envoy-upstream-service-time: 1 transfer-encoding: chunked ~ $ HTTP/1.1 200 OK server: envoy date: Fri, 26 Jul 2024 13:51:05 GMT content-type: application/json content-length: 269 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 10006 [1]+ Done curl httpbin:8000/delay/30 -IKeluaran menunjukkan bahwa respons dengan kode status HTTP 429 dikembalikan untuk permintaan kedua. Ini membuktikan bahwa kebijakan pembatasan konkurensi berlaku.
Referensi
Anda dapat mengidentifikasi apakah ConcurrencyLimitingPolicy berlaku di Grafana. Pastikan bahwa instance Prometheus untuk Grafana telah dikonfigurasi dengan suite penjadwalan lalu lintas ASM.
Anda dapat mengimpor konten berikut ke Grafana untuk membuat dasbor untuk ConcurrencyLimitingPolicy.
Dasbor yang dihasilkan adalah sebagai berikut.
