Apa perbedaan antara fastcgi dan fpm?

117

Saya mencoba menginstal php dengan fpm di macports. Saya membaca bahwa fpm berarti manajer proses FastCGI. Apakah itu berarti fastcgi dan fpm sama? Jika sama, lalu mengapa kita memiliki dua varian macports yang berbeda untuk php yaitu "php5 + fastcgi" dan "php5 + fpm"

Deepan Chakravarthy
sumber

Jawaban:

94

FPM adalah manajer proses untuk mengelola FastCGI SAPI (Server API) di PHP.

Pada dasarnya, ini menggantikan kebutuhan akan sesuatu seperti SpawnFCGI . Ini memunculkan anak-anak FastCGI secara adaptif (artinya meluncurkan lebih banyak jika beban saat ini membutuhkannya).

Jika tidak, tidak banyak perbedaan operasi antara itu dan FastCGI (Pipa permintaan dari awal permintaan hingga akhir adalah sama). Itu hanya ada untuk mempermudah penerapannya.

ircmaxell
sumber
8
Keuntungan utama dari php-fpm adalah bahwa satu cache APC dapat dibagikan ke beberapa proses. Dengan fcgid, cache APC adalah per proses. Menggunakan fpm dapat menghasilkan penghematan memori yang besar, yang memungkinkan Anda menggunakan memori yang disimpan tersebut untuk menghasilkan lebih banyak proses, dan melayani lebih banyak lalu lintas.
cam8001
25
@ cam8001: itu sama sekali tidak benar. Anda dapat mengatur SpawnFCGIberapa banyak proses yang akan muncul, dan jumlah turunan PHP per proses. Jadi pemijahan 1 proses PHP, dengan 100 anak sama saja dengan menggunakan FPM dengan 100 anak ... Namun, yang terjadi sebaliknya. Jika FPM terbunuh (segfault, terserah), seluruh pekerja Anda mati. Di SpawnFCGI, jika salah satu proses mati, sisanya bisa tetap hidup ... Jadi tidak jelas satu-lebih-lebih-lebih-dari-yang-lain. Pendekatan berbeda. FPM direkomendasikan bukan karena alasan teknis, tetapi karena dipertahankan di sepanjang sisi inti (sebenarnya di dalamnya) ...
ircmaxell
57

Apa yang dikatakan Anthony benar-benar benar, tetapi saya ingin menambahkan bahwa pengalaman Anda kemungkinan besar akan menunjukkan kinerja dan efisiensi yang jauh lebih baik (karena bukan karena fpm-vs- fcgitetapi lebih karena implementasi Anda httpd).

Misalnya, saya memiliki mesin quad-core yang berjalan lighttpd+ fcgibersenandung dengan baik. Saya meningkatkan ke mesin 16-inti untuk mengatasi pertumbuhan, dan dua hal meledak: penggunaan RAM, dan segfault. Saya mendapati diri saya memulai ulang lighttpdsetiap 30 menit untuk menjaga situs web tetap aktif.

Saya beralih ke php-fpm dan nginx, dan penggunaan RAM turun dari> 20GB menjadi 2GB. Segfault juga menghilang. Setelah melakukan beberapa penelitian, saya mengetahui bahwa lighttpd dan fcgi tidak cocok dengan mesin multi-core yang sedang dimuat, dan juga memiliki masalah kebocoran memori dalam beberapa kasus.

Apakah ini karena php-fpmmenjadi lebih baik dari fcgi? Tidak sepenuhnya, tetapi cara Anda menyambungkan php-fpmtampaknya jauh lebih efisien daripada cara Anda melayani melalui fcgi.

kunci spasi
sumber
8
Apakah masalah seperti itu sampai sekitar (April 2017)?
Tuan Loh.
1
Pembaruan apa pun tentang versi lighttpd dan fpm yang Anda gunakan direkomendasikan, pembaruan apa pun dari masalah yang disebutkan masih muncul (Juni 2018) juga membantu komunitas.
Ima
1

Menjalankan PHP sebagai CGI berarti Anda pada dasarnya memberi tahu server web Anda lokasi file yang dapat dieksekusi PHP, dan server menjalankan file yang dapat dieksekusi itu

sedangkan

PHP FastCGI Process Manager (PHP-FPM) adalah daemon FastCGI alternatif untuk PHP yang memungkinkan situs web menangani beban berat. PHP-FPM memelihara kumpulan (pekerja yang dapat menanggapi permintaan PHP) untuk mencapai ini. PHP-FPM lebih cepat daripada metode tradisional berbasis CGI, seperti SUPHP, untuk lingkungan PHP multi-pengguna

Namun, ada pro dan kontra untuk keduanya dan seseorang harus memilih sesuai kasus penggunaan spesifiknya.

Saya menemukan info di tautan ini untuk fastcgi vs fpm cukup membantu dalam memilih penangan mana yang akan digunakan dalam skenario saya.

pulkit8
sumber