====== Request for Comments: FPM SAPI inclusion ====== * Version: 1.0 * Date: 2010-03-22 * Author: Antony Dovgal * Status: Implemented in PHP 5.3 * First Published at: http://wiki.php.net/rfc/fpm This RFC discusses FPM SAPI and its inclusion to the core PHP distribution. ===== Introduction ===== FPM (FastCGI Process Manager) is an alternative PHP FastCGI implementation with some additional features (mostly) useful for heavy-loaded sites. These features include: * advanced process management with graceful stop/start; * ability to start workers with different uid/gid/chroot/environment, listening on different ports and using different php.ini (replaces safe_mode); * stdout & stderr logging; * emergency restart in case of accidental opcode cache destruction; * accelerated upload support; * "slowlog" - logging scripts (not just their names, but their PHP backtraces too, using ptrace and similar things to read remote process' execute_data) that are executed unusually slow; * fastcgi_finish_request() - special function to finish request & flush all data while continuing to do something time-consuming (video converting, stats processing etc.); * dynamic/static child spawning * basic SAPI status info (similar to Apache mod_status) * XML-based config file which contains configuration for different process pools with different configuration settings (see [[http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3_FPM/sapi/fpm/php-fpm.conf.in?revision=292487&view=markup|this]] for example) FPM uses BSD-licensed libevent (this is the only external requirement) to handle connections and manage its children. ==== Why do we need FPM? ==== FastCGI becomes more and more popular these days as people tend to realize that 'light' HTTP servers (lighttpd, nginx and the like) are much more efficient on heavy-loaded frontends than traditional Apache. The FastCGI implementation in sapi/cgi requires third-party applications like spawn-fcgi or mod_fcgi to manage its processes and is a 'core' implementation of FastCGI protocol lacking a lot of features that are crucial for many complex real-life applications. ===== Proposal and Patch ===== FPM is ready to be merged from PHP_5_3_FPM branch in the official PHP SVN. All the FPM code is concentrated in sapi/fpm and no additional patches are required. http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3_FPM/sapi/fpm/ ===== Changelog ===== tony - 2010-03-22 - initial RFC version.