有奖捉虫:行业应用 & 管理与支持文档专题 HOT
为满足不同使用场景下的用户需求,云函数 SCF 提供了 事件函数Web 函数 两种函数类型。本文介绍了不同函数类型的差异和适用场景,供开发者选型参考。
说明
函数的部署方式与函数类型的选择没有直接的关系,代码部署和镜像部署均可以创建事件函数或 Web 函数。

选型分析

以下从不同维度对比 SCF 两种不同函数类型的特性:
条目
事件函数
Web 函数
设计思想
新的事件驱动架构(EDA)开发模式,通过事件触发函数运行,纯粹纯托管 FaaS,天然与云上产品打通,降低开发门槛,缩短研发周期。
应对主流的 Serverlessful 多线程开发模式,解决传统 Web 框架 FaaS 化改造成本高的问题,用户可以直接发送 HTTP 请求到 URL 触发函数执行。
编程范式
函数入参固定为 JSON 格式的 event 和 context,其中 context 为平台信息,不支持用户自定义,event 为用户自定义信息或格式固定的触发器传入信息。
函数接收原生的 HTTP 或 WebSocket 请求,函数的编写方式接近原生的 Web 服务,并可通过请求头、请求体获取事件结构。
部署方式
代码、镜像
代码、镜像
触发支持
定时触发器、Ckafka 触发器、COS 触发器、API 网关触发器、CLB 触发器、MPS 触发器、TDMQ 触发器、CLS 触发器、云 API。
API 网关器,支持 HTTP 或者 WebSocket 协议。
同步/异步执行
同步/异步
同步
请求多并发
不支持
支持
自定义启动文件
不支持
支持
设置监听端口
不需要
需要监听固定端口 9000
应用场景
与云产品事件结合紧密的业务、拆分合适粒度的业务、计算型密集型场景。
Web 建站、API 服务站点托管。

函数类型

事件函数




事件函数的核心思想为事件驱动,由用户选择事件源(如云 API、API 网关、事件总线 EventBridge 等)并定义事件内容,事件源会按照用户选择的触发规则并将用户自定义的事件内容按照与 SCF 平台约定的格式发送给函数,函数被事件触发运行并将运行结果返回给用户。
SCF 事件函数有三个基本概念:执行方法、函数入参和函数返回。上述概念在通常的项目开发中分别对应:
执行方法:对应项目的主函数,是程序执行的起点。
函数入参:即通常理解的函数入参,但在云函数环境下,入口函数的入参为平台固定值,详情见 函数入参
函数返回:对应项目中主函数的返回值,函数返回后,代码执行结束。

执行方法

SCF 平台在调用云函数时,首先会寻找执行方法作为入口,执行用户的代码。此时,用户需以文件名.执行方法名的形式进行设置。 例如,用户设置的执行方法为 index.handler,则 SCF 平台会首先寻找代码程序包中的 index 文件,并找到该文件中的 handler 方法开始执行。 在执行方法中,用户可对入口函数入参进行处理,也可任意调用代码中的其他方法。SCF 的某个函数以入口函数执行完成或函数执行异常作为执行结束。

函数入参

函数入参,是指函数在被触发调用时所传递给函数的内容。通常情况下,函数入参包括 eventcontext 两部分。
event 参数类型为 dict,event 中包含了触发函数执行的基本信息,可以是平台定义的格式,也可以自定义格式。函数被触发开始执行后,可以在代码内部对 event 进行处理。
context 为 SCF 平台提供的入参,将 context 入参传递给执行方法,代码可通过解析 context 入参对象,获取到运行环境及当前请求的相关信息。

函数返回

SCF 平台会获取到云函数执行完成后的返回值,并根据不同的触发方式进行处理。
同步触发:通过 API 网关触发函数或者云 API 同步触发函数,函数在执行期间,SCF 平台不会返回触发结果,在函数执行完成后,SCF 平台会将函数返回值封装为 JSON 格式并返回给调用方。
异步触发:通过定时触发器、COS 触发器等异步触发器或者云 API 异步触发函数,SCF 平台接收触发事件后,会返回触发请求 ID ,在函数执行完成后,函数的返回值会封装为 JSON 格式并存储在日志中。用户可在函数执行完成后,通过返回的请求 ID 查询日志获取该异步触发函数的返回值。

Web 函数




SCF Web 函数区别于事件函数对于事件格式的限制,专注于优化 Web 服务场景,用户可以直接发送 HTTP 请求到 URL 触发函数执行。
用户发送的 HTTP 请求经过 API 网关后,网关侧将原生请求直接透传的同时,在请求头部添加了网关触发函数时需要的函数名、函数地域等平台信息,并一起传递到函数环境,触发后端函数执行。
函数环境内,通过内置的 Proxy 实现 Nginx 转发,并去除头部非产品规范的请求信息,将原生 HTTP 请求通过指定端口发送给用户的 Web Server 服务。
用户的 Web Server 配置好指定的监听端口9000和服务启动文件后部署到云端,通过该端口获取 HTTP 请求并进行处理。