0

0

PHP遇见Serverless,帮你解决这些痛点!

藏色散人

藏色散人

发布时间:2022-01-18 14:13:24

|

4651人浏览过

|

来源于php中文网

原创

前言

php 的应用范围相当广泛,尤其是在网页程序的开发上,  根据最新 维基百科 显示,2013年4月的统计资料,php已经被安装在超过2亿4400万个网站和210万台服务器上, 而根据 w3techs 的报告,截至2021年9月, 有78.9%的网站使用php。 所以 php 是世界第一语言至少在 web 开发领域并不是戏称。

而在技术选型上, PHP 主要采用的是 LAMP(全称是Linux + apache + mysql + php) 或者 LNMP(全称是Linux + nginx + mysql + php), 这种成熟稳定的技术框架推动 PHP web 开发生态的繁荣和商业上的成功。

 42447ba4ccd36ee3510cad71234fc2f.png

 

在传统的开发模式中, 开发者自己需要安装维护各种软件的安装、维护升级:

  • 如果您是一个企业用户, 如果业务体量变大或者为了生产环境的稳定和可用性, 使用负载均衡是一个必然的选项:

    立即学习PHP免费学习笔记(深入)”;

 91e4e44b38bdc560a529a6e96b42084.png

即此时, PHP 开发者或者线上运维的同学关心的事情多了起来:

  • 每个增加的生产机器都需要重新安装一遍相关软件, 做相同的 nginx 配置以及 php-fpm 的配置, 以及维护每个生产机器的安全更新

  • 假如开发的应用需要一个新的扩展, 可能需要人肉每台机器去增加扩展

  • 负载均衡器随着业务的变更升配, 后面一台 Worker 机器挂掉了, 如何做运维处理

  • 业务的波峰波谷怎么应对才能让资源的利用率提高

  • ...

  • 如果您是项目组开发成员比较多的企业用户,能不能不需要给每个开发配置一个安装的 NLP 的 Linux 机器作为开发测试机器(或者多人共享一个机器)?

  • 如果您是一个提供网站开发和托管的 ISV 、外包公司或者创业公司, 我的客户都是一些中小企业的门户网站, 我怎么提高我后端机器资源利用率以及更好提供定制化服务?

  • 如果您是一个学生或者准备学习 PHP 开发,本地只有 Windows 电脑, 能不能直接近乎免费的方式获取 LNP(Linux+Nginx+PHP)  的环境用来学习呢?

  • ...

带着这些问题, 我们去探索一下 Serverless 是如何解决这些痛点的。

PHP 遇见 Serverless

什么是 Serverless?

Serverless = Faas (Function as a service) + Baas (Backend as a service), 我们简单通过两个图快速了解相关概念:

 

  • 传统模式

 455dea32dab102f316d25944e13827d.png

  • Serverless 模式

 d5dd2169a460f34cf6516a64bf43c8d.png

图中的 CDN 和 OSS 就是 BaaS 服务,FC 就是自定义函数逻辑的 FaaS 平台,   通过这个对比, 我们能快速得到 FaaS 的特性和好处:

  • 只需要专注业务代码开发, 编写对应的逻辑即可

  • 极致弹性伸缩, 无需管理服务器

  • 按量付费,每次调用按毫秒计费

  • ...

本文后续讨论的 Serverless 主要指的是 FaaS, 如下示意图, 几行代码编写完毕, 保存到云厂商的 FaaS 平台, 就完成了一个弹性高可用的 Web API。

 293e99841a48e18680b518e68421f4d.png

PHP 遇见 Serverless

PHP 作为一个开发群体的很大的语言, 各大云厂商的 FaaS,比如阿里云的函数计算、AWS 的 Lambda (通过 Custom Runtime 间接支持)、 腾讯的 SCF 等都推出了对 PHP 语言的支持, phper 面对前端领域的 Serverless 技术革新实践(感兴趣的见本文最后的附录), 应该不遑多让。以阿里云函数计算为例, 有很多 PHP 的开发者有了很多有趣的实践:

  • 直接使用 gd 或者 ImageMagick 扩展, 实现弹性高可用的图片、水印等各种 CPU 密集型 API

  • 直接使用 ffmpeg + 性能型实例 + 异步有状态调用完成视频剪辑合成等音视频处理业务

  • 使用 HTTP 触发器实现的函数, 埋点到广告平台, 快速实现高可用的买量业务

  • 直接将之前基于框架(如 ThinkPHP)实现的 WEB API 直接迁移到 FaaS 平台,不用再担心宕机和运维问题了

  • ...

