Skip to content

我们首先来了解下PHP是如何工作的,PHP作为应用服务器时,目前普遍使用的是多进程工作模式,Web服务器Apache/Nginx通过FastCGI协议把请求转发到PHP-FPM进程。 下面就来分析一个Web请求生命的全过程(如图7-1所示)。

假设用户在浏览器地址栏输入http://www.test.com/index.php发起一个请求, 然后:

  • 域名被DNS解析到Nginx管理进程(Master process)所在的服务器IP。
  • Nginx管理进程选择一个工作进程(Worker process)。
  • Nginx工作进程把请求转发到PHP-FPM管理进程(默认是9000端口)。
  • PHP-FPM管理进程分配一个工作进程处理index.php请求。
  • 工作进程在服务器路径中找到index.php文件,解析编译。
  • 执行PHP代码,可能还要请求后端存储等。

得到请求的结果,先返回给Nginx,然后再返回给用户浏览器。PHP-FPM管理进程不仅要负责分配PHP请求给工作进程,同时也要控制工作进程的创建、结束和启停。 单个PHP工作进程服务完若干个请求后会结束进程,释放资源,管理进程再启动新的工作进程。 PHP多进程模式中内存等资源管理将由工作进程自行分配,满足一定的条件后重启工作进程会自动释放内存,即使内存泄漏也不会造成严重的问题,也不会出现多线程死锁的问题。 所以PHP的可靠性较高,系统运行也更稳定,多进程需要不断地分配和回收进程资源,且需要消耗比线程模式更多的资源。 多进程在大规模集群下的可扩展性很好,只需要简单地增加机器或增加进程即可实现扩展。