Apa sebenarnya model server web pra-garpu?

102

Saya ingin tahu apa sebenarnya artinya ketika server web menggambarkan dirinya sebagai server web pra-garpu. Saya punya beberapa contoh seperti unicorn untuk ruby ​​dan gunicorn untuk python.

Lebih khusus lagi, ini adalah pertanyaannya:

  • Masalah apa yang dipecahkan model ini?
  • Apa yang terjadi saat server web pra-garpu dimulai?
  • Bagaimana cara menangani permintaan?

Juga, pertanyaan yang lebih spesifik untuk unicorn / gunicorn:

Katakanlah saya memiliki aplikasi web yang ingin saya jalankan dengan (g) unicorn. Saat inisialisasi, aplikasi web akan melakukan beberapa hal inisialisasi (misalnya mengisi entri database tambahan). Jika saya mengkonfigurasi (g) unicorn dengan banyak pekerja, apakah barang inisialisasi akan dijalankan beberapa kali?

Hery
sumber

Jawaban:

107

Pre-forking pada dasarnya berarti master membuat garpu yang menangani setiap permintaan. Sebuah garpu adalah proses * nix yang benar-benar terpisah.

Perbarui sesuai komentar di bawah. The predi pre-forkberarti bahwa proses ini bercabang sebelum permintaan datang. Mereka dapat namun biasanya dapat meningkat atau menurun sebagai beban naik dan turun.

Pre-forking dapat digunakan ketika Anda memiliki pustaka yang TIDAK aman untuk thread. Ini juga berarti masalah dalam permintaan yang menyebabkan masalah hanya akan memengaruhi proses yang diproses oleh dan bukan seluruh server.

Inisialisasi yang berjalan beberapa kali semuanya tergantung pada apa yang Anda terapkan. Namun biasanya kolam koneksi dan hal-hal semacam itu akan ada untuk setiap proses.

Dalam model threading, master akan membuat utas berbobot lebih ringan untuk mengirimkan permintaan juga. Tetapi jika sebuah utas menyebabkan masalah besar, itu bisa berakibat pada proses master.

Dengan alat seperti Nginx, Apache 2.4's Event MPM, atau gevent (yang dapat digunakan dengan Gunicorn), ini adalah asinkron yang berarti suatu proses dapat menangani ratusan permintaan sementara tidak memblokir.

Joe Doherty
sumber
31
Saya memiliki keraguan yang sama tentang arti "prefork". Saya kira itu berarti forking, tentu saja, tetapi bagian "pra" membingungkan saya. Saya menemukan di sini singkatan.com/prefork bahwa bagian "pra" sebenarnya berarti bahwa proses pekerja dibuat terlebih dahulu, sehingga waktu tidak terbuang percuma hanya ketika seorang pekerja dibutuhkan. Sangat masuk akal bagi saya :)
El Ninja Trepador
1
//, @ElNinjaTrepador, mengapa tidak menambahkan jawaban terpisah? Itu jauh lebih masuk akal bagi saya, setidaknya, dan mungkin lebih membantu orang lain jika komentar itu mendapat tempat yang lebih menonjol.
Nathan Basanese
2
Saya telah memperbarui jawaban untuk menambahkan sedikit lebih banyak informasi tentang pre-fork. @ElNinjaTrepador terima kasih telah menunjukkan hal ini, saya tidak menyadari bahwa itu tidak terlalu terkenal.
Joe Doherty
1
@NathanBasanese akan melakukannya Pak;)
El Ninja Trepador
4
@JoeDoherty mungkin sudah terkenal, hanya saja saya tidak tahu sampai saat itu: DI akan menambahkan jawaban lain (sesuai permintaan Nathan), tetapi karena Anda telah menambahkan apa yang saya katakan kepada Anda, itu tidak perlu lagi: )
El Ninja Trepador