虽然 FaaS 很好地解决了  phper 如下问题:

  • 新业务或者开发新的 web API

    听脑AI
    听脑AI

    听脑AI语音,一款专注于音视频内容的工作学习助手,为用户提供便捷的音视频内容记录、整理与分析功能。

    下载
  • 存量业务中, 有些 CPU 密集型或者弹性要求很高的 API 单独抽离出来 FaaS 化

但是传统的开发模式或者存量业务,对开发者有一定的上手和改造成本,比如某 Faas 厂商 PHP Runtime 编程接口示例:

function handler($event, $context) {
     $eventObj = json_decode($event, $assoc = true);
    // do your thhings
     // ....
     return $eventObj['key'];
}

但是能不能更进一步, 开发者不需要按照 FaaS 厂商的约定的函数入口能实现一个个的 API,  而是能直接将传统运行在 LAMP 或者 LNMP 的项目直接 FaaS 化?

答案是肯定的

阿里云函数计算的 Custom Runtime 以及直接基于 HTTP 协议的极简编程模型走在了所有云厂商的前列。

 6f4000507a368e9307e37e1de24c88d.png

函数计算启动Custom Runtime执行环境时,会默认调用 bootstrap文件(或者您创建函数的时设置的 Args参数)启动您自定义的 HTTP Server, 然后这个HTTP Server接管了函数计算系统的所有请求,即您所有的函数调用请求。

函数计算 Custom runtime 执行环境底层系统是 Linux,  并且已经内置的 nginx/1.10.3 和 php-fpm7.4,   对于 PHP 应用,您直接使用即可

以部署一个 wordpress 项目 为例,  只需要将如下目录直接打包成一个 zip 包在函数计算平台创建一个函数即可:

- bootstrap
- nginx.conf
- php-fpm.conf
- php.ini-production
- wordpress

其中 wordpress 目录是对应的 web 工程,  bootstrap 是启动 nginx 和 php-fpm 的脚本即可:

...
echo "start php-fpm"
php-fpm7.4 -c /code/php.ini-production -y /code/php-fpm.conf
echo "start nginx"
nginx -c /code/nginx.conf
...

bootstrap 详情可参考 WordPress in FC

所以, 使用函数计算这个 Serverless 产品和传统的 PHP 开发相结合后, 您再也不用考虑负载均衡的事情, 不用考虑扩缩容的事情, 不用管理机器、不用担心宕机的事情等等, 只需要安安心心把业务代码开发好即可。

1be12b7fc6ad43e865d5c306f883561.png

从上图可以看出:开发者只需要开发好自己的业务代码即可,唯一需要考虑的事情, 就是函数计算这边扩容不要太多太猛(比如直接在函数计算平台设置下该函数能弹出的最大实例数目即可), 给下游自己的 Mysql 数据库过大的压力即可。

 

当然, 从原始的传统的 php web 应用完全迁移到 Serverless 形态的函数计算平台, 某些场景可能需要考虑数据持久化问题, 因为函数计算是无状态的, 数据持久化保存可以借助 NAS、Redis 等服务完成,以 NAS 为例,流程图如下:

 

 df7b7376147dffff242d051c887aeef.png

以 WordPress 为例, 后台系统上传的图片或者 Session 功能都是需要持久化到磁盘的。

  • 设置 web 工程的文件上传目录或者 session 目录为 NAS 盘的某个目录, NAS 盘实现持久化

  • 甚至可以将 web 工程直接放到 NAS 盘上, 此时函数计算纯粹就是 LNP 执行环境

 3c8bc3cb53b00cb46b34ed216df6888.png

