Saat menggunakan ApsaraMQ for RocketMQ, akumulasi pesan dapat menyebabkan beban sistem yang tinggi. Untuk mencegah gangguan layanan serta meningkatkan keandalan dan stabilitas sistem, Anda dapat menggunakan Kubernetes Event-Driven Autoscaling (KEDA) untuk mengotomatiskan penskalaan horizontal pod berdasarkan metrik akumulasi pesan dari ApsaraMQ for RocketMQ.
Deskripsi fungsi
Sebagai layanan middleware perpesanan terdistribusi dengan performa tinggi, keandalan tinggi, dan skalabilitas tinggi, ApsaraMQ for RocketMQ banyak digunakan oleh aplikasi kelas perusahaan. Saat menggunakan ApsaraMQ for RocketMQ, akumulasi pesan dapat terjadi, terutama di bawah beban tinggi, yang dapat meningkatkan beban sistem lebih lanjut dan bahkan menyebabkan kerusakan aplikasi.
Untuk menyelesaikan masalah ini, Anda dapat menggunakan KEDA untuk mengaktifkan penskalaan horizontal pod berdasarkan metrik akumulasi pesan kustom dari ApsaraMQ for RocketMQ. KEDA secara otomatis menskalakan aplikasi berdasarkan metrik akumulasi pesan dengan efisiensi tinggi, memastikan keandalan dan stabilitas sistem. Jika Anda menggunakan Apache RocketMQ open-source, Anda dapat mengaktifkan penskalaan horizontal pod berdasarkan metrik yang dikumpulkan oleh Java Management Extensions (JMX) Prometheus exporter. Untuk informasi lebih lanjut, lihat Apache RocketMQ.
Topik ini menjelaskan konfigurasi objek skala docking pesan RocketMQ menggunakan Managed Service for Prometheus sebagai sumber data.
Prasyarat
Komponen ack-keda telah diterapkan. Untuk informasi lebih lanjut, lihat Autoskala Berbasis Acara.
Instansi ApsaraMQ for RocketMQ 5.x telah dibuat. Untuk informasi lebih lanjut, lihat Buat Instansi.
Instansi Serverless ApsaraMQ for RocketMQ 5.x mendukung penskalaan sumber daya cepat berdasarkan beban kerja bisnis. Untuk mengurangi biaya, sumber daya dialokasikan dan biaya komputasi ditagih sesuai dengan penggunaan aktual. Untuk informasi lebih lanjut, lihat Ikhtisar Instansi Serverless ApsaraMQ for RocketMQ 5.x.
Layanan Aliyun RocketMQ (5.0) telah diintegrasikan di konsol ARMS.
Lingkungan runtime Go telah dikonfigurasi.
Langkah 1: Terapkan aplikasi
Dalam contoh ini, aplikasi NGINX bernama sample-app dibuat.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan cluster yang ingin Anda kelola dan klik namanya. Di panel kiri, pilih .
Di halaman Deployments, klik Create from YAML. Di halaman Create, atur Sample Template menjadi Custom, dan gunakan template YAML berikut untuk membuat aplikasi NGINX bernama sample-app:
apiVersion: apps/v1 kind: Deployment metadata: name: sample-app namespace: default labels: app: sample-app spec: replicas: 1 selector: matchLabels: app: sample-app template: metadata: labels: app: sample-app spec: containers: - name: sample-app # Ganti dengan gambar konsumen RocketMQ yang sebenarnya. image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/nginx_optimized:20240221-1.20.1-2.3.0 resources: limits: cpu: "500m"
Langkah 2: Konfigurasikan kebijakan skala melalui ScaledObject
Konfigurasikan kebijakan skala KEDA menggunakan file YAML ScaledObject, yang mencakup objek skala, jumlah maksimum dan minimum replika, serta ambang batas skala seperti ambang batas akumulasi pesan. Sebelum mengonfigurasi ScaledObject, peroleh alamat Prometheus dan informasi relevan lainnya untuk metrik instansi ApsaraMQ for RocketMQ.
1. Dapatkan informasi instansi dari konsol ApsaraMQ for RocketMQ
Masuk ke Konsol ApsaraMQ for RocketMQ. Di panel navigasi kiri, klik Instances.
Di bilah navigasi atas, pilih wilayah, seperti China (Hangzhou). Di halaman Instansi, klik nama instansi yang ingin Anda kelola.
Di panel navigasi kiri, klik Topics, dan catat Name dan Instance ID di pojok kanan atas, seperti keda dan mq-cn-uax33****, masing-masing.
2. Dapatkan sumber data Prometheus untuk instansi ApsaraMQ for RocketMQ di konsol Prometheus
Masuk ke Konsol ARMS.
Di panel navigasi kiri, pilih .
Temukan instansi bernama Cloud Services-{{RegionId}} dan klik namanya. Di panel kiri, klik Settings, dan salin titik akhir di bagian HTTP API URL (Grafana Read URL).

