§ 7.5 · Section

Serverless 与边缘计算

Serverless · FaaS · Edge Functions · Cloudflare Workers

第 7 章一路走来,你见识了云上的地皮(VPC)、会自愈的集装箱码头(容器与 K8s)、还有给几百栋小楼配的物业(服务网格)。可这一切有个共同前提:你得先"租下一块地方",再把代码安进去,然后操心它开几台、挂了怎么办。这一节,连这块地方也不让你管了——你只交出一段代码,剩下的开机关机、伸缩扩容、机房选址,全部有人代劳。这就是 Serverless:不是"没有服务器",而是"服务器彻底隐形"。而它的孪生兄弟"边缘计算",则干脆把"机房"这个概念拆散了:代码不再住在一个中央大仓,而是铺到全世界几百个离用户十毫秒的街角。一句话概括本节:从"租门面"到"住钟点房",从"中央大仓"到"社区便利店"。

生活场景
🚕 你已经很久没"养车"了吧

二十年前,出门办事意味着你得先当一名车主:攒钱买车、挂牌照、买保险、年检、换机油、找车位——车的全部麻烦都归你,你换来的只是"随时有车开"。

今天城里大多数年轻人早已不这么过日子:通勤打车、远途租车、买菜骑共享单车。你不再拥有一辆车,你只购买"位移"本身——按次付费,用完即走,车的保养、保险、调度全部与你无关。

软件世界正在发生一模一样的迁徙:从"买服务器养服务器"(车主),到"按调用量付费、代码随叫随到"(乘客)。而"便利店开到你家楼下"这件事,物理世界用了三十年,网络世界正在用一代人的时间重演一遍——这就是本节的两条主线。

先把这一节的术语翻译成人话

照例,先上术语对照表。这一节的名词自带一股营销腔,但拆开看全是你熟悉的生活经验。老规矩:读完正文回来再扫一遍,收获翻倍。

术语换成大白话生活里对应的东西
Serverless(无服务器)说白了就是"服务器归平台管,你只交代码——它还在,只是不归你操心"打车:车还在跑,只是不归你养
FaaS(函数即服务)说白了就是"你只交一小段函数,有人敲门才开机跑一次"感应灯:人来才亮,人走就灭
冷启动(Cold Start)说白了就是"太久没人来,机器熄火了,头一位客人要等它热车"凌晨第一家开门的早餐店,现烧水
事件驱动(Event-driven)说白了就是"没有事件就一台不开,有事才开灯干活"门铃响了才去开门
按量计费说白了就是"跑一次算一次的钱,不跑不收钱"钟点房:按小时结,不住不付
无状态(Stateless)说白了就是"钟点房不给你存行李,东西一律寄存在楼下仓库"酒店前台寄存处
边缘节点(Edge Node)说白了就是"散布在各个城市街角的小机房"社区便利店
边缘函数(Edge Function)说白了就是"直接跑在便利店后厨的一小段代码"便利店的现场加热便当
区域(Region)说白了就是"云厂商在某个城市建的一整片园区"城市中央大仓 / 中央厨房
Cloudflare Workers说白了就是"最有名的边缘函数平台之一——代码铺遍全球几百个街角"全国连锁便利店的总加盟体系
BaaS(后端即服务)说白了就是"数据库、登录、存储这些后厨大件,直接租现成的"中央厨房配送的半成品
厂商锁定(Lock-in)说白了就是"住惯了这家酒店,行李全在它家仓库,搬家成本越来越高"会员卡越充越多,越充越离不开

一句话串起整节:Serverless 是服务器隐形、按次付费;函数是感应灯、冷启动是热车、无状态是行李寄存;边缘是社区便利店、边缘函数是现场小炒、区域是中央大仓;Workers 是开遍全球的连锁便利店。下面从"管的越来越少"这部简史讲起。

一部"越管越少"的简史:从买地到钟点房

要看清 Serverless 站在哪个位置,得把过去二十多年"部署一个网站"的变迁史拉出来排成一排。你会发现一条清晰的斜线:你操心的事,一代比一代少。

