函数类型
CloudBase 云函数提供两种类型,分别适用于不同的业务场景。选择合适的函数类型对性能、开发效率和成本都有重要影响。
本质区别
| 对比维度 | 普通云函数 | HTTP 云函数 |
|---|---|---|
| 设计理念 | 事件驱动架构 (EDA) | Web 服务模式 (Serverless Web) |
| 触发方式 | 事件触发(SDK、定时器、云产品事件) | HTTP 请求直接触发 |
| 入参格式 | 固定的 event 和 context 对象 | 原生 HTTP Request/Response |
| 并发模式 | 单实例单请求 | 单实例多并发 |
| 端口监听 | 不需要 | 必须监听 9000 端口 |
| 执行模式 | 支持同步/异步调用 | 仅同步调用 |
| 框架支持 | 普通函数代码 | Express、Koa、Next.js 等 Web 框架 |
| 适用场景 | 后台任务、数据处理、云产品集成 | Web 网站、API 服务、传统框架迁移 |
如何选择?
选择「普通云函数」,如果你的场景是:
✅ 后台数据处理
- 图片/视频处理、格式转换
- 日志分析、数据清洗
- 批量数据处理
示例场景:用户上传图片到云存储,自动触发云函数进行压缩和水印处理。
// 普通云函数 - 响应 COS 上传事件
exports.main = async (event, context) => {
// event 包含触发事件的数据
const { fileID } = event;
// 处理业务逻辑
const result = await processImage(fileID);
// 返回 JSON 格式结果
return {
code: 0,
data: result
};
};
✅ 定时任务
- 定期数据备份
- 定时报表生成
- 定时数据同步
示例场景:每天凌晨 2 点自动生成前一天的业务报表并发送邮件。
✅ 云产品集成
- 响应云存储(COS)文件上传事件
- 消费消息队列(CKafka)消息
- 数据库触发器
示例场景:监听数据库变更,当用户注册时自动发送欢迎邮件。
✅ 异步任务处理
- 不需要立即返回结果的后台操作
- 长时间运行的计算任务
- 批量处理任务
选择「HTTP 云函数」,如果你的场景是:
✅ Web 应用开发
- 企业官网、落地页
- H5 页面、小程序后端
- 前后端分离的 API 服务
示例场景:开发一个前后端分离的待办事项应用,前端调用 HTTP 云函数的 RESTful API。
// HTTP 云函数 - 使用 Express 框架
const express = require('express');
const app = express();
app.use(express.json());
// RESTful API 接口
app.get('/api/todos', async (req, res) => {
const todos = await db.collection('todos').get();
res.json({ code: 0, data: todos });
});
app.post('/api/todos', async (req, res) => {
const result = await db.collection('todos').add(req.body);
res.json({ code: 0, data: result });
});
// 必须监听 9000 端口
app.listen(9000, () => {
console.log('HTTP Function started on port 9000');
});
✅ 传统框架迁移
- 已有 Express/Koa/Next.js 等项目想快速上云
- 零改造或低改造迁移(只需修改监听端口为 9000)
- 利用现有的 npm 生态和中间件
示例场景:将现有的 Express 应用迁移到 Serverless,只需修改监听端口即可。
✅ 高并发 Web 服务
- 需要单实例处理多个并发请求
- 降低冷启动影响
- 优化成本和性能
对比说明:HTTP 云函数支持单实例多并发,相同流量下可以用更少的实例数,显著降低冷启动次数和成本。
✅ 实时通信场景
- WebSocket 长连接
- SSE(Server-Sent Events)服务端推送
- 文件流式上传下载
示例场景:构建实时聊天应用,使用 WebSocket 实现消息推送。
详细说明
普通云函数(Custom Function)
「普通云函数」基于事件驱动架构设计,函数被动响应各种事件源(定时器、云产品事件、SDK 调用等)。
核心特点:
- 简单易用:只需实现业务逻辑函数,无需关心 HTTP 协议细节
- 标准化入参:
event包含事件数据,context包含运行环境信息 - 多种触发方式:支持 SDK、HTTP API、定时器、云产品事件触发
- 灵活的调用模式:
- 同步调用:等待函数执行完成并返回结果
- 异步调用:立即返回请求 ID,函数在后台执行
典型使用场景:
| 场景类型 | 具体示例 |
|---|---|
| 数据处理 | 图片压缩、视频转码、文档格式转换 |
| 定时任务 | 每日报表生成、定期数据备份、定时清理 |
| 事件响应 | 文件上传后处理、消息队列消费、数据库变更触发 |
| 微服务组件 | 独立的业务逻辑单元、后台计算服务 |
HTTP 云函数(HTTP Function)
「HTTP 云函数」专为 Web 服务场景设计,让传统 Web 应用能够无缝迁移到 Serverless。
核心特点:
- 原生 HTTP 支持:直接接收和处理完整的 HTTP 请求,无需协议转换
- 零改造迁移:现有 Web 框架代码只需修改监听端口为 9000 即可部署
- 高并发性能:单实例可同时处理多个请求,大幅降低冷启动影响
- 完整生态支持:兼容 Express、Koa、Next.js、Nuxt.js 等主流框架
- 丰富的 HTTP 特性:
- 完整的 HTTP Header、Cookie 操作
- 自定义 HTTP 状态码
- WebSocket、SSE 实时通信
- 文件流式处理
典型使用场景:
| 场景类型 | 具体示例 |
|---|---|
| Web 应用 | 企业官网、产品落地页、管理后台 |
| API 服务 | RESTful API、GraphQL 接口 |
| 框架迁移 | Express/Koa/Next.js 项目快速上云 |
| 实时通信 | WebSocket 聊天、SSE 消息推送、实时数据流 |
快速决策指南
不确定选择哪种类型?回答以下问题:
你的服务需要直接响应 HTTP 请求吗?
- 是 → 考虑 HTTP 云函数
- 否 → 考虑普通云函数
你的项目已经使用了 Express/Koa 等 Web 框架吗?
- 是 → 强烈推荐 HTTP 云函数(低改造成本)
- 否 → 根据业务场景选择
你的业务是否需要处理高并发的 Web 请求?
- 是 → HTTP 云函数(单实例多并发,性能更好)
- 否 → 两者皆可
你需要定时任务或响应云产品事件吗?
- 是 → 普通云函数(更适合事件驱动场景)
- 否 → 根据业务场景选择
你需要 WebSocket 或 SSE 实时通信吗?
- 是 → 必须使用 HTTP 云函数
- 否 → 两者皆可
混合使用
在实际项目中,可以同时使用两种类型的云函数:
- 用 HTTP 云函数处理 Web 请求和 API 接口
- 用普通云函数处理后台任务和定时任务