比如将 wordpress 工程不作为函数的代码包的一部分, 而已提前上传到 NAS 盘, 只需要设置好 nginx.conf 中的 root 能知道 web 工程即可, 如上面的 nginx.conf, /mnt/auto 表示挂载的 NAS 目录,mnt/auto/wordpress 则表示在 NAS 上的 web 工程。

此时对您来说, 函数再也不用变了, 您可能只是需要开发新的业务代码, 然后上传到 NAS 上即可(或者直接使用 git 直接在 NAS 操作,实现 web 工程的版本和 git 上的 commit 绑定, 使用 git 实现代码的快速升级和混滚)

但是从安全生产的角度来说, 还是建议您 web 工程变更最好和函数的变更相关联

小结

从上面的讨论和陈述中, 我们不难发现, PHP 遇见 Serverless 是一件令人兴奋的事情, 让 phper 有了更大的想象空间。 Serverless 的理念和 PHP 这个语言出现的理念也是一致的: 即让开发者最大精力集中在自己的业务价值。 PHP 语言一直是 web 领域最好的生产力代表, 而 Serverless 将会让 PHP 如虎添翼。

我们最后来一一解答下前言中提出的问题:

如果您是一个企业用户, 业务体量变大或者为了生产环境的稳定和可用性, 如何做?

   如上面陈述, 使用函数计算和传统的 PHP 开发相结合后, 您再也不用考虑负载均衡的事情, 不用考虑扩缩容的事情, 不用管理机器、担心宕机的事情等等, 只需要安安心心把业务代码开发好即可。

 

如果您是项目组开发成员比较多的企业用户,能不能不需要给每个开发配置一个安装的 NLP 的 Linux 机器作为开发测试机器(或者多人共享一个机器)?

   是的, 每个开发者在函数计算上创建一个自己的 Service/函数即可, Service/函数配置开发测试环境的 VPC,实现内网安全访问数据库等其他下游服务。 函数调用的时候, 函数计算会拉一个 NLP 的执行环境来运行您分支上正在开发的 PHP 代码。

  • 每个执行环境是相互隔离的

  • 按调用次数计费, 不需要预留机器, 免除了机器成本上的浪费

  • 也可以很方便进行压测等各种事宜

如果您是一个提供网站开发和托管的 ISV 、外包公司或者创业公司, 我的客户都是一些中小企业的门户网站, 我怎么提高我后端机器资源利用率以及更好提供定制化服务?

   通常来说, 很多企业门户网站访问量不大, 但是网站挂掉了会引起客户投诉。每个客户的网站通过service 或者函数区分, 通过函数名或者service去区分您自己的客户: i. 管理方便  ii. 做定制化方便  iii. 做不同vip等级服务方便。 举个例子, 您可以快速通过某个函数的调用指标情况, 可以看出哪个客户的网站访问量大,可以做出客户画像以及制定不同的收费和 vip 服务级别。

如果您是一个学生或者准备学习 PHP 开发,本地只有 Windows 电脑, 能不能直接近乎免费的方式获取 LNP(Linux+Nginx+PHP)  的环境用来学习呢?

   是的, 只要将如下的文件和文件夹打包成 zip 包去函数计算控制台创建函数即可

- bootstrap
- nginx.conf
- php-fpm.conf
- php.ini-production
- myweb
  | - hello.php

这里构建了一个钉钉群: 31897696,  如果您对 PHP 落地 Serverless 感兴趣,您有观点、想法或者想吐槽的, 可以和大家一起交流。

本文作者:罗松(西流)阿里云函数计算技术专家负责阿里云函数计算产品功能开发(runtime 开发、事件源集成以及企业级 Serverless 解决方案落地等),目前专注在 Serverless 开发者工具链的建设,是云原生 Serverless Dev Tools 研发负责人,主导了 S/fc 等组件的开发工作,关注 Serverless 最新技术动态以及企业级解决方案的落地,致力于推动 Serverless 在开发者群体的流行。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

46

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

178

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

51

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

92

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

102

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

227

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

532

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

171

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.5万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号