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 的流式传输额度。
这一功能的推出为开发者提供了更灵活和高效的响应处理方式,特别适用于需要处理大文件或对性能要求较高的应用场景。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。