作者 | 澈尔(阿里云 Serverless 技术专家)
以后阿里云函数计算反对两种类型的函数:事件函数 和 HTTP 函数。其中 HTTP 函数联合 HTTP 触发器,可能反对用户间接通过 HTTP 申请利用 Restful API 的形式发动函数调用;
通过这种形式,用户无需集成函数计算提供的 SDK 就能实现函数调用,更好地同已有零碎的组件及 Web 服务进行集成。
思考到 HTTP 函数最后设计的目标,面向 Web 场景,HTTP 函数并未反对异步调用,随着用户应用 HTTP 函数的场景减少,HTTP 函数无奈反对异步调用的限度,对于用户更宽泛的应用 HTTP 函数带来了诸多的限度。
不反对异步调用,用户有多难?
目前,曾经有很多客户应用函数计算 HTTP 触发器搭建 WEB 服务,其中很多人有通过 Web 服务进行文件(视频、图片等)解决转码,投递工作,进行压测的需要。
这些需要则往往具备长执行,流量不平均等个性。具备这些特色的函数在同步执行的场景下有以下毛病:
1、长执行函数减少函数谬误的危险,晋升机器开销。
- 客户端须要放弃长链接,网络稳定、客户因为函数执行耗时较长失去急躁自主断开链接等,都减少了函数谬误产生的机率。
场景:视频网站用户上传视频转码,耗时长刷新页面导致链接中断,转码失败。
- 放弃长链接减少了客户端的机器开销,升高了客户端机器资源的利用率。
2、面对突增流量无奈平滑解决和接管。
- 对于有并发限度的场景,客户的突增流量在同步调用的场景下会被限流,从而在客户不做错误处理的时候造成肯定申请失败。
场景 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 ]。
操作步骤:
1. 初始化我的项目
s init http-video-transcode -d http-video-transcode
2. 进入我的项目并部署
cd http-video-transcode && s deploy
3. 通过 HTTP 触发器发动异步调用
curl -v -H "X-Fc-Invocation-Type: Async" -H "Content-Type: application/json" -d '{"bucket":"my-bucket","object":"480P.mp4","output_dir":"a","dst_format":"mov"}' -X POST https://http-***.cn-shenzhen.fcapp.run/
4. 登录控制台查问工作状态,并对工作进行管控
5. 函数回调
您能够依据需要在 dest-fail 或 dest-succ 减少解决逻辑,作为转码函数执行后果的回调函数,感知和获取函数执行后果。
函数回调相干文档: https://help.aliyun.com/docum…
总结
HTTP 触发反对异步调用,为用户搭建 WEB 服务应用函数计算作为全托管平台买通了最初一公里,让 HTTP 触发器的使用者也能够一样感触到异步调用开箱即用的便捷体验。
参考链接:
[1] 异步工作:
https://help.aliyun.com/docum…
[2] 后果回调:
https://help.aliyun.com/docum…
[3] 装置 Serverless Devs:
https://help.aliyun.com/docum…
[4] 配置 Serverless Devs:
https://help.aliyun.com/docum…
[5] 创立 OSS 存储空间
https://help.aliyun.com/docum…
[6] 创立 RAM 角色
https://help.aliyun.com/docum…
戳 此处,理解 FC 更多资讯!