注意这条斜线的方向:每一代交出去的,恰好都是上一代最烦人的那部分——机房归云、机器归容器平台、连"常驻在线"这件事,最后也交了出去。技术圈给这个趋势起了个学术名字叫"抽象层级上移",翻译成人话:脏活一层层沉到地下,你只管站在楼顶写代码。

一场算账演习:同一家小店,三种住法

道理讲了一路,来场实战演习。假设你要开一个"班级相册"小网站:白天零零星星有人传照片,周五晚上偶尔来一波小高峰,寒暑假几乎没人。同一门生意,三种住法,账完全不一样:

住法你要操心的账单长什么样适合的生意
整租虚拟机系统补丁、宕机重启、流量大了要自己换大房包月,空转也付,节假日不够用天天满客的正规大店
容器 + 调度写清"保持几只箱子"、镜像、伸缩规则按箱子数付,闲置箱子照付,但伸缩快流量有潮汐的中型连锁
Serverless 函数几乎只剩代码本身按调用次数和运行毫秒付,寒暑假≈零忽高忽低、间歇营业的小本生意

看出规律了吗:住法没有贵贱,只有合不合身——账单的形状,必须去配流量的形状。寒暑假空转的包月虚拟机是最大的浪费,而全天满客的热门网站用函数计费反而更贵——好比天天跑长途的司机去租钟点房睡觉,一晚上租金够住一个月正经旅馆。工程选型和过日子是同一门学问:先看清自己的作息,再选住法。

Serverless 到底"无"掉了什么

先把名字里最大的误会拆掉:服务器当然还在——你的代码总要跑在真实的 CPU 上。Serverless 无掉的不是机器,是你与机器之间的一切管理关系:不开机、不装系统、不打补丁、不配网络、不写自愈脚本、不看凌晨三点的告警短信。好比打车软件上的车:车真实存在、司机真实在开车,可"什么时候出车、加几辆、去哪保养"这些事,对你这个乘客完全隐形——你只看见"车来了"。

它的具体形态,最典型的叫 FaaS(函数即服务):你交的不是一整个网站,而是一小段函数——"收到一张图片,把它压成缩略图"。上传之后你什么都不用管;有请求来,平台找台机器现场跑它一次;请求走光,机器回收或休眠。计费方式也彻底变了:不是"这台机器一个月八百块",而是"跑了一万次、共耗时三分钟,扣你几分钱"。没人调用的深夜,账单是零。这就是"事件驱动 + 按量计费":没有客人,连灯都不开——电费自然也是零。

顺带认一个近亲 BaaS(后端即服务):登录、数据库、文件存储、发短信,这些后厨大件也不自己砌了,直接按量租现成的。FaaS 管你写的那段独门逻辑,BaaS 管通用件——好比开一家小餐馆:独门配方自己炒(函数),米饭、调料、餐盒全部中央厨房配送(BaaS)。

BaaS 的半成品目录:后厨还能租什么

把"中央厨房"的配送目录翻开看看,你会发现今天做一个小产品的门槛已经低到了尘土里:用户系统——注册、登录、找回密码、第三方一键登录,整个柜台租;对象存储——放照片视频的大货架,按占的格子数收钱,放多少租多少;托管数据库——不用自己买服务器装数据库、调备份,按条数和容量付费;消息推送——给手机发通知的邮路;定时任务——每天早上八点替你跑一段代码的闹钟服务。

这些大件单拎出来都平平无奇,组合起来却改写了小团队的生存法则:十年前,做个"传照片的班级相册"需要一个懂服务器、一个懂数据库、一个懂前端的完整班子;今天,一个会写函数的学生,一个周末就能把同样的东西拼出来上线。这不是偷工减料,是分工的又一次下沉:上一个十年大家把"机器"外包给了云,这一个十年连"后厨大件"也外包了——你的全部精力,终于可以只花在别人抄不走的那一点独门配方上。

冷启动:头一位客人的等待

