云运行是不是支持 http/2 流而不支持 http1.1 流?

Posted

技术标签:

【中文标题】云运行是不是支持 http/2 流而不支持 http1.1 流?【英文标题】:Does anyone know if cloud run supports http/2 streaming while it does NOT support http1.1 streaming?有谁知道云运行是否支持 http/2 流而不支持 http1.1 流? 【发布时间】:2020-06-27 22:24:36 【问题描述】:

我们有一个流式端点,其中数据通过我们的 api.domain.com 服务流向我们的 backend.domain.com 服务,然后当在 backend.domain.com 中接收到块时,我们将这些块写入数据库。通过这种方式,我们可以 ndjson 将请求发送到我们的服务器,而且速度非常快。

我们非常失望地发现至少(通过 curl)http1.1 的云运行防火墙不支持流式传输!!!! curl 正在对谷歌云运行防火墙执行 http2,而谷歌默认使用 http1.1 访问我们的服务器(出于某种原因,尽管我看到了一个以 http2 模式启动的选项,但我们还没有尝试过)。

我的意思是,他们不支持流式传输是谷歌不会向我们的服务器发送请求,直到他们收到整个请求!!!(即不仅仅是标题,它需要接收整个正文。 ...与直接通过防火墙 1、云运行服务 1、防火墙 2、云运行服务 2、数据库进行流式传输相比,这会使事情变得非常慢。

我想知道谷歌的云运行防火墙是否偶然支持 http/2 流并实际发送请求标头而不是等待整个正文。

意识到谷歌有正文尺寸限制.......并且我意识到我们在收到整个正文之前以 200OK 响应客户d(即。我们在流式传输请求时返回)太棒了,如果超过大小限制,我完全可以接受 google 终止连接。

所以我在这篇文章中的第二个问题是,如果他们确实支持流式传输,那么当超过大小时他们会怎么做,因为那时我已经回复了 2000k。

在这篇文章中,我对流媒体的定义是“真正的流媒体”。您可以将请求流式传输到系统中,该系统可以将其转发到下一个系统并继续读取/转发和读取/转发,而不是等待整个请求。谷歌云运行防火墙不是我对流媒体的定义,因为它不会通过它收到的块!我们的服务器在接收数据时发送数据,因此如果有很多跃点,由于 webpieces 网络服务器,不会产生影响。

【问题讨论】:

Google Cloud Run 不支持您的目标/定义。 Cloud Run 前面是一个代理 (GFE)。 GFE 不支持流式传输。我建议您考虑使用 Google Compute Engine,而不是托管容器服务。 @JohnHanley 在下面查看 wlhee 的答案。听起来它可能即将到来,这将是很棒的!!! 是的,我知道 Alpha 功能,但其中一些功能处于 NDA 之下。我是 Google GDE,我认识产品经理。对于我的 cmets/answers,我更喜欢推荐 GA 功能,有时甚至是 beta。 Alpha 功能可能会发生变化,这不利于长期答案。 啊,好的,很酷,谢谢@JohnHanley 【参考方案1】:

很遗憾,Cloud Run 不支持 HTTP/2 端到端服务实例。

服务器端流式传输位于 ALPHA 中。不确定它是否有助于解决您的问题。如果是,请填写以下表格以选择加入,谢谢!

https://docs.google.com/forms/d/e/1FAIpQLSfjwvwFYFFd2yqnV3m0zCe7ua_d6eWiB3WSvIVk50W0O9_mvQ/viewform

【讨论】:

这太棒了!!我注册了,但是有没有办法将每个服务器实例列入白名单,这样我就可以先将登台列入白名单!有没有办法打开/关闭? @wlhee

以上是关于云运行是不是支持 http/2 流而不支持 http1.1 流?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 FFMPEG 保存 rtsp 流而不丢包

分组 Java8 流而不收集它

您可以使用流而不是本地文件上传到 S3 吗?

为 HTTP/2 代理实现 websocket 支持

无需修改代码,用 fcapp.run 运行你的 REST 应用

facebook-ios-sdk 是不是使用 iOS 6 Facebook 集成来支持登录而不打开本机 Facebook 应用程序?