2

我只是很好奇我是否在 http2 中遗漏了一些可以提高服务到服务通信效率的东西,例如在微服务架构中。

它的改进仅与最终用户(浏览器)有关吗?

4

2 回答 2

6

如果您在微服务之间发出许多并发请求,那么连接多路复用会带来好处。您无需在客户端管理 TCP 连接池,并在服务端限制传入的 TCP 连接数。

一些服务可能会从服务器推送中受益,尽管这实际上取决于服务的作用。如果您对具有重复元数据的服务的流量很高,则标头压缩会很有用。更多信息可以在这里找到。

总之,是的,它的设计更多考虑了最终用户,但 RESTful 微服务也很有价值,尤其是由于连接多路复用。

于 2015-03-17T06:44:10.833 回答
5

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 连接)。

于 2017-04-06T06:03:26.983 回答