Site logo
Authors
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
Published on
Published on

PHP FPM là gì. Tìm hiểu cách PHP FPM hoạt động

PHP-FPM là gì ?

https://www.php.net/manual/install.fpm.php

FPM (FastCGI Process Manager) is a FastCGI implementation for PHP that provides additional features that are useful primarily for sites under high load.

PHP-FPM (viết tắt của FastCGI Process Manager) là một chương trình có tính năng phiên dịch PHP khi chạy Website cho Server. Là một chương trình quản lý tiến trình được thiết kế đặc biệt để quản lý nhiều tiến trình PHP giúp tăng tốc hiệu suất của các ứng dụng web chạy trên nền tảng PHP. PHP FPM đóng vai trò như một cầu nối giữa máy chủ web của bạn (ví dụ như Nginx) và các script PHP. Khi một yêu cầu đến cho một file PHP, Nginx sẽ chuyển nó cho PHP-FPM, và PHP-FPM sẽ khởi tạo một tiến trình PHP để xử lý yêu cầu đó.

Đầu tiên cần biết CGI là gì?

https://en.wikipedia.org/wiki/Common_Gateway_Interface

In computing, Common Gateway Interface (CGI) is an interface specification that enables web servers to execute an external program to process HTTP or HTTPS user requests. The main function of a web server program is to send back pre-prepared information in response to requests from users (clients). As a result, the server program alone could not create a mechanism for dynamically generating information on the fly and sending it to the client. As a result, a method was devised for the server program to call other programs and send the processing results to the client. CGI is the agreement on how server programs and external programs can work together to achieve this.

Dựa vào nội dung trên có thể hiểu CGI(viết tắt của Common Gateway Interface) là 1 cơ chế cho phép PHP (ngôn ngữ tạo nội dung động) chạy trên máy chủ web. Chức năng chính của chương trình máy chủ web là gửi lại thông tin đã chuẩn bị trước để đáp ứng các yêu cầu từ người dùng (máy khách). Do đó, chỉ riêng chương trình máy chủ không thể tạo ra cơ chế để tạo thông tin động khi đang chạy và gửi thông tin đó đến máy khách. Do đó, một phương pháp đã được đưa ra để chương trình máy chủ gọi các chương trình khác và gửi kết quả xử lý đến máy khách. CGI là thỏa thuận về cách các chương trình máy chủ và các chương trình bên ngoài có thể làm việc cùng nhau để đạt được điều này.

Vậy FastCGI là gì?

https://en.wikipedia.org/wiki/FastCGI

FastCGI is a binary protocol for interfacing interactive programs with a web server. It is a variation on the earlier Common Gateway Interface (CGI).

FastCGI là một giao thức phát triển mở rộng từ CGI. Mục đích chính của FastCGI là để web server tối ưu trong việc xử lý. Đồng thời giúp máy chủ có thể xử lý nhiều yêu cầu từ trang web trong cùng một lúc. FastCGI sẽ chạy ít tốn tài nguyên CPU hơn và đạt tốc độ gần bằng DSO. FastCGI sử dụng được opcode cacher như eAccelerator để load web nhanh hơn.

  • CGI tạo và hủy các tiến trình mỗi khi người dùng đưa ra yêu cầu. Nếu có nhiều yêu cầu, các tiến trình sẽ được tạo và hủy tương ứng, dẫn đến hiệu suất kém.
  • FastCGI giữ tiến trình được bắt đầu tại yêu cầu đầu tiên trong bộ nhớ và chạy tiến trình được lưu trong bộ nhớ cho yêu cầu tiếp theo. Nó giải quyết các vấn đề của CGI, cải thiện tốc độ hoạt động của chương trình và giảm tải cho máy chủ.

Tại sao PHP-FPM lại cần thiết khi sử dụng Nginx và PHP?

Mặc dù Nginx là một máy chủ web rất mạnh mẽ, nhưng nó không được thiết kế để trực tiếp thực thi các script PHP. Nginx giỏi trong việc phục vụ nội dung tĩnh và định tuyến các yêu cầu. Để xử lý nội dung động của PHP một cách hiệu quả, chúng ta cần một trình quản lý tiến trình riêng biệt như PHP-FPM.

Dưới đây là lý do tại sao PHP-FPM lại quan trọng:

  • Quản lý tiến trình: PHP-FPM quản lý hiệu quả nhiều tiến trình PHP, cho phép sử dụng tài nguyên tốt hơn và khả năng mở rộng cao. Nó có thể tự động điều chỉnh số lượng tiến trình worker dựa trên tải công việc, đảm bảo hiệu suất tối ưu.
  • Bảo mật: PHP-FPM hoạt động trong một không gian tiến trình riêng biệt, cách ly các tiến trình PHP khỏi máy chủ web. Điều này tăng cường bảo mật bằng cách ngăn chặn các lỗ hổng tiềm ẩn trong một tiến trình ảnh hưởng đến các tiến trình khác.
  • Hiệu suất: PHP-FPM quản lý nhóm các tiến trình PHP, cho phép xử lý lượng truy cập cao với hiệu suất tốt hơn so với các trình xử lý PHP khác. Nó tạo sẵn các tiến trình làm việc PHP để xử lý nhiều yêu cầu PHP song song, cải thiện thời gian phản hồi và giảm tải máy chủ. PHP-FPM có thể được cấu hình để tối ưu hóa các cài đặt hiệu suất, chẳng hạn như số lượng tiến trình worker, giới hạn bộ nhớ và thời gian chờ.
  • Linh hoạt: PHP-FPM cung cấp độ linh hoạt và khả năng tùy chỉnh cao thông qua file cấu hình của nó. Bạn có thể tinh chỉnh các cài đặt để phù hợp với nhu cầu cụ thể của ứng dụng, chẳng hạn như điều chỉnh giới hạn số lượng tiến trình làm việc, giới hạn bộ nhớ, ghi log lỗi và thời gian chờ xử lý các yêu cầu PHP. Tính linh hoạt này giúp ngăn ngừa tình trạng cạn kiệt tài nguyên trên các trang có lưu lượng cao.
  • Sử dụng tài nguyên hiệu quả: Khác với CGI truyền thống (Common Gateway Interface), khi mà mỗi yêu cầu tạo ra một tiến trình PHP mới, PHP-FPM cho phép tái sử dụng các tiến trình hiện có, giúp giảm chi phí và tiết kiệm tài nguyên.
  • Cải thiện xử lý lỗi và ghi log: PHP-FPM cung cấp khả năng ghi log lỗi mạnh mẽ và theo dõi các yêu cầu chậm, giúp nhận diện và xử lý các điểm nghẽn hiệu suất.

Cách PHP-FPM hoạt động với Nginx

Khi Nginx nhận một yêu cầu cho một tệp PHP, nó sẽ chuyển yêu cầu đó đến PHP-FPM qua giao thức FastCGI. PHP-FPM xử lý mã PHP và gửi kết quả trở lại cho Nginx, và Nginx sẽ trả kết quả này cho người dùng.

Cách thuật ngữ cần biết

  • Tiến trình worker (worker process): Là một tiến trình PHP được PHP-FPM khởi tạo để xử lý các yêu cầu.
  • Cấu hình PHP-FPM: File cấu hình nơi bạn có thể tùy chỉnh các cài đặt của PHP-FPM.
  • FastCGI: Một giao thức truyền thông giữa máy chủ web và các ứng dụng web động.

Tài liệu tham khảo