3. Buat file YAML ScaledObject
Gunakan template YAML berikut untuk membuat file bernama ScaledObject.yaml untuk konfigurasi kebijakan skala:
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: prometheus-scaledobject namespace: default spec: scaleTargetRef: name: sample-app maxReplicaCount: 10 minReplicaCount: 2 triggers: - type: prometheus metadata: serverAddress: http://cn-beijing.arms.aliyuncs.com:9090/api/v1/prometheus/8cba801fff65546a3012e9a684****/****538168824185/cloud-product-rocketmq/cn-beijing metricName: rocketmq_consumer_inflight_messages query: sum({__name__=~"rocketmq_consumer_ready_messages|rocketmq_consumer_inflight_messages",instance_id="rmq-cn-uax3xxxxxx",topic=~"keda"}) by (consumer_group) threshold: '30'Tabel berikut menjelaskan parameter:
Parameter
Deskripsi
scaleTargetRef.nameObjek yang ingin Anda skala. Dalam contoh ini, nilai diatur ke sample-app, yaitu nama aplikasi yang Anda buat di Langkah 1: Terapkan aplikasi.
maxReplicaCountJumlah maksimum replika yang dipertahankan selama operasi penambahan skala.
minReplicaCountJumlah minimum replika yang dipertahankan selama operasi pengurangan skala.
serverAddressTitik akhir instansi Prometheus yang menyimpan metrik instansi ApsaraMQ for RocketMQ. Dalam contoh ini, nilai diatur ke titik akhir yang Anda salin dari HTTP API Address (Grafana Read Address) pada langkah sebelumnya.
metricNameData kueri Prometheus Query Language (PromQL).
queryMenggabungkan data kueri PromQL yang ditentukan dalam parameter metricName. Dalam contoh ini, statistik jumlah pesan yang terakumulasi digabungkan.
thresholdAmbang batas skala. Dalam contoh ini, ambang batas skala adalah 30, yang menunjukkan bahwa aplikasi akan diskalakan jika jumlah pesan yang terakumulasi melebihi 30.
Jalankan perintah berikut untuk menerapkan file ScaledObject.yaml, dan verifikasi sumber daya yang dibuat:
# Terapkan konfigurasi skala. kubectl apply -f ScaledObject.yaml # Keluaran berikut menunjukkan pembuatan berhasil. scaledobject.keda.sh/prometheus-scaledobject created # Ambil status konfigurasi skala. kubectl get ScaledObject # Keluaran menampilkan detail ScaledObject. NAME SCALETARGETKIND SCALETARGETNAME MIN MAX TRIGGERS AUTHENTICATION READY ACTIVE FALLBACK AGE prometheus-scaledobject apps/v1.Deployment sample-app 2 10 prometheus True False False 105s # Periksa apakah Horizontal Pod Autoscaler (HPA) dibuat untuk menskalakan aplikasi. kubectl get hpa # Keluaran menampilkan status HPA. NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE keda-hpa-prometheus-scaledobject Deployment/sample-app 0/30 (avg) 2 10 2 28m(Opsional) Untuk meningkatkan keamanan data untuk operasi baca, gunakan token Prometheus untuk autentikasi.
Langkah 3: Produksi dan konsumsi data
Contoh ini menggunakan proyek rocketmq-keda-sample untuk memproduksi dan mengonsumsi data. Dalam kode proyek, tentukan titik akhir, nama pengguna, dan kata sandi instansi ApsaraMQ for RocketMQ yang diperoleh di Langkah 2.
Langkah 4: Gunakan data yang diproduksi dan dikonsumsi untuk memicu penskalaan aplikasi
Masuk ke Konsol ApsaraMQ for RocketMQ. Di panel navigasi kiri, klik Instances.
Di bilah navigasi atas, pilih wilayah, seperti China (Hangzhou). Di halaman Instances, klik nama instansi yang ingin Anda kelola, dan catat Endpoint and Network Information.
Di panel navigasi kiri, klik Access Control, lalu klik tab Intelligent Authentication, dan catat nama pengguna dan kata sandi.
Jalankan program produser untuk memproduksi data, lalu jalankan perintah berikut untuk menanyakan informasi tentang HPA:
kubectl get hpaKeluaran yang Diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE keda-hpa-prometheus-scaledobject Deployment/sample-app 32700m/30 (avg) 2 10 10 47mKeluaran menunjukkan bahwa jumlah pod replika untuk aplikasi sample-app diskalakan ke nilai maksimum yang ditentukan di KEDA.
Hentikan program produser dan jalankan program konsumen. Lalu, jalankan perintah berikut untuk memeriksa status penskalaan HPA:
kubectl get hpa -wKeluaran yang Diharapkan:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE keda-hpa-prometheus-scaledobject Deployment/sample-app 222500m/30 (avg) 2 10 10 50m keda-hpa-prometheus-scaledobject Deployment/sample-app 232400m/30 (avg) 2 10 10 51m keda-hpa-prometheus-scaledobject Deployment/sample-app 0/30 (avg) 2 10 10 52m keda-hpa-prometheus-scaledobject Deployment/sample-app 0/30 (avg) 2 10 2 57mKeluaran menunjukkan bahwa jumlah pod replika untuk aplikasi sample-app turun ke nilai minimum yang ditentukan di KEDA beberapa saat setelah konsumsi data berakhir.
Referensi
Anda dapat menggunakan KEDA dengan metrik ApsaraMQ for RabbitMQ untuk mengotomatiskan penskalaan horizontal pod, serta memantau panjang antrian dan laju pesan. Untuk informasi lebih lanjut, lihat Penskalaan Horizontal Pod Berdasarkan Metrik ApsaraMQ for RabbitMQ.