这套"人来才开机"的经济听上去完美,但物理定律开始收账了。机器从熄火到能干活需要时间:分配资源、把你的代码装载进内存、初始化运行环境——这段等待,行话叫冷启动好比凌晨五点的第一位早餐客:店员刚掀开门帘,火没生、水没开、蒸笼是凉的——这位客人注定比中午十二点的客人多等几分钟。

冷启动的账单因平台而异:快的一两百毫秒,慢的(Java 这类"行李多"的语言)能到好几秒。而它专挑最尴尬的时刻出现:你的函数一小时内没人调用,平台合理地把它熄了火;下一位客人翩然而至,撞上的正是"重新烧水"。对偶尔跑跑的后台任务,多等一秒无所谓;对用户盯着屏幕等响应的线上服务,这一秒就是白屏。于是行业发明了各种"保温"手段:定时假装来一位客人敲门(定时触发保活)、用"行李少"的语言写函数、平台预热池——本质上全是同一件事:跟物理定律讨价还价。

看出门道了吗?按量计费省下的是"闲置的钱",冷启动付出去的是"响应的时间"。这又是一笔典型的工程选择题,跟 § 7.3 讲 host 模式时那句"工程上没有免费的快"完全同款:你可以选"常驻待命、闲置烧钱"(容器),也可以选"用完熄火、头客等待"(函数)——没有两头全占的选项。流量平稳的大服务选前者更划算,忽高忽低、一天没几个客人的小服务选后者能省到极致。

行李寄存处:无状态的代价

Serverless 还有一条铁律,初听别扭,想通后会觉得理所当然:函数没有记忆。这次调用里存在变量里的东西,下次调用大概率消失——因为下一次,你的代码可能跑在另一台机器上,甚至另一个城市的另一间"钟点房"里。好比住钟点房的旅客:这间房今晚你住,明晚换别人住,你想留下的东西,一律寄存到楼下仓库——房间本身,从来不属于任何一个人。

那购物车、登录状态、用户资料怎么办?全部外置:放进专门的数据库、缓存、对象存储。函数只做"无情的加工车间":原料进来(请求)、加工(算)、成品出去(响应),中间不私自藏货。这个性格的学名叫无状态。它换来的自由是巨大的:正因为每间房都一模一样、谁都能住、随时能开随时能退,平台才敢在一秒内把你的服务从三间房扩到三千间——无状态,是"弹性伸缩"的入场券;哪儿都一样,才能哪儿都能去。

这个思想其实你早见过:§ 5.5 讲负载均衡时说过"会话粘滞"的烦恼,解法同样是"把状态搬出机器"。从负载均衡到 Serverless,答案一脉相承:想让"哪台机器"变得不重要,就得先让"机器记不记事"变得不重要。

边缘计算:把便利店开到楼下

讲完"怎么跑",换第二个维度:"在哪儿跑"。到此为止我们所有的故事都发生在一个默认设定里:你的代码住在一个区域里——云厂商在某个城市(比如上海)建的一整片园区。全国的请求都涌向上海:北京的用户、广州的用户、乌鲁木齐的用户,每个人的数据都要跑大半个中国。好比全国人民买瓶酱油都要从中央大仓发货——酱油不贵,路费感人。

§ 7.1 的 CDN 已经解决了一半:静态内容(图片、视频、网页文件)可以提前铺货到各地"前置仓"。可动态的那一半——按用户身份算出来的推荐、实时翻译、个性化页面——没法提前铺货,每次都得回中央大仓现做。边缘计算补的就是这一刀:不只把货铺过去,把"厨师"也派过去。平台在几百个城市的小机房(边缘节点)里跑一小段你的代码(边缘函数):用户请求到店,就地加工、就地返回,一趟路缩到十毫秒以内。

最出名的边缘函数平台就是本章反复登场的 Cloudflare 的 Workers——它的卖点一句话讲完:你上传一段代码,几百毫秒后它出现在全球几百个街角,每个用户的请求都由离他最近的那家店接单。CDN 铺的是预制菜,边缘函数是每个街角都有一位会现炒的厨师——中央大仓还在(重活照旧回仓),但"顺手的小活",社区便利店全能办了。

