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

2022年05月12日 阅读数:10
这篇文章主要向大家介绍函数计算 HTTP 触发器支持异步,解放双手搭建 Web 服务,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

简介:函数计算 HTTP 触发器支持异步调用,为用户搭建 WEB 服务使用函数计算做为全托管平台打通了最后一千米,之后 HTTP 触发器的使用者,也能够感觉到异步调用”开箱即用“的便捷体验。json

做者| 阿里云Serverless技术专家 澈尔segmentfault

当前阿里云函数计算支持两种类型的函数:事件函数和 HTTP 函数。其中 HTTP 函数结合 HTTP 触发器,可以支持用户直接经过 HTTP 请求利用 Restful API 的方式发起函数调用;经过这种方式,用户无需集成函数计算提供的 SDK 就能实现函数调用,更好地同已有系统的组件及 WEB 服务进行集成。网络

考虑到 HTTP 函数最初设计的目的,面向 Web 场景,HTTP 函数并未支持异步调用,随着用户使用 HTTP 函数的场景增长,HTTP 函数没法支持异步调用的限制,对于用户更普遍的使用 HTTP 函数带来了诸多的限制。并发

不支持异步调用,用户有多难?

目前,已经有不少客户咋使用函数计算 HTTP 触发器搭建 WEB 服务,其中不少人有经过 WEB 服务进行文件(视频、图片等)处理转码,投递任务,进行压测的需求。这些需求则每每具备长执行,流量不均匀等特性。具备这些特征的函数在同步执行的场景下有如下缺点:app

长执行函数增长函数错误的风险,提高机器开销。

  • 客户端须要保持长连接,网络波动、客户因为函数执行耗时较长失去耐心自主断开链接等,都增长了函数错误发生的概率。
  • 场景:视频网站用户上传视频转码,耗时长刷新页面致使链接中断,转码失败。
  • 保持长连接增长了客户端的机器开销,下降了客户端机器资源的利用率。

面对突增流量没法平滑处理和接收。

  • 对于有并发限制的场景,客户的突增流量在同步调用的场景下会被限流,从而在客户不作错误处理的时候形成必定请求失败。

场景1:脉冲式压测场景。less

场景2:限时线上促销活动。curl

在这些场景下,客户能够经过异步调用将 HTTP 触发和函数执行进行解耦,提高执行效率和执行成功率,下降开销。异步调用 at least once 的保证, 目标投递的能力,以及具备可观测性和可管控能力的异步任务模式能更好地让客户享受到函数托管服务的便利,解放客户双手。异步

HTTP 触发器不支持异步调用时,为了知足需求,客户每每须要经过函数转跳的方式间接实现 HTTP 触发异步调用。具体流程以下:ide

image.png

客户能够建立两个函数,函数 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 异步调用测试

  • 经过控制台进行测试

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

image.png

在测试函数侧能够经过勾选我想经过异步的方式进行调用实现异步调用测试。

image.png

  • 经过 cURL 进行测试
curl -v -H "X-Fc-Invocation-Type: Async" https://http-***.cn-shenzhen.fcapp.run/$path
  • 测试结果查看

触发完成后会当即返回函数计算接收请求的结果。其中状态码202表示请求成功,其他表示请求出现错误。请求ID 也会在请求头中一并返回,您能够经过返回的请求 ID 追踪异步请求的执行状态。为了更好地观测请求请求执行状态,增长对函数执行的管控,您能够开通异步任务。

能够经过请求ID 在控制台进行执行结果日志的查询:

image.png

对于开通异步任务的请求,能够经过异步任务列表进行状态监测和查询:

image.png

对于异步执行结果的回调能够参考函数回调文档:

https://help.aliyun.com/docum...

最佳实践

此处以 HTTP 触发视频转码为例,介绍如何经过结合 Serverless Devs 与控制台,实现 HTTP 触发异步任务。

前提条件:

  • 安装Serverless Devs
  • 配置Serverless Devs
  • 建立 OSS 存储空间,以便后续测试用例中对 OSS 存储空间进行访问和内容变动。
  • 建立RAM角色,并授予 OSSFullAccess 权限策略,您也能够直接使用AliyunFCDefaultRolePolicy策略。关于权限策略的详细信息,请参见建立RAM角色。

操做步骤:

一、初始化项目

s init http-video-transcode -d http-video-transcode

二、进入项目并部署

cd http-video-transcode && s deploy

三、经过 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/

四、登录控制台查询任务状态,并对任务进行管控

image.png

五、函数回调

您能够根据需求在 dest-fail 或 dest-succ 增长处理逻辑,做为转码函数执行结果的回调函数,感知和获取函数执行结果。

函数回调相关文档:

https://help.aliyun.com/docum...

image.png

总结

HTTP 触发支持异步调用,为用户搭建 WEB 服务使用函数计算做为全托管平台打通了最后一千米,让 HTTP 触发器的使用者也能够同样感觉到异步调用开箱即用的便捷体验。

原文连接
本文为阿里云原创内容,未经容许不得转载。