Table of Contents
速度是特征
在过去的几年中,Web性能优化(WPO)行业的出现和快速增长表明用户对速度和更快的用户体验的重要性和需求日益增长。这不仅是 我们不断发展和互联的世界中对速度的心理需求,而且是由经验结果驱动的需求,以许多在线企业的底线绩效衡量:
- 更快的网站可带来更好的用户参与度。
- 网站速度越快,用户保留率越高。
- 网站速度越快,转化率越高。
简而言之,速度是一项功能。为了实现这一目标,我们需要了解许多因素和基本限制。在本章中,我们将重点介绍决定所有网络流量性能的两个关键组件:延迟和带宽(图1-1)。
- 潜伏:从源发送数据包到目的地接收数据包的时间
- 带宽:逻辑或物理通信路径的最大吞吐量
图1-1。延迟和带宽
在更好地了解带宽和延迟如何协同工作的基础上,我们将拥有工具来更深入地研究TCP,UDP及其上方所有应用程序协议的内部和性能特征。
使用Hibernia Express减少跨大西洋延迟
延迟是金融市场中许多高频交易算法的重要标准,其中几毫秒的小沿可能转化为数百万的损失或利润。
2015年9月,Hibernia Networks推出了一条新的光纤链路(“ Hibernia Express”),该光纤链路的设计旨在通过沿着城市之间的大圆圈路线,确保纽约和伦敦之间的延迟最小。该项目的总成本估计为3亿美元以上,新路线在城市之间的延迟时间为58.95毫秒,与所有其他现有的跨大西洋链接相比,它的边缘时间约为5毫秒。这意味着每毫秒可节省6000万美元!
延迟是昂贵的-从字面上和象征意义上讲。
延迟的许多组成部分
延迟是消息或数据包从其原始点传播到目标点所花费的时间。这是一个简单而有用的定义,但它通常隐藏了许多有用的信息-每个系统都包含多个源或组件,这对传递消息所花费的总时间有所贡献,并且了解这些组件的含义很重要以及决定其性能的因素。
让我们仔细研究一下Internet上典型路由器的一些常见贡献组件,这些组件负责在客户端和服务器之间中继消息:
- 传播延迟:消息从发送者到接收者所需要的时间量,是信号传播速度与距离的函数。
- 传输延迟:将所有数据包的位压入链路所需的时间,这是数据包的长度和链路的数据速率的函数。
- 处理延迟:处理数据包头,检查比特级错误以及确定数据包目的地所需的时间。
- 排队延迟:数据包在队列中等待直到可以处理的时间。
客户端和服务器之间的总延迟是刚刚列出的所有延迟的总和。传播时间由信号传播的距离和介质决定,正如我们将看到的,传播速度通常在光速的较小常数范围内。另一方面,传输延迟由传输链路的可用数据速率决定,与客户端和服务器之间的距离无关。例如,假设我们要通过两个链接传输一个10 Mb的文件:1 Mbps和100 Mbps。通过1 Mbps链接将整个文件“在线”花费10秒,而通过100 Mbps链接仅花费0.1秒。
网络数据速率通常以每秒比特数(bps)度量,而非网络设备的数据速率通常以每秒字节数(Bps)度量。这是造成混乱的常见原因,请密切注意单位。
例如,要通过1Mbps链接将10兆字节(MB)文件“在线”传输,则需要80秒。10MB等于80Mb,因为每个字节有8位!
接下来,一旦数据包到达路由器,路由器必须检查数据包头以确定出站路由,并可能对数据进行其他检查-这也需要时间。现在,这种逻辑的大部分通常是在硬件中完成的,因此延迟很小,但确实存在。最后,如果数据包到达的速度快于路由器处理数据的速度,则数据包会在进入缓冲区内排队。毫无疑问,数据在缓冲区内排队的时间称为排队延迟。
在网络上传输的每个数据包都将引起许多此类延迟的实例。源与目的地之间的距离越远,传播所需的时间就越多。我们沿途遇到的中间路由器越多,每个数据包的处理和传输延迟就越高。最后,沿路径的流量负载越高,数据包在一个或多个缓冲区内排队和延迟的可能性就越高。
本地路由器中的缓冲膨胀
Bufferbloat是Jim Gettys在2010年创造和推广的一个术语,它是排队延迟影响网络整体性能的一个很好的例子。
潜在的问题是,许多路由器现在都带有较大的传入缓冲区,但前提是应该不惜一切代价避免丢包。但是,这打破了TCP的拥塞避免机制(我们将在下一章中介绍),并将高延迟和可变延迟引入网络。
好消息是,已经提出了新的CoDel主动队列管理算法来解决此问题,并且现在已在Linux 3.5+内核中实现了该算法。要了解更多信息,请参阅 ACM队列中的“控制队列延迟”。
光速和传播潜伏期
正如爱因斯坦在狭义相对论中所概述的那样,光速是所有能量,物质和信息可以传播的最大速度。这种观察对任何网络数据包的传播时间都设置了硬性限制和一个限制因素。
好消息是光速很高:每秒299,792,458米,或每秒186,282英里。但是,总有一个问题是真空中的光速。相反,我们的数据包会通过诸如铜线或光缆之类的介质传输,这会使信号变慢(表1-1)。光速与小包在材料中行进的速度之比称为材料的折射率。值越大,该介质中的光线传播越慢。
我们的大多数数据包在长距离跳时通过的典型折射率值可以在1.4到1.6之间变化-缓慢但可以肯定的是,我们正在改善材料的质量并能够降低折射率指数。但是为了简单起见,经验法则是假设光纤中的光速约为200,000,000米/秒,这对应于〜1.5的折射率。关于这一点的非凡之处在于,我们已经处在最大速度的很小恒定常数之内!本身就是一项了不起的工程成就。
路线 | 距离 | 时间,真空中的光 | 时间,光纤维 | 光纤往返时间(RTT) |
---|---|---|---|---|
纽约到旧金山 | 4,148公里 | 14毫秒 | 21毫秒 | 42毫秒 |
纽约到伦敦 | 5,585公里 | 19毫秒 | 28毫秒 | 56毫秒 |
纽约到悉尼 | 15,993公里 | 53毫秒 | 80毫秒 | 160毫秒 |
赤道周长 | 40,075公里 | 133.7毫秒 | 200毫秒 | 200毫秒 |
表1-1。真空和光纤中的信号延迟
光速很快,但从纽约到悉尼的往返(RTT)仍需要160毫秒。实际上,表1-1中的数字假设数据包在城市之间的大圆路径(地球上两点之间的最短距离)上通过光缆传输,也是不切实际的乐观。实际上,这种情况很少发生,并且在纽约和悉尼之间邮包会走更长的路线。沿着这条路由的每一跳都会引入额外的路由,处理,排队和传输延迟。结果,通过我们现有的网络,纽约和悉尼之间的实际RTT约为200-300毫秒。考虑所有的事情,那看起来还是很快,对吗?
我们不习惯以毫秒为单位来衡量我们的日常遭遇,但是研究表明,一旦将超过100-200毫秒的延迟引入系统,我们大多数人将可靠地报告可感知的“滞后”。一旦超过了300毫秒的延迟阈值,互动通常会被报告为“缓慢”,并且在1,000毫秒(1秒)的障碍下,许多用户已经在等待响应的同时进行了心理情景切换(请参见速度,性能,与人的知觉。
重点很简单,为了提供最佳体验并让我们的用户参与手头的任务,我们需要我们的应用程序在数百毫秒内做出响应。但这并没有给我们特别是网络留下很大的出错空间。为了获得成功,必须认真管理网络延迟,并在开发的所有阶段将其作为明确的设计标准。
内容交付网络(CDN)服务提供了许多好处,但其中最主要的一点就是观察到,在全球范围内分发内容并将该内容从附近的位置提供给客户端,可以使我们显着减少所有内容的传播时间。数据包。
我们可能无法使数据包传输得更快,但是我们可以通过策略性地将服务器放置在更靠近用户的位置来缩短距离!利用CDN来服务您的数据可以提供显着的性能优势。
最后一英里的延迟
具有讽刺意味的是,通常是最后几英里,而不是跨越海洋或大洲,引入了显着的延迟:臭名昭著的最后一英里问题。要将您的家庭或办公室连接到Internet,您的本地ISP需要在整个社区中路由电缆,聚集信号并将其转发到本地路由节点。实际上,根据连接类型,路由方法和部署的技术,仅前几跳可能会花费数十毫秒的时间。
根据美国联邦通信委员会(FCC)进行的年度“美国测量宽带”报告,随着时间的推移,美国境内基于地面的宽带(DSL,电缆,光纤)的最后一英里延迟一直保持相对稳定:最佳平均性能(10-20毫秒),其次是电缆(15-40毫秒)和DSL(30-65毫秒)。
实际上,在将数据包路由到目的地之前,这仅相当于ISP核心网络中最近的测量节点的10-65 ms的延迟!FCC报告的重点是美国,但无论地理位置如何,最后一英里的延迟对所有Internet提供商都是一个挑战。出于好奇,traceroute
通常可以简单 地告诉您有关Internet提供商的拓扑和性能的信息。
$> traceroute google.com
traceroute to google.com (74.125.224.102), 64 hops max, 52 byte packets
1 10.1.10.1 (10.1.10.1) 7.120 ms 8.925 ms 1.199 ms (1)
2 96.157.100.1 (96.157.100.1) 20.894 ms 32.138 ms 28.928 ms
3 x.santaclara.xxxx.com (68.85.191.29) 9.953 ms 11.359 ms 9.686 ms
4 x.oakland.xxx.com (68.86.143.98) 24.013 ms 21.423 ms 19.594 ms
5 68.86.91.205 (68.86.91.205) 16.578 ms 71.938 ms 36.496 ms
6 x.sanjose.ca.xxx.com (68.86.85.78) 17.135 ms 17.978 ms 22.870 ms
7 x.529bryant.xxx.com (68.86.87.142) 25.568 ms 22.865 ms 23.392 ms
8 66.208.228.226 (66.208.228.226) 40.582 ms 16.058 ms 15.629 ms
9 72.14.232.136 (72.14.232.136) 20.149 ms 20.210 ms 18.020 ms
10 64.233.174.109 (64.233.174.109) 63.946 ms 18.995 ms 18.150 ms
11 x.1e100.net (74.125.224.102) 18.467 ms 17.839 ms 17.958 ms (2)
- (1)第一跳:本地无线路由器
- (2)第11跳:Google服务器
在前面的示例中,数据包从桑尼维尔市开始,被反弹到圣塔克拉拉,然后奥克兰,回到圣何塞,被路由到“ 529 Bryant”数据中心,这时它被路由到Google并到达目的地在第11跳。整个过程平均需要18毫秒。考虑到所有因素,这还不错,但与此同时,该包装盒可能已经穿越了美国大部分大陆!
由于所部署的技术,网络拓扑甚至一天中的时间,最后一英里的延迟在ISP之间可能会有很大差异。作为最终用户,如果您希望提高Web浏览速度,请确保测量并比较您所在地区可用的各种提供商的最后一英里延迟。
延迟而不是带宽是大多数网站的性能瓶颈!要了解原因,我们需要了解TCP和HTTP协议的机制-我们将在后续章节中介绍这些主题。但是,如果您感到好奇,请随时跳过“更多带宽无关紧要”。
使用Traceroute测量延迟
Traceroute是一个简单的网络诊断工具,用于识别数据包的路由路径和IP网络中每个网络跃点的延迟。为了识别各个跃点,它以“跃点限制”(1、2、3等)递增的方式向目的地发送一系列数据包。当达到跳数限制时,中介程序将返回ICMP Time Exceeded消息,从而允许该工具测量每个网络跳数的延迟。
在Unix平台上,该工具可以通过命令行运行
traceroute
,在Windows上它被称为tracert
。
核心网带宽
光纤充当简单的“光导管”,比人的头发稍厚,旨在在电缆的两端之间传输光。也可以使用金属线,但是会遭受更高的信号损耗,电磁干扰和更高的使用寿命维护成本。您的数据包可能会通过两种类型的电缆传输,但是对于任何长距离跃点,它们都将通过光纤链路传输。
光纤在带宽方面具有明显的优势,因为每条光纤都可以通过称为波分复用(WDM)的过程承载许多不同波长(通道)的光。因此,光纤链路的总带宽是每通道数据速率和多路复用通道数的倍数。
截至2010年初,研究人员已经能够在400个波长上进行多路复用,每个通道的峰值容量为171 Gbit / s,这意味着单个光纤链路的总带宽超过70 Tbit / s!我们需要成千上万的铜线(电气)链接来匹配此吞吐量。毫不奇怪,大多数长距离跃点,例如各大洲之间的海底数据传输,现在都通过光纤链路完成。每条电缆承载几根光纤(四根电缆是一个公共数),这将转化为每条电缆每秒数百兆兆位的带宽容量。
网络边缘的带宽
构成Internet核心数据路径的骨干网或光纤链路能够每秒移动数百个兆位。但是,网络边缘的可用容量要少得多,并且会因部署的技术而异:拨号,DSL,电缆,多种无线技术,光纤到户甚至是本地路由器的性能。用户可用的带宽取决于客户端和目标服务器之间的最低容量链接(图1-1)。
Akamai Technologies经营着一个全球CDN,其服务器遍布全球,并在Akamai网站上免费提供有关其服务器所见平均宽带速度的季度报告。表1-2列出了截至2015年末的宏观趋势。
序号 | 国家 | 平均Mbps | 同比变化 |
---|---|---|---|
-- | 全球 | 5.1 | 14% |
1 | 南韩 | 20.5 | -19% |
2 | 瑞典 | 17.4 | 23% |
3 | 挪威 | 16.4 | 44% |
4 | 瑞士 | 16.2 | 12% |
5 | 香港 | 15.8 | -2.7% |
21 | 美国 | 12.6 | 9.4% |
表1-2。Akamai服务器在2015年第三季度看到的平均带宽速度
之前的数据不包括来自移动运营商的流量,我们稍后将再次讨论一个主题以进行更详细的研究。就目前而言,只要说出移动速度是高度可变的并且通常较慢即可。但是,即使考虑到这一点,2015年末的全球平均宽带带宽也仅为5.1 Mbps!韩国以20.5 Mbps的平均吞吐量领先于世界,而美国以12.6 Mbps的速度排名第二。
作为参考,根据分辨率和编解码器,流高清视频可能需要2到10 Mbps的速度。因此,美国的普通用户可以在网络边缘流式传输高分辨率视频,但是这样做也会消耗大量链接容量,对于拥有多个用户的家庭而言,这不是一个非常有希望的故事。
找出任何给定用户的带宽瓶颈通常是一项不重要但重要的工作。再次,出于好奇,有很多在线服务,例如Ookla运营的speedtest.net(图1-2),它们提供对附近服务器的上游和下游测试-我们将了解为什么选择本地服务器是在我们有关TCP的讨论中很重要。对这些服务之一进行测试是检查您的连接是否符合本地ISP公布的速度的好方法。
图1-2。上游和下游测试(speedtest.net)
但是,尽管需要到ISP的高带宽链接,但这也不能保证端到端的性能。仅仅因为带宽测试保证了高数据速率并不意味着您可以或应该期望其他远程服务器具有相同的性能。由于高需求,硬件故障,集中的网络攻击或许多其他原因,网络可能在任何中间节点处拥塞。吞吐量和延迟性能的高可变性是我们数据网络的固有属性-预测,管理和适应不断变化的“网络天气”是一项复杂的任务。
提供更高的带宽和更低的延迟
我们对更高带宽的需求正在快速增长,这在很大程度上是由于流视频日益普及,而流视频现在已占全部Internet流量的一半以上。好消息是,虽然它可能并不便宜,但我们有多种策略可用于增加可用容量:我们可以在光纤链路中添加更多的光纤,我们可以在拥挤的路由中部署更多的链路,或者我们可以改进WDM技术,以通过现有链接传输更多数据。
电信市场研究和咨询公司TeleGeography估计,截至2011年,我们平均仅使用已部署海底光纤链路可用容量的20%。更重要的是,在2007年至2011年之间,跨太平洋电缆的新增容量中有一半以上是由于WDM升级所致:相同的光纤链路,两端都采用了更好的技术来复用数据。当然,我们不能指望这些进步会无限期地继续下去,因为每种媒介都会达到收益递减的地步。但是,只要企业的经济允许,就没有根本无法随着时间增加带宽吞吐量的根本原因-如果其他所有方法都失败,我们可以添加更多的光纤链路。
另一方面,改善等待时间则完全不同。可以改善光纤链路的质量,以使我们更接近光速:折射率较低的更好的材料,沿途的路由器更快。但是,考虑到我们目前的速度已经在光速的约2/3之内,我们可以从此策略中获得的最大期望只是适度的30%的改善。不幸的是,根本无法绕开物理定律:光速对最小延迟设置了硬性限制。
另外,由于我们不能使光传播得更快,所以我们可以使距离更短-地球上任何两个点之间的最短距离由它们之间的大圆路径定义。然而,由于物理地形,社会和政治原因以及相关费用的限制,也不总是可能铺设新电缆。
因此,要提高应用程序的性能,我们需要在设计和优化协议和网络代码时清楚地意识到可用带宽和光速的局限性:我们需要减少往返路程,将数据移近距离客户端,并构建可以通过缓存,预取和各种类似技术隐藏延迟的应用程序,如后续章节中所述。