networking/ TCP的特征是什么引起了TCP活动和延迟之间的线性关系?

这个问题的核心是我们的应用程序使用websockets实时接口。 我们正在testing我们的应用程序在一个新的环境,但奇怪的是,我们注意到与websocket活动增加相关的TCP websocket数据包日益延迟。

例如,如果在一分钟内发生一个websocket事件而没有任何其他活动,则来自服务器的响应是即时的。 但是,如果我们慢慢增加客户端活动,则服务器响应的延迟会随着线性关系的增加而增加(每个数据包需要更多时间才能到达具有更多活动的客户端)。

对于那些想知道这不是应用程序相关的,因为我们的日志显示,我们的服务器正在运行,并根据需要在100毫秒内响应请求。 一旦服务器处理请求并创buildTCP数据包并将其发送到客户端(而不是相反),延迟就会开始。

体系结构此新环境使用虚拟IP地址运行,并在负载均衡器上使用保留策略来平衡实例之间的stream量。 两个箱子坐在平衡器的后面,所有的交通都穿过它。 我们的主机提供商pipe理平衡器,我们不能控制这部分架构。

理论难道这可能与缓冲新环境中的数据包有关吗?

谢谢你的帮助。

缓冲听起来像一个合理的理论。 我会从你的应用程序服务器捕获数据包,以确保在tcpstream(即tcp窗口清零?)中看不到重传或其他可能exception的行为。 Wireshark与客户端IP的捕获filter将为此工作。

如果您确认数据包捕获看起来干净,请求您的提供商在其负载平衡器上运行数据包捕获,以便分析是一个合理的请求。

最后,你是否从多个地点和不同的机器进行testing? 也许在客户端和提供者之间存在缓冲区,或者客户端发生了一些奇怪的事情(同时在客户端运行数据包捕获以及服务器同时也可能是有启发性的)。

这实际上是一个预期的行为。 随着数据量的增加,传输窗口的大小会增加,这会增加发送数据包的大小。 更大的数据包意味着更高的效率(更less的开销和确认时间),但也意味着更多的延迟。 这是维护可靠传送的折衷,同时还在延迟和带宽变化很大的networking中保持任何types的吞吐量。

检查出PSH标志,使TCP更快地刷新缓冲区。 在某些情况下,这可能会有些微的差别。 但是,如果你正在为大量小消息寻找一致的低延迟,那么你可能会更好地看待UDP – 这意味着你必须考虑确保自己的交付,但是你可能会实现更多的一致性。