对比其他方案
对比云托管
函数式托管
在云托管的基础上提供了函数式代码开发框架,相比直接使用云托管优势在于:
- 函数:
函数式托管
支持云托管中部署函数式代码,更适合函数式编程风格,更容易编写 - 轻量:
函数式托管
不涉及容器、镜像等概念,不需要编写 Dockerfile
,更轻量 - 稳定:
函数式托管
框架内部内置 Graceful优雅重启、并发控制、超时控制、参数优化等 - 日志:
函数式托管
框架提供日志能力,相比直接使用云托管需要自行处理日志更方便 - 易用:
函数式托管
提供了更多的开发辅助功能,如 cli 工具,本地调试、热重启等 - 底座:
函数式托管
基于云托管,支持云托管的所有功能,如自动扩容、自动伸缩等
对比云开发·云函数
下表对比了 函数式托管
和 云开发·云函数
的主要区别:
运行时
分类 | 云开发·云函数 | 函数式托管 |
---|
并发模型 | 单实例单并发 | 单实例多并发 |
HPA模式 | 云函数平台根据并发数量HPA,可预制并发 | 基于部署平台HPA能力,如k8s容器平台可以基于CPU/MEM配置HPA |
内存限制 | 支持MEM大小限制 | 通过运行平台控制 |
CPU限制 | 不感知CPU核数 | 感知CPU核数,通过运行平台控制 |
超时控制 | 支持函数执行超时控制,超时后可中断执行 | 支持函数调用超时控制,超时后函数代码可继续执行 |
调试能力 | 本地调试较难 | 框架支持本地运行,支持热重启,调试更容易 |
开发体验 | 本地开发不便 | 本地开发较方便,提供 ts 类型支持 |
日志 | 提供调用记录、高级日志 | 提供访问日志、高级日志,访问日志面向用户提供更多信息 |
依赖安装 | 支持云端 npm 安装依赖 | 支持云端 npm、yarn、pnpm 安装依赖 |
运行时版本 | 平台提供的指定 node.js 运行时版本 | 可使用满足最低要求的任意 node.js 运行时版本 |
冷启动 | 存在冷启动,耗时较短,可通过预置并发降低冷启动率 | 存在冷启动,耗时较长,可通过配置最小实例数避免缩容到0产生冷启动 |
常驻实例 | "不支持"(不感知函数实例) | 感知实例概念,实例可以自定义是否常驻 |
预置并发 | 支持 | 无此概念,类似于手动扩容 |
长连接能力 | 不支持 | 支持 SSE、WebSocket 方式的长连接能力 |
连接数据库 | 基于单实例单并发模型,对数据库长连接不友好 | 跟普通 node.js 程序无区别 |
异步函数 | 支持,静态配置无法动态切换,限制执行时长 | 支持,函数代码自行控制是否异步执行 |
异步任务 | 部分版本支持 | 支持,函数代码自行控制是否异步执行 |
文件上传 | 不支持文件上传 | 支持 form-data 等 HTTP原生二进制 上传能力 |
文件下载 | 不支持文件下载 | 支持文件下载 |
流式响应 | 不支持 | 支持 Stream 流式响应 |
触发方式
分类 | 云开发·云函数 | 函数式托管 |
---|
触发方式差异 | 通过云开发SDK、HTTP调用 | 原生HTTP调用 或 wx.cloud.callContainer ,支持获取 HTTP 请求上下文 |
链路差异 | 链路耗时相对较长 | 链路耗时较短 |
分类 | 云开发·云函数 | 函数式托管 |
---|
平台依赖性 | 仅支持部署到云开发云函数平台 | 可以部署到任意支持运行 Node.js 的环境中,支持本地运行 |