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

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 函数计算 HTTP 触发器支持异步调用,为用户搭建 WEB 服务使用函数计算作为全托管平台打通了最后一公里,以后 HTTP 触发器的使用者,也可以感受到异步调用”开箱即用“的便捷体验。

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


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


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


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


目前,已经有很多客户咋使用函数计算 HTTP 触发器搭建 WEB 服务,其中很多人有通过 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 异步调用测试


  • 通过控制台进行测试


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



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


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


  • 测试结果查看


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


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



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



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

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


最佳实践


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


前提条件:


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


操作步骤:


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/document_detail/422720.html



总结


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

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
4月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
6月前
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
252 35
|
6月前
|
Serverless Python
借助 serverless 将 MCP 服务部署到云端
本文介绍了如何将 MCP 服务通过 SSE 协议部署到云端,避免本地下载和启动的麻烦。首先,使用 Python 实现了一个基于 FastMCP 的网络搜索工具,并通过设置 `transport='sse'` 启用 SSE 协议。接着,编写客户端代码测试服务功能,确保其正常运行。随后,利用阿里云函数计算服务(FC 3.0)以 Serverless 方式部署该服务,包括创建函数、配置环境变量、添加依赖层以及部署代码。最后,提供了客户端测试方法和日志排查技巧,并展示了如何在不同工具(如 Cherry-Studio、Cline 和 Cursor)中配置云端 MCP 服务。
1138 10
借助 serverless 将 MCP 服务部署到云端
|
12月前
|
存储 Serverless 数据库
科普文:云计算服务类型IaaS, PaaS, SaaS, BaaS, Faas说明
本文介绍了云计算服务的几种主要类型,包括IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)、BaaS(后端即服务)和FaaS(函数即服务)。每种服务模式提供了不同的服务层次和功能,从基础设施的提供到应用的开发和运行,再到软件的交付使用,满足了企业和个人用户在不同场景下的需求。文章详细阐述了每种服务模式的特点、优势和缺点,并列举了相应的示例。云计算服务的发展始于21世纪初,随着互联网技术的普及,这些服务模式不断演进,为企业和个人带来了高效、灵活的解决方案。然而,使用这些服务时也需要注意服务的稳定性、数据安全性和成本等问题。
9001 5
|
8月前
|
数据采集 Web App开发 API
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
本文介绍了如何使用FastAPI和Selenium搭建RESTful接口,访问免版权图片网站Pixabay并采集图片及其描述信息。通过配置代理IP、User-Agent和Cookie,提高爬虫的稳定性和防封禁能力。环境依赖包括FastAPI、Uvicorn和Selenium等库。代码示例展示了完整的实现过程,涵盖代理设置、浏览器模拟及数据提取,并提供了详细的中文注释。适用于需要高效、稳定的Web数据抓取服务的开发者。
397 15
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
|
8月前
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
8月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
456 7
|
12月前
|
XML JSON 安全
Web服务是通过标准化的通信协议和数据格式
【10月更文挑战第18天】Web服务是通过标准化的通信协议和数据格式
317 69
|
11月前
|
弹性计算 人工智能 自然语言处理
魔搭社区与函数计算:高效部署开源大模型的文本生成服务体验
在数字化时代,人工智能技术迅速发展,开源大模型成为重要成果。魔搭社区(ModelScope)作为开源大模型的聚集地,结合阿里云函数计算,提供了一种高效、便捷的部署方式。通过按需付费和弹性伸缩,开发者可以快速部署和使用大模型,享受云计算的便利。本文介绍了魔搭社区与函数计算的结合使用体验,包括环境准备、部署应用、体验使用和资源清理等步骤,并提出了改进建议。
|
11月前
|
Go UED
Go Web服务中如何优雅平滑重启?
在生产环境中,服务升级时如何确保不中断当前请求并应用新代码是一个挑战。本文介绍了如何使用 Go 语言的 `endless` 包实现服务的优雅重启,确保在不停止服务的情况下完成无缝升级。通过示例代码和测试步骤,详细展示了 `endless` 包的工作原理和实际应用。
230 3

相关产品

  • 函数计算