作者| 澈尔(阿里云 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 触发异步调用。详细流程如下:

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

客户能够创立两个函数,函数 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) 经过控制台进行测验

在函数代码处进行测验,经过勾选异步调用进行异步调用测验。

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

在测验函数侧能够经过勾选 “我想经过异步的方法进行调用” 完成异步调用测验。

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

2) 经过 cURL 进行测验

curl -v -H "X-Fc-Invocation-Type: Async" https://http-***.cn-shenzhen.fcapp.run/$path

测验成果查看:

触发完成后会立即回来函数核算接纳恳求的成果。其间状况码 202 表示恳求成功,其余表示恳求出现过错。恳求 ID 也会在恳求头中一并回来,您能够经过回来的恳求 ID 追寻异步恳求的履行状况。为了更好地观测恳求恳求履行状况,添加对函数履行的管控,您能够开通异步使命 [ 1]

能够经过恳求 ID 在控制台进行履行成果日志的查询:

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

关于开通异步使命的恳求,能够经过异步使命列表进行状况监测和查询:

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

关于异步履行成果的回调能够参阅函数回调文档 [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.登录控制台查询使命状况,并对使命进行管控

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

5.函数回调

您能够依据需求在 dest-fail 或 dest-succ 添加处理逻辑,作为转码函数履行成果的回调函数,感知和获取函数履行成果。

函数回调相关文档: help.aliyun.com/document_de…

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

总结

HTTP 触发支撑异步调用,为用户建立 WEB 服务运用函数核算作为全保管渠道打通了最终一公里,让 HTTP 触发器的运用者也能够相同感受到异步调用开箱即用的快捷体验。

参阅链接:

[1] 异步使命:

help.aliyun.com/document_de…

[2] 成果回调:

help.aliyun.com/document_de…

[3] 装置 Serverless Devs:

help.aliyun.com/document_de…

[4] 装备 Serverless Devs:

help.aliyun.com/document_de…

[5] 创立 OSS 存储空间

help.aliyun.com/document_de…

[6]创立 RAM 人物

help.aliyun.com/document_de…

此处,了解 FC 更多资讯!