运行机制
云函数(Cloud Functions)是一种无服务器计算服务,让您无需管理服务器即可运行代码。CloudBase 云函数为您提供了一个简单、可靠且高效的代码运行环境,自动处理所有底层基础设施,让您专注于业务逻辑的开发。
核心特性
无状态计算
CloudBase 根据实时负载情况,动态控制云函数实例数量并均衡分发请求。连续的多次请求可能由不同的实例处理,因此:
- 云函数必须设计为无状态的:每次执行应独立于之前的执行
- 函数应具有幂等性:多次调用产生的副作用应与单次调用相同
- 不应依赖实例间的共享状态:每个函数实例都是隔离的执行环境
最佳实践:如需保存状态,请使用外部存储服务(如云数据库或云存储),而非依赖函数实例的内存或本地存储。
事件驱动模型
云函数采用事件驱动架构,每次调用本质上是触发了一个云函数执行事件。
支持的触发器类型
触发器类型 | 描述 | 文档链接 |
---|---|---|
SDK/API 调用 | 通过各语言 SDK 或 REST API 直接调用 | web端调用 node服务端调用 |
HTTP 触发 | 通过 HTTP 请求调用,可用于构建 API | 使用 HTTP 访问云函数 |
定时触发 | 按预设的时间规则自动触发执行 | 定时触发器 |
自动弹性伸缩
CloudBase 平台自动处理云函数的扩缩容,您无需关心基础设施管理:
- 按需扩容:流量增加时自动创建更多实例
- 自动缩容:流量减少时释放多余实例
- 零实例冷启动:无流量时不占用资源,有请求时自动启动
函数入参详解
每个云函数调用都会收到两个重要对象: event
和 context
。
event 对象
event
对象包含触发云函数的事件数据,其内容根据触发方式不同而变化:
- 小程序调用:包含小程序端传入的参数
- HTTP 请求调用:包含 HTTP 请求信息(如请求头、请求体等)
- 定时触发:包含定时触发的相关信息
context 对象
context
对象提供调用上下文信息,帮助您了解函数的运行环境和调用方式:
- 请求 ID:当前调用的唯一标识符
- 调用来源:触发函数的服务或客户端信息
- 执行环境:函数的运行时信息
- 用户身份:调用方的身份信息(如有)
代码示例
以下是一个简单的云函数示例,展示如何处理入参并返回结果:
// index.js - 云函数入口文件
exports.main = async (event, context) => {
// 1. 解析云函数入参
const {
a,
b
} = event;
// 2. 执行业务逻辑
const sum = a + b;
// 3. 返回结果
return {
sum,
timestamp: Date.now()
};
};
因实例的管理由平台自动处理,因此推荐云函数采用同步执行模式,避免使用异步函数。
exports.main = async (event, context) => {
// bad
getList().then((res) => {
// do something...
})
// good
const res = await getList()
// do something...
}
运行环境详情
容器化执行环境
- 云函数在隔离的容器化 Unix 环境中运行
- 每个函数实例拥有独立的执行环境,相互之间完全隔离
- 实例的创建、管理和销毁由平台全自动处理
临时存储
- 每个函数实例提供 512MB 的 /tmp 临时存储空间
- 适用于单次执行过程中的临时文件读写
- 函数执行完毕后临时存储可能被清空
重要提示
- 当前运行环境基于 CentOS 7.2,但不应依赖特定操作系统或版本,因为运行环境可能随时更新
- 临时存储在函数执行结束后不保证持久化,需要持久存储请使用云存储
支持的运行时
CloudBase 云函数支持多种编程语言运行时:
语言 | 支持的版本 |
---|---|
Node.js | 12.16、 10.15、 8.9 |
PHP | 7.2 |
Python | 3.6、 2.7 |
Golang | 1 |
Java | 8 |
资源限制与性能
内存配置
- 默认内存:256 MB
- 可配置范围:128 MB ~ 2048 MB
- 建议:根据函数复杂度和处理数据量选择合适的内存配置
性能提示:增加内存配置通常也会提升 CPU 性能,对于计算密集型任务尤为重要。
并发处理能力
云函数的并发数量指在任意时间点同时执行的函数实例数:
- 最大并发实例数:单个云函数默认为 1000 实例
- 并发限制行为:超出限制的调用会被阻塞(不会执行)
并发计算公式
并发函数实例数 = 每秒请求量 × 函数执行时间(秒)
实例计算
场景 | 计算过程 | 结果 |
---|---|---|
函数执行 0.2 秒,每秒 300 请求 | 300 × 0.2 | 60 个并发实例 |
函数执行 0.2 秒,要达到最大并发 1000 | 1000 ÷ 0.2 | 需要 5000 QPS |
性能优化建议
为确保云函数高效运行,请考虑以下优化建议:
减少冷启动影响
- 避免在全局范围内加载大型依赖
- 将初始化代码与处理逻辑分离
- 考虑使用 预置并发
优化执行时间
- 使用异步并行处理独立任务
- 避免不必要的网络请求
- 优化数据库查询和文件操作
合理使用内存
- 避免不必要的大对象创建
- 处理完大型数据后及时释放
- 为计算密集型任务分配足够内存
处理错误和异常
- 实现完善的错误处理机制
- 记录关键操作的日志
- 设置合理的超时时间
通过理解云函数的运行机制并遵循最佳实践,您可以构建高效、可靠且可扩展的无服务器应用。