Senario
Sebuah platform e-dagang menggunakan Nginx sebagai gerbang API (API gateway), menyalurkan semua permintaan mikroservis melalui lapisan ini. Kebelakangan ini, dengan trafik yang meningkat, gerbang mula menunjukkan kependaman tinggi dan ralat 5xx secara berselang, terutamanya apabila perkhidmatan hulu (upstream) bertindak balas dengan perlahan. Kami ditugaskan untuk menyelesaikan masalah dan menala prestasi middleware gerbang Nginx.
Gejala
- Pelanggan melaporkan masa tindak balas API meningkat daripada purata 200ms kepada 1 saat atau lebih.
- Log ralat Nginx menunjukkan banyak entri
upstream timed outdanconnection refused. - Beban sistem menunjukkan penggunaan CPU worker Nginx tinggi, tetapi memori normal.
- Carta pemantauan menunjukkan sambungan aktif menghampiri had
worker_connections.
Diagnosis
Mulakan dengan memeriksa konfigurasi dan status runtime Nginx.
-
Pengesahan proses dan konfigurasi Nginx
bash nginx -t # Mengesahkan sintaks konfigurasi nginx -V # Menunjukkan pilihan kompilasi dan modul ps aux | grep nginx -
Analisis log
bash tail -f /var/log/nginx/access.log | awk '{print $7, $9, $10, $11}' | sort | uniq -c | sort -nr | head -20Periksa taburan kod status untuk melihat sama ada 5xx tertumpu. Log ralat biasanya berada di/var/log/nginx/error.log. -
Semak prestasi respons hulu
bash curl -w 'time_total: %{time_total}s time_connect: %{time_connect}s time_ttfb: %{time_starttransfer}s\n' -o /dev/null http://upstream-service/healthPerbezaan antaratime_connectdantime_ttfbmenunjukkan masa pemprosesan hulu. Jika hulu perlahan, isu mungkin bukan pada Nginx. -
Semak bilangan sambungan dan penggunaan worker
bash # Lihat halaman status Nginx (memerlukan konfigurasi stub_status) curl http://localhost/nginx_status # Atau kira sambungan dengan netstat netstat -an | grep :80 | wc -l -
Tangkapan paket atau log perlahan Jika anda mengesyaki logik middleware (contohnya, rewrite, proxy_pass, had kadar) menyebabkan kelewatan, aktifkan sementara log
debugNginx atau gunakanstraceuntuk mengesan proses worker.
Arahan
Selepas diagnosis, kami melaksanakan tindakan berikut:
-
Tala bilangan proses worker dan had sambungan: Edit
nginx.conf, tetapkanworker_processesagar sepadan dengan bilangan teras CPU, dan tingkatkanworker_connections.nginx worker_processes auto; events { worker_connections 4096; } -
Konfigurasi tamat masa hulu dan percubaan semula: Dalam blok
location, laraskanproxy_connect_timeout,proxy_send_timeout, danproxy_read_timeout. Contoh:nginx proxy_connect_timeout 5s; proxy_read_timeout 10s; proxy_send_timeout 10s; -
Aktifkan caching atau mampatan: Jika respons API boleh cache, tambah
proxy_cache; aktifkangzipuntuk respons teks untuk mengurangkan saiz penghantaran. -
Semak konfigurasi semasa:
bash nginx -T # Dump keseluruhan konfigurasiSimpan dan uji konfigurasi:bash nginx -t && nginx -s reload
Kawalan Risiko
- Sandarkan konfigurasi sebelum muat semula:
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak. - Elakkan
nginx -s stop: Muat semula secara graceful (reload) tidak menggugurkan sambungan. - Ubah satu parameter pada satu masa: Gunakan
abatauwrkuntuk ujian beban selepas setiap perubahan bagi mengesan regresi lebih awal. - Jika konkurensi sangat tinggi, pertimbangkan untuk melaraskan parameter kernel seperti
net.ipv4.ip_local_port_rangedannet.core.somaxconn, tetapi ini memberi kesan kepada hos dan perlu dilakukan dengan berhati-hati.
Rollback
Jika perubahan memburukkan keadaan, lakukan rollback:
- Pulihkan konfigurasi sandaran:
bash cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf - Sahkan konfigurasi:
bash nginx -t - Muat semula secara graceful:
bash nginx -s reload
Pengesahan
- Semakan fungsi: Panggil API utama dan sahkan kod respons serta kependaman kembali normal.
- Ujian beban: Gunakan
ab -n 10000 -c 500 http://your-gateway/apiuntuk memerhati daya pemprosesan, kependaman, dan kadar ralat. - Semakan pemantauan: Sahkan sambungan aktif menurun, kadar 5xx rendah, dan entri tamat masa hilang daripada log.
Bila Menghantar Tiket OpsGlobal
Pertimbangkan untuk menghantar tiket ke OpsGlobal apabila:
- Kesuntukan tidak dapat dikenal pasti pada lapisan aplikasi dan mungkin memerlukan penalaan kernel atau peningkatan infrastruktur.
- Pengoptimuman Nginx sahaja tidak dapat memenuhi SLA, dan penyelesaian gerbang yang lebih maju (contohnya, Kong, Envoy) diperlukan.
- Kerjasama pelbagai pasukan diperlukan untuk dasar trafik global atau audit keselamatan.
- Anda memerlukan pemantauan 24/7 dan respons insiden. Pasukan SRE profesional OpsGlobal boleh membantu.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Performance dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Memberi tumpuan kepada diagnosis dan penyelesaian isu prestasi middleware gerbang API Nginx, 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.