AWS Application Load Balancer是否仍然遭受客户的HOL阻止?

时间:2016-10-27 15:10:41

标签: amazon-web-services http2

我们最近切换到亚马逊的新ALB(应用程序负载均衡器),并很高兴能够获得http2多路复用的好处。但看起来仍有一个HOL(线头)阻塞问题正在发生。

enter image description here

客户端能够并行请求图像,但仍需等待一段时间才能开始下载图像。我的猜测是因为AWS的Application Load Balancer终止了http2,然后通过http / 1与ec2实例进行通信,从而产生了HOL延迟。

我可能会错误地阅读此图表,如果是这样,有人可以向我解释为什么内容没有被更快地下载,换句话说,我希望绿色部分更小,蓝色条更快出现。 load balacner和ec2 instance 之间的网络是否会受到HOL的影响?是否有一些神奇的事情发生?

2 个答案:

答案 0 :(得分:1)

我相信您所看到的内容可能与当前Chrome(约为v54)优先处理请求的方式有关。

独家依赖

Chrome使用HTTP / 2的独占依赖项(可以在解析页面并发现新资源时动态重新排列),以使所有流严格依赖于彼此。这意味着所有资源都是一个接一个地有效发送的。我写了一个小实用程序来解析chrome:// net-internals /#http2的输出,以便显示给定页面的树:https://github.com/deweerdt/h2priograph

从流到另一个的依赖关系可以是独占的也可以不是。 RFC 7540的第5.3.1节涵盖了该部分:https://tools.ietf.org/html/rfc7540#section-5.3.1,这是他们在向A添加新流D时给出的示例:

不排他性:

   A                 A
  / \      ==>      /|\
 B   C             B D C

独家:

                     A
   A                 |
  / \      ==>       D
 B   C              / \
                   B   C

实施例

让我们以此页面为例                      Chrome仅使用独占依赖项,因此依赖关系树最初可能如下所示:

 HTML
  |
 PNG
  |
 PNG

当发现javascript时,Chrome会在图片上方重新设置优先级(因为javascript更可能影响网页的呈现方式),因此Chrome会将JS放在HTML的正下方:

 HTML
  |
 JS
  |
 PNG
  |
 PNG

因为所有请求都是以菊花链方式连接的,所以它可能看起来像你在发布的瀑布中一样接一个地执行请求,就像在HTTP / 1中一样,但它们不是,因为它们可以重新排序fly 和所有请求都会尽快发送到浏览器

另一方面,Firefox将具有相同类型的资源共享相同的优先级,因此您应该能够在那里看到一些隔行扫描。

请注意,Chrome所做的事情并不等同于HTTP / 1所发生的事情,因为所有请求都已发送到服务器,因此服务器始终可以通过线路发送。除此之外,订购是动态的,因此如果在页面中发现更高优先级的资源,Chrome将重新排序优先级树,以便此新资源优先于现有的较低优先级资源。

答案 1 :(得分:0)

答案可能会迟到,但仍然如此。

AWS ELB文档明确指出:

  1. 后端连接(ALB和目标之间)仅支持HTTP 1.1
  2. 后端连接不支持HTTP 1.1流水线化(可能已经复制了HTTP 2多路复用)。

因此,从本质上讲,您观察到的是前端连接上的多路复用请求,这些请求由ALB逐一处理,并等待后端答复,直到处理下一个前端请求并将其路由到目标为止。

您可以参考documentation中的“ HTTP连接”部分。