从我理解,Tq 时间是 TCP 客户端握手结束(大概使用 HTTPS 时,计时器在 SSL 握手结束时启动)与读取最后一个 HTTP 标头的时间之间的时间。
haxproxy 1.4 手册将 Tq 时间描述为:
Tq:获取客户端请求的总时间(仅限 HTTP 模式)。这是从接受客户端连接到代理收到最后一个 HTTP 标头之间的时间。值“-1”表示从未见过标头末尾(空行)。当客户端过早关闭或超时时会发生这种情况。
来源:http://www.haproxy.org/download/1.4/doc/configuration.txt
然而,haxproxy 手册中进一步指出,Tq 可能会受到 haproxy 等待请求的影响:
如果“Tq”接近 3000,则客户端和代理之间可能丢失了数据包。这种情况在本地网络上非常罕见,但当客户端位于远程网络上并发送大量请求时可能会发生。可能会出现此处出现比平常更大的值,而没有任何网络原因。有时,在攻击期间或资源匮乏刚结束后,haproxy 可能会在几毫秒内接受数千个连接。接受这些连接所花费的时间不可避免地会稍微延迟其他连接的处理,并且可能会在一次接受数千个新连接后测量到几十毫秒的请求时间。设置“option http-server-close”可能会显示更大的请求时间,因为“Tq”还会测量等待其他请求所花费的时间。
来源:http://www.haproxy.org/download/1.4/doc/configuration.txt
问题:
- 如果在 TCP 或 SSL 握手结束后测量 Tq,那么等待其他请求处理会如何影响 Tq 时间?如果可能,请用 c 编程调用套接字、监听和接受函数来描述这一点。
- 由于 haproxy 正在处理其他请求,Tq 通常会增加多少时间?这里的大概数字还可以。我猜 Tq 的增加只会是几十毫秒。