Serverless 与边缘计算
第 7 章一路走来,你见识了云上的地皮(VPC)、会自愈的集装箱码头(容器与 K8s)、还有给几百栋小楼配的物业(服务网格)。可这一切有个共同前提:你得先"租下一块地方",再把代码安进去,然后操心它开几台、挂了怎么办。这一节,连这块地方也不让你管了——你只交出一段代码,剩下的开机关机、伸缩扩容、机房选址,全部有人代劳。这就是 Serverless:不是"没有服务器",而是"服务器彻底隐形"。而它的孪生兄弟"边缘计算",则干脆把"机房"这个概念拆散了:代码不再住在一个中央大仓,而是铺到全世界几百个离用户十毫秒的街角。一句话概括本节:从"租门面"到"住钟点房",从"中央大仓"到"社区便利店"。
二十年前,出门办事意味着你得先当一名车主:攒钱买车、挂牌照、买保险、年检、换机油、找车位——车的全部麻烦都归你,你换来的只是"随时有车开"。
今天城里大多数年轻人早已不这么过日子:通勤打车、远途租车、买菜骑共享单车。你不再拥有一辆车,你只购买"位移"本身——按次付费,用完即走,车的保养、保险、调度全部与你无关。
软件世界正在发生一模一样的迁徙:从"买服务器养服务器"(车主),到"按调用量付费、代码随叫随到"(乘客)。而"便利店开到你家楼下"这件事,物理世界用了三十年,网络世界正在用一代人的时间重演一遍——这就是本节的两条主线。
先把这一节的术语翻译成人话
照例,先上术语对照表。这一节的名词自带一股营销腔,但拆开看全是你熟悉的生活经验。老规矩:读完正文回来再扫一遍,收获翻倍。
| 术语 | 换成大白话 | 生活里对应的东西 |
|---|---|---|
| Serverless(无服务器) | 说白了就是"服务器归平台管,你只交代码——它还在,只是不归你操心" | 打车:车还在跑,只是不归你养 |
| FaaS(函数即服务) | 说白了就是"你只交一小段函数,有人敲门才开机跑一次" | 感应灯:人来才亮,人走就灭 |
| 冷启动(Cold Start) | 说白了就是"太久没人来,机器熄火了,头一位客人要等它热车" | 凌晨第一家开门的早餐店,现烧水 |
| 事件驱动(Event-driven) | 说白了就是"没有事件就一台不开,有事才开灯干活" | 门铃响了才去开门 |
| 按量计费 | 说白了就是"跑一次算一次的钱,不跑不收钱" | 钟点房:按小时结,不住不付 |
| 无状态(Stateless) | 说白了就是"钟点房不给你存行李,东西一律寄存在楼下仓库" | 酒店前台寄存处 |
| 边缘节点(Edge Node) | 说白了就是"散布在各个城市街角的小机房" | 社区便利店 |
| 边缘函数(Edge Function) | 说白了就是"直接跑在便利店后厨的一小段代码" | 便利店的现场加热便当 |
| 区域(Region) | 说白了就是"云厂商在某个城市建的一整片园区" | 城市中央大仓 / 中央厨房 |
| Cloudflare Workers | 说白了就是"最有名的边缘函数平台之一——代码铺遍全球几百个街角" | 全国连锁便利店的总加盟体系 |
| BaaS(后端即服务) | 说白了就是"数据库、登录、存储这些后厨大件,直接租现成的" | 中央厨房配送的半成品 |
| 厂商锁定(Lock-in) | 说白了就是"住惯了这家酒店,行李全在它家仓库,搬家成本越来越高" | 会员卡越充越多,越充越离不开 |
一句话串起整节:Serverless 是服务器隐形、按次付费;函数是感应灯、冷启动是热车、无状态是行李寄存;边缘是社区便利店、边缘函数是现场小炒、区域是中央大仓;Workers 是开遍全球的连锁便利店。下面从"管的越来越少"这部简史讲起。
一部"越管越少"的简史:从买地到钟点房
要看清 Serverless 站在哪个位置,得把过去二十多年"部署一个网站"的变迁史拉出来排成一排。你会发现一条清晰的斜线:你操心的事,一代比一代少。
- 物理机时代:自建别墅买服务器、租机房机柜、拉专线、配空调——机器是你的,断电、硬盘坏、网络抖,全是你的事。你拥有最大的自由,也背下全部的麻烦。
- 虚拟机时代:整租公寓云厂商把大楼盖好,你整租一间(§ 7.2 的 VPC 领地)。水电(机房电力网络)不用管了,但屋里的装修(操作系统、打补丁)还是你的。
- 容器时代:合租 + 物业§ 7.3 的世界:K8s 当物业,箱子坏了自动补。你连"哪台机器跑我的程序"都不用挑了——但你仍在"养一批常驻箱子",七天二十四小时待命,哪怕半夜没一个客人。
- 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 铺的是预制菜,边缘函数是每个街角都有一位会现炒的厨师——中央大仓还在(重活照旧回仓),但"顺手的小活",社区便利店全能办了。
十毫秒的战争:为什么值得这么大动干戈
十毫秒是什么概念?眨一次眼一百毫秒,十毫秒是你根本意识不到的一瞬。为了这"意识不到的一瞬",科技公司肯下血本,值得吗?值得,而且理由硬核:人的"感觉"卡不卡,看的不是平均速度,是每一拍的稳定。
- 游戏:子弹的公道射击游戏里,你按下开枪到画面响应差五十毫秒,对枪的胜负就已经易主。职业电竞对延迟的敏感,是以毫秒计的——这也是为什么游戏厂商是最早自建边缘节点的一批人。
- 视频通话:插话的勇气延迟一大,两个人说话就会不停"你先说""不你先说"。通话要像面对面聊天,来回延迟得压进一两百毫秒——每一毫秒都在成本里。
- 电商:一念之间的下单页面多转一秒,就有一批用户失去耐心划走。行业流传的数字很直白:加载时间每拖一点,成交率就掉一点——慢,是按真金白银计价的。
- AI 时代的会话跟你聊天的 AI 每吐一个字都要几十次内部往返,任何一环的延迟都会被放大几十倍——"边得越近,话越接得上"。
这些场景合起来就是那场"十毫秒的战争":光纤再快,也快不过"物理距离的缩短"——光跑一千公里要五毫秒,这是任何算法都省不掉的硬成本。想要更近,只有一个办法:真的搬过去。
搬家的连锁反应:几百个便利店怎么对账
把厨师派到几百个街角,听着只是"多开几百家分店",可有一件事立刻变得棘手:账怎么对?中央大仓时代,一本总账天下太平;现在几百家店各自迎客,上海店刚卖掉最后一件"限量款",北京店的销售页面还挂着自己也有一件——顾客下单,才发现两边对不上。数据的一致性,是边缘化之后最先亮起的红灯。
行业的应对分两层。第一层是"分级带货":改不得的数据(账户余额、库存总数)仍然只住在中央大仓,边缘只放"各卖各的也无妨"的数据——商品介绍、个性化推荐,哪怕各家店版本差半分钟,天塌不下来。第二层是"最终一致":接受各家店的账本短暂对不上,靠后台的自动对账让它们在几秒到几分钟内收敛一致——好比连锁便利店的补货系统:总部改了价签,各分店不用同一秒钟换完,但今晚之内必然全部换齐。对卖可乐来说这足够了;可要是全国同时抢一张演唱会门票,这半分钟的不同步就能卖出去三张票——那种生意,就绝不能放到边缘记账。边缘化的第一条架构军规:先给数据分级——能各卖各的才下放,必须一个数的留在中央。
还有一条连锁反应更隐蔽:代码的版本管理。以前发新版是"大仓换一次货架",现在是"几百家分店同一天换新菜单"——哪家换到一半卡住了?哪家还在卖旧款?所以边缘平台都把"一键全球部署、逐店确认"做成了基本功能。说白了,这也是第 7 章反复出现的母题换了个舞台:规模一旦散开,"统一"就从理所当然变成了需要专门设计的工程。
边缘的小身板:能干什么,不能干什么
便利店虽好,别指望它办婚宴。边缘节点是"街角小店",不是中央大仓,它的能力边界必须心里有数:CPU 时间短(通常按几十毫秒到几秒计)、内存小(百 MB 级)、周边设施少(大数据库不在身边)。所以边缘函数的活路,天然是"轻、快、贴脸"的那一类:
| 适合放边缘的活 | 为什么合适 | 该留中央的活 | 为什么合适 |
|---|---|---|---|
| 改写/转发请求 | 几毫秒的活,越近越快 | 大账本交易 | 需要强一致,库在中央 |
| 登录态校验、A/B 分流 | 看一眼证件就放行 | 重型 AI 推理 | 要大 GPU,边缘没这身板 |
| 个性化页面拼装 | 拿现成零件就地组装 | 全站搜索、大数据分析 | 要扫全量数据 |
| 图片缩放、语言小改 | 小工具,随手办 | 复杂报表生成 | 要跑几十秒,边缘会"超时请回" |
说白了,分工的原则就八个字:轻活下放,重活上收。边缘像便利店——买瓶水、加热便当、交个水电费,又快又好;真要囤一车年货,还是得去中央大仓。成熟的架构往往两头都在:边缘当"门迎 + 快手",中央当"后厨 + 库房",中间用一条快速通道相连——又是熟悉的分层协作,只是这一回,分层分到了地理上。
你其实天天在用它:四个身边的现场
老规矩,概念读完回生活里验一遍货。下面四个现场,几乎每个读者今天都路过:
- 现场一:小程序里的"每日签到"你点一下签到按钮,积分到账。支撑这个按钮的,多半就是一个函数:平时熄火,有人点才醒,跑半秒又睡了——为一次点击养一台常驻服务器,谁都会觉得荒唐。
- 现场二:云盘里的自动缩略图上传一张两千万像素的原图,相册页立刻出现小图。生成小图的就是函数:图片落进对象存储的瞬间,"上传"这个事件自动把函数叫醒干活——事件驱动的标准样板戏。
- 现场三:深夜的统计报表"每天凌晨两点汇总当日订单"——定时任务函数两点被闹钟叫醒,跑三分钟,交表,继续睡。其他二十三小时五十七分,零成本。
- 现场四:秒开的外国网站有些境外网站明明服务器在国外,首屏却快得反常——多半是边缘函数在起跑线就干了活:验证、分流、拼装页面,等数据跨过太平洋时,你看到的页面已经装了一半。
认这个套路的方法永远一样:凡是"事情不大、发生才干、干完就睡"的计算,都长着一张 Serverless 的脸。下次你在手机上点到什么"秒回"的小功能,可以心平气和地猜一句:八成有个函数刚被叫醒过。
自检清单:你的项目适合 Serverless 吗
收尾前留一套决策工具。哪天你自己要选部署方式,按顺序问自己三个问题:
- 第一问:流量长什么形状?画一条流量曲线。全天贴着高位的,选常驻(容器/虚拟机);忽高忽低、大量空闲时段的,函数计费优势碾压。这是第一决定因素。
- 第二问:首响能容忍多少等待?用户盯着屏幕等的业务(网页、接口),冷启动要当回事——预热保活或轻量技术栈必须提前规划;后台任务、定时作业,完全不用管这条。
- 第三问:状态有多重?轻状态(读多写少的资料库)外置很轻松;重状态(频繁事务的账本)外置后,函数和数据库之间来回跑的次数会让账单和延迟双双发福——这种系统常驻更顺。
三问答完,答案往往自己浮出来:流量碎、首响松、状态轻,函数;反之,常驻。中间地带最常见——那就混合:门面用函数接客,后厨用容器炒菜,各干各的。真实世界的架构几乎都是这种混搭,纯血主义在工程上从来不是美德。
常见误区:三条最容易念歪的经
- 误解一:"Serverless 一定更省钱"只在特定形状的流量下成立。忽高忽低、整体偏小的流量,按量计费省到笑;平稳的大流量,常驻容器往往更便宜——好比天天通勤的人打车,一年车费够买辆车。先看自己的流量形状,再谈信仰。
- 误解二:"边缘能取代中央机房"便利店的尽头不是取代大仓。数据要一致、算力要重型、合规要集中——中央的活边缘一样也接不住。边缘是"新增的最前一层",不是"替换全部"。
- 误解三:"无服务器等于无责任"机器归平台,代码还是你的:函数里的漏洞、密钥写死在代码里、没设调用上限被人刷爆账单——这些坑平台一个都不会替你填。说白了,物业管电梯,不管你把钥匙塞门垫下。
如果你只记住这一节的一个画面,请记住这条街:三十年前,它只有一家中央大食堂;今天,它是一张便利店、中央厨房和钟点房组成的网络。
① 中央大食堂时代(物理机)。想吃顿饭得自己当厨工:劈柴、烧火、看灶——自由是全的,麻烦也是全的。
② 整租公寓(虚拟机)与连锁合租(容器)。水电物业层层外包,可厨房还是常开着的——哪怕一天只来三个客人,火也得一直温着(闲置的常驻容器)。
③ 钟点房(FaaS)来了。有客才开房,人走就退房,账单按分钟算——没人来,一分钱不花。代价两条:头一位客人要等烧水(冷启动),房里不存行李(无状态),细软全寄楼下仓库(数据库和存储)。
④ 最后,便利店开到了每个街角(边缘)。预制菜早铺好了(CDN),现在连厨师都派下去了(边缘函数):买瓶水、热个便当、改个单,下楼三十秒办完;只有置办年货(重活),才动身去中央大仓。
⑤ 街道办(平台)统筹一切。哪家店几点开门、开几间房、派几个厨师,全由它实时调度——住户(你的代码)只知道"下楼就把事办了"。
这条街记住了,本节所有名词就都有了住址:Serverless 是钟点房、冷启动是烧水、无状态是行李寄存、CDN 是预制菜、边缘函数是街角厨师、区域是中央大仓、Workers 是开遍全城的那家连锁。
一句话送给你:本节的三个心法
收束全节,带走三句话。第一,管得少是方向,不是目的——从买地到钟点房,每代交出去的都是上一代最烦的那部分;但省心的尽头是自由换的,钟点房住不了祖孙三代(重型长生命周期系统仍该自己养机器)。第二,延迟是物理问题,省钱是数学问题——十毫秒买不来自算法的优化,只能靠"真的搬过去";而按量计费划算与否,全看你流量长什么形状。第三,轻活下放,重活上收——边缘与中央不是谁取代谁,是便利店与大仓的分工;好比城市规划:超市要集中,菜摊要分散,谁也替不了谁。第 7 章五个小节走完,云的完整拼图就位:内容搬近(CDN)→ 领地划分(VPC)→ 箱子调度(容器)→ 流量治理(网格)→ 计算下沉(边缘)。
一句话总结:Serverless 与边缘计算,是把"服务器管理"和"地理距离"这两件最后的心智负担也交出去——你只交代码,平台管生死;计算不再住中央,而是铺到离每个用户十毫秒的街角。
机制上记住五件事:
· 无的是管理,不是机器:服务器还在跑,只是开机、伸缩、补丁、告警全部与你无关。
· 按量计费 + 事件驱动:有请求才开机,没人来不花一分钱——省的是闲置,付的是灵活。
· 冷启动是账单的另一面:闲置省钱、首客等待,工程上永远在两头找平衡。
· 无状态是弹性的入场券:状态一律寄存外部,函数才能哪儿都能跑、说扩就扩。
· 边缘是便利店,中央是大仓:轻活下放、重活上收,十毫秒的差距只能靠"搬过去"来缩短。
下一步:至此,第 7 章"云与边缘"五个小节全部走完——网络篇的故事从你家路由器一路讲到全球街角的便利店。可有个问题从第 4 章起就一直悬着:所有这些快递、电话、密语,怎么保证不被偷看、不被冒充、不被算计?第 8 章"网络安全"正面回答它:从加密的魔法(§ 8.1)一路讲到"谁都不信"的零信任(§ 8.6)。