函数计算 HTTP 触发器支持异步,解放双手搭建 Web 服务

本文涉及的产品
简介: 函数计算 HTTP 触发器支持异步,解放双手搭建 Web 服务

• 对于有并发限制的场景,客户的突增流量在同步调用的场景下会被限流,从而在客户不做错误处理的时候造成一定请求失败。
场景1:脉冲式压测场景。
场景2:限时线上促销活动。
在这些场景下,客户可以通过异步调用将 HTTP 触发和函数执行进行解耦,提升执行效率和执行成功率,降低开销。
异步调用 at least once 的保证, 目标投递的能力,以及具有可观测性和可管控能力的异步任务模式能更好地让客户享受到函数托管服务的便利,解放客户双手。
HTTP 触发器不支持异步调用时,为了满足需求,客户往往需要通过函数转跳的方式间接实现 HTTP 触发异步调用。具体流程如下:
客户可以创建两个函数,函数 A 为 HTTP 函数,通过 HTTP 同步调用;函数 B 为事件函数,可以由 HTTP 函数通过 SDK 进行异步调用。但是该方案的缺点也很明显:
• 成本高:每次异步调用都需要两次触发。
• 无法实现流控全托管:第一层函数为同步调用,面对突增流量被流控,需要客户自行做自适应,从而无法享受异步调用的流控全托管。
• 增加客户开发维护成本:需要开发和维护两个函数来使用异步功能。
新功能:HTTP 触发器支持异步调用
函数计算当前上线支持了 HTTP 触发器进行异步调用的功能。使用本功能,客户需要准备好一个 HTTP 函数和一个 HTTP 触发器。
客户可以通过函数计算控制台、SDK 和 Serverless Devs 工具来进行 HTTP 函数和触发器的创建。HTTP 触发器客户可以自行配置,如果不进行配置,在创建 HTTP 函数的时候,函数计算会为您自动创建一个默认触发器。
HTTP 触发器需要通过请求头 X-Fc-Invocation-Type 来选择触发方式,默认为同步触发,如果需要进行异步触发,则可以在请求头中添加 {"X-Fc-Invocation-Type":"Async"} 从而实现异步触发。
HTTP 异步调用测试
1) 通过控制台进行测试
在函数代码处进行测试,通过勾选异步调用进行异步调用测试。
在测试函数侧可以通过勾选 "我想通过异步的方式进行调用" 实现异步调用测试。
2) 通过 cURL 进行测试
curl -v -H "X-Fc-Invocation-Type: Async" https://http-*.cn-shenzhen.fcapp.run/$path
测试结果查看:
触发完成后会立即返回函数计算接收请求的结果。其中状态码 202 表示请求成功,其余表示请求出现错误。请求 ID 也会在请求头中一并返回,您可以通过返回的请求 ID 追踪异步请求的执行状态。为了更好地观测请求请求执行状态,增加对函数执行的管控,您可以开通异步任务[1]。
可以通过请求 ID 在控制台进行执行结果日志的查询:
对于开通异步任务的请求,可以通过异步任务列表进行状态监测和查询:
对于异步执行结果的回调可以参考函数回调文档[2]。
最佳实践
此处以 HTTP 触发视频转码为例,介绍如何通过结合 Serverless Devs 与控制台,实现 HTTP 触发异步任务。
前提条件:
• 安装 Serverless Devs[3]
• 配置 Serverless Devs[4]
• 创建 OSS 存储空间[5],以便后续测试用例中对 OSS 存储空间进行访问和内容变更。
• 创建 RAM 角色,并授予 OSSFullAccess 权限策略,您也可以直接使用 AliyunFCDefaultRolePolicy 策略。关于权限策略的详细信息,请参见创建 RAM 角色[6]。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
3月前
|
DataWorks 大数据 API
DataWorks RunTriggerNode接口是只能调度 http触发器节点吗?
DataWorks RunTriggerNode接口是只能调度 http触发器节点吗?
139 1
|
6月前
|
前端开发 Java 应用服务中间件
异步编程 - 10 Web Servlet的异步非阻塞处理
异步编程 - 10 Web Servlet的异步非阻塞处理
32 0
|
3月前
|
Serverless
函数计算里FC 3.0中,http触发器配置域名
函数计算里FC 3.0中,http触发器配置域名
|
3月前
|
网络协议 C++
C++异步网络库workflow入门教程(1)HTTP任务
创建任务方法原型 在workflow中所有的客户端任务都放在`WFTaskFactory`工厂类中 + `url:`请求的http url + `redirect_max:`表示最大重定向次数。如果在请求过程中遇到重定向,该参数指定了最多允许重定向的次数。 + `retry_max`:表示最大重试次数。如果请求失败,该参数指定了最多可以重试的次数。 + `callback`:这是一个回调函数的指针,用于处理请求的响应。原型为`using http_callback_t = std::function
68 0
|
3月前
|
Web App开发 前端开发 测试技术
【Web API系列】使用异步剪贴板API(async clipboard)的图像的编程复制和粘贴
【Web API系列】使用异步剪贴板API(async clipboard)的图像的编程复制和粘贴
77 1
|
4月前
|
DataWorks API 调度
DataWorks中http触发器 调用的域名怎么看?
DataWorks中http触发器 调用的域名怎么看?
27 0
|
7月前
|
前端开发 JavaScript
JavaScript 中的异步机制以及http状态码
JavaScript 中的异步机制以及http状态码
44 0
|
10月前
|
Serverless
使用定时器和HTTP触发器的示例代码
使用定时器和HTTP触发器的示例代码
66 1
|
10月前
|
存储 JavaScript 前端开发
web前端面试高频考点——Vue3.x升级的重要功能(emits属性、生命周期、多事件、Fragment、移出.async、异步组件写法、移出 filter、Teleport、Suspense...)
web前端面试高频考点——Vue3.x升级的重要功能(emits属性、生命周期、多事件、Fragment、移出.async、异步组件写法、移出 filter、Teleport、Suspense...)
158 0
|
10月前
|
前端开发 JavaScript
web前端面试高频考点——JavaScript 篇(二)【JS 异步进阶】Event Loop、then 和 catch、async/await、宏任务微任务、手撕 Promise 源码
web前端面试高频考点——JavaScript 篇(二)【JS 异步进阶】Event Loop、then 和 catch、async/await、宏任务微任务、手撕 Promise 源码
144 0