Dalam seni bina mikroservis moden, Redis, RabbitMQ, dan Kafka menjadi tulang belakang untuk caching, pemesejan, dan pemprosesan strim. Apabila middleware ini menjadi tidak stabil, kesannya merebak ke seluruh sistem—latensi meningkat, kehilangan data, dan bahkan gangguan sepenuhnya. Artikel ini, berdasarkan pengalaman lapangan OpsGlobal, membawa anda melalui insiden biasa untuk menunjukkan pendekatan sistematik dalam mendiagnosis dan membaiki isu kebolehpercayaan.
Senario
Bayangkan sebuah platform e-dagang yang berjalan di Kubernetes. Redis menyimpan cache sesi dan data produk panas, RabbitMQ mengendalikan notifikasi pesanan, dan Kafka menyerap aliran klik untuk analisis. Semasa jualan kilat, pengguna melaporkan muat halaman lambat, pengesahan pesanan tertunda, dan data analisis hilang. Pasukan anda perlu mengenal pasti dan memulihkan perkhidmatan dengan cepat.
Gejala
Pemerhatian awal termasuk: - Redis: Latensi melonjak dari 1ms ke 50ms, beberapa permintaan tamat masa, kadar hit cache jatuh dari 95% ke 70%. - RabbitMQ: Barisan memunggah, kadar penggunaan menurun, dan pengakuan mesej sering tamat masa. - Kafka: Lag kumpulan pengguna semakin besar, dan beberapa replika partition tidak segerak.
Gejala ini menunjukkan masalah kekurangan sumber, konfigurasi yang salah, atau isu rangkaian yang menjejaskan middleware.
Diagnosis
Diagnosis perlu bermula dari kedua-dua perspektif klien dan pelayan. Gunakan alat kebolehcerapan seperti Prometheus dan Grafana untuk metrik utama, kemudian periksa dengan lebih mendalam menggunakan arahan baris arahan.
Untuk Redis, periksa pecahan memori dan kadar hit:
- Jalankan redis-cli INFO stats untuk melihat hits dan misses.
- Jalankan redis-cli INFO memory untuk menyemak used_memory dan maxmemory.
- Jika maxmemory dicapai, periksa dasar lencongan (eviction).
Untuk RabbitMQ, periksa keadaan barisan dan sambungan pengguna:
- rabbitmqctl list_queues name messages messages_unacknowledged
- rabbitmqctl list_connections state
- Jika banyak mesej tidak diakui, mungkin pengguna lambat atau tersekat.
Untuk Kafka, periksa lag kumpulan pengguna dan status replika:
- kafka-consumer-groups.sh --bootstrap-server KAFKA_HOST:9092 --describe --all-groups
- kafka-topics.sh --describe --topic clickstream --under-replicated-partitions
Jika replika tidak segerak, periksa rangkaian dan I/O cakera.
Arahan Utama
Berikut adalah arahan diagnostik paling praktikal. Sesuaikan alamat dan parameter mengikut persekitaran anda.
Redis
# Periksa memori, kadar hit, dan latensi
redis-cli INFO memory
redis-cli INFO stats
redis-cli LATENCY LATEST
RabbitMQ
# Lihat barisan, pengguna, sambungan
rabbitmqctl list_queues name messages consumers
rabbitmqctl list_connections state
rabbitmqctl list_channels
Kafka
# Lihat lag kumpulan pengguna
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --all-groups
# Periksa partition di bawah replikasi
kafka-topics.sh --bootstrap-server localhost:9092 --describe --under-replicated-partitions
# Dapatkan offset terakhir
timeout 10 kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic clickstream --time -1
Nota keselamatan: Jangan jalankan arahan yang merosakkan seperti FLUSHALL, rabbitmqctl reset, atau kafka-topics --delete tanpa sandaran dan penilaian risiko yang sewajarnya.
Kawalan Risiko
Sebelum mengambil tindakan pembetulan, anda perlu mengawal risiko untuk mengelakkan kemerosotan selanjutnya:
- Tingkatkan kekerapan pemantauan: Pendekkan pengambilan Prometheus kepada 15 saat untuk penglihatan yang lebih pantas.
- Skala keluar sementara: Tambah replika atau nod pada Redis, RabbitMQ, dan Kafka untuk membahagikan beban.
- Aktifkan atau laraskan kegigihan: Pastikan AOF Redis aktif dengan dasar fsync yang munasabah, barisan RabbitMQ tahan lasak, dan faktor replikasi Kafka sekurang-kurangnya 3.
- Had trafik: Gunakan pemutus litar atau had kadar pada lapisan aplikasi untuk mengelakkan runtuhan salji.
- Simpan keadaan: Sebelum memulakan semula perkhidmatan, simpan snapshot, log, dan metrik untuk analisis kemudian.
Rollback
Jika pembetulan menyebabkan isu baharu, bersedia untuk rollback dengan cepat.
- Redis: Jika parameter konfigurasi diubah, pulihkan konfigurasi asal dan mulakan semula perkhidmatan. Mulakan semula menyebabkan ketidaktersediaan ringkas, jadi gunakan rolling restart semasa trafik rendah.
- RabbitMQ: Jika polisi atau barisan ditambah, keluarkan perubahan. Jika mesej rosak, pulihkan dari sandaran jika ada.
- Kafka: Jika replika partition atau konfigurasi diubah, gunakan
kafka-configs.shuntuk mengembalikan. Untuk lag pengguna, anda boleh menetapkan semula offset atau menggunakan semula, tetapi lakukan dengan berhati-hati.
Sentiasa sandarkan keadaan semasa sebelum rollback dan maklumkan pasukan berkaitan.
Pengesahan
Selepas pembetulan, sahkan perkhidmatan kembali normal.
- Redis: Jalankan
redis-cli --latencyuntuk menyemak latensi danINFO statsuntuk melihat sama ada kadar hit pulih. - RabbitMQ: Gunakan
rabbitmqadmin list queuesuntuk mengesahkan masalah barisan berkurangan dan kadar penggunaan meningkat. - Kafka: Jalankan
kafka-consumer-groups.shuntuk mengesahkan lag dalam julat yang boleh diterima, dankafka-topics.shuntuk memastikan semua partition disegerakkan.
Juga jalankan ujian hujung-ke-hujung dengan trafik sebenar simulasi untuk mengesahkan prestasi yang dapat dilihat pengguna dipulihkan.
Bila Menghubungi OpsGlobal
Hubungi OpsGlobal untuk sokongan pakar jika anda mengalami mana-mana situasi berikut: - Middleware kerap mengalami OOM atau ranap tanpa sebab yang jelas. - Kehilangan data tidak dapat dipulihkan dan memerlukan analisis mendalam tentang mekanisme konsistensi. - Kluster merentas wilayah atau awan majmuk mengalami pemisahan rangkaian yang membawa kepada split-brain. - Anda perlu mereka bentuk seni bina ketersediaan tinggi atau merancang kapasiti.
Pasukan SRE OpsGlobal menyediakan sokongan 24/7 dan boleh membantu anda mengenal pasti punca dengan cepat serta melaksanakan langkah pemulihan dan pencegahan yang berkesan.
Dengan mendiagnosis secara sistematik dan mengawal risiko, anda boleh meningkatkan kebolehpercayaan middleware secara signifikan. Ingat: kegagalan tidak dapat dielakkan, tetapi tidak bersedia adalah pilihan.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu NoSQL dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Panduan praktikal mendalam untuk mendiagnosis dan menyelesaikan isu kebolehpercayaan dalam Redis, RabbitMQ, dan Kafka di persekitaran Kubernetes pengeluaran, merangkumi senario, gejala, diagnosis, arahan, kawalan risiko, rollback, pengesahan, dan bila perlu menghubungi OpsGlobal.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.