使用 AWS 负载均衡器之一对 gRPC 请求进行负载均衡

Load balancing gRPC requests using one of AWS Load Balancers

我正在尝试确定是否可以使用 (A/E/N)LB 之一来负载平衡 gRPC 流量。在我们的案例中,一个简单的循环就足够了。

我了解到 ALB 不完全支持 HTTP2,因此不能与 gRPC 一起使用。具体而言,不支持向下游发送 HTTP2 流量,并且不支持预告片 headers。现在还是这样吗?

找不到关于 NLB 或 "classic" ELB 的任何明确答案。有什么提示吗?

在 AWS 上使用 gRPC 遇到了一些重大挑战。如果 AWS Application Load Balancer 没有完全 HTTP/2 支持,您必须启动和管理自己的负载均衡器。 NLB 和 ELB 都不是 AWS 上可行的替代方案,因为存在进出同一主机的流量、动态端口映射、SSL 终止复杂性以及 TCP 连接的次优客户端和服务器端循环等问题。

gRPC 展示了性能改进,但是,无论是使用 Nginx 还是 Envoy 等 LB,都需要大量的基础设施工作才能采用;或者使用 Istio 之类的东西设置服务网格。另一种可能性是使用胖客户端负载平衡,尽管这也需要额外的服务发现基础设施,例如 Consul 或 ZooKeeper。

AWS 最近宣布了一项名为 AWS App Mesh 的新服务。 AWS App Mesh 支持 HTTP2 和 gRPC 服务

gRPC 现在可以使用 AWS App Mesh 建模和管理其服务间通信。

参考:

自 2020 年 10 月 29 日起,应用程序负载均衡器现在支持 HTTP/2 和 gRPC 负载均衡。来自 the announcement:

To use the feature on your ALB, choose HTTPS as your listener protocol, gRPC as the protocol version for your target group and register instance or IP as targets for the configured target group. ALB provides rich content based routing features that will let you inspect gRPC calls and route them to the appropriate target group based on the service and method requested. Within a target group, ALB will use gRPC specific health checks to determine availability of targets and provide gRPC specific access logs to monitor your traffic.

The support for gRPC and end-to-end HTTP/2 is available for existing and new Application Load Balancers at no extra charge in all AWS Regions. To learn more, please refer to the blog post, demo, and the ALB documentation.