影响TCP连接吞吐量的致命因素:HOL

网络 网络管理
虽然HTTP/2解决了HTTP/1.1的HOL问题,但由于是建立在TCP基础上,所以仍然存在TCP层面的HOL问题。

一、什么是HOL

HOL是Head of line blocking的意思,在互联网领域,包括HTTP head of line blocking和 TCP head of line blocking。

1. HTTP Head of line blocking

Wikipedia对HTTP HOL的解释如下:

影响TCP连接吞吐量的致命因素:HOL (干货)

虽然HTTP/2解决了HTTP/1.1的HOL问题,但由于是建立在TCP基础上,所以仍然存在TCP层面的HOL问题。

2.  TCP Head of line blocking

TCP HOL定义如下:

影响TCP连接吞吐量的致命因素:HOL (干货)

例如在TCP接收缓冲区,请求的第一个数据包由于某种原因一直未到达,缓冲区里面的后续数据包就无法传递给上层应用,只能处于等待中,直到第一个数据包过来,才能一起传递给上层应用。

TCP HOL带来的问题具有普遍性。只要利用TCP,就有这方面的问题,因此影响范围非常广泛。

二、案例分析

1.  Network switches

影响TCP连接吞吐量的致命因素:HOL (干货)

上图展示了网络交换机中不同input队列是如何因为HOL等待的。

第一个和第三个input队列,都在竞争使用Output 4。如果交换机选择传递第三个input队列的数据包,那么第一个input队列的数据包只能选择等待。第一个input队列中的序号3数据包因为HOL只能等待,虽然output 3是空闲的。

2.  单个连接 vs 多个连接实验

下面是并发为1的吞吐量,为153.60 reqs/sec。

 

影响TCP连接吞吐量的致命因素:HOL (干货)

 

 

影响TCP连接吞吐量的致命因素:HOL (干货)

 

下面是并发为10的吞吐量,为145.08 reqs/sec。

影响TCP连接吞吐量的致命因素:HOL (干货)

影响TCP连接吞吐量的致命因素:HOL (干货)

这里10个并发比1个并发吞吐量还低,是因为测试环境是docker环境,硬件配置差所导致。

上面测试是在无丢包网络环境下进行的,那么在网络丢包情况下会怎么样?

我们模拟丢包率1%的网络环境。

影响TCP连接吞吐量的致命因素:HOL (干货)

并发为1的吞吐量下降为37.41 reqs/sec。

影响TCP连接吞吐量的致命因素:HOL (干货)

并发为10的吞吐量为132.20 reqs/sec。

影响TCP连接吞吐量的致命因素:HOL (干货)

我们发现在丢包情况下,多个并发效果更好。这是因为多个并发情况下,HOL blocking问题得到了一定的缓解,而单个连接,则因为HOL blocking问题显得很明显。

3.  tcpcopy和intercept交互

很长一段时间内,tcpcopy和intercept的交互只用了一个连接。当测试压力比较大的时候,网络会恶化,很容易出现丢包或者来不及接收数据的状况,从而导致大量信息被阻塞住。

后来为了解决单个连接导致HOL的问题,采用了多个连接,性能得到了极大提升。

4.  Java netty游戏框架

下图展示了一个Java netty框架。

影响TCP连接吞吐量的致命因素:HOL (干货)

一个线程既用来处理读数据,又用来写数据,线程一会儿忙于处理读事件,一会儿处理写事件。集中处理读事件的时候,待写的数据被阻塞了,而集中处理写事件的时候,读事件被阻塞了。压力一大,延迟就会变得很大。

三、HOL blocking带来的问题

影响TCP连接吞吐量的致命因素:HOL (干货)

四、总结

程序架构中,尽量采用多个连接的方式来处理各种事件,否则很容易遇到TCP的HOL阻塞问题。

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2023-11-07 15:11:46

Kafka技巧

2023-08-03 14:18:29

Rust阻塞函数

2024-05-23 16:41:40

2013-04-19 09:45:20

AMPLabHadoopHDFS

2024-09-12 15:24:29

2019-08-14 08:20:59

Iperf网络吞吐量带宽测试

2023-02-09 08:57:11

Callable异步java

2019-09-25 08:37:48

MySQL数据库人生第一份工作

2024-06-28 09:39:58

2024-09-09 14:12:38

2009-02-24 09:28:00

2019-09-29 15:36:01

吞吐量MySQL数据库

2021-06-16 07:05:02

gRPC 网关HTTP

2010-08-23 10:16:09

2009-07-27 13:26:45

数据吞吐量测试测试网速

2019-07-26 15:41:27

程序员技能开发者

2019-01-23 10:21:32

吞吐量响应时间CPU

2024-06-06 16:15:00

2015-12-04 13:42:40

物联网消息服务集群设计

2024-11-08 13:36:09

点赞
收藏

51CTO技术栈公众号