PHP内置服务器与Serverless


PHP从5.4版本开始就提供了一个内置的WEB服务器,可以通过一个简单的命令`php -S`启动一个WEB服务器,极大简化了开发环境的搭建。

到目前为止,官网文档对于内置服务器的使用依然建议用于开发环境,不建议用于生产环境,原因倒是很容易理解,主要有两个方面:

1. 支持的MIME类型很少,5.4版本放出时只支持.htm和.svg(从5.5版本完善了大部分常见的MIME类型支持)

2. 仅实现了基本功能,基本没有任何优化,是一个单线程进程(不过从7.4版本开始,内置服务器支持多进程的运行方式)

从传统开发角度看,这样性能和功能的服务器确实很难应用于生产环境,但是伴随着Serverless的发展,感觉内置服务器的限制突然不是那么重要了。

使用Serverless服务,不管是AWS Lambda,Google Function,还是国内阿里云的函数计算、腾讯云的云函数,我们关注的点不再聚焦于单机性能释放,而是变成了以下四个方面,我们要做的本质上变成了降低单请求的资源占用和执行时间

1. 调用次数

2. CPU时间

3. 内存占用

4. 执行时间

5. 带宽

我们可以逐个对比以下,

1. 调用次数显然很难因为WEB服务器的变化有什么变化

2. CPU时间上,内置服务器作为一个单进程应用,同样的逻辑在函数计算这样的环境下,较少了Nginx与FPM交互的网络开销、Nginx的运行开销,理论上内置服务器应该表现更好

3. 内存占用方面,内置服务器不再需要运行Nginx,同样逻辑,应该也比传统部署方式占用更少一些

4. 执行时间,Nginx+FPM需要启动两个进程,需要两个进程间的通信,很难与直接启动PHP进程更快

5. 带宽基本不用对比,应该不会有什么变化,gzip完全可以在CDN层来实现

从Serverless的角度看,内置服务器并不算是一个很差的选择,对比传统的运行方式可能更加合适一些,就是不太清楚不建议生产环境使用是否有除性能外的其他原因,回头去翻一翻PHP的issue。

参考文章

1. PHP-Built-in web server(https://www.php.net/manual/en/features.commandline.webserver.php

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注