Jawaban:
Saya akan fokus pada perilaku klien yang lambat, dan bagaimana konfigurasi Anda menanganinya, tetapi jangan tergoda untuk percaya bahwa itulah satu-satunya manfaat. Metode yang sama yang menguntungkan klien lambat juga memiliki manfaat untuk klien cepat, penanganan SSL, berurusan dengan lonjakan lalu lintas, dan aspek lain dari melayani HTTP di Internet.
Gunicorn adalah perangkat lunak pre-forking. Untuk komunikasi latensi rendah, seperti load balancer ke server aplikasi atau komunikasi antar layanan, sistem pre-fork bisa sangat sukses. Tidak ada biaya dalam memintal proses untuk menangani permintaan, dan satu proses tunggal dapat didedikasikan untuk menangani satu permintaan; penghapusan hal-hal ini dapat menyebabkan keseluruhan sistem lebih cepat, lebih efisien hingga jumlah koneksi simultan melebihi jumlah proses yang tersedia untuk menanganinya.
Dalam situasi Anda, Anda berhadapan dengan klien latensi tinggi melalui internet. Klien yang lambat ini dapat mengikat proses yang sama. Ketika QPS penting, kode aplikasi perlu menerima, menangani, dan menyelesaikan permintaan secepat mungkin sehingga dapat beralih ke permintaan lain. Ketika klien lambat berkomunikasi secara langsung dengan sistem Anda, mereka mengikat proses itu dan memperlambatnya. Alih-alih menangani dan membuang permintaan secepat mungkin, proses itu sekarang juga harus menunggu klien yang lambat. QPS yang efektif turun.
Menangani banyak koneksi dengan cpu yang sangat sedikit dan biaya memori adalah kemampuan server asinkron seperti Nginx. Mereka tidak terpengaruh dengan cara negatif yang sama oleh klien lambat karena mereka mahir menangani sejumlah besar klien secara bersamaan. Dalam kasus Nginx, menjalankan perangkat keras modern dapat menangani puluhan ribu koneksi sekaligus.
Nginx di depan server pre-forking adalah kombinasi yang hebat. Nginx menangani komunikasi dengan klien, dan tidak mengalami penalti untuk menangani klien yang lambat. Ini mengirimkan permintaan ke backend secepat backend dapat menangani permintaan tersebut, memungkinkan backend menjadi seefisien sumber daya server mungkin. Backend mengembalikan hasilnya segera setelah menghitungnya, dan Nginx memberikan respons untuk memberi makannya agar memperlambat klien dengan kecepatan mereka sendiri. Sementara itu, backend dapat beralih ke menangani permintaan lain meskipun klien lambat masih menerima hasilnya.
@ Benlueben benar. Contoh spesifik dan umum tentang apa yang bisa terjadi ketika proxy terbalik tidak digunakan adalah bahwa database backend dapat kehabisan koneksi database menangani di mana tidak ada proxy dan ada lonjakan lalu lintas. Ini disebabkan koneksi yang lambat untuk dirilis seperti yang dijelaskan oleh @blueben.
Naluri pertama untuk melihat gagang basis data kehabisan mungkin untuk mendukung lebih banyak koneksi basis data. Tetapi dengan menambahkan proksi terbalik di depan aplikasi, Anda akan melihat jumlah koneksi basis data yang diperlukan untuk beban tinggi turun secara signifikan dan stabil - tingkat koneksi basis data tidak akan melonjak hampir sebanyak ketika ada lonjakan lalu lintas.
Nginx juga hebat dalam melayani konten statis, caching dan berbagai tugas HTTP lainnya, membiarkan server aplikasi Anda fokus menjadi server aplikasi.