Mari kita ambil pendekatan pragmatis.
Semua batasan ini adalah hal-hal yang di-hardcode dan dirancang pada abad yang lalu ketika perangkat keras lambat dan mahal. Kami berada di 2016 sekarang, pemanggang roti wall-mart rata-rata dapat memproses lebih banyak permintaan daripada nilai default.
Pengaturan default sebenarnya berbahaya. Memiliki ratusan pengguna di situs web bukanlah hal yang mengesankan.
proses pekerja_
Pengaturan terkait, mari kita jelaskan sementara kita berada di topik.
nginx sebagai penyeimbang beban:
- 1 pekerja untuk menyeimbangkan beban HTTP.
- 1 pekerja per inti untuk penyeimbangan beban HTTPS.
nginx sebagai webservers:
Yang ini rumit.
Beberapa aplikasi / framework / middleware (mis. Php-fpm) dijalankan di luar nginx. Dalam hal itu, 1 pekerja nginx sudah cukup karena biasanya aplikasi eksternal yang melakukan pemrosesan berat dan memakan sumber daya.
Juga, beberapa aplikasi / kerangka kerja / middleware hanya dapat memproses satu permintaan pada satu waktu dan itu bumerang untuk membebani mereka.
Secara umum, 1 pekerja selalu merupakan taruhan yang aman.
Jika tidak, Anda dapat menempatkan satu pekerja per inti jika Anda tahu apa yang Anda lakukan. Saya akan menganggap rute itu sebagai pengoptimalan dan menyarankan benchmarking dan pengujian yang tepat.
koneksi pekerja
Jumlah total koneksi adalah worker_process * worker_connections
. Setengah dalam mode penyeimbang beban.
Sekarang kita mencapai bagian pemanggang. Ada banyak batasan sistem yang secara serius diremehkan:
- ulimits adalah 1k max file terbuka per proses di linux (1k soft, 4k hard pada beberapa distro)
- Batas systemd hampir sama dengan batas ulimit.
- nginx default adalah 512 koneksi per pekerja.
- Mungkin ada lebih banyak: SELinux, sysctl, supervisord (setiap versi + distro sedikit berbeda)
Koneksi pekerja 1k
Default amannya adalah meletakkan 1k di mana-mana.
Ini cukup tinggi untuk menjadi lebih dari sebagian besar situs internal dan tidak dikenal yang pernah akan ditemui. Cukup rendah untuk tidak mencapai batas sistem lainnya.
Koneksi pekerja 10k
Sangat umum memiliki ribuan klien, terutama untuk situs web publik. Saya berhenti menghitung jumlah situs web yang saya lihat turun karena standarnya rendah.
Minimum yang dapat diterima untuk produksi adalah 10rb. Batas sistem terkait harus ditingkatkan untuk memungkinkannya.
Tidak ada yang namanya batas terlalu tinggi (batas tidak akan berpengaruh jika tidak ada pengguna). Namun batas yang terlalu rendah adalah hal yang sangat nyata yang mengakibatkan pengguna ditolak dan situs mati.
Lebih dari 10rb
10rb bagus dan mudah.
Kami dapat menetapkan batas 1000kk yang sewenang-wenang (ini hanya batasnya saja) tetapi itu tidak masuk akal, kami tidak pernah mendapatkan lalu lintas itu dan tetap tidak bisa menerimanya.
Mari tetap berpegang pada 10k sebagai pengaturan yang masuk akal. Layanan yang mencari (dan benar-benar dapat melakukan) lebih banyak akan memerlukan penyetelan khusus dan pembandingan.
Skenario Khusus: Penggunaan Lanjutan
Terkadang, kami tahu bahwa server tidak memiliki banyak sumber daya dan kami berharap lonjakan yang tidak dapat kami lakukan banyak hal. Kami lebih suka menolak pengguna daripada mencoba. Dalam hal ini, masukkan batas koneksi yang masuk akal dan konfigurasikan pesan kesalahan dan penanganan yang baik.
Kadang-kadang, server backend bekerja dengan baik dan baik tetapi hanya sampai beberapa beban , apa pun lebih dan semuanya berjalan cepat ke selatan. Kami lebih suka memperlambat daripada memiliki server crash. Dalam hal ini, konfigurasikan antrian dengan batas yang ketat, biarkan nginx buffer semua panas saat permintaan dikeringkan dengan kecepatan maksimal.