【问题标题】:HTTP 2.0 vs HTTP 1.1 with connection pool on server to server communicationHTTP 2.0 与 HTTP 1.1 与服务器到服务器通信上的连接池
【发布时间】:2018-05-04 12:17:27
【问题描述】:

我最近一直在阅读有关 HTTP 2.0 的文章,我试图了解服务器到服务器 (REST) 通信是否有任何好处。 该场景是服务器 A 向服务器 B(或少量服务器 2 实例)发送 REST Json 消息。 通常 HTTP 客户端维护连接池并重用旧连接,因此如果服务器在建立连接后通过 HTTP 1.1 进行通信,它将被重用。在那种情况下,HTTP 2.0 有什么好处? 此外,如果服务器 B 经常超时,那么使用 HTTP 1.1 连接将不得不关闭并再次打开,这是一种开销。但是使用 HTTP 2.0,情况会不会一样?

【问题讨论】:

    标签: rest http http2


    【解决方案1】:

    对于少量的服务器,我认为 HTTP/1.1 和 HTTP/2 之间不会有很大的区别。 我认为小请求率也是如此。 在这两种情况下,ServerA 中的 HTTP 客户端都需要打开和汇集少量连接,可能只有一个。

    对于大量服务器(数百或更多)或高请求率,情况可能会有所不同,这将迫使 HTTP/1.1 打开并维护大量连接。 这就是 HTTP/2 的多路复用特性真正大放异彩的地方,让 HTTP/2 比 HTTP/1.1 更具优势。

    最后,在使用 HTTP/2 时,您还需要考虑请求和响应内容的大小。 与 HTTP/1.1 不同,HTTP/2 在协议级别强制执行流量控制,如果流量控制窗口太小,这可能会导致上传/下载停止。
    幸运的是,这应该可以在良好的 HTTP/2 客户端和服务器实现中进行配置。
    对于较小的内容大小,您应该不会看到流量控制机制的太多干扰,因此 HTTP/2 的性能应该与 HTTP/1.1 一样好。
    对于较大的内容大小,您希望将流量控制窗口配置为更大的值,以避免流量控制机制过于频繁地停止上传/下载。

    【讨论】:

    • 感谢您的解释。如果服务器 B 经常超时,你的答案会改变吗? HTTP/2 如何处理超时?多路复用时它是否也会关闭连接,或者即使其中一个请求超时,它也会为后续请求/响应保持连接打开?
    • 通过 HTTP/2 多路复用,您有 2 个超时,而在 HTTP/1.1 中基本上只有一个:request 超时和 connection 超时。如果服务器超时了某个请求,但其他请求正在正常处理,则连接将保持打开状态。如果一个连接没有任何流量(即它只有一个未完成的请求,没有其他多路复用请求),那么最终请求连接将超时。 HTTP/2 中的单个请求超时意味着服务器向客户端发送回一个RST_STREAM 帧。
    猜你喜欢
    • 1970-01-01
    • 2016-07-29
    • 2019-09-25
    • 2015-04-22
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多