我只是很好奇我是否在 http2 中遗漏了一些可以提高服务到服务通信效率的东西,例如在微服务架构中。
它的改进仅与最终用户(浏览器)有关吗?
HTTP/2 为服务到服务的通信增加了一个额外的方面,这在 HTTP/1.1 中不是强制性的。这就是 SSL/TLS 形式的安全性。
尽管 RFC 标准没有要求,但几乎所有 HTTP/2 服务器和客户端都将仅支持 HTTP/2 over TLS,这使得加密成为事实上的强制性。
因此,如果您想通过 HTTP/2 提供和使用微服务,您必须考虑创建、管理 SSL 证书并将其分发到服务器和客户端的方法。
因此,迁移到 HTTP/2 意味着向您的服务生态系统引入新的技术堆栈,例如公钥基础设施。
另一种为服务消费者准备好服务 HTTP/2 的方法是在启用 HTTP/2 的消费者和 HTTP/1.1 服务之间放置一个反向代理。
代理将终止来自消费者的 HTTP/2 连接,并将它们转换为您的服务器的 HTTP/1.1 请求(反之亦然)。
这将实现关注点分离,您的服务将只负责它们的业务逻辑内容,而代理将处理证书和加密。但同样,您会增加系统的复杂性。
更复杂,但也更好地利用网络资源
更复杂的是你付出的代价。但是您可以更智能地消耗网络资源。使用 HTTP/1.1,您可以在一个客户端和服务器之间建立多个 TCP 连接。并且几乎总是需要打开多个连接来克服 HTTP/1.1 的性能缺陷。
但是,建立 TCP 连接是一项昂贵的任务。为了创建它们 DNS 查找,TCP 握手和 SSL 握手是必要的。
HTTP/2 将一个客户端和一个服务器之间打开的 TCP 连接的数量限制为恰好一 (1) 个。但与此同时,HTTP/2 为我们带来了连接复用,即您可以在同一个 TCP 连接上同时进行多个 HTTP 会话(HTTP/1.1:1 个 TCP 连接 = 1 个 HTTP 连接)。