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

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
注册配置 MSE Nacos/ZooKeeper,182元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: HTTP 触发支持异步调用,为用户搭建 WEB 服务使用函数计算作为全托管平台打通了最后一公里,让 HTTP 触发器的使用者也可以一样感受到异步调用开箱即用的便捷体验。

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


1.png

image.gif

客户可以创建两个函数,函数 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.png


在测试函数侧可以通过勾选 "我想通过异步的方式进行调用" 实现异步调用测试。


3.png


2) 通过 cURL 进行测试


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


测试结果查看:


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


可以通过请求 ID 在控制台进行执行结果日志的查询:

image.gif

4.png


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


5.png

image.gif

对于异步执行结果的回调可以参考函数回调文档[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.登录控制台查询任务状态,并对任务进行管控

image.gif

6.png


5.函数回调


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


函数回调相关文档: https://help.aliyun.com/document_detail/422720.html


7.png


总结


HTTP 触发支持异步调用,为用户搭建 WEB 服务使用函数计算作为全托管平台打通了最后一公里,让 HTTP 触发器的使用者也可以一样感受到异步调用开箱即用的便捷体验。


参考链接:


[1] 异步任务:

https://help.aliyun.com/document_detail/62921.html


[2] 结果回调:

https://help.aliyun.com/document_detail/422720.html


[3] 安装 Serverless Devs:

https://help.aliyun.com/document_detail/195474.htm


[4] 配置 Serverless Devs:

https://help.aliyun.com/document_detail/295894.html


[5] 创建 OSS 存储空间

https://help.aliyun.com/document_detail/31842.html


[6] 创建 RAM 角色

https://help.aliyun.com/document_detail/116800.htm#


此处,了解 FC 更多资讯!

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
3月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
239 61
|
4月前
|
数据采集 安全 网络安全
使用aiohttp实现异步HTTPS爬虫的SSL优化
使用aiohttp实现异步HTTPS爬虫的SSL优化
277 81
|
3月前
|
应用服务中间件 网络安全 数据安全/隐私保护
网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
196 14
|
5月前
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
217 35
|
6月前
|
关系型数据库 MySQL PHP
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
148 18
|
8月前
|
缓存 网络协议 前端开发
Web 性能优化|了解 HTTP 协议后才能理解的预加载
本文旨在探讨和分享多种预加载技术及其在提升网站性能、优化用户体验方面的应用。
Web 性能优化|了解 HTTP 协议后才能理解的预加载
|
9月前
|
域名解析 缓存 网络协议
Web基础与HTTP协议
通过掌握这些基础知识和技术,开发者可以更加高效地构建和优化Web应用,提供更好的用户体验和系统性能。
192 15
|
5天前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
133 12
|
5月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
527 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
3月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
211 0

相关产品

  • 函数计算