fastcgi และ fpm ต่างกันอย่างไร


117

ฉันพยายามติดตั้ง php ด้วย fpm บน macports ฉันอ่านที่ไหนสักแห่งว่า fpm หมายถึงตัวจัดการกระบวนการ FastCGI หมายความว่า fastcgi และ fpm เหมือนกันหรือไม่? ถ้ามันเหมือนกันทำไมเราถึงมี macports สองรูปแบบที่แตกต่างกันสำหรับ php คือ "php5 + fastcgi"และ "php5 + fpm"

คำตอบ:


94

FPMเป็นตัวจัดการกระบวนการเพื่อจัดการ FastCGI SAPI (Server API) ใน PHP

โดยทั่วไปจะแทนที่ความจำเป็นสำหรับสิ่งที่ต้องการSpawnFCGI มันวางไข่เด็ก FastCGI แบบปรับตัวได้ (หมายถึงเปิดตัวมากขึ้นหากต้องการโหลดปัจจุบัน)

มิฉะนั้นจะไม่มีความแตกต่างในการดำเนินงานมากนักระหว่างมันกับ FastCGI (ไปป์ไลน์คำขอตั้งแต่ต้นคำขอจนถึงสิ้นสุดจะเหมือนกัน) เพียงแค่ช่วยให้การใช้งานง่ายขึ้น


8
ข้อได้เปรียบที่สำคัญของ php-fpm คือแคช APC หนึ่งตัวสามารถใช้ร่วมกันในหลายกระบวนการได้ ด้วย fcgid แคช APC เป็นแบบต่อกระบวนการ การใช้ fpm อาจส่งผลให้ประหยัดหน่วยความจำได้มากซึ่งช่วยให้คุณใช้หน่วยความจำที่บันทึกไว้เพื่อสร้างกระบวนการต่างๆได้มากขึ้นและรองรับการรับส่งข้อมูลได้มากขึ้น
cam8001

25
@ cam8001: นั่นไม่เป็นความจริงเลย คุณสามารถกำหนดSpawnFCGIจำนวนกระบวนการที่จะเกิดและจำนวนลูก PHP ต่อกระบวนการ ดังนั้นการวางไข่ 1 กระบวนการ PHP กับ 100 ลูกก็เหมือนกับการใช้ FPM กับ 100 ลูก ... อย่างไรก็ตามสิ่งที่ตรงกันข้ามก็เป็นจริง ถ้า FPM ถูกฆ่า (segfault, อะไรก็ตาม) คนงานของคุณทั้งหมดจะตาย ใน SpawnFCGI หากกระบวนการใดกระบวนการหนึ่งตายส่วนที่เหลือจะยังมีชีวิตอยู่ได้ ... ดังนั้นจึงไม่ใช่เรื่องที่ชัดเจนว่าดีกว่าอีกกระบวนการหนึ่ง แนวทางต่างๆ ไม่แนะนำให้ใช้ FPM ด้วยเหตุผลทางเทคนิค แต่เนื่องจากมีการบำรุงรักษาพร้อมแกนด้านข้าง (ในความเป็นจริง) ...
ircmaxell

57

สิ่งที่แอนโธนี่พูดนั้นถูกต้อง แต่ฉันต้องการเพิ่มว่าประสบการณ์ของคุณน่าจะแสดงให้เห็นถึงประสิทธิภาพและประสิทธิภาพที่ดีขึ้นมาก (เนื่องจากไม่ใช่fpm-vs- fcgiแต่เป็นมากกว่าการนำไปใช้ของคุณhttpd)

ตัวอย่างเช่นฉันมีเครื่องควอดคอร์ที่ทำงานlighttpd+ fcgiฮัมเพลงไปด้วยอย่างดี ฉันอัปเกรดเป็นเครื่อง 16 คอร์เพื่อรับมือกับการเติบโตและสองสิ่งที่ระเบิด: การใช้ RAM และการแยกส่วน ฉันพบว่าตัวเองเริ่มต้นใหม่lighttpdทุก ๆ 30 นาทีเพื่อให้เว็บไซต์ใช้งานได้

ฉันเปลี่ยนไปใช้ php-fpm และ nginx และการใช้ RAM ลดลงจาก> 20GB เป็น 2GB Segfaults ก็หายไปเช่นกัน หลังจากทำการวิจัยบางอย่างฉันได้เรียนรู้ว่า lighttpd และ fcgi ไม่เข้ากันได้ดีกับเครื่องมัลติคอร์ที่มีภาระงานและยังมีปัญหาหน่วยความจำรั่วในบางกรณี

นี่คือสาเหตุที่php-fpmดีกว่าfcgi? ไม่ได้ทั้งหมด แต่วิธีการที่คุณเบ็ดลงไปphp-fpmน่าจะเป็น heckuva fcgiมากทั้งที่มีประสิทธิภาพมากกว่าวิธีการที่คุณทำหน้าที่ผ่าน


8
ปัญหาดังกล่าวจนถึงประมาณ (เมษายน 2017) หรือไม่?
ท่านลอร์ด.

1
ขอแนะนำให้อัปเดตเกี่ยวกับเวอร์ชัน lighttpd และ fpm ที่คุณใช้การอัปเดตใด ๆ ของปัญหาที่กล่าวถึงที่ยังคงปรากฏอยู่ (มิถุนายน 2018) ก็เป็นประโยชน์ต่อชุมชนเช่นกัน
Ima

1

การเรียกใช้ PHP เป็น CGI หมายความว่าโดยพื้นฐานแล้วคุณจะบอกตำแหน่งของไฟล์ปฏิบัติการ PHP ของคุณและเซิร์ฟเวอร์จะเรียกใช้ไฟล์ปฏิบัติการ

แต่ทว่า

PHP FastCGI Process Manager (PHP-FPM) เป็น FastCGI daemon ทางเลือกสำหรับ PHP ที่ช่วยให้เว็บไซต์สามารถจัดการกับโหลดที่ต้องใช้แรงมากได้ PHP-FPM รักษาพูล (ผู้ปฏิบัติงานที่สามารถตอบสนองต่อคำขอของ PHP) เพื่อทำสิ่งนี้ให้สำเร็จ PHP-FPM เร็วกว่าวิธีการที่ใช้ CGI แบบเดิมเช่น SUPHP สำหรับสภาพแวดล้อม PHP แบบผู้ใช้หลายคน

อย่างไรก็ตามมีข้อดีข้อเสียสำหรับทั้งสองอย่างและควรเลือกตามกรณีการใช้งานที่เฉพาะเจาะจง

ฉันพบข้อมูลในลิงค์นี้สำหรับfastcgi vs fpm ซึ่งมีประโยชน์มากในการเลือกตัวจัดการที่จะใช้ในสถานการณ์ของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.