第十一章 网络延迟入门
这篇入门指南解释了网络延迟以及网络延迟造成的影响。
数据通过网络传输所需的时间称为网络延迟。网络延迟会降低应用程序的运行速度。
虽然路由器、交换机、无线接入点和网卡等各个网络设备都会引入各自的延迟,但本指南将它们综合起来,从更宏观的角度来理解数据在网络中传输时的总延迟。
作为云应用程序开发人员,我们可以通过缓存、压缩、拉近节点间距以及缩短用户与应用程序之间的距离来降低网络延迟的影响。
网络延迟挑战
即使拥有高度可扩展且高性能(甚至速度无限快!)的服务器,也无法保证应用程序的良好性能。这主要是因为除了原始计算能力之外,还有一个主要的性能挑战:数据传输。数据在网络中传输并非瞬时完成,由此产生的延迟被称为网络延迟。
网络延迟取决于距离和带宽:数据传输的距离和速度。问题在于,只要计算节点、数据源和最终用户并非都使用同一台计算机,网络延迟就会发挥作用;分布越分散,影响越大。网络质量至关重要,尽管您可能无法控制它;由于用户从不同地点通过网络连接,网络质量可能会有所不同。
如果数据到达客户端计算机的时间过长,应用程序的性能和可扩展性将会受到影响。网络延迟的影响也会因用户的地理位置而异:对某些用户来说,网络速度可能快得惊人,而对另一些用户来说,则可能慢得像冰糖浆一样(也就是非常慢)。
诚然,要了解数据实际传输的距离和有效带宽并非易事。实际传输路径与您在地图上想象的理想大圆路径并不相同。路由器之间的路径是曲折的,甚至可能受到单个路由器性能的影响,而且路径上的各个节点带宽也可能不同。此外,网络延迟还会随时间变化。
估算(某个时间点的)有效带宽的一个简单方法是使用 ping 命令。Ping 是一个简单但实用的程序,它通过实际发送网络数据包、统计沿途节点数量并显示数据包到达目的地和返回所需的时间来计算从互联网上的一个点到另一个点所需的时间。表 11-1 列出了一些测量的 ping 时间。这些ping请求源自美国东部的波士顿。目前速度最快的网络使用光纤电缆,其数据传输速度约为光速的66%(186,000英里/秒 × 66% = 122,760英里/秒)。正如表11-1所示,短距离传输速度主要受传输距离以外的因素影响,且均未接近理论最大速度。HTTP和TCP流量的速度会比ping请求慢。网络延迟的影响会迅速累积,尤其是在网页体积增大、需要下载的对象增多时。Compuware在2012年1月发布的 《应用性能数据与趋势分析》报告中指出,非移动新闻网站的平均页面下载大小(没错,是平均大小)超过1兆字节,而非移动旅游网站的平均页面下载大小为790 KB。
表 11-1. 来自波士顿的 Ping 时间——距离很重要
| 域 | 位置 | 单程耗时(毫秒) | 大约距离(英里) | 速度(英里/秒) |
|---|---|---|---|---|
| www.bu.edu | 波士顿, 美国 | 17 | 10 | 1,000 |
| www.gsc.edu | 亚特兰大, 美国 | 75 | 900 | 12,000 |
| www.usc.edu | 洛杉矶, 美国 | 51 | 2600 | 52,000 |
| www.cam.ac.uk | 剑桥, 英国 | 50 | 3300 | 67,000 |
| www.msu.ru | 莫斯科, 俄罗斯 | 81 | 4500 | 56,000 |
| www.u-tokyo.ac.jp | 东京, 日本 | 107 | 6700 | 63,000 |
| www.auckland.ac.nz | 奥克兰, 新西兰 | 115 | 9000 | 79,000 |
降低感知网络延迟
感知网络延迟,即用户实际感受到的网络延迟,可以通过以下技术降低:
- 数据压缩
- 后台处理,即在数据到达之前不进行屏幕更新(虽然实际上速度并没有提升,但可以改善用户的主观体验,例如单页 Web 应用)
- 预测性获取,即在需要时预先加载数据(例如地图应用中的地图瓦片,尽管并非所有地图瓦片都会被引用)
最终一致性是另一种可以使用的工具,前提是我们能够为用户提供略微过时的数据。这些都是降低网络延迟影响的合理方法,但并不能改变网络延迟本身。对于云原生应用和非云应用,这些方法本质上是相同的。
降低网络延迟
我们可以通过以下方式降低网络延迟:
- 将应用程序部署在更靠近用户的位置
- 将应用程序数据部署在更靠近用户的位置
- 确保应用程序内部的节点彼此靠近
这些降低延迟的技术正是托管部署、代客密钥、内容分发网络 (CDN) 和多站点部署模式的主题。
总结
应对网络延迟的综合策略将采用多种方法。其中一种方法侧重于降低用户感知到的网络延迟。另一种方法则侧重于通过缩短用户与应用程序实例之间的距离来实际降低网络延迟。