🇬🇧 English version | 📦 GitHub: https://github.com/geekchow/aws-lambda-guide
你在这里: 第 3 阶段 / 共 6 阶段(概念地图)。
读完本文你将知道: Lambda 的 6 个核心概念(按依赖顺序)、6 个关键组件(负责 / 掌握 / 不做),以及它们如何在一张图上协作。暂不涉及内部细节------那是深入篇的内容。
3.1 领域映射------从问题到概念
按依赖顺序引入:每个概念只依赖它上面的概念。
| # | 现实问题要素 | Lambda 概念 | 一句话定义 | 为何如此抽象 |
|---|---|---|---|---|
| 1 | "一段由事件触发的业务逻辑" | 函数(Function) | 一个命名的代码 + 配置单元(运行时、handler、内存、超时、环境变量、IAM(Identity and Access Management,身份与访问管理)角色)。 | 你部署和付费的单位------抽象中没有服务器。 |
| 2 | "运行这段逻辑的服务器" | 执行环境(Execution environment) | 一个隔离的 Firecracker microVM(micro Virtual Machine,微虚拟机),装载函数的一份副本,一次只服务一个请求,跨请求复用,最终被回收。 | 用一次性、按请求规模的沙箱取代长期运行的服务器。 |
| 3 | "此刻有多大负载" | 调用与并发(Invocation & concurrency) | 调用 是 handler 的一次执行;并发是在途调用数 = 忙碌环境数 ≈ RPS(Requests Per Second,每秒请求数)× 平均时长。 | 把容量规划变成一个平台可度量、可限制的数字。 |
| 4 | "一次发布" | 版本(Version) | 函数代码 + 配置的不可变 、带编号的快照(1、2......)。$LATEST 是唯一可变的草稿。 |
Lambda 必须能随时重建相同的环境,因此需要一个冻结的制品。 |
| 5 | "生产环境正在用的那次发布" | 别名(Alias) | 一个可变的命名指针 (prod、staging),指向一个版本,或带流量权重指向两个版本。 |
调用方绑定稳定名字;部署和回滚变成指针切换。 |
| 6 | "高峰前就已开好的服务器" | 预置并发(PC) | Lambda 为某个版本或别名提前初始化并保持就绪的执行环境数量。 | 把冷启动移出延迟敏感代码的请求路径。 |
派生概念(由核心六概念构成,在深入篇中定义):
- 冷启动(Cold start) = 必须创建并初始化环境的那次调用(概念 2 + 3)。→ 05.6
- 预留并发(Reserved concurrency) = 从账号并发池中划给某函数的下限兼 上限(概念 3)。→ 05.4
- 限定符 / 限定 ARN(Amazon Resource Name,亚马逊资源名称) =
function:checkout:7或function:checkout:prod(概念 4 + 5)。→ 05.1 - 溢出(Spillover) = 超出 PC 而以按需方式运行的调用(概念 3 + 6)。→ 05.3
概念之间的关系:
#mermaid-svg-5B0urDc97F9wMo23{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5B0urDc97F9wMo23 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5B0urDc97F9wMo23 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5B0urDc97F9wMo23 .error-icon{fill:#552222;}#mermaid-svg-5B0urDc97F9wMo23 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5B0urDc97F9wMo23 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5B0urDc97F9wMo23 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5B0urDc97F9wMo23 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5B0urDc97F9wMo23 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5B0urDc97F9wMo23 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5B0urDc97F9wMo23 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5B0urDc97F9wMo23 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5B0urDc97F9wMo23 .marker.cross{stroke:#333333;}#mermaid-svg-5B0urDc97F9wMo23 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5B0urDc97F9wMo23 p{margin:0;}#mermaid-svg-5B0urDc97F9wMo23 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5B0urDc97F9wMo23 .cluster-label text{fill:#333;}#mermaid-svg-5B0urDc97F9wMo23 .cluster-label span{color:#333;}#mermaid-svg-5B0urDc97F9wMo23 .cluster-label span p{background-color:transparent;}#mermaid-svg-5B0urDc97F9wMo23 .label text,#mermaid-svg-5B0urDc97F9wMo23 span{fill:#333;color:#333;}#mermaid-svg-5B0urDc97F9wMo23 .node rect,#mermaid-svg-5B0urDc97F9wMo23 .node circle,#mermaid-svg-5B0urDc97F9wMo23 .node ellipse,#mermaid-svg-5B0urDc97F9wMo23 .node polygon,#mermaid-svg-5B0urDc97F9wMo23 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5B0urDc97F9wMo23 .rough-node .label text,#mermaid-svg-5B0urDc97F9wMo23 .node .label text,#mermaid-svg-5B0urDc97F9wMo23 .image-shape .label,#mermaid-svg-5B0urDc97F9wMo23 .icon-shape .label{text-anchor:middle;}#mermaid-svg-5B0urDc97F9wMo23 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5B0urDc97F9wMo23 .rough-node .label,#mermaid-svg-5B0urDc97F9wMo23 .node .label,#mermaid-svg-5B0urDc97F9wMo23 .image-shape .label,#mermaid-svg-5B0urDc97F9wMo23 .icon-shape .label{text-align:center;}#mermaid-svg-5B0urDc97F9wMo23 .node.clickable{cursor:pointer;}#mermaid-svg-5B0urDc97F9wMo23 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5B0urDc97F9wMo23 .arrowheadPath{fill:#333333;}#mermaid-svg-5B0urDc97F9wMo23 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5B0urDc97F9wMo23 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5B0urDc97F9wMo23 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5B0urDc97F9wMo23 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5B0urDc97F9wMo23 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5B0urDc97F9wMo23 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5B0urDc97F9wMo23 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5B0urDc97F9wMo23 .cluster text{fill:#333;}#mermaid-svg-5B0urDc97F9wMo23 .cluster span{color:#333;}#mermaid-svg-5B0urDc97F9wMo23 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5B0urDc97F9wMo23 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5B0urDc97F9wMo23 rect.text{fill:none;stroke-width:0;}#mermaid-svg-5B0urDc97F9wMo23 .icon-shape,#mermaid-svg-5B0urDc97F9wMo23 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5B0urDc97F9wMo23 .icon-shape p,#mermaid-svg-5B0urDc97F9wMo23 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5B0urDc97F9wMo23 .icon-shape .label rect,#mermaid-svg-5B0urDc97F9wMo23 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5B0urDc97F9wMo23 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5B0urDc97F9wMo23 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5B0urDc97F9wMo23 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 拥有一个可变的
publish-version
冻结为
指向 1 或 2 个
可加权
配置在
预先创建
作为镜像
载入
指定限定符
占用 1 个环境
= 1 单位并发
函数
$LATEST
版本 N
不可变
别名 prod
预置并发
执行环境
调用
图注:请求如何抵达运行中的代码------调用 → 别名 → 版本 → 环境,PC 负责预先创建环境。
3.2 关键组件------从概念到组件
其中两类是你管理的控制面 对象(版本、别名、PC 配置);其余是服务每次调用的数据面服务。本表即第 5 阶段的目录。
| # | 关键组件 | 负责(Owns) | 掌握(Knows) | 不做(Does not do) |
|---|---|---|---|---|
| 1 | 版本存储 (PublishVersion) |
把 $LATEST 冻结为不可变、带编号的快照 |
代码哈希(CodeSha256)、每个版本的完整配置、单调递增的版本计数器 |
绝不允许编辑已发布版本;绝不复用编号;不决定哪个版本接流量 |
| 2 | 别名路由 | 每次请求把稳定名字解析为具体版本(含加权掷骰) | 别名 → 主版本 + 可选的第二版本及权重 | 不存代码、不运行任何东西、不做健康检查(由 CodeDeploy/告警负责) |
| 3 | PC 管理器(+ Application Auto Scaling) | 为某版本/别名保持 N 个已初始化环境就绪 | 请求值与已分配 PC、状态(IN_PROGRESS/READY/FAILED)、利用率 |
不限制流量(超出部分溢出到按需);自身不自动扩缩------那是 Application Auto Scaling 的事 |
| 4 | 调用前端 + 计数服务 | 准入每个请求:认证、授权、解析限定符、检查并发限额 | 函数元数据缓存、函数/账号当前并发、预留并发 | 不运行代码;不选择具体环境 |
| 5 | 分配 + 放置服务 | 为请求匹配一个空闲的热环境------或在工作节点上创建新环境 | 每个环境的状态(空闲/忙碌/初始化中)与租约;工作节点容量 | 不决定限额(计数服务已决定);不执行代码 |
| 6 | 执行环境(工作节点上的 Firecracker 微虚拟机) | 运行一次 Init,然后逐个运行 handler | 你的进程内存、/tmp、运行时、扩展 |
不会同时处理两个请求;不会在自身生命周期之外持久化任何东西 |
架构分层------本图回答:每个组件位于哪一面?
#mermaid-svg-7oRzjs28wvWm1BXB{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7oRzjs28wvWm1BXB .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7oRzjs28wvWm1BXB .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7oRzjs28wvWm1BXB .error-icon{fill:#552222;}#mermaid-svg-7oRzjs28wvWm1BXB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7oRzjs28wvWm1BXB .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7oRzjs28wvWm1BXB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7oRzjs28wvWm1BXB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7oRzjs28wvWm1BXB .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7oRzjs28wvWm1BXB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7oRzjs28wvWm1BXB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7oRzjs28wvWm1BXB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7oRzjs28wvWm1BXB .marker.cross{stroke:#333333;}#mermaid-svg-7oRzjs28wvWm1BXB svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7oRzjs28wvWm1BXB p{margin:0;}#mermaid-svg-7oRzjs28wvWm1BXB .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7oRzjs28wvWm1BXB .cluster-label text{fill:#333;}#mermaid-svg-7oRzjs28wvWm1BXB .cluster-label span{color:#333;}#mermaid-svg-7oRzjs28wvWm1BXB .cluster-label span p{background-color:transparent;}#mermaid-svg-7oRzjs28wvWm1BXB .label text,#mermaid-svg-7oRzjs28wvWm1BXB span{fill:#333;color:#333;}#mermaid-svg-7oRzjs28wvWm1BXB .node rect,#mermaid-svg-7oRzjs28wvWm1BXB .node circle,#mermaid-svg-7oRzjs28wvWm1BXB .node ellipse,#mermaid-svg-7oRzjs28wvWm1BXB .node polygon,#mermaid-svg-7oRzjs28wvWm1BXB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7oRzjs28wvWm1BXB .rough-node .label text,#mermaid-svg-7oRzjs28wvWm1BXB .node .label text,#mermaid-svg-7oRzjs28wvWm1BXB .image-shape .label,#mermaid-svg-7oRzjs28wvWm1BXB .icon-shape .label{text-anchor:middle;}#mermaid-svg-7oRzjs28wvWm1BXB .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7oRzjs28wvWm1BXB .rough-node .label,#mermaid-svg-7oRzjs28wvWm1BXB .node .label,#mermaid-svg-7oRzjs28wvWm1BXB .image-shape .label,#mermaid-svg-7oRzjs28wvWm1BXB .icon-shape .label{text-align:center;}#mermaid-svg-7oRzjs28wvWm1BXB .node.clickable{cursor:pointer;}#mermaid-svg-7oRzjs28wvWm1BXB .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7oRzjs28wvWm1BXB .arrowheadPath{fill:#333333;}#mermaid-svg-7oRzjs28wvWm1BXB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7oRzjs28wvWm1BXB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7oRzjs28wvWm1BXB .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7oRzjs28wvWm1BXB .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7oRzjs28wvWm1BXB .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7oRzjs28wvWm1BXB .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7oRzjs28wvWm1BXB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7oRzjs28wvWm1BXB .cluster text{fill:#333;}#mermaid-svg-7oRzjs28wvWm1BXB .cluster span{color:#333;}#mermaid-svg-7oRzjs28wvWm1BXB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7oRzjs28wvWm1BXB .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7oRzjs28wvWm1BXB rect.text{fill:none;stroke-width:0;}#mermaid-svg-7oRzjs28wvWm1BXB .icon-shape,#mermaid-svg-7oRzjs28wvWm1BXB .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7oRzjs28wvWm1BXB .icon-shape p,#mermaid-svg-7oRzjs28wvWm1BXB .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7oRzjs28wvWm1BXB .icon-shape .label rect,#mermaid-svg-7oRzjs28wvWm1BXB .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7oRzjs28wvWm1BXB .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7oRzjs28wvWm1BXB .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7oRzjs28wvWm1BXB :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 数据面: 每次调用
控制面: 由你配置
路由表
制品 + 配置
预建 N 个环境
1 版本存储
2 别名配置
3 PC 管理器 +
自动扩缩
4 调用前端 +
计数服务
5 分配 + 放置
6 工作节点上的
执行环境
3.3 协作总览
本图回答:一个同步请求如何端到端变成响应?
执行环境 (微虚拟机) 放置服务 分配服务 计数服务 调用前端 + 别名解析 调用方 (API Gateway) 执行环境 (微虚拟机) 放置服务 分配服务 计数服务 调用前端 + 别名解析 调用方 (API Gateway) #mermaid-svg-1GsALApEXznXqb8D{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-1GsALApEXznXqb8D .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-1GsALApEXznXqb8D .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-1GsALApEXznXqb8D .error-icon{fill:#552222;}#mermaid-svg-1GsALApEXznXqb8D .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1GsALApEXznXqb8D .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-1GsALApEXznXqb8D .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1GsALApEXznXqb8D .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1GsALApEXznXqb8D .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-1GsALApEXznXqb8D .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1GsALApEXznXqb8D .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1GsALApEXznXqb8D .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1GsALApEXznXqb8D .marker.cross{stroke:#333333;}#mermaid-svg-1GsALApEXznXqb8D svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1GsALApEXznXqb8D p{margin:0;}#mermaid-svg-1GsALApEXznXqb8D .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-1GsALApEXznXqb8D text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-1GsALApEXznXqb8D .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-1GsALApEXznXqb8D .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-1GsALApEXznXqb8D .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-1GsALApEXznXqb8D .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-1GsALApEXznXqb8D #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-1GsALApEXznXqb8D .sequenceNumber{fill:white;}#mermaid-svg-1GsALApEXznXqb8D #sequencenumber{fill:#333;}#mermaid-svg-1GsALApEXznXqb8D #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-1GsALApEXznXqb8D .messageText{fill:#333;stroke:none;}#mermaid-svg-1GsALApEXznXqb8D .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-1GsALApEXznXqb8D .labelText,#mermaid-svg-1GsALApEXznXqb8D .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-1GsALApEXznXqb8D .loopText,#mermaid-svg-1GsALApEXznXqb8D .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-1GsALApEXznXqb8D .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-1GsALApEXznXqb8D .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-1GsALApEXznXqb8D .noteText,#mermaid-svg-1GsALApEXznXqb8D .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-1GsALApEXznXqb8D .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-1GsALApEXznXqb8D .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-1GsALApEXznXqb8D .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-1GsALApEXznXqb8D .actorPopupMenu{position:absolute;}#mermaid-svg-1GsALApEXznXqb8D .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-1GsALApEXznXqb8D .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-1GsALApEXznXqb8D .actor-man circle,#mermaid-svg-1GsALApEXznXqb8D line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-1GsALApEXznXqb8D :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} alt 有空闲热环境 无空闲 → 冷启动 Invoke checkout:prod 1 认证授权 解析 prod → 版本 2 申请 1 单位并发 3 通过(或 429 限流) 4 需要 checkout:v8 环境 5 工作节点 W 上的 env-123 6 为 v8 创建环境 7 启动微虚拟机 运行 Init 8 env-456 就绪 9 env-456 10 投递事件 11 handler 结果 12 释放并发单位 13 200 响应 14
图注:正常路径------准入、解析、找到或创建环境、运行、释放。
重要的非正常流程(机制见深入篇):
- 限流(Throttle) ------计数服务拒绝:账号或预留并发耗尽,或超过扩缩速率 →
429 TooManyRequestsException。→ 05.4 - 溢出冷启动 ------PC 池全部忙碌 → 经放置服务创建按需环境。→ 05.3、05.5
- 金丝雀回滚 ------把问题版本的别名权重设回 0。→ 05.2
结论
六个概念------函数、环境、并发、版本、别名、PC------加上六个组件,就是完整的地图。控制面组件决定运行什么 (版本)、以什么名字 (别名)、预热多少 (PC);数据面组件决定请求能否运行 (计数)、在哪里运行 (分配/放置),并真正运行它(环境)。
📚 返回专栏目录