Sự khác biệt giữa fastcgi và fpm là gì?


117

Tôi đang cố gắng cài đặt php với fpm trên macports. Tôi đọc ở đâu đó rằng fpm có nghĩa là trình quản lý quy trình FastCGI. Điều đó có nghĩa là fastcgi và fpm giống nhau? Nếu chúng giống nhau, thì tại sao chúng ta có hai biến thể macports khác nhau cho php là "php5 + fastcgi""php5 + fpm"

Câu trả lời:


94

FPM là một trình quản lý quy trình để quản lý FastCGI SAPI (API máy chủ) trong PHP.

Về cơ bản, nó thay thế nhu cầu về một cái gì đó như SpawnFCGI . Nó sinh ra các con FastCGI một cách thích ứng (có nghĩa là khởi chạy nhiều hơn nếu tải hiện tại yêu cầu nó).

Mặt khác, không có nhiều khác biệt về hoạt động giữa nó và FastCGI (Đường dẫn yêu cầu từ đầu yêu cầu đến khi kết thúc là như nhau). Nó chỉ ở đó để giúp việc triển khai dễ dàng hơn.


8
Một ưu điểm chính của php-fpm là một bộ đệm APC có thể được chia sẻ trên nhiều quy trình. Với fcgid, bộ đệm APC là mỗi quá trình. Sử dụng fpm có thể tiết kiệm bộ nhớ lớn, cho phép bạn sử dụng bộ nhớ đã lưu đó để tạo ra nhiều quy trình hơn và phục vụ nhiều lưu lượng hơn.
cam8001

25
@ cam8001: điều đó hoàn toàn không đúng. Bạn có thể đặt SpawnFCGIbao nhiêu quy trình sẽ sinh ra và số lượng PHP con trên mỗi quy trình. Vì vậy, việc sinh ra 1 quy trình PHP, với 100 con cũng giống như sử dụng FPM với 100 con ... Tuy nhiên, điều ngược lại là sự thật. Nếu FPM bị giết (mặc định, bất cứ điều gì), toàn bộ nhân viên của bạn sẽ chết. Trong SpawnFCGI, nếu một trong các quy trình chết, phần còn lại có thể vẫn sống ... Vì vậy, nó không rõ ràng là một-là-tốt-hơn-khác. Phương pháp tiếp cận khác nhau. FPM được khuyến khích không vì lý do kỹ thuật, nhưng vì nó duy trì cùng cốt lõi bên (trong đó trên thực tế) ...
ircmaxell

56

Những gì Anthony nói là hoàn toàn chính xác, nhưng tôi muốn nói thêm rằng trải nghiệm của bạn có thể sẽ cho thấy hiệu suất và hiệu quả tốt hơn rất nhiều (do không phải fpm-vs- fcgimà là do việc triển khai của bạn httpd).

Ví dụ, tôi đã có một máy lõi tứ đang chạy lighttpd+ chạy fcgiồn ào. Tôi đã nâng cấp lên máy 16 lõi để đối phó với tốc độ tăng trưởng, và hai thứ bùng nổ: sử dụng RAM và mặc định. Tôi thấy mình phải khởi động lại lighttpdsau mỗi 30 phút để duy trì hoạt động của trang web.

Tôi đã chuyển sang php-fpm và nginx, và mức sử dụng RAM giảm từ> 20GB xuống còn 2GB. Mặc định cũng biến mất. Sau khi thực hiện một số nghiên cứu, tôi biết được rằng lighttpd và fcgi không hòa hợp với nhau trên các máy đa lõi đang được tải và cũng có vấn đề rò rỉ bộ nhớ trong một số trường hợp nhất định.

Điều này có phải là do php-fpmtốt hơn fcgi? Không hoàn toàn, nhưng cách bạn tham gia php-fpmcó vẻ hiệu quả hơn rất nhiều so với cách bạn phục vụ thông qua fcgi.


8
Những vấn đề như vậy cho đến khoảng (tháng 4 năm 2017)?
Chúa tể Loh.

1
Mọi cập nhật về phiên bản lighttpd và fpm bạn đã sử dụng đều được khuyến nghị, mọi cập nhật về các vấn đề đã đề cập vẫn xuất hiện (tháng 6 năm 2018) cũng hữu ích cho cộng đồng.
Ima

0

Chạy PHP dưới dạng CGI có nghĩa là về cơ bản bạn cho máy chủ web của mình biết vị trí của tệp thực thi PHP và máy chủ chạy tệp thực thi đó

trong khi

PHP FastCGI Process Manager (PHP-FPM) là một trình nền FastCGI thay thế cho PHP cho phép trang web xử lý các tải nặng nhọc. PHP-FPM duy trì các nhóm (công nhân có thể phản hồi các yêu cầu PHP) để thực hiện điều này. PHP-FPM nhanh hơn các phương pháp dựa trên CGI truyền thống, chẳng hạn như SUPHP, cho môi trường PHP nhiều người dùng

Tuy nhiên, có những ưu và khuyết điểm cho cả hai và người ta nên chọn tùy theo trường hợp sử dụng cụ thể của chúng.

Tôi tìm thấy thông tin trên liên kết này cho fastcgi vs fpm khá hữu ích trong việc chọn trình xử lý để sử dụng trong kịch bản của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.