Melayani file statis dengan nginx lebih dari NFS?

9

Saya memiliki situs web yang mendapatkan sekitar 7rb permintaan per detik pada server nginx. Server ini keduanya menangani penulisan ulang ke server Apache serta melayani file statis, gambar, dll secara langsung. File statis adalah bagian terbesar di sana dengan sekitar 5k permintaan.

Dengan upgrade arsitektur, saya berpikir tentang menggunakan server file pusat yang mengekspor direktori yang berisi file-file statis ini melalui NFS. Tidak akan ada akses tulis ke file-file ini, sehingga direktori dapat dimount read-only pada mesin nginx. Perhatian utama saya adalah:

Apakah NFS cukup cepat untuk ini? Apakah ada batasan berapa banyak permintaan yang dapat ditangani NFS? Apakah ada beberapa opsi "must-have" ketika menuju ke sini?

Bonus: apakah ada alternatif lain untuk pengaturan ini selain NFS?

Terima kasih!

j0nes
sumber
Tidak ada akses baca, atau akses baca "hanya"?
pauska
Terima kasih! Hanya akses baca, tidak ada akses tulis.
j0nes
2
7k permintaan kedua adalah ~ 6.048,00.000 permintaan sehari, jika Anda menjalankannya pada satu server NGINX kami (Dan perusahaan yang menggunakan cluster server untuk setengah beban itu) akan senang mengetahui pengaturan Anda.
Smudge

Jawaban:

2

Dengan menyiapkan server NFS pusat Anda memperkenalkan satu titik kegagalan ke dalam desain Anda. Itu saja harus menjadi pemecah kesepakatan. Jika tidak, NFS bisa menjadi cukup cepat untuk memuat seperti ini. Faktor-faktor penting akan memiliki RAM yang cukup untuk menyimpan file-file cache, interkoneksi latensi rendah (Gig-E atau lebih baik), dan penyetelan (kurang dari sebelumnya).

Anda juga harus sangat mempertimbangkan menggunakan rsync atau alat serupa untuk menjaga salinan lokal dari pembaruan file statis pada setiap server web individu. Pilihan lain mungkin SAN atau solusi server NFS berlebihan (keduanya akan jauh lebih rumit dan mahal daripada ide rsync).

Chris S
sumber
2
NFS tidak harus menjadi SPoF
gWaldo
@ gWaldo Bagaimana tepatnya Anda dapat mengatur "server NFS pusat" dan memilikinya bukan SPoF?
Chris S
Anda melakukannya dengan menyadari bahwa, seperti yang Anda katakan, server NFS pusat adalah SPoF, dan sebagai gantinya memilih untuk mengimplementasikan cluster NFS. Aku sebenarnya tidak setuju denganmu ....
gWaldo
Terima kasih - menerima solusi ini karena saya pikir saya akan pergi ke rute rsync, menghindari satu titik kegagalan (yang seharusnya menjadi perhatian utama saya).
j0nes
Ini cukup sederhana untuk mengimplementasikan server NFS duplikasi ketersediaan ganda menggunakan GlusterFS dan CTDB. Dalam hal kinerja, kluster saya menerima permintaan sekitar 10rb per detik dan itu baik-baik saja. Satu-satunya masalah adalah bahwa server NFS akan membutuhkan banyak RAM.
Alpha01
2

Saya menggunakan cachefilesd (dan kernel linux baru-baru ini, dengan cachef) untuk men-cache file NFS ke HD lokal. Dengan cara ini, setiap pembacaan di nfs akan menyalin file ke direktori / var / cache / fs dan bacaan berikutnya akan dikirim dari sana, dengan kernel memeriksa nfs jika konten masih valid.

Dengan cara ini Anda dapat memiliki NFS pusat, tetapi tanpa kehilangan kinerja file lokal

Cachefilesd akan membereskan pembersihan file-file lama ketika ukuran / inode gratis mencapai tingkat yang dikonfigurasi, sehingga Anda dapat melayani data yang tidak biasa dari NFS dan permintaan umum dari HD

Tentu saja, juga menggunakan pernis untuk menyimpan permintaan yang lebih umum dan menyimpan nginx / NFS dari melayani kemudian.

Berikut adalah cachefilesd howto kecil

higuita
sumber
1

Kecepatannya tergantung pada banyak faktor:

  • Bagaimana server Anda akan terhubung dengan target NFS? Disk SAS dual-port tunggal dapat memanfaatkan kecepatan transfer 6gbit / detik. Ingatlah ini jika Anda berencana untuk menggunakan 1gig Ethernet (yang mana Anda dapat mengurangi 20% biaya overhead TCP).
  • Jenis cache apa yang akan didapat server NFS? Apakah Anda menggunakan pengontrol array tingkat perusahaan dengan banyak cache? Baca cache adalah kunci dalam pengaturan ini
  • Berapa banyak server yang akan mengakses file yang sama secara bersamaan? Mengunci NFS bisa menyakitkan - sangat buruk

Batas file terbuka melalui NFS adalah batasan sistem operasi host. FreeBSD misalnya memiliki banyak opsi penyetelan yang berbeda untuk mendukung sejumlah besar file terbuka, tetapi itu tergantung pada jumlah RAM di server Anda.

Alternatif untuk server file pusat adalah dengan menggunakan sinkronisasi / replikasi antara server web Anda (seperti yang disarankan Chris S). rsync atau DRBD mungkin merupakan pilihan yang bagus dan hemat biaya.

pauska
sumber
1

Saya akan menyarankan terhadap NFS kecuali Anda menaruh Caching di sana. Cache nginx lebih baik daripada tidak sama sekali, tetapi Varnish lebih baik.

Dengan demikian, jika beban Anda berubah menjadi konten yang lebih dinamis daripada statis, maka akan lebih penting untuk menyajikan file aplikasi dari disk lokal.

Jika Anda memasukkan NFS, pastikan Anda memiliki redundansi.

gWaldo
sumber
Ini mungkin memerlukan sedikit perubahan arsitektur. Selain menggunakan lapisan caching seperti Varnish, juga merupakan ide bagus untuk menggunakan pengaturan tarik CDN asal untuk semua file statis yang ada di bagian NFS. Ini akan mengurangi beban yang memukul backend NFS.
Alpha01