跳到主要内容

运行机制

云函数(Cloud Functions)是一种无服务器计算服务,让您无需管理服务器即可运行代码。CloudBase 云函数为您提供了一个简单、可靠且高效的代码运行环境,自动处理所有底层基础设施,让您专注于业务逻辑的开发。

核心特性

无状态计算

CloudBase 根据实时负载情况,动态控制云函数实例数量并均衡分发请求。连续的多次请求可能由不同的实例处理,因此:

  • 云函数必须设计为无状态的:每次执行应独立于之前的执行
  • 函数应具有幂等性:多次调用产生的副作用应与单次调用相同
  • 不应依赖实例间的共享状态:每个函数实例都是隔离的执行环境

最佳实践:如需保存状态,请使用外部存储服务(如云数据库或云存储),而非依赖函数实例的内存或本地存储。

事件驱动模型

云函数采用事件驱动架构,每次调用本质上是触发了一个云函数执行事件。

支持的触发器类型

触发器类型描述文档链接
SDK/API 调用通过各语言 SDK 或 REST API 直接调用web端调用
node服务端调用
HTTP 触发通过 HTTP 请求调用,可用于构建 API使用 HTTP 访问云函数
定时触发按预设的时间规则自动触发执行定时触发器

自动弹性伸缩

CloudBase 平台自动处理云函数的扩缩容,您无需关心基础设施管理:

  • 按需扩容:流量增加时自动创建更多实例
  • 自动缩容:流量减少时释放多余实例
  • 零实例冷启动:无流量时不占用资源,有请求时自动启动

函数入参详解

每个云函数调用都会收到两个重要对象: eventcontext

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.js12.16、 10.15、 8.9
PHP7.2
Python3.6、 2.7
Golang1
Java8

资源限制与性能

内存配置

  • 默认内存:256 MB
  • 可配置范围:128 MB ~ 2048 MB
  • 建议:根据函数复杂度和处理数据量选择合适的内存配置

性能提示:增加内存配置通常也会提升 CPU 性能,对于计算密集型任务尤为重要。

并发处理能力

云函数的并发数量指在任意时间点同时执行的函数实例数:

  • 最大并发实例数:单个云函数默认为 1000 实例
  • 并发限制行为:超出限制的调用会被阻塞(不会执行)

并发计算公式

并发函数实例数 = 每秒请求量 × 函数执行时间(秒)

实例计算

场景计算过程结果
函数执行 0.2 秒,每秒 300 请求300 × 0.260 个并发实例
函数执行 0.2 秒,要达到最大并发 10001000 ÷ 0.2需要 5000 QPS

性能优化建议

为确保云函数高效运行,请考虑以下优化建议:

  1. 减少冷启动影响

    • 避免在全局范围内加载大型依赖
    • 将初始化代码与处理逻辑分离
    • 考虑使用 预置并发
  2. 优化执行时间

    • 使用异步并行处理独立任务
    • 避免不必要的网络请求
    • 优化数据库查询和文件操作
  3. 合理使用内存

    • 避免不必要的大对象创建
    • 处理完大型数据后及时释放
    • 为计算密集型任务分配足够内存
  4. 处理错误和异常

    • 实现完善的错误处理机制
    • 记录关键操作的日志
    • 设置合理的超时时间

通过理解云函数的运行机制并遵循最佳实践,您可以构建高效、可靠且可扩展的无服务器应用。