ASMAdaptiveConcurrency CustomResourceDefinition (CRD) secara dinamis menyesuaikan jumlah maksimum permintaan konkuren yang diizinkan untuk layanan berdasarkan data sampel. Jika jumlah permintaan konkuren melebihi kapasitas layanan, permintaan tambahan akan ditolak guna melindungi layanan. Topik ini menjelaskan cara menggunakan ASMAdaptiveConcurrency CRD untuk mengimplementasikan kontrol konkurensi adaptif.
Prasyarat
Instansi Service Mesh (ASM) versi 1.12.4.19 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat Instansi ASM.
Klien kubectl terhubung ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.
Informasi latar belakang
Layanan perlu menolak permintaan tambahan jika beban melebihi kapasitasnya. Hal ini mencegah reaksi berantai. Anda dapat mengonfigurasi aturan tujuan pada instansi ASM untuk mengaktifkan pemutusan sirkuit dasar. Namun, sulit memperkirakan kapasitas beban layanan secara akurat dalam skenario nyata.
ASMAdaptiveConcurrency CRD menggunakan algoritma kontrol konkurensi adaptif untuk menyesuaikan batas konkurensi secara dinamis dengan membandingkan latensi sampel secara berkala terhadap latensi minimum yang dihitung. Permintaan tambahan yang melebihi batas akan ditolak, mengembalikan kode status HTTP 503 dengan pesan kesalahan mencapai batas konkurensi.
Selama perhitungan waktu putaran minimum (MinRTT), jumlah koneksi dibatasi oleh parameter min_concurrency. Setelah membuat ASMAdaptiveConcurrency CRD untuk layanan, disarankan untuk mengaktifkan fitur ulang melalui aturan tujuan agar permintaan yang ditolak selama MinRTT dapat dilayani sebanyak mungkin oleh proxy sidecar.
Langkah 1: Sebarkan aplikasi contoh
Sebarkan aplikasi testserver dan gotest. Kapasitas beban aplikasi testserver ditetapkan pada 500 permintaan konkuren. Permintaan yang melebihi batas akan dimasukkan ke antrian untuk diproses. Waktu pemrosesan setiap permintaan adalah 1.000 ms. Setiap replika aplikasi gotest memulai 200 permintaan sekaligus.
Sebarkan aplikasi testserver.
Buat file testserver.yaml dengan konten berikut:
Parameter
-mmenentukan jumlah maksimum permintaan konkuren yang didukung. Parameter-tmenentukan waktu pemrosesan setiap permintaan.Jalankan perintah berikut untuk menyebarkan aplikasi testserver:
kubectl apply -f testserver.yaml
Sebarkan Layanan bernama testserver di aplikasi testserver.
Buat file testservice.yaml dengan konten berikut:
Jalankan perintah berikut untuk menyebarkan Layanan testserver:
kubectl apply -f testservice.yaml
Sebarkan aplikasi gotest.
Buat file gotest.yaml dengan konten berikut:
Jalankan perintah berikut untuk menyebarkan aplikasi gotest:
kubectl apply -f gotest.yaml
Langkah 2: Buat ASMAdaptiveConcurrency CRD
Gunakan kubectl untuk terhubung ke instansi ASM Anda. Untuk informasi lebih lanjut, lihat Gunakan kubectl pada Bidang Kontrol untuk Mengakses Sumber Daya Istio.
Buat file adaptiveconcurrency.yaml dengan konten berikut:
Jalankan perintah berikut untuk membuat ASMAdaptiveConcurrency CRD:
kubectl apply -f adaptiveconcurrency.yaml
Langkah 3: Aktifkan Managed Service for Prometheus
Untuk membantu memahami status operasi pengontrol konkurensi dan mengoptimalkan parameter, ekspor metrik terkait kontrol konkurensi adaptif ke Managed Service for Prometheus. Status operasi pengontrol konkurensi dapat dilihat di konsol Managed Service for Prometheus.
Aktifkan Managed Service for Prometheus. Untuk informasi lebih lanjut, lihat Gunakan Managed Service for Prometheus.
Konfigurasikan ServiceMonitor di kluster sehingga Managed Service for Prometheus dapat memperoleh data Layanan testserver.
Buat file servicemonitor.yaml dengan konten berikut:
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: testserver-envoy-metrics namespace: default spec: endpoints: - interval: 5s path: /stats/prometheus port: metrics namespaceSelector: any: true selector: matchLabels: app: testserverGunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk membuat ServiceMonitor:
kubectl apply -f servicemonitor.yaml
Langkah 4: Verifikasi apakah ASMAdaptiveConcurrency CRD berlaku
Atur jumlah replika menjadi 5 untuk aplikasi gotest.
Replika aplikasi gotest memulai 200 permintaan sekaligus. Lima replika aplikasi memulai 1.000 permintaan sekaligus secara total.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin dikelola dan klik nama kluster atau pilih Details di kolom Actions. Halaman detail kluster akan muncul.
Di panel navigasi halaman detail, pilih .
Di halaman Deployments, atur Namespace ke default dan pilih di kolom Actions aplikasi gotest.
Di kotak dialog Edit YAML, atur
replicaske5dan klik Update.
Unggah file JSON berikut untuk mengimpor Dasbor Grafana. Status operasi pengontrol konkurensi dapat dilihat pada dasbor yang diimpor. Untuk informasi lebih lanjut, lihat Dokumentasi ARMS.
Di dasbor, pilih kluster tempat ASMAdaptiveConcurrency CRD berada. Atur parameter Service ke testserver dan parameter Pod ke ALL.
Aplikasi gotest memulai 1.000 permintaan ke Layanan testserver, tetapi jumlah permintaan konkuren yang diproses oleh Layanan testserver lebih rendah dari 500. Ini menunjukkan bahwa ASMAdaptiveConcurrency CRD berlaku.