Nginx Varnish Nginx Django?

13

Saya punya aplikasi Django dan saya ingin mengatur Varnish di server di depannya. Di utas serverfault lain seseorang menyarankan untuk meletakkan Nginx di depan Varnish.

Haruskah saya meletakkan Nginx di depan Varnish di server caching? Jika demikian, haruskah saya menggunakan Nginx di server aplikasi?

Enrico
sumber

Jawaban:

10

Kita berbicara 1-3 server frontend secara total, bukan server server besar dengan load balancing antara tingkatan?

Menempatkan nginx di depan Vanish memungkinkan Anda melakukan kompresi HTTP dengan cepat. Itu adalah praktik kinerja terbaik, tetapi bisa dihilangkan. (Konten dalam Varnish sering tidak dikompresi, sehingga ESI Termasuk berfungsi, dan karenanya Anda tidak harus berurusan dengan beberapa versi cache dari objek yang sama tergantung pada header / pencocokan browser yang Bervariasi.)

Mengenai nginx di server aplikasi - adalah Apache dengan mod_wsgi bukan cara yang disarankan dan paling umum untuk menggunakan instalasi Django baru saat ini? Saya tidak mengetahui alasan kuat untuk menggunakan nginx / fastcgi di atas Apache / mod_wsgi untuk Django; tetapi Anda harus mendapatkan saran dari seorang ahli Django.

Mengenai Varnish memiliki fitur load balancing yang menarik yang tidak dimiliki nginx, saya tidak melihat apa itu? Varnish memiliki balancing acak dan round-robin. nginx memiliki round-robin, IP klien dan hashing yang konsisten - Saya tidak melihat manfaat signifikan untuk Varnish? Apakah itu konfigurasi ulang anggun VCL atau Varnish 'atau sesuatu yang lain?

Untuk pengaturan server 1-3 kecil saya kira saya hanya akan melakukannya

Varnish -> Apache / mod_wsgi / Django

atau mungkin

Squid -> Apache / mod_wsgi / Django

dan abaikan kompresi HTTP untuk kesederhanaan, kecuali bandwidth mahal.

Memperbarui:

Graham Dumpleton telah menulis komentar berharga di bawah ini. Dia menyebutkan pengaturan yang sangat umum misalnya blog di VPS, atau web farm kecil tanpa caching:

nginx -> Apache / mod_wsgi / Django

Ini adalah solusi yang sangat bagus, karena beberapa alasan:

  1. Pengaturan sederhana
  2. nginx, yang memiliki kecepatan tinggi dan overhead minimal, menangani penyajian file statis dan koneksi browser tetap terjaga.
  3. Django berjalan di mod_wsgi Graham Dumpleton yang sangat baik, platform yang direkomendasikan untuk Django.

Alasan saya tidak menyebutkan ini pada awalnya adalah bahwa OP tampaknya memerlukan Varnish, solusi caching kinerja sangat tinggi. Combo nginx / Apache / mod_wsgi tidak dapat melakukan caching dengan tingkat kinerja dan fleksibilitas yang cocok dengan Varnish.

Jesper M
sumber
2
Anda bahkan dapat menggunakan 'nginx -> Apache / mod_wsgi / Django' seperti yang dilakukan banyak orang karena berbagai alasan.
Graham Dumpleton
4
Hal lain yang disediakan nginx dalam hal penggunaan yang banyak orang tidak sadari adalah bahwa nginx mengisolasi Apache dari klien yang lambat. Ini karena konten permintaan hingga ukuran tertentu tidak dialirkan oleh nginx. Alih-alih itu akan buffer header permintaan dan konten dan hanya permintaan proxy ketika memiliki semuanya. Ini berarti hanya menyerahkannya ke Apache ketika semua informasi yang diperlukan untuk menangani permintaan tersedia. Jadi Apache / mod_wsgi akan sibuk untuk waktu sesingkat mungkin dan proses / utas tidak diikat oleh klien lambat. Ukuran buffering terjadi secara terbalik juga sehingga Apache dapat menyelesaikan lebih cepat juga.
Graham Dumpleton
2
@Graham Dumpleton: Hal ini sangat baik untuk memiliki Anda di sini, saya harap Anda akan tinggal di sekitar. :-). Mengenai nginx HTTP multiplexing / penanganan koneksi pintar, saya sepenuhnya setuju.
Jesper M
Pertama dan terutama, terima kasih Jesper dan Graham untuk meluangkan waktu untuk menulis tanggapan yang komprehensif. Saya berencana meletakkan server load balancing di depan dua server aplikasi. Satu server akan menangani sebagian besar lalu lintas dengan yang kedua sebagian besar digunakan untuk kegagalan dan pengujian beta fitur baru.
Enrico
Varnish menarik karena memberi saya kontrol penuh atas permintaan yang dikirim ke backend yang mana. Pernis juga memeriksa server backend kesehatan, failover mudah untuk setup dan menangani backend lambat / mati anggun (jika kedua server mati).
Enrico
4

Anda dapat menggunakan nginx tanpa pernis untuk memproksi dan menyimpan konten.

diam
sumber
2
Varnish memiliki beberapa fitur penyeimbangan beban yang menarik yang nginx tidak keluar dari kotak
Enrico
4
fitur apa misalnya?
silent
4

Saya telah menggunakan Nginx, Varnish, dan Apache / mod_wsgi / Django dengan sukses. Saya mulai dengan konfigurasi berikut:

Nginx -> Apache / mod_wsgi / Django

Setelah saya mulai melihat beban signifikan di Apache, saya menambahkan Varnish:

Nginx -> Varnish -> Apache / mod_wsgi / Django

Saya menggunakan Nginx sebagai semacam "router URL". Permintaan admin Django dikirim langsung dari Nginx ke Apache. Permintaan klien dikirim dari Nginx ke Varnish yang cache permintaan dari Apache dan juga melayani item "dihidupkan" dari cache jika server aplikasi tidak tersedia.

Server Nginx saya juga menyajikan konten statis tertentu secara langsung (mis. Gambar, CSS, dan file javascript).

Secara umum, kinerja sangat baik. Saya perhatikan beberapa peringatan yang harus saya sebutkan:

  1. Di situs yang sibuk, memulai ulang Varnish dapat menyebabkan lonjakan pada server aplikasi, jadi yang terbaik adalah menjaga Varnish memulai kembali seminimal mungkin. (Varnish tampaknya tidak memiliki "reload" seperti Nginx / Apache di mana ia hanya membaca ulang file VCL-nya). Sebaliknya, memuat ulang konfigurasi Nginx memiliki dampak minimal. Untuk alasan ini, saya melakukan sebagian besar penulisan ulang URL dan "routing" di Nginx.
  2. Varnish mudah dijatuhkan di antara Nginx dan Apache. Jika Anda mulai memperhatikan beban tinggi pada server aplikasi Anda, menambahkan pernis bahkan dengan konfigurasi default benar-benar dapat membuat perbedaan.
  3. Jika Anda menggunakan Varnish, Anda pasti perlu memikirkan bagaimana Anda akan menangani pembatalan cache.
  4. Pengalaman saya adalah bahwa gagang Varnish gagal backend sedikit lebih anggun daripada Nginx (seperti yang Anda tunjukkan sebelumnya).
David Narayan
sumber
Saya belum pernah melihat pernis di balik sesuatu yang lain. Varnish biasanya penyeimbang beban yang melakukan router url. Jadi Anda punya 2 server web dan 1 proxy atau 2 proxy dan 1 server web? Q
ioanb7
2

Saya menggunakan Nginx-> Varnish-> uWSGI-> Django

Mekanisme
sumber