通过 AWS ALB 的 HTTP2 PING 帧(gRPC keepalive ping)

2024-05-08

我正在使用 AWS Application Load Balancer (ALB) 公开 ASP.NET Core gRPC 服务。这些服务在 Fargate 容器中运行并公开不安全的 HTTP 端口。 ALB 终止外部 TLS 连接,并根据路由将未加密的流量转发到目标组。 gRPC 应用程序有多个客户端流式传输端点,客户端可以将流式传输暂停几分钟。我知道有 HTTP2 PING 帧,可以在这种情况下使用,以使在一段时间内没有数据传输的连接保持活动状态。

gRPC 服务器配置为每 20 秒发送一次 HTTP2 ping,以保持连接处于活动状态。我测试了这种方法,它有效,ping 帧来自服务器并被客户端确认。 但当涉及到 ALB 时,这种方法就失败了。在传输暂停期间,我没有看到来自负载均衡器后面的服务器的任何包(我使用 Wireshark)。然后,在 1 分钟超时后,ALB 会重置连接。

我也尝试使用客户端发送的 HTTP2 ping。但连接也会在 1 分钟内重置,我没有证据表明这些 ping 包是否确实到达了 ALB 后面的服务器。 我假设AWS ALB不允许此类数据包通过它,但我没有找到任何证明这一点的文档。


ALB 基于 HTTP 协议语义而不是原始 HTTP/2 帧转发请求。因此,诸如 ping 帧之类的内容仅适用于其中一跳。

如果您想要端到端 ping,您可以定义一个执行 ping 的 gRPC API。对于服务器到客户端,您需要使用服务器端流 API。但实际上最好让客户端启动 ping,以减少服务器必须执行的工作量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 AWS ALB 的 HTTP2 PING 帧(gRPC keepalive ping) 的相关文章

随机推荐