1.无服务器的概念与PHP的适配性
无服务器架构(Serverless)指开发者编写函数部署到云平台(AWSLambda、GoogleCloudFunctions、阿里云函数计算),平台自动伸缩、按调用计费。传统观点认为PHP适合长运行的Web服务器,但通过使用php-runtime或自定义运行时,PHP同样可以在Serverless环境中高效运行。尤其对于事件驱动、间歇性负载的场景(如处理上传文件、Webhook、定时任务),PHP的快速启动和丰富库成为优势。
参考:https://vrhyh.cn/category/siji.html
2.PHP在AWSLambda上的运行方式
AWSLambda官方支持自定义运行时(通过provided层)。社区提供了bref工具,它将PHP二进制和常用扩展打包到Lambda层,将index.php中的函数作为处理器。工作流程:
开发者编写一个PHP函数,接收事件对象(来自APIGateway、S3、SNS等)。
bref负责将HTTP请求转换为$event数组,调用用户函数,将返回值转为APIGateway响应。
Lambda冷启动时加载PHP运行时(约200ms),热启动可低至几毫秒。
执行结束后,Lambda容器冻结,下次调用可能复用。
3.典型应用场景
API后端:使用APIGateway触发Lambda,PHP函数处理请求,返回JSON。适合低至中等流量(QPS<100),按请求计费,空闲时零成本。
文件处理:用户上传图片到S3触发Lambda,PHP调用GD或Imagick生成缩略图,存回S3。代码只需关注处理逻辑,无需维护服务器。
定时任务:CloudWatchEvents定时触发Lambda,PHP执行数据库清理、报表生成等Cron任务。无服务器避免了idlecronserver的浪费。
Webhook处理:接收GitHub、Stripe等推送,PHP解析payload,写入数据库或队列。突发流量自动扩容。
参考:https://vrhyh.cn/category/xinli.html
4.性能优化与限制
冷启动:PHP8.x的JIT在Lambda环境可能收益不大,但bref优化了二进制大小(约30MB),冷启动通常在200-400ms。可以通过provisionedconcurrency避免冷启动(需额外费用)。
执行时间限制:Lambda最大15分钟,超时需拆分任务。
临时磁盘:/tmp空间512MB~10GB,可用于缓存。
数据库连接:不建议在函数内保持长连接;使用连接池(如RDSProxy)或每次新建。
环境变量:存储配置,但敏感信息需用KMS加密。
5.案例:创业公司的无服务器PHP后端
某创业公司开发了一个表单收集工具,用户创建表单,收集提交的数据。初期采用Laravel部署在EC2上,但流量极不均衡(白天多,夜间少)。迁移到Serverless后:
API使用APIGateway+Lambda(PHP+Bref)。
表单页面存放在S3+CloudFront(静态托管)。
数据写入DynamoDB(通过AWSSDKforPHP)。
表单提交后触发另一个Lambda发送邮件(使用SES)。
每月账单从EC2的150降到150降到15,运维几乎为零。
开发体验:本地使用breflocal模拟Lambda环境,CI通过serverlessdeploy推送。团队无需管理服务器,专注于业务代码。
参考:https://vrhyh.cn/category/yundong.html
6.与其他语言的比较
PHP在Serverless领域不如Node.js、Python普及,但优势在于:
现有的PHP代码可以直接迁移,无需重写。
WordPress等应用可通过Bref实现无服务器托管(但需小心读写文件系统)。
对于以PHP为主力栈的团队,Serverless是自然的扩展。
7.总结
Serverless为PHP打开了新的部署模式。它适合事件驱动、间歇性、快速缩放的场景。使用bref等工具,PHP开发者可以享受无服务器的成本优势和运维便利,同时保留PHP的开发效率。
参考:https://vrhyh.cn