网络固有的瓶颈是什么?

时间:2012-06-08 12:57:03

标签: performance networking

如果计算机必须获取某些信息,则网络请求通常是最慢的源之一。我的理解是,一般来说:

  • 网络访问比磁盘慢得多
  • 磁盘访问比RAM慢得多
  • RAM访问比CPU寄存器慢得多

我的问题是这样的:是什么让网络访问平均比磁盘慢得多?

显然情况并非总是如此:可能与同一房间内的服务器和缓慢的硬盘驱动器之间的网络连接速度非常快。但是出于这个问题的目的,请想象普通用户上网:从磁盘读取数据比从Google获取相同数据要快。

我可以想到的一些参与,例如,HTTP请求是:

  • IP的DNS查找
  • 建立TCP连接的三次握手
  • 打包:将HTTP请求分解为TCP数据包,并将其放入IP数据包,包含所有必要的计数器和校验和等。
  • 传输:电信号穿过电线所需的时间
  • 路由:路由器内发生的决策,缓冲等
  • 处理:服务器的响应表达
  • 响应的所有传输和路由,包括重新发送丢失的数据包
  • 订购和组装TCP数据包的内容并将HTTP响应交还给客户端

如果我错过了任何重大步骤,请告诉我。

在这些步骤中,忽略服务器处理(实际上不是网络问题),任何部分都特别慢?它们中的任何一个都是网络请求中大部分固有延迟的原因吗?

更新:一些数字

  

平均DNS查找需要60~120ms,然后是完整的往返   (RTT)执行TCP握手 - 组合,创建100-200ms   我们甚至可以发送请求之前的延迟!

4 个答案:

答案 0 :(得分:2)

物理传输延迟(即,对于每个请求具有至少2 * 距离 / 光速的开销)倾向于胜过任何其他性能因素。您可以通过将本地系统的请求时间与远程系统的请求时间进行比较来检查。例如,在极快的互联网连接上,我得到以下结果:

$ /usr/bin/time --quiet -f %e wget -q -O/dev/null www.google.com/404
0.05
$ /usr/bin/time --quiet -f %e wget -q -O/dev/null localhost/404
0.01
# A machine in the same LAN
$ /usr/bin/time --quiet -f %e wget -q -O/dev/null 192.168.1.42/404
0.01

假设谷歌的网络服务器并不比我正在运行的apache慢(当涉及带宽,内存,缓冲,硬盘等)时,这意味着即使使用这种极其快速和低延迟的连接,并且连接对于谷歌,通过网络的时间相形见绌任何其他问题(例如本地处理)。

现在你可以假设那是因为路由开销,而buffers左右(让我们排除丢失的数据包一秒钟,因为它们高度依赖于媒体)。您可以通过比较通过Internet发送数据包所需的时间与直流网络电缆所需的时间来确定这些因素的影响。

例如,对于从杜塞尔多夫到洛杉矶的数据包,Wolfram Alpha计算的物理距离为31毫秒(当前光缆为43毫秒)。假设电缆在两个城市之间以完美的线路运行(它们当然没有),这构成了我测量的85ms的实际延迟的一半。

因此,尽可能减少对等点之间的距离以及往返次数是至关重要的。如果消息与可用带宽相比较小,则TCP和SSL / TLS握手将是网​​络缓慢的主要原因。显然,对于较大的文件(或者如果存在瓶颈,可能发生more often than you would expect),带宽也成为一个问题。

答案 1 :(得分:0)

我认为数据包传输和数据包丢失/重新发送占用了延迟的最大份额

答案 2 :(得分:0)

显然距离是一个重要因素。

从硬盘驱动器数据只能短距离传输12英寸。 通过网络数据将会传播很长的距离。

请记住,网络传输也需要从硬盘读取,因此它总是比直接从硬盘读取速度慢。

答案 3 :(得分:0)

还有一个事实是,如果您从某个地方的服务器请求数据,那么该服务器需要通过其RAM和物理存储来获取您所需的数据。