十毫秒的战争:为什么值得这么大动干戈

十毫秒是什么概念?眨一次眼一百毫秒,十毫秒是你根本意识不到的一瞬。为了这"意识不到的一瞬",科技公司肯下血本,值得吗?值得,而且理由硬核:人的"感觉"卡不卡,看的不是平均速度,是每一拍的稳定。

这些场景合起来就是那场"十毫秒的战争":光纤再快,也快不过"物理距离的缩短"——光跑一千公里要五毫秒,这是任何算法都省不掉的硬成本。想要更近,只有一个办法:真的搬过去。

搬家的连锁反应:几百个便利店怎么对账

把厨师派到几百个街角,听着只是"多开几百家分店",可有一件事立刻变得棘手:账怎么对?中央大仓时代,一本总账天下太平;现在几百家店各自迎客,上海店刚卖掉最后一件"限量款",北京店的销售页面还挂着自己也有一件——顾客下单,才发现两边对不上。数据的一致性,是边缘化之后最先亮起的红灯。

行业的应对分两层。第一层是"分级带货":改不得的数据(账户余额、库存总数)仍然只住在中央大仓,边缘只放"各卖各的也无妨"的数据——商品介绍、个性化推荐,哪怕各家店版本差半分钟,天塌不下来。第二层是"最终一致":接受各家店的账本短暂对不上,靠后台的自动对账让它们在几秒到几分钟内收敛一致——好比连锁便利店的补货系统:总部改了价签,各分店不用同一秒钟换完,但今晚之内必然全部换齐。对卖可乐来说这足够了;可要是全国同时抢一张演唱会门票,这半分钟的不同步就能卖出去三张票——那种生意,就绝不能放到边缘记账。边缘化的第一条架构军规:先给数据分级——能各卖各的才下放,必须一个数的留在中央。

还有一条连锁反应更隐蔽:代码的版本管理。以前发新版是"大仓换一次货架",现在是"几百家分店同一天换新菜单"——哪家换到一半卡住了?哪家还在卖旧款?所以边缘平台都把"一键全球部署、逐店确认"做成了基本功能。说白了,这也是第 7 章反复出现的母题换了个舞台:规模一旦散开,"统一"就从理所当然变成了需要专门设计的工程。

边缘的小身板:能干什么,不能干什么

便利店虽好,别指望它办婚宴。边缘节点是"街角小店",不是中央大仓,它的能力边界必须心里有数:CPU 时间短(通常按几十毫秒到几秒计)、内存小(百 MB 级)、周边设施少(大数据库不在身边)。所以边缘函数的活路,天然是"轻、快、贴脸"的那一类:

适合放边缘的活为什么合适该留中央的活为什么合适
改写/转发请求几毫秒的活,越近越快大账本交易需要强一致,库在中央
登录态校验、A/B 分流看一眼证件就放行重型 AI 推理要大 GPU,边缘没这身板
个性化页面拼装拿现成零件就地组装全站搜索、大数据分析要扫全量数据
图片缩放、语言小改小工具,随手办复杂报表生成要跑几十秒,边缘会"超时请回"

说白了,分工的原则就八个字:轻活下放,重活上收。边缘像便利店——买瓶水、加热便当、交个水电费,又快又好;真要囤一车年货,还是得去中央大仓。成熟的架构往往两头都在:边缘当"门迎 + 快手",中央当"后厨 + 库房",中间用一条快速通道相连——又是熟悉的分层协作,只是这一回,分层分到了地理上。

你其实天天在用它:四个身边的现场

老规矩,概念读完回生活里验一遍货。下面四个现场,几乎每个读者今天都路过:

认这个套路的方法永远一样:凡是"事情不大、发生才干、干完就睡"的计算,都长着一张 Serverless 的脸。下次你在手机上点到什么"秒回"的小功能,可以心平气和地猜一句:八成有个函数刚被叫醒过。

自检清单:你的项目适合 Serverless 吗

收尾前留一套决策工具。哪天你自己要选部署方式,按顺序问自己三个问题:

