HTTP 2.0 对内网服务之间的通信是不是没啥帮助?

2022-09-25 19:45:52 +08:00
 mitu9527

感觉 HTTP 2.0 的 header 压缩还能多少有些作用,但恐怕作用不大,因为服务器和服务器间通信时 header 数量不多。而多路复用、二进制分帧好像对内网服务器之间的通信不但没帮助,还会负优化。服务器推送貌似在客户端和服务器通信时比较有用,服务器和服务器通信时基本上用不到。

综上所述,有两个猜测:

  1. HTTP 2.0 对内网服务器之间的通信是不是真没啥太大帮助?
  2. 基于 1, 微服务使用 gRPC (使用 HTTP 2.0 作为通信协议,使用 protobuf 作为数据交换格式)通信时,真正能提升效率的是 protobuf ?那感觉 gRPC 也不会比传统的 HTTP 1.1 + JSON 快多少啊。

上面两个猜测是对的么?还是我漏掉了什么,求解惑。

3841 次点击
所在节点    程序员
36 条回复
Reficul
2022-09-25 23:52:45 +08:00
会负优化,在整体只考虑 HTTP QPS 的压测情况下,因为协议复杂 + TLS 的原因,回避 HTTP 1 慢不止一倍。
jim9606
2022-09-26 00:35:30 +08:00
内网通信应该主要想使用 HTTP2 的 stream multiplex ,HTTP1.1 即使使用 keep-alive 也依然存在队头阻塞( HOL Blocking )的问题,头压缩什么的应该不是主要目的,跟 Web 应用需要每个请求都重复传一堆头字段不一样,gRPC 没这个问题。

另外 json 有一个缺陷是它是 schemaless+文本,除了编码要带上结构信息占据额外流量外还涉及大量字符串操作,会带来很大的 GC 压力。

另外 protobuf 还有些我道听途说的问题,protobuf 理论上编码很高效,但 protoc 生成的代码实际性能不见得高,经常搞出一堆编译警告; google monorepo 模式带来的副作用——跨版本兼容性不佳,你有信心保证一个大型项目(可能还有外部合作方)里所有组件都依赖相同版本的 protobuf 吗?
IvanLi127
2022-09-26 08:16:43 +08:00
@sam384sp4 h2c ,不需要 tls 。
echo1937
2022-09-26 08:45:53 +08:00
现在没有浏览器支持 h2c ,postman 好像也没有支持 h2c 的,所以调试起来比较麻烦。

另外就是有些前端,或者上游调用的客户端比较老的话,也不支持 h2c 。

现在有没有同时支持 h2c 和 HTTP 1.1 ,并支持自动 upgrade 到 h2c 的实现方案啊?
janxin
2022-09-26 08:55:12 +08:00
你这么问应该是没用 mTLS...

当然只考虑性能,自然还是抛弃 TLS 更好
ZE3kr
2022-09-26 09:11:47 +08:00
对内网还是很有帮助的,对 localhost 没啥帮助
julyclyde
2022-09-26 09:46:40 +08:00
所谓负优化,很多时候其实体现在不方便 tcpdump 吧
正常工作状态只是优化意义小,谈不上负
oceanthe1h
2022-09-26 11:47:48 +08:00
个人理解,对于 web 界面来说,H2 多路复用可以让多个小图片对用户呈现同步加载的效果,对于服务器的响应包来说,以字节流为单位的多路复用好像意义不大,服务器需要完整的响应包才能有效解析,如果以包为单位的多路复用,好像 NIO 的 channel 就能够实现在一条 TCP 连接作为逻辑连接,也没必要使用传输层的分帧
darknoll
2022-09-26 12:58:05 +08:00
做个对比测试不行吗?上来就谈我感觉怎么样怎么样。
mitu9527
2022-09-26 14:55:51 +08:00
@darknoll 不做对比测试就不配发言了么?你都可以回复,为啥我不能发言?
darknoll
2022-09-26 14:59:30 +08:00
@mitu9527 滚一边去吧
mitu9527
2022-09-26 15:05:00 +08:00
@darknoll 你要是看着不舒服,不回复关了就是了,整这么一出,什么人啊?
julyclyde
2022-09-27 09:58:56 +08:00
@mitu9527 人家在讨论学习方法,你却认为是人身攻击
我只能说,差的人确实有差的原因
mitu9527
2022-09-27 12:18:08 +08:00
@julyclyde 我攻击他了么?如果所有的讨论都可以转化成自己测试和研究,以后别提问题也别说话了?你能做到么?
julyclyde
2022-09-27 12:20:33 +08:00
@mitu9527 你没攻击啊。你是把别人的劝告当成攻击,然后反应过激
你现在都已经过激到连我说(你认为他攻击)还是说(你攻击)都分不清的地步了
mitu9527
2022-09-27 13:22:25 +08:00
@julyclyde 差的人确实有差的原因,这叫劝告?你平时上来就和陌生人这么说话?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/882839

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX