{"name":"Serverless","id":"软件工程-架构-Serverless","content":"# Serverless\n\n---\n\n## 一、Serverless 的第一性原理\n\n在讨论 Serverless 的任何技术细节之前，必须先回答一个根本问题：\n\n> **Serverless 解决的不是“服务器运维问题”，而是“计算在分布式系统中的存在方式问题”。**\n\n### 1. 计算的瞬时性（Ephemeral Compute）\n\n在传统架构中：\n\n* 计算资源是**长期存在的**\n* 服务实例被视为“稳定对象”\n\n而 Serverless 的核心假设是：\n\n> **计算不应被长期持有，而应在“被需要的瞬间”才存在。**\n\n这直接导出三个结论：\n\n1. **计算实例可以随时被创建**\n2. **计算实例可以随时被销毁**\n3. **计算实例不应承载长期状态**\n\n---\n\n### 2. 状态必须外置（State Externalization）\n\n在分布式系统中：\n\n> **状态是复杂度的根源。**\n\nServerless 并不是“天然无状态”，而是：\n\n* **强制状态外置**\n* **通过平台机制降低状态管理成本**\n\n因此：\n\n* **FaaS** → 只负责“计算”\n* **BaaS** → 承载“状态、消息、持久化”\n\n这是 Serverless 成立的结构性前提，而不是工程实现选择。\n\n---\n\n### 3. 调度权的转移（Control Shift）\n\nServerless 的本质交易是：\n\n| 用户放弃     | 平台承诺 |\n| -------- | ---- |\n| 实例生命周期控制 | 弹性伸缩 |\n| 资源规划     | 自动调度 |\n| 容量预估     | SLA  |\n\n> **Serverless 的“无服务器”，本质是“无调度权”。**\n\n---\n\n## 二、Serverless 的概念分层模型（稳定知识骨架）\n\n为了避免实现细节淹没原理，Serverless 的认知必须分层。\n\n### 1. 概念分层结构\n\n| 层级  | 关注点     | 是否稳定   |\n| --- | ------- | ------ |\n| 原理层 | 不变量、约束  | ✅ 极稳定  |\n| 架构层 | 组件关系、职责 | ✅ 稳定   |\n| 平台层 | 调度与治理   | ⚠️ 半稳定 |\n| 工程层 | 优化技巧    | ❌ 不稳定  |\n\n后文所有内容都将**显式归属某一层级**。\n\n---\n\n## 三、Serverless 的架构抽象（架构层）\n\n### 1. 狭义 Serverless（Serverless Computing）\n\n**标准架构公式：**\n\n```\nServerless = Trigger + FaaS + BaaS\n```\n\n其抽象含义是：\n\n* **Trigger**：计算的触发条件\n* **FaaS**：瞬时计算执行单元\n* **BaaS**：状态与外部能力承载者\n\n这不是实现组合，而是**职责切分模型**。\n\n---\n\n### 2. FaaS 的分层抽象\n\nFaaS 的内部结构可以抽象为三层：\n\n1. **基础执行层**\n\n   * OS / 容器 / Sandbox\n2. **运行时层**\n\n   * 语言 Runtime\n   * 请求绑定\n3. **用户逻辑层**\n\n   * 业务代码\n\n> 分层的目的不是“解耦”，而是：\n> **让“计算实例”可以被快速创建、复用、销毁。**\n\n---\n\n## 四、计算生命周期管理（能力模型一）\n\n### 1. 冷启动的本质\n\n冷启动并不是性能问题，而是：\n\n> **计算实例从“不存在”到“存在”的必然成本。**\n\n冷启动包含的阶段：\n\n1. 资源调度\n2. 代码获取\n3. 运行时初始化\n4. 用户初始化逻辑\n\n其中只有最后一步属于用户责任。\n\n---\n\n### 2. 冷启动优化的哲学分工\n\n#### 平台侧（系统性优化）\n\n* 缓存与镜像\n* 预测与预加载\n* 网络与依赖内置\n\n#### 用户侧（约束性优化）\n\n* 控制包体\n* 控制初始化逻辑\n* 接受实例随时销毁\n\n> **Serverless 的优化不是“消灭冷启动”，而是“驯服冷启动”。**\n\n---\n\n## 五、弹性与调度（能力模型二）\n\n### 1. 扩缩容的本质模型\n\n扩缩容不是简单的“加机器”，而是一个闭环系统：\n\n```\n指标 → 决策 → 执行 → 反馈\n```\n\n核心变量包括：\n\n* 指标选择（QPS / 延迟 / 队列深度）\n* 调度策略（节点级 / 实例级）\n* 决策模式（稳定 / 恐慌）\n\n---\n\n### 2. 削峰与容灾的结构意义\n\nServerless 通过：\n\n* **异步化**\n* **队列缓冲**\n* **幂等与重试**\n\n将流量问题从“容量问题”转化为：\n\n> **时间与顺序问题**\n\n这是分布式系统的经典降维手段。\n\n---\n\n## 六、流量与版本治理（能力模型三）\n\n### 1. 灰度发布的本质\n\n灰度发布并非 Serverless 独有，但在 Serverless 中具备天然优势：\n\n* 函数版本不可变\n* 别名即路由\n* 实例天然短生命周期\n\n本质是：\n\n> **通过流量切分降低变更风险。**\n\n---\n\n### 2. 流量转发的职责边界\n\n在 Serverless 中：\n\n* 网关 → 接入控制\n* Activator → 冷启动兜底\n* Autoscaler → 容量调节\n\n这是一个典型的**控制面 / 执行面分离模型**。\n\n---\n\n## 七、状态与编排（能力模型四）\n\n### 1. 为什么需要编排\n\n当业务出现以下特征时：\n\n* 长流程\n* 分支并行\n* 事务补偿\n* 状态追踪\n\n单个函数已经不足以表达业务。\n\n---\n\n### 2. 编排系统的架构抽象\n\n编排系统本质由两部分构成：\n\n* **控制面**：定义、存储、调度\n* **执行面**：解释流程、驱动执行\n\n它是 Serverless 补齐“复杂业务表达力”的关键拼图。\n\n---\n\n## 八、BaaS：Serverless 的状态容器\n\nBaaS 不是“配套服务”，而是：\n\n> **Serverless 能成立的前提条件。**\n\n* 数据库\n* 消息队列\n* 对象存储\n\n它们的共同特征是：\n\n* 生命周期独立\n* 被函数共享\n* 平台级运维\n\n---\n\n## 九、Serverless 的边界与反模式\n\nServerless 并非银弹。\n\n### 不适合的场景：\n\n* 超低延迟强一致\n* 长连接、常驻状态\n* 高度依赖本地缓存\n\n> **是否使用 Serverless，本质是是否接受“计算瞬时性”的约束。**\n\n---\n\n## 十、Serverless 平台设计的核心原则\n\n平台设计不应从功能出发，而应从原则出发：\n\n| 能力   | 设计原则    |\n| ---- | ------- |\n| 函数管理 | 不可变版本   |\n| 权限   | 最小权限    |\n| 资源   | 平台优先保护  |\n| 可观测  | 全链路先于业务 |\n\n---\n\n## 结语：Serverless 不是终点，而是一种架构取舍\n\nServerless 并不是要取代微服务、容器或 Kubernetes。\n\n它的真正价值在于：\n\n> **把“计算”从“长期资源”重新定义为“瞬时能力”。**\n\n这是一种**架构哲学的转变**，而不仅是云产品形态的变化。\n\n## 关联内容（自动生成）\n\n- [/软件工程/架构/系统设计/云原生.md](/软件工程/架构/系统设计/云原生.md) 云原生是Serverless架构的生态系统，Serverless代表了极致的弹性、自动化和按需付费模式\n- [/软件工程/架构/系统设计/分布式/分布式系统.md](/软件工程/架构/系统设计/分布式/分布式系统.md) Serverless本质上是分布式系统架构，需应对网络可靠性、一致性等挑战，通过状态外置和事件驱动模型解决\n- [/软件工程/微服务/微服务.md](/软件工程/微服务/微服务.md) 微服务与Serverless都是将应用分解为更小组件的架构方式，Serverless可视为微服务的进一步演进，更彻底地抽象基础设施\n- [/操作系统/容器化.md](/操作系统/容器化.md) 容器是Serverless运行时的基础技术，提供了轻量级虚拟化，而Serverless进一步管理容器生命周期\n- [/运维/K8s.md](/运维/K8s.md) Kubernetes是容器编排平台，为Serverless平台提供底层基础设施，二者代表不同的架构权衡\n- [/软件工程/微服务/ServiceMesh/ServiceMesh.md](/软件工程/微服务/ServiceMesh/ServiceMesh.md) Service Mesh为微服务提供通信基础设施，与Serverless架构在分布式系统治理方面有互补关系\n- [/软件工程/架构/架构.md](/软件工程/架构/架构.md) 从单体到微服务再到Serverless，代表了架构演进的不同阶段，Serverless是其中一种重要模式\n- [/软件工程/架构模式/响应式架构.md](/软件工程/架构模式/响应式架构.md) 响应式架构的事件驱动、弹性伸缩等原则与Serverless架构高度契合\n- [/中间件/消息队列/消息队列.md](/中间件/消息队列/消息队列.md) 消息队列是Serverless架构的重要组成部分，为函数执行提供事件触发机制\n- [/软件工程/架构/系统设计/可观测性.md](/软件工程/架构/系统设计/可观测性.md) 在Serverless架构中，由于缺乏直接基础设施访问，可观测性对于调试和监控尤为重要\n","metadata":"tags: ['计算机系统', '分布式系统']","hasMoreCommit":false,"totalCommits":10,"commitList":[{"date":"2026-02-12T14:07:03+08:00","author":"MY","message":"doc: 整理标签","hash":"290b3e8ad18f48832ac282290238d020fc030a88"},{"date":"2025-12-21T09:46:28+08:00","author":"MY","message":"docs(architecture): 重构 Serverless 文档内容与结构","hash":"94e5c45dad750dfa8c4a98b4ae236ead16970ae7"},{"date":"2023-06-06T16:02:39+08:00","author":"MY","message":"✏Serverless","hash":"4c130c6c7b8e674a1ccdd8c438a9eecd16b601ad"},{"date":"2023-06-05T17:17:22+08:00","author":"MY","message":"✏Serverless","hash":"a1d2aeb3541dcaf9fc8c11136cf06095e130396e"},{"date":"2023-06-01T17:14:59+08:00","author":"MY","message":"✏Serverless","hash":"d9cbafa1870feb8afe37ff6b07e6fce537534d24"},{"date":"2023-05-31T16:28:22+08:00","author":"MY","message":"✏Serverless","hash":"3bc47552eaeba413c24cca25d3266b756087baf0"},{"date":"2023-05-30T17:31:44+08:00","author":"MY","message":"✏Serverless","hash":"fe35a7e3a7b536d02c59bbefcb8460f69cbc2c00"},{"date":"2023-05-29T17:21:59+08:00","author":"MY","message":"✏Serverless","hash":"c78c0f2f0f27cf704857d2dec910e57302c2eb47"},{"date":"2022-12-08T16:46:51+08:00","author":"cjiping","message":"✏️Serverless","hash":"806519a744752dd50380eb86c0c2a758867cdb7c"},{"date":"2022-12-07T17:45:41+08:00","author":"cjiping","message":"➕Serverless","hash":"b49987d980ad4af406aef7fe49427c2bed3f0374"}],"createTime":"2022-12-07T17:45:41+08:00"}