跳到主要内容

函数类型

CloudBase 云函数提供两种类型,分别适用于不同的业务场景。选择合适的函数类型对性能、开发效率和成本都有重要影响。

本质区别

对比维度普通云函数HTTP 云函数
设计理念事件驱动架构 (EDA)Web 服务模式 (Serverless Web)
触发方式事件触发(SDK、定时器、云产品事件)HTTP 请求直接触发
入参格式固定的 eventcontext 对象原生 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 消息推送、实时数据流

快速决策指南

不确定选择哪种类型?回答以下问题:

  1. 你的服务需要直接响应 HTTP 请求吗?

    • 是 → 考虑 HTTP 云函数
    • 否 → 考虑普通云函数
  2. 你的项目已经使用了 Express/Koa 等 Web 框架吗?

    • 是 → 强烈推荐 HTTP 云函数(低改造成本)
    • 否 → 根据业务场景选择
  3. 你的业务是否需要处理高并发的 Web 请求?

    • 是 → HTTP 云函数(单实例多并发,性能更好)
    • 否 → 两者皆可
  4. 你需要定时任务或响应云产品事件吗?

    • 是 → 普通云函数(更适合事件驱动场景)
    • 否 → 根据业务场景选择
  5. 你需要 WebSocket 或 SSE 实时通信吗?

    • 是 → 必须使用 HTTP 云函数
    • 否 → 两者皆可
混合使用

在实际项目中,可以同时使用两种类型的云函数:

  • 用 HTTP 云函数处理 Web 请求和 API 接口
  • 用普通云函数处理后台任务和定时任务

了解更多