
# 函数类型选型
本文介绍函数工作流支持的函数类型的适用场景及差异，供您进行函数类型选型。
#### 函数选型建议
为满足不同场景下的用户需求，函数工作流支持通过在线编写代码、上传代码文件或者使用容器镜像，创建事件函数和HTTP函数，且支持使用GPU计算资源。
在使用函数工作流时，可以根据业务场景和技术栈偏好，选择合适的函数类型和运行时。常见应用场景的函数选型建议请参考[表1]。
 表1函数选型建议 
| 应用场景               | 函数选型建议                              | 说明                                                                            |
|:---|:---|:---|
| Web应用和API服务        | 使用代码创建**HTTP函数**                    | HTTP函数支持主流Web应用框架，可以通过浏览器访问，或由URL直接调用。                                        |
| 文件处理和数据流处理         | 结合**内置运行时** 创建**事件函数**              | 事件函数可以配置事件触发，集成了多种华为云产品（如对象存储服务OBS、分布式消息服务 RabbitMQ 版、云日志服务LTS等）。             |
| Chatbot和文生图等模型推理场景 | 结合**自定义镜像** 创建**HTTP函数** 并**启用GPU** | 使用基于流行AI项目（如Stable Diffusion、ComfyUI、Ollama等）的容器镜像创建HTTP函数，启用GPU快速构建AI模型推理服务。 |
| 定时任务和音视频转码等异步任务场景  | 结合**内置运行时** 创建**事件函数**              | 事件函数可以配置事件触发，能够通过特定事件或定时触发来调用关联函数。                                            |
   
#### 函数类型选型分析
关于事件函数与HTTP函数的具体分析，请参考[表2]。
 表2函数类型选型分析 
| **对比项** | **事件函数**                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | **HTTP函数**                                                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|
| 功能      | 用于处理文件和数据流，可以通过各类云产品的事件触发（如[基于EG的OBS应用事件源触发器](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0228.html)、[Kafka触发器](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0214.html)、[LTS触发器](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0208.html)等），以及用于处理异步请求，能够追踪并保存每个异步调用的状态。                                                                                                                       | 支持流行的Web应用框架和AI流行项目，可以通过浏览器访问，或通过URL调用。                                                                                                                                                                                                                                                                                                                                                                                          |
| 适用场景    | - 云产品集成： OBS实时文件处理、LTS日志加工等。  - ETL数据加工：数据库数据清洗、消息队列处理等。  - 常规任务：定时任务、周期任务、脚本任务等。  - 多媒体处理：音视频转码、直播录制、图片加工等。   | - 快速构建流行Web框架应用：Express、Flask等。  - 快速构建AI模型推理服务：如Stable Diffusion、ComfyUI、Ollama等。  - 迁移已有的应用：HTML5网站、REST API、BFF、移动APP、小程序、游戏结算等。   |
| 运行环境    | 推荐使用[内置运行时](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0151.html)。                                                                                                                                                                                                                                                                                                                                                                                     | 推荐使用**定制运行时** 或**自定义镜像**。                                                                                                                                                                                                                                                                                                                                                                                                        |
   
#### 函数运行环境选型分析
关于函数运行环境的具体分析，请参考[表3]。
 表3函数运行环境选型分析 
| **对比项**  | **内置运行时**                                                     | **定制运行时**                                                                                   | **自定义镜像**                                                |
|:---|:---|:---|:---|
| 开发流程     | 根据函数工作流定义的函数执行入口编写请求处理程序。                                     | 基于Web应用框架模板开发应用，通过公网访问地址即时看到结果。                                                             | 将自定义镜像上传至SWR然后使用镜像，或者使用SWR中已有的镜像。                        |
| 支持的实例类型  | CPU实例                                                         | CPU实例和GPU实例                                                                                 | CPU实例和GPU实例                                              |
| 单实例多并发   | 不支持                                                           | 支持                                                                                          | 支持                                                       |
| 冷启动      | 最快。 代码包中不包含运行时，因此冷启动最快。 | 较快。 代码包是一个HTTP Server程序，体积较大，但不需要拉取SWR容器镜像，因此冷启动会较快。 | 较慢。 需要拉取镜像，因此冷启动较慢。 |
| 代码文件大小限制 | 代码包大小不超过100MB或500MB，具体请参见[代码部署包大小限制说明](https://support.huaweicloud.com/productdesc-functiongraph/functiongraph_01_0150.html#section2)。                     || 未解压的镜像大小不超过10 GB。                                        |
| 代码文件格式   | ZIP、JAR（Java）                                                                                                                                              || 容器镜像                                                     |
| 支持的编程语言  | Node.js、Python、PHP、Java、C#、Go                                 | 无限制                                                                                         | 无限制                                                      |
   
#### 通过控制台创建函数
通过函数工作流控制台，支持创建以下函数。
- [事件函数]
  如果想通过特定事件或定时触发来调用关联函数，可通过函数工作流控制台，如[图1]所示创建事件函数，推荐选择**内置运行时** 作为运行环境。具体操作步骤，请参考[创建事件函数](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_1441.html)。
  图1创建事件函数   
  ![](https://support.huaweicloud.com/productdesc-functiongraph/zh-cn_image_0000002195930296.png "点击放大")
- [HTTP函数]
  如果想基于各个语言的流行框架编写程序，可通过函数工作流控制台如[图2]所示创建HTTP函数，推荐选择**定制运行时** 作为运行环境。具体操作步骤，请参考[创建HTTP函数](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_1442.html)。
  图2创建HTTP函数   
  ![](https://support.huaweicloud.com/productdesc-functiongraph/zh-cn_image_0000002195772924.png "点击放大")
- [GPU函数]
  如果想使用流行AI项目（Stable Diffusion WebUI、ComfyUI、Ollama等）的容器镜像，可通过函数工作流控制台创建GPU实例，如[图3]所示使用**容器镜像创建HTTP函数** 。具体操作步骤，请参见[创建GPU函数](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_2001.html)。
  图3创建GPU函数   
  ![](https://support.huaweicloud.com/productdesc-functiongraph/zh-cn_image_0000002196096078.png "点击放大")
- [模板函数]
  FunctionGraph提供多种场景的函数模板，在使用函数模板创建函数时，能够实现代码与环境变量的自动填充，快速构建函数应用。如您的需求可由函数模板满足，如[图4]所示，可以选择[使用函数模板创建函数](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0401.html)。
  图4使用模板创建函数   
  ![](https://support.huaweicloud.com/productdesc-functiongraph/zh-cn_image_0000002231420913.png "点击放大")
