我使用的是Microservice体系结构,其中一个服务一次使用nodejs上的服务器调用多个服务
我计划将HTTP2用于API从一个服务到另一个服务的调用,因为它只使用一个带有头压缩的TCP连接。
但是,HTTP2需要TLS支持,这意味着对服务向其他人发出的每个API调用都进行TLS握手,增加了开销往返。
虽然TLS1.3只需要一次往返,但仍然会增加一些额外的开销时间。
我的问题是,对于从一个服务到另一个服务的API调用,首先使用HTTP2是个好主意,还是继续使用HTTP1.1更好
发布于 2022-01-12 22:06:47
HTTP2很可能不会比普通HTTP1.1表现得更好。只有在HTTPS和并行请求的上下文中比较它们时,它们才会更快。HTTP2允许重复使用相同的TLS握手,以及对多个并行请求(多路复用)使用相同的连接。
这就是为什么不设置nginx与应用服务器之间的HTTP2的原因--因为您通常不需要在它们之间设置TLS。因此,除非a)您需要在您的服务和b)之间建立一个安全的连接,否则您计划发出并行请求--使用HTTP2进行服务到服务的通信似乎没有意义。
PS:还可以阅读@sbordet的答案--似乎有一些用例,即使没有TLS,HTTP2也是有益的。
发布于 2022-01-12 22:40:01
HTTP/2不需要TLS的支持。
正因为如此,所有浏览器供应商(只有他们)都决定不支持明文HTTP/2,但其他客户机,如curl或Java客户端等,确实支持明文HTTP/2。
但是,对于服务器与服务器之间的通信,可以使用明文HTTP/2,实际上这是一个非常常见的部署。
同样不幸的是,作为反向代理或负载平衡器使用的流行服务器不支持使用HTTP/2调用后端,但这只是一个实现限制。
例如,HAProxy允许卸载TLS,然后使用明文HTTP/2调用后端。
如果在前端接收到许多多路复用请求,则可以将HTTP/2多路复用应用到后端,从而节省大量资源。请求将30多路复用资源请求到前端的网页在使用HTTP/1 (或更少的连接和效率较低)时,需要打开或以其他方式使用30种不同的后端连接,而在使用HTTP/2时仅使用1。当对后端使用HTTP/2时,您不限于仅使用1个连接,就像您在使用HTTP/1时不限于使用6个连接(这些只是浏览器的限制,不适用于服务器到服务器的通信)。
此外,使用HTTP/2功能的后端应用程序,如HTTP/2 push (尽管现在正在逐步淘汰),将使用纯HTTP/2通信透明地工作,而在向后端使用HTTP/1通信时则不能使用HTTP/2功能。对于任何其他HTTP/2特性,如PING帧、设置帧等,这都是正确的,在使用HTTP/1与后端应用程序通信时,所有这些功能都会丢失。
从资源的角度来看,智能反向代理或负载均衡器只需卸载TLS,然后盲目地将HTTP/2明文字节转发到后端--不需要向任何方向解释字节。不需要解析HTTP/2请求,将其转换为HTTP/1格式,当接收到HTTP/1响应时(从HTTP/1转换到HTTP/2),反之亦然。这会导致不必要的CPU烧录和TCP连接的使用。
因此,在原则上,朝着后端的HTTP/2是非常可取的。
我曾经使用过集群系统,其中HTTP/2用于服务器与服务器之间的通信对于整个集群所使用的资源来说是一个巨大的好处。
然而,现实情况是,最流行的前端服务器不支持面向后端的HTTP/2 (主要是出于非技术原因),因此大多数情况下,您只需放弃并部署次优系统。
https://stackoverflow.com/questions/70688861
复制相似问题