serverless的前世今生,知识体系一共包含哪些部分?
Serverless:从“自己管服务器”到“只写代码”的变革
作为PHP程序员,你日常写业务代码时,可能会遇到这些问题:为了跑一个简单的接口,要先买服务器、装操作系统、配置Nginx和PHP环境;接口访问量突然变大,服务器扛不住要手动扩容;访问量小的时候,服务器闲置着也要花钱——而Serverless,就是为解决这些问题而生的技术方案。我们可以从它的来龙去脉、核心知识框架和底层逻辑三个角度,把它讲清楚。
一、Serverless的“前世今生”:为什么会有这个技术?
要理解Serverless,先回想下我们部署PHP应用的“老办法”,它的演进过程其实就是Serverless的诞生背景:
1. 前世:从“全手动”到“半自动化”的痛点
在Serverless出现前,我们部署应用要经历“三层手动操作”:
- 第一层:管硬件。要么买物理服务器放机房,要么租云厂商的虚拟机(比如ECS),但不管哪种,都要自己选CPU、内存、硬盘配置——选小了不够用,选大了浪费钱。
- 第二层:管系统和环境。拿到服务器后,要手动装Linux、Nginx、PHP、MySQL,还要配置防火墙、监控CPU使用率。比如你写了一个PHP接口,要先确保服务器上的PHP版本和本地一致,不然可能出现“本地能跑、线上报错”的问题。
- 第三层:管扩容和运维。如果接口突然被大量访问(比如活动期间),要手动加服务器、配置负载均衡;如果服务器宕机,要半夜起来重启。哪怕接口没人用,服务器也要一直开着,照样花钱。
这些“手动操作”的痛点,本质是“开发者要为‘服务器’负责,而不是只专注于‘代码’”。于是,Serverless就出现了——它的核心思路是“把服务器的管理交给云厂商,开发者只需要写代码、上传代码”。
2. 今生:Serverless的核心场景
现在你用Serverless部署PHP应用,流程会简化成这样:
- 写好PHP接口代码(比如处理用户登录、查询订单的逻辑);
- 把代码上传到云厂商的Serverless平台(比如阿里云函数计算、AWS Lambda);
- 配置“触发条件”(比如用户访问某个URL时触发你的代码);
- 之后的事情全不用管:云厂商会自动帮你分配服务器、运行代码,访问量大了自动加资源,访问量小了自动减资源,甚至没人访问时不花钱。
比如你做一个“节日祝福”的PHP小程序,平时没人用,节日当天突然有10万用户访问。用Serverless的话,云厂商会自动启动几十台服务器跑你的代码,节日过后自动关掉这些服务器,你只需要为“代码运行的时间”付费(比如每运行100毫秒花几分钱),完全不用手动操作。
现在Serverless已经成了轻量化应用的主流方案,比如:
- 接口开发(PHP写的API、小程序后端);
- 定时任务(比如每天凌晨用PHP脚本同步数据库数据);
- 事件处理(比如用户上传图片后,用PHP脚本压缩图片)。
二、Serverless的知识体系:要掌握哪些核心内容?
作为PHP程序员,不用深入研究Serverless的底层架构,但要掌握“能落地用起来”的核心知识,主要分4个部分:
1. 核心概念:理解3个关键术语
这3个概念是Serverless的“语言基础”,搞懂了就能看懂平台文档:
- 函数即服务(FaaS):Serverless的核心载体。你写的PHP代码会被包装成一个“函数”,这个函数只做一件事(比如处理订单支付、发送短信)。云厂商会在用户触发时,临时分配资源运行这个函数,运行完就释放资源。比如你写一个PHP函数
sendSms($phone, $content),云厂商会帮你处理“如何运行这个函数”,你不用管服务器。 - 无服务器容器(CaaS):如果你的PHP应用依赖较多(比如需要装特定的扩展、搭配Nginx),单纯的“函数”可能不够用,这时候可以用“无服务器容器”。你把PHP应用打包成一个Docker容器(相当于一个包含PHP环境、Nginx、代码的“盒子”),上传到Serverless平台,云厂商会自动帮你运行这个容器,同样不用管服务器。
- 触发器(Trigger):让你的函数“动起来”的条件。比如:
- URL触发:用户访问
https://api.example.com/login时,触发你的PHP登录函数; - 定时触发:每天凌晨3点,触发你的PHP数据同步函数;
- 事件触发:用户在OSS上传一张图片后,触发你的PHP图片压缩函数。
- URL触发:用户访问
2. 平台实践:会用主流Serverless平台
作为PHP程序员,重点掌握1-2个主流平台的使用流程即可,比如阿里云函数计算、腾讯云Serverless Cloud Function(SCF),核心流程都类似:
- 第一步:创建函数。选择“PHP运行环境”(比如PHP 8.1),上传你的代码(可以直接传单个PHP文件,也可以传压缩包);
- 第二步:配置触发器。如果是接口,就配置“HTTP触发器”,生成一个访问URL;如果是定时任务,就配置“定时触发器”,设置执行时间;
- 第三步:测试和调试。在平台上直接调用函数(比如传入测试参数
{"phone":"13800138000"}),查看运行日志,定位报错(比如PHP语法错误、数据库连接失败); - 第四步:联调数据库/第三方服务。如果你的PHP函数需要连MySQL,要在代码里配置数据库地址(注意:要让数据库允许Serverless平台的IP访问,或者用云厂商的托管数据库);如果需要调用短信接口,就在代码里引入SDK,配置API密钥。
3. 开发规范:PHP代码要适配Serverless
Serverless环境和传统服务器环境有区别,你的PHP代码要做一些小调整,比如:
- 入口函数统一:平台会规定一个“入口函数名”,比如阿里云要求函数名是
handler,你的代码要这样写:// 入口函数,event是触发时的参数(比如用户传的参数),context是环境信息 function handler($event, $context) { // 你的业务逻辑:比如解析参数、查数据库、返回结果 $params = json_decode($event, true); $phone = $params['phone']; $result = sendSms($phone, "您好!"); return json_encode(['code' => 200, 'msg' => $result]); } - 避免本地文件依赖:Serverless函数运行的环境是“临时的”,函数运行完后,本地生成的文件(比如
./log.txt)会被删除。如果需要存数据,要存在云数据库(MySQL)或对象存储(OSS)里,不能存在本地。 - 控制运行时间:主流平台对函数运行时间有限制(比如阿里云默认300秒),如果你的PHP脚本需要长时间运行(比如批量处理10万条数据),要拆分成多个小函数,或者用“异步调用”。
4. 性能与成本:知道怎么优化
用Serverless时,你会关心两个问题:“接口快不快”和“花钱多不多”,对应的优化点:
- 性能优化:
- 减少冷启动时间:第一次触发函数时,云厂商要分配资源、初始化PHP环境,这个过程叫“冷启动”(可能需要几百毫秒)。优化方法:如果接口访问频繁,开启“预热”功能(让平台提前准备好环境);尽量减少代码里的依赖(比如不要引入用不到的SDK)。
- 优化数据库连接:每次函数运行时重新连MySQL会耗时,可使用“连接池”(比如用云厂商的数据库连接池服务,复用已有的连接)。
- 成本优化:
- 合理设置内存:函数的内存配置会影响计费(内存越大,每毫秒费用越高)。如果你的PHP函数只是处理简单的参数解析,配128MB内存就够了,不用配2GB。
- 避免无效运行:比如函数里有睡眠代码
sleep(10),这10秒也会算计费时间,要尽量删除无效逻辑。
三、Serverless的底层原理:云厂商是怎么“自动管服务器”的?
你不用自己实现这些底层逻辑,但理解原理能帮你更好地排查问题(比如为什么函数会超时、为什么冷启动慢)。核心原理可以拆解成3个“自动流程”:
1. 资源调度:按需分配,用完就收
云厂商背后有一个巨大的“服务器集群”(成千上万台服务器),当你的PHP函数被触发时,调度系统会做三件事:
- 第一步:选服务器。调度系统会找一台“空闲”的服务器(CPU、内存使用率低),或者启动一台新的服务器(如果所有服务器都忙)。
- 第二步:初始化环境。在这台服务器上,快速创建一个“隔离的运行环境”(比如用Docker容器),安装PHP运行时(和你配置的版本一致),加载你需要的PHP扩展(比如mysqli、redis)。
- 第三步:运行函数并释放。把你的PHP代码加载到这个环境里运行,执行完后,销毁这个运行环境,把服务器资源还给集群——这样其他函数就能用这台服务器了。
这个过程就像“共享自行车”:你要骑车时(触发函数),系统给你找一辆空闲的车(分配服务器),你骑完后(函数运行完),把车还回去(释放资源),别人接着用。
2. 弹性伸缩:访问多了自动加,少了自动减
为什么访问量大的时候函数不会卡?因为有“弹性伸缩系统”在工作,它的逻辑很简单:
- 监控请求量:系统实时统计触发你函数的请求数(比如每秒有多少用户访问你的接口)。
- 计算需要的资源:如果每秒请求数从10个涨到1000个,系统会计算出“需要100个运行环境同时跑函数”(假设每个环境每秒能处理10个请求)。
- 自动扩容/缩容:系统会自动启动99个新的运行环境(加上原来的1个,共100个),来处理1000个请求;当请求数降到10个时,又会自动关掉99个环境,只留1个。
这个过程完全不用你干预,就像“餐厅自动加服务员”:饭点人多,自动多派10个服务员;过了饭点人少,服务员自动下班,不用你手动安排。
3. 事件驱动:函数“被动触发”,不占资源
Serverless函数不是“一直跑着等请求”,而是“被事件触发后才跑”,这是它能节省资源的关键。比如你的PHP函数是“处理用户登录”,它的触发流程是:
- 用户在前端输入账号密码,点击登录,发送请求到云厂商的“API网关”(相当于一个入口);
- API网关收到请求后,生成一个“登录事件”,并把事件传给Serverless调度系统;
- 调度系统触发你的PHP登录函数,把用户的账号密码作为参数传给函数;
- 函数运行:查MySQL验证账号密码,返回“登录成功”或“失败”;
- 结果通过API网关返回给用户,函数运行环境被销毁。
整个过程中,你的函数只有“用户登录时”才会跑,其他时间完全不占资源——这和传统服务器“不管有没有请求,PHP进程一直跑着”的模式完全不同,也是Serverless能省钱的核心原因。
四、总结:PHP程序员怎么用Serverless?
最后回到你的实际工作:不用一开始就把所有项目都迁移到Serverless,先从“小场景”入手尝试,比如:
- 写一个简单的PHP接口(比如查询天气),用阿里云函数计算部署,体验“不用管服务器”的流程;
- 把原来的定时脚本(比如每天同步数据)改成Serverless函数,用定时触发器运行,省掉服务器的闲置费用;
- 遇到问题时,先看平台的日志(比如函数报错,看日志里的PHP错误信息),再针对性优化(比如冷启动慢,就减少代码依赖)。
Serverless的本质不是“没有服务器”,而是“把服务器的管理交给专业的人(云厂商)”,让你能更专注于写PHP业务代码——这也是技术演进的核心方向:让复杂的事情变简单,让开发者聚焦于创造价值。
更多推荐


所有评论(0)