2.15 Serverless 云函数概述及最佳实践¶
课程简介¶
Serverless(无服务器)架构被誉为云计算的下一代默认计算范式。它将开发者从繁重的服务器运维中解放出来,实现“只关注业务逻辑,不关心底层资源”。本课程将深入解析 Serverless 的核心理念,详细介绍腾讯云云函数(SCF)的运行机制、触发器模式,并结合 Web 后端、文件处理等真实场景讲解架构设计与最佳实践。
学习目标¶
通过本课程的学习,您将能够:
- ✓ 理解 Serverless 本质:掌握 FaaS(函数即服务)与 BaaS(后端即服务)的概念。
- ✓ 熟悉产品矩阵:了解腾讯云 SCF、API 网关、Serverless Framework 等生态组件。
- ✓ 掌握 SCF 核心能力:理解冷启动、层(Layer)、版本别名、VPC 互通等技术细节。
- ✓ 设计 Serverless 架构:能够设计基于 API 网关 + SCF 的 Web 服务,以及基于 COS 触发的数据处理流水线。
- ✓ 实施最佳实践:掌握如何优化冷启动耗时、配置预置并发及进行成本优化。
第一部分:Serverless 技术演进与核心理念¶
本部分导读
Serverless 不是没有服务器,而是将服务器的管理权完全交给云厂商。本部分将从 IT 架构演进的角度阐述 Serverless 的必然性。
一、计算架构的演进¶
从物理机到 Serverless,计算资源的颗粒度越来越细,维护成本越来越低。
graph LR
Physical[物理机时代<br>自建机房] --> VM[虚拟化时代<br>CVM/EC2]
VM --> Container[容器时代<br>Docker/K8s]
Container --> Serverless[Serverless时代<br>SCF/FaaS]
style Serverless fill:#f9f,stroke:#333,stroke-width:4px
1.1 各阶段对比¶
| 阶段 | 资源颗粒度 | 计费模式 | 运维关注点 | 扩容速度 |
|---|---|---|---|---|
| 物理机 | 台 | 购买硬件 (CapEx) | 硬件、网络、电力、OS | 月/周 |
| 虚拟机 (CVM) | 实例 | 包年包月/按量 (OpEx) | OS、补丁、环境配置 | 分钟级 |
| 容器 (TKE) | 容器 (Pod) | 按节点或核数 | 集群管理、镜像构建 | 秒级 |
| Serverless (SCF) | 函数 (Function) | 按调用次数+运行时间 | 仅关注代码逻辑 | 毫秒级 |
二、Serverless 的核心定义¶
Serverless = FaaS (函数即服务) + BaaS (后端即服务)
- FaaS (Function as a Service):承载计算逻辑。例如腾讯云 SCF,代码段在事件触发时运行,运行完即销毁。
- BaaS (Backend as a Service):承载状态和存储。例如云数据库 TDSQL-C Serverless、对象存储 COS、消息队列 TDMQ。
2.1 核心价值 (Why Serverless?)¶
- 0 运维 (NoOps):无需购买服务器,无需 SSH 登录,无需安装操作系统和 Runtime。
- 极致弹性 (Auto-Scaling):从 0 到 10000 并发仅需几秒,流量洪峰过去后自动缩容到 0。
- 按需付费 (Pay-as-you-go):代码不运行不收费。对于波峰波谷明显的业务,成本可降低 70% 以上。
- 快速迭代:专注于编写核心业务函数,极大地缩短了 TTM (Time to Market)。
第二部分:腾讯云 Serverless 产品矩阵¶
本部分导读
Serverless 不仅仅是云函数,而是一整套生态系统。
一、Serverless 产品全景图¶
graph TD
Tools[开发工具层] --> Compute[计算层]
Compute --> Integration[集成与连接层]
Integration --> Backend[基础设施/BaaS层]
subgraph 开发工具层
Serverless_Framework[Serverless Framework]
CODING[CODING DevOps]
IDE_Plugin[VS Code 插件]
end
subgraph 计算层
SCF[云函数 SCF]
TEM[弹性微服务 TEM]
TKE_Serverless[TKE Serverless]
end
subgraph 集成与连接层
API_Gateway[API 网关]
EventBridge[事件总线]
end
subgraph 基础设施/BaaS层
COS[对象存储 COS]
TDSQL_C[TDSQL-C Serverless]
VPC[私有网络]
CLS[日志服务]
end
二、核心组件解析¶
2.1 云函数 (SCF)¶
腾讯云核心 FaaS 产品,支持 Python, Node.js, Java, Go, PHP 等多种语言,支持自定义镜像(Custom Image)。
2.2 API 网关 (API Gateway)¶
Serverless 的“大门”。提供 HTTP/HTTPS 入口,负责流量控制、鉴权、API 版本管理,将 Web 请求转换为事件触发 SCF。
2.3 Serverless Framework¶
开发框架工具(CLI)。通过 serverless.yml 配置文件,一键部署函数、网关、数据库等资源,解决 Serverless 资源编排难题。
2.4 TDSQL-C Serverless¶
Serverless 架构的数据库最佳拍档。支持计算资源随负载自动启停,无连接时自动暂停计费,完美契合 SCF 的弹性特性。
第三部分:云函数 SCF 核心原理与能力¶
本部分导读
深入理解 SCF 的触发机制、生命周期和冷启动问题,是设计高性能 Serverless 架构的关键。
一、事件驱动架构 (Event-Driven)¶
SCF 是由事件触发运行的。
常见触发器类型: 1. HTTP 触发器:API 网关收到请求 -> 触发函数(Web 后端)。 2. 对象存储 COS 触发器:文件上传/删除 -> 触发函数(图片处理、ETL)。 3. 定时触发器:Crontab 表达式 -> 触发函数(定时任务、报表生成)。 4. 消息队列触发器:CKafka/TDMQ 收到消息 -> 触发函数(流式处理)。 5. 云日志 CLS 触发器:日志写入 -> 触发函数(日志清洗、告警)。
二、函数生命周期与冷启动¶
2.1 运行过程¶
- 代码下载:从存储下载用户代码。
- 环境准备:启动容器,加载 Runtime(如 Python 环境)。
- 代码初始化:执行入口函数之外的初始化代码(如数据库连接)。
- 执行函数:执行
main_handler逻辑。
2.2 冷启动 (Cold Start)¶
- 定义:当很长时间没有请求或并发突增时,平台需要执行步骤 1-3,会有几百毫秒到数秒的延迟。
- 热启动:如果容器已被复用,直接执行步骤 4,延迟在毫秒级。
2.3 解决冷启动的最佳实践¶
- 精简代码:减少代码包体积,移除无用依赖。
- 预置并发 (Provisioned Concurrency):付费保留一定数量的“热容器”,确保核心业务 0 冷启动。
- 保持连接:将数据库连接对象定义在入口函数之外(全局变量),以便在热启动中复用连接。
三、SCF 高级功能¶
- 层 (Layer):
- 将公共依赖库(如 NumPy, FFmpeg)打包成 Layer。
- 多个函数共享同一个 Layer,减小函数代码包体积,方便管理。
- 版本与别名:
- 发布
$LATEST版本生成固定的版本号(如 v1, v2)。 - 使用别名(Alias)指向特定版本(如
prod-> v1,dev->$LATEST),实现灰度发布。
- 发布
- VPC 互通:
- 配置 SCF 访问 VPC,以便函数能连接内网的 Redis、TDSQL 或 CVM。
第四部分:Serverless 最佳实践场景¶
本部分导读
理论结合实践,我们来看三个最经典的 Serverless 应用场景。
场景一:Serverless Web/API 后端¶
适用:小程序后端、Web 官网、运营活动页(突发流量大)。
架构:
graph LR
User[用户/客户端] --> APIGW[API 网关]
APIGW --> SCF[云函数 SCF<br>(业务逻辑)]
SCF --> Redis[云 Redis<br>(缓存)]
SCF --> DB[TDSQL-C Serverless<br>(持久化)]
场景二:对象存储文件处理 (ETL)¶
适用:图片压缩/加水印、视频转码、日志清洗、CSV 导入数据库。
架构:
graph LR
User -- 上传图片 --> COS_Source[COS 存储桶 A<br>(原图)]
COS_Source -- 自动触发 --> SCF[SCF<br>(图片压缩/转码)]
SCF -- 写入 --> COS_Target[COS 存储桶 B<br>(处理后图片)]
场景三:定时任务与运维自动化¶
适用:每日报表推送、数据库定时备份、资源到期检查。
架构: - 配置 Timer 触发器(Cron 表达式)。 - 优势: - 替代传统的 Linux Crontab,不需要维护一台常驻服务器。 - 执行记录可视,自带重试机制,可靠性高。
课程总结¶
知识体系回顾¶
本课程系统介绍了 Serverless 及云函数 SCF:
Serverless 云函数
├── 核心理念
│ ├── FaaS + BaaS
│ ├── 0 运维、按需付费、极致弹性
│ └── 解决波峰波谷资源浪费问题
├── 腾讯云产品矩阵
│ ├── 计算:SCF
│ ├── 入口:API 网关
│ ├── 工具:Serverless Framework
│ └── 后端:TDSQL-C Serverless / COS
├── SCF 核心机制
│ ├── 事件驱动 (触发器)
│ ├── 冷启动优化 (预置并发)
│ ├── 层 (Layer) 管理依赖
│ └── VPC 网络打通
└── 最佳实践
├── Web 后端 (API 网关 + SCF)
├── 文件处理 (COS + SCF)
└── 定时任务 (Timer + SCF)
架构师实践清单 (Checklist)¶
在设计 Serverless 架构时,请确认: - [ ] 场景匹配:业务是否是无状态的?(SCF 不存储本地状态)。 - [ ] 执行时长:单次执行是否超过 15 分钟?(SCF 默认超时限制,长耗时任务建议用 TKE 或 异步调用)。 - [ ] 冷启动:对延迟极其敏感的业务,是否配置了预置并发? - [ ] 数据库连接:是否使用了数据库连接池或全局变量复用连接?(防止连接数耗尽)。 - [ ] 成本估算:高并发且持续运行的计算密集型业务,对比 CVM 成本是否划算?(Serverless 适合波动型流量)。
本章课程到此结束。下一章,我们将讲解 2.16 域名服务+数字证书服务+SSL证书服务。