【问题标题】:What are the bottlenecks inherent in networking?网络固有的瓶颈是什么?
【发布时间】:2012-06-08 12:57:02
【问题描述】:

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

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

我的问题是:平均而言,是什么让网络访问比磁盘慢得多

显然这并不总是正确的:您可能拥有与同一房间内的服务器的超快网络连接和缓慢的硬盘驱动器。但就这个问题而言,请想象普通用户在网上冲浪:从磁盘读取数据比从 Google 获取相同数据要快。

我能想到的与 HTTP 请求有关的部分是:

  • IP 的 DNS 查找
  • 建立 TCP 连接的三次握手
  • 数据包化:将 HTTP 请求分解为 TCP 数据包,然后将其放入 IP 数据包中,以及所有必要的计数器和校验和等
  • 传输:电信号通过电线所需的时间
  • 路由:发生在路由器内部的决策、缓冲等
  • 处理:服务器对响应的制定
  • 响应的所有传输和路由,包括重新发送丢失的数据包
  • 排序和组装 TCP 数据包的内容并将 HTTP 响应返回给客户端

如果我遗漏了任何主要步骤,请告诉我。

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

更新:一些数字

DNS 查找平均需要 60~120 毫秒,然后是完整的往返 (RTT) 执行 TCP 握手 - 结合起来,创建 100-200 毫秒 在我们发送请求之前的延迟!

【问题讨论】:

  • 我很好奇,你为什么问这种毫无意义的问题。
  • @AlanKuras - 简短的回答是“因为我喜欢了解我所依赖的系统。”但它可能有实际的好处。例如:将我们的数据中心移近物理距离会大大提高速度吗?还是购买速度更快的路由器会更好?
  • 致那些投票结束的人:这个问题有一个可量化的、客观的答案。它对每个联网程序都有实际影响。请重新考虑。
  • 毫无意义的问题,因为:哪个网络,哪个磁盘?我们是在谈论一些磨损的主轴磁盘与 LAN 或 SSD 与冰岛的某些服务器吗?另外:网络协议比 TCP 多。
  • @moodywoody - 我明确询问平均情况,这将是与您半球中的服务器的 TCP 连接,但不在您的建筑物中。请想象一个普通用户在普通电脑上上网。

标签: performance networking


【解决方案1】:

物理传输延迟(即每个请求的开销至少为 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

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

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

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

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

【讨论】:

  • 有趣。知道本地主机网络请求与从磁盘读取之间的速度差异吗?也许一个不错的实验是让 localhost Web 服务器在收到请求时记录一个时间戳,并让客户端在收到响应时记录另一个时间戳。这应该衡量网络部分的时间,对吧?
  • 是的,就初始开销而言,是本地 networking tends to be faster than hard disks。请注意,SSD 可以在此处提供显着改进;从快速 SSD 读取的延迟将按照网络往返的顺序。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    来自 HDD 的数据只能传输很短的距离,可能是 12 英寸。 通过网络,数据将传输很远的距离。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 这就是为什么我说“忽略服务器处理(这不是真正的网络问题)”。如果网络请求本身花费了 0 时间,那么如果服务器的磁盘访问速度比我的机器更快,那么从服务器的磁盘获取东西会比从我自己的磁盘获取更快。
      猜你喜欢
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      相关资源
      最近更新 更多