三问答完,答案往往自己浮出来:流量碎、首响松、状态轻,函数;反之,常驻。中间地带最常见——那就混合:门面用函数接客,后厨用容器炒菜,各干各的。真实世界的架构几乎都是这种混搭,纯血主义在工程上从来不是美德。

常见误区:三条最容易念歪的经

Analogy · 一条美食街的进化史:把本节所有概念装进一个画面

如果你只记住这一节的一个画面,请记住这条街:三十年前,它只有一家中央大食堂;今天,它是一张便利店、中央厨房和钟点房组成的网络。

① 中央大食堂时代(物理机)。想吃顿饭得自己当厨工:劈柴、烧火、看灶——自由是全的,麻烦也是全的。

② 整租公寓(虚拟机)与连锁合租(容器)。水电物业层层外包,可厨房还是常开着的——哪怕一天只来三个客人,火也得一直温着(闲置的常驻容器)。

③ 钟点房(FaaS)来了。有客才开房,人走就退房,账单按分钟算——没人来,一分钱不花。代价两条:头一位客人要等烧水(冷启动),房里不存行李(无状态),细软全寄楼下仓库(数据库和存储)。

④ 最后,便利店开到了每个街角(边缘)。预制菜早铺好了(CDN),现在连厨师都派下去了(边缘函数):买瓶水、热个便当、改个单,下楼三十秒办完;只有置办年货(重活),才动身去中央大仓。

⑤ 街道办(平台)统筹一切。哪家店几点开门、开几间房、派几个厨师,全由它实时调度——住户(你的代码)只知道"下楼就把事办了"。

这条街记住了,本节所有名词就都有了住址:Serverless 是钟点房、冷启动是烧水、无状态是行李寄存、CDN 是预制菜、边缘函数是街角厨师、区域是中央大仓、Workers 是开遍全城的那家连锁。

一句话送给你:本节的三个心法

收束全节,带走三句话。第一,管得少是方向,不是目的——从买地到钟点房,每代交出去的都是上一代最烦的那部分;但省心的尽头是自由换的,钟点房住不了祖孙三代(重型长生命周期系统仍该自己养机器)。第二,延迟是物理问题,省钱是数学问题——十毫秒买不来自算法的优化,只能靠"真的搬过去";而按量计费划算与否,全看你流量长什么形状。第三,轻活下放,重活上收——边缘与中央不是谁取代谁,是便利店与大仓的分工;好比城市规划:超市要集中,菜摊要分散,谁也替不了谁。第 7 章五个小节走完,云的完整拼图就位:内容搬近(CDN)→ 领地划分(VPC)→ 箱子调度(容器)→ 流量治理(网格)→ 计算下沉(边缘)。

Recap · 收束

一句话总结:Serverless 与边缘计算,是把"服务器管理"和"地理距离"这两件最后的心智负担也交出去——你只交代码,平台管生死;计算不再住中央,而是铺到离每个用户十毫秒的街角。

机制上记住五件事
· 无的是管理,不是机器:服务器还在跑,只是开机、伸缩、补丁、告警全部与你无关。
· 按量计费 + 事件驱动:有请求才开机,没人来不花一分钱——省的是闲置,付的是灵活。
· 冷启动是账单的另一面:闲置省钱、首客等待,工程上永远在两头找平衡。
· 无状态是弹性的入场券:状态一律寄存外部,函数才能哪儿都能跑、说扩就扩。
· 边缘是便利店,中央是大仓:轻活下放、重活上收,十毫秒的差距只能靠"搬过去"来缩短。

下一步:至此,第 7 章"云与边缘"五个小节全部走完——网络篇的故事从你家路由器一路讲到全球街角的便利店。可有个问题从第 4 章起就一直悬着:所有这些快递、电话、密语,怎么保证不被偷看、不被冒充、不被算计?第 8 章"网络安全"正面回答它:从加密的魔法(§ 8.1)一路讲到"谁都不信"的零信任(§ 8.6)。

☰ 主页
Xue Hai Wu Ya · Network · § 7.5 · Serverless 与边缘计算