Fastcgi ve fpm arasındaki fark nedir?


117

Macports üzerinde fpm ile php kurmaya çalışıyorum. Bir yerde fpm'nin FastCGI işlem yöneticisi anlamına geldiğini okudum. Bu fastcgi ve fpm'nin aynı olduğu anlamına mı geliyor? Eğer aynıysa, o zaman neden php için "php5 + fastcgi" ve "php5 + fpm" olmak üzere iki farklı macports varyantımız var?

Yanıtlar:


94

FPM , PHP'deki FastCGI SAPI'yi (Sunucu API) yönetmek için bir işlem yöneticisidir.

Temel olarak, SpawnFCGI gibi bir şeye olan ihtiyacın yerini alıyor . FastCGI çocuklarını uyarlamalı olarak oluşturur (mevcut yük gerektiriyorsa daha fazla başlatma anlamına gelir).

Aksi takdirde, onunla FastCGI arasında çok fazla işletim farkı yoktur (İsteğin başından sonuna kadar olan istek ardışık düzeni aynıdır). Sadece uygulamayı kolaylaştırmak için orada.


8
Php-fpm'nin önemli bir avantajı, bir APC önbelleğinin birden çok işlem arasında paylaşılabilmesidir. Fcgid ile APC önbelleği işlem başınadır. Fpm kullanmak, daha fazla işlem oluşturmak ve daha fazla trafik sunmak için bu kaydedilen belleği kullanmanıza olanak tanıyan büyük bellek tasarruflarıyla sonuçlanabilir.
cam8001

25
@ cam8001: Bu tamamen doğru değil. SpawnFCGIKaç işlemin ortaya çıkacağını ve işlem başına PHP çocuklarının sayısını ayarlayabilirsiniz . Yani 100 çocuklu 1 PHP süreci oluşturmak, 100 çocuklu FPM kullanmakla aynı şeydir ... Ancak bunun tersi doğrudur. FPM öldürülürse (segfault, her neyse), tüm çalışanınız ölür. SpawnFCGI'da, süreçlerden biri ölürse, geri kalanı hayatta kalabilir ... Yani bu, birinin diğerinden daha iyi olduğu net değil. Farklı yaklaşımlar. FPM teknik nedenlerden dolayı önerilmez, ancak (aslında içinde) yan çekirdek boyunca muhafaza çünkü ... edilir
ircmaxell

57

Anthony'nin söylediği kesinlikle doğru, ancak deneyiminizin muhtemelen çok daha iyi performans ve verimlilik göstereceğini eklemek isterim ( fpm-vs- fcgideğil, daha çok uygulamanızın uygulanması nedeniyle httpd).

Örneğin, dört çekirdekli bir makinem vardı lighttpd+ fcgigüzelce uğultu. Büyüme ile başa çıkmak için 16 çekirdekli bir makineye yükselttim ve iki şey patladı: RAM kullanımı ve segmentler. lighttpdWeb sitesini ayakta tutmak için kendimi her 30 dakikada bir yeniden başlatırken buldum .

Php-fpm ve nginx'e geçtim ve RAM kullanımı> 20GB'den 2GB'ye düştü. Segfault'lar da ortadan kayboldu. Biraz araştırma yaptıktan sonra, lighttpd ve fcgi'nin yük altındaki çok çekirdekli makinelerde iyi anlaşamadığını ve ayrıca bazı durumlarda bellek sızıntısı sorunları olduğunu öğrendim.

Bu php-fpm, daha iyi olduğu için fcgimi? Tamamen değil ama nasıl içine kanca php-fpmsen aracılığıyla nasıl hizmet daha bütün bir heckuva çok daha verimli görünmektedir fcgi.


8
Bu tür sorunlar (Nisan 2017) civarında mı?
Lord Loh.

1
Kullandığınız lighttpd ve fpm sürümleriyle ilgili herhangi bir güncelleme önerilir, bahsedilen sorunların hala görünmeye devam eden tüm güncellemeleri (Haziran 2018) de topluluğa yardımcı olur.
Ima

1

PHP'yi bir CGI olarak çalıştırmak, temel olarak web sunucunuza PHP çalıştırılabilir dosyasının konumunu söylediğiniz ve sunucu bu yürütülebilir dosyayı çalıştırdığı anlamına gelir.

buna karşılık

PHP FastCGI Process Manager (PHP-FPM), bir web sitesinin yorucu yükleri kaldırmasına izin veren PHP için alternatif bir FastCGI arka plan programıdır. PHP-FPM bunu gerçekleştirmek için havuzları (PHP isteklerine yanıt verebilen çalışanlar) korur. PHP-FPM, çok kullanıcılı PHP ortamları için SUPHP gibi geleneksel CGI tabanlı yöntemlerden daha hızlıdır

Bununla birlikte, her ikisinin de artıları ve eksileri vardır ve biri kendi özel kullanım durumuna göre seçilmelidir.

Fastcgi vs fpm için bu bağlantıdaki bilgileri, senaryomda hangi işleyicinin kullanılacağını seçerken oldukça yararlı buldum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.