亚马逊AWS官方博客

Amazon CloudFront 部署小指南(十四)- 利用 Amazon CloudFront 实现 gRPC 协议加速

前言

2024 年 11 月,Amazon CloudFront 宣布正式支持 gRPC 协议。这一重要更新使得开发者和企业能够充分利用 CloudFront 遍布全球的边缘计算基础设施,为其 gRPC 应用程序/API 提供前所未有的性能提升。通过将 gRPC 请求直接路由到最近的 CloudFront 边缘节点,用户可以显著减少网络延迟,提升应用响应速度,同时确保全球范围内的一致性服务体验。

理解 gRPC

gRPC 是由 Google 开发并开源的新一代 RPC(远程过程调用)框架,它代表着现代分布式计算的重要发展方向。作为一个高性能、跨平台的通信框架,gRPC 已经成为微服务架构中不可或缺的核心组件,其具有优秀的性能表现,广泛的跨平台支持,以及企业级安全特性,更多详细材料您可以参考该链接

在传统的浏览器/移动端与服务端通信场景中,HTTP 协议凭借其简单性、广泛的支持度以及成熟的生态系统,一直是主导性的通信协议选择。HTTP 协议不仅拥有完善的缓存机制和跨域解决方案,还具有出色的调试能力和丰富的中间件支持,这使其在面向外部的 API 服务中占据主导地位。

然而,在现代分布式系统架构中,特别是在微服务内部通信场景下,gRPC 展现出了其独特的优势。首先,基于 HTTP/2 的 gRPC 协议提供了更高的性能和更低的延迟;其次,Protocol Buffers 的强类型定义确保了接口的规范性和稳定性。在多语言混合开发环境中,gRPC 的跨语言特性更是显得尤为重要,它能够自动生成各种编程语言的客户端和服务端代码,大大提高了开发效率和系统的可维护性。

在当今云原生时代,gRPC 的这些特性使其成为构建现代分布式系统的理想选择,而 CloudFront 对 gRPC 的支持更是为全球化部署提供了新的可能性。

CloudFront gRPC 功能优势

在进行程序设计时,客户端与云上应用程序有时不可避免需要进行 gRPC API 通信,当面向全球用户并发访问的场景,公网的网络性能会较大程度影响用户的访问体验。利用 CloudFront 进行 gRPC 请求加速,用户可以获得如下收益:

  1. 降低 API 网络延迟,提升访问稳定性:CloudFront 提供由 600 多个边缘站点组成的全球网络,可智能路由到最近的边缘站点。边缘站点为您的静态内容提供 TLS 终结和内容缓存。CloudFront 通过完全托管、低延迟和高带宽的私有 AWS 网络将客户端应用程序请求传输到您的 gRPC 源站;
  2. 配置简单:同一个 CloudFront 分配,可同时支持 HTTP 与 gRPC 请求。您可以结合 Amazon Elastic Load Balancer 作为后端源站,将不同协议的请求路由到不同的后端应用程序;
  3. 您的应用程序受益于部署在边缘站点上的额外安全服务,如 Amazon Shield Standard 提供的免费的对分布式拒绝服务 (DDoS)攻击的保护;您也可以同时结合 Amazon Web Application Firewall,轻松集成 7 层恶意请求防护能力。

CloudFront gRPC 配置

在 CloudFront 上开启 gRPC 配置非常简单,您只需要在创建分配时:

  1. 配置您的源站地址
  2. 开启 POST 请求支持
  3. 开启 gRPC 请求支持
  4. 根据您的内容类型,选择合适的缓存策略
  5. 确认创建/修改分配

通过以上简单的配置,您即可对您的分配开启 gRPC 的支持。

效果演示(动手构建 gRPC 测试环境)

本次演示 Demo,架构环境如下:

架构说明:

  • 应用程序部署在 Amazon Elastic Container Service 中,采用 Fargate 引擎以 Serverless 形式部署。
  • 服务采用 Amazon Application Load Balancer 暴露,转发规则为/http/*路径请求转发至 Nginx 服务,除此之外的路径请求转发至 gRPC 服务。
  • CloudFront 开启 gRPC 配置:

为了方便您在您自己的环境进行快速测试验证,您可以参考该 CDK 代码以及部署说明进行快速服务端环境部署。

对于 gRPC 客户端的部署,您可以参考 gRPC 官方文档进行快速搭建,并利用/grpc/examples/python/helloworld/greeter_client.py 脚本模拟 gRPC 请求。您需要在脚本中按如下方式更改请求目标端为 CloudFront 域名:

访问 1:

客户端向 CloudFront 发起 HTTPS 请求:

可以看到 Nginx 服务端正常响应了客户端的 HTTPS 请求。

访问 2:

客户端向 CloudFront 发起 gRPC 请求:

可以看到 gRPC 服务端正常响应了客户端的 gRPC 请求。

参考链接

gRPC 官方文档:https://grpc.io/docs/languages/python/quickstart/

gRPC on CloudFront:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-using-grpc.html

本篇作者

孟祥智

亚马逊云科技解决方案架构师