AWS Lambda 引入响应负载流式传输

AWS Lambda 推出响应流式传输功能

Amazon 最近宣布,AWS Lambda 函数现在可以逐步将响应有效载荷流式传输回客户端。这一新功能提升了 Web 和移动应用程序的性能,目前支持 Node.js 14.x 及更新版本,以及自定义运行时。

主要特性

  • 响应流式传输:允许开发者将函数的响应流式传输给用户,而无需等待整个响应完成。
  • 支持场景:适用于处理大文件(如图片、视频、大型文档或数据库结果)的场景。
  • 实现方式:需要使用 streamifyResponse() 装饰器包装 Lambda 函数处理程序,并通过 responseStream 对象将数据立即发送给客户端。
  • 内容类型设置:开发者可以选择设置 Content-Type 头以传递流的相关信息。

技术细节

  • 支持平台:目前仅支持 Lambda 函数 URL 和 SDK,暂不支持 API Gateway 或 Application Load Balancer (ALB)。
  • 限制:最大响应大小为 20 MB(软限制),流式函数的带宽吞吐量上限为 16 Mbps(2 MB/s)。
  • 免费额度:AWS 免费层每月包含 100GiB 的 HTTP 响应流式传输,超出每请求前 6MB 的部分。

优势与用例

  • 性能提升:减少首次字节时间(TTFB),特别适合对页面加载性能敏感的 Web 应用程序。
  • 应用场景:特别适用于 Next.js 和 React 开发者,用于减少服务器端渲染时的 TTFB。
  • 突破限制:允许 Lambda 函数超过标准的 6MB 有效载荷限制。

开发者反馈

  • Julian Wood:传统请求-响应模型需要完全生成和缓冲响应,而流式传输可以显著提升 TTFB 性能。
  • AJ Stuyvenberg:这一功能看似微小,但为多个关键用例(如服务器端渲染)提供了支持。
  • Jeremy Daly:流式传输不仅减少了 TTFB,还突破了 Lambda 的 6MB 有效载荷限制。
  • Yan Cui:通过流式传输,开发者可以绕过将结果存储在 S3 的需求,直接返回大型对象。

其他相关信息

  • 实现其他语言:虽然目前仅原生支持 Node.js SDK,但可以通过自定义运行时在其他编程语言中实现流式传输。
  • 竞争产品:Vercel 最近也提供了对 Node.js 和 Edge 运行时的 HTTP 响应流式传输支持。
  • 示例应用:AWS 在 Serverless Patterns Collection 中发布了支持 AWS SAM 构建和部署资源的 Lambda 流式应用示例。

成本影响

  • 网络传输成本:流式传输会增加 Lambda 的网络传输成本,但 AWS 免费层提供了每月 100GiB 的流式传输额度。

这一功能的推出为开发者提供了更灵活和高效的响应处理方式,特别适用于需要处理大文件或对性能要求较高的应用场景。

阅读 28
0 条评论