1. 用户感知的 "速度"
用户体验能给网站带来更多的收益, 因此人们也投入了更多精力去研究它. 用户体验中, 除了好的交互, 精美的界面, 用户感知的 "速度" 也是重要的一环. 从网络角度来说, 时延 (latency) 和带宽 (bindwidth) 是决定 "速度" 的重要环节.
不同的应用对时延和带宽需求的侧重点往往不同:
网络游戏需要更低的时延. 在一些对抗激烈的 FPS,MOBA 类的游戏中, 单次数据传输的量并不大, 因此带宽要求不高. 但是若你顶着延迟和别人进行对抗, 那么这局比赛可能已经输了一半;
流媒体需要更高的带宽. 高速带宽能让你观看高清电影, 而延时就显得不那么重要, 带来问题无非是在加载前等待一段时间罢了;
视频聊天需要更低的时延. 更低的时延意味着你能看到更流畅的实时画面, 而不会掉帧. 也许只有当你想要切换更高清晰度的时候才需要选择更高的带宽.
浏览网页需要更低的时延. 因为没人愿意在一个空白页面上花上几秒钟. 更高的带宽常常无关紧要, 除非你需要流量高分辨率的图片或者高清的视频.
2. 时延与带宽
2.1. 糖果包装问题
某厂某天生产了 N 颗糖果, 需要进行包装和验收. 流水线一端的工人 A 负责包装, 包装速度为 N1 颗 / 小时, 另一端 B 的验收速度为 N2 颗 / 小时, 两者通过协调达成某一相同的速度 MIN(N1,N2)颗 / 小时. 通过传送带传送到目的地. 传送带长 L 米, 速度为 V 米 / 小时. 从 A 开始计时到 B 验收完成, 所需时间 T 为多少?
答: T = L / V + N / MIN(N1,N2) + 1 / MIN(N1,N2)
时间 T 反映了完成糖果包装并验收完成的总时间. 如果糖果想象成可以需要传输的文件, 那么就可以把糖果包装问题转换为一个简化的网络传输问题.
假设服务器 A 向用户 B 发送一个大小为 100KB 的图片(假设 HTTP 连接已经建立), 服务器上行带宽为 1Mbps, 用户所在下行带宽为 100Mbps. 已知端对端物理距离为 2000 km, 光信号在光纤中的传播速度是 200000 km/s, 求图片从 A 发出到 B 完整接收的时间 T. 代入公式可得: T = 2000/200 + 100 * 8 / 1 = 810 ms(最后一项太小可以被忽略)
这个时间就是时延, 具体的说是单向时延, 即一个数据文件从传输到完整接收所花费的时间.
2.2. 时延是什么
2.1 中图片传输的时间叫做时延. 时延并没有一个确切的定义. 多数情况下是指单向时延, 就是在数据通信过程中从 A 发送数据的第一个比特开始到 B 接受到数据的最后一个比特为结束产生的时间消耗, 在某些场景下也指双向时延, 即从网络请求发出到收到完整响应为结束经历的时间. 时延常以毫秒为单位来衡量. 数据包的大小, 链路上传下行速率, 通信距离, 通信介质的种类, 路由器的处理能力都会影响时延. 常说的时延是下列这些不同时延的总和:
传播时延. 信号在信道中传输的时间 = 通信距离 / 传播速度.
处理时延. 路由器路由, 差错控制以及数据包头信息处理的时间.
队列时延. 数据包在队列中等待路由器处理的时间.
发送时延. 将数据包发送到信道中的时间 = 数据包大小 / 信道带宽.
减少时延往往比增加带宽需要更多的成本. 2015 年 9 月, Hibernia 网络公司为了最大程度上确保纽约和伦敦的通信延时, 部署了一条名为 "Hibernia Express" 的海底光缆, 总计耗费达 3 亿美元. 采用新光缆之后, 纽约伦敦两地的延时为 58.95ms, 比现存的所有大西洋光缆少了 5ms. 这意味着节约的每 1 毫秒, 价值近 6 千万美元.
2.3. 带宽是什么
带宽是指数据通信最大的吞吐量, 根据传输方向的不同可以分为上行带宽和下行带宽, 常用 Mbps 来进行衡量. 对于互联网上的用户, 运营商 (ISP) 提供的带宽就是数据通信的最大吞吐量, 并且上下行带宽往往不对称. 如中国电信百兆宽带最大下行速度为 100Mbps, 而最大上行速度只有 20Mbps.
一般来说, 核心网络 (如海底光缆) 的带宽往往可以达到几百 Tbps. 而终端用户实际可用的带宽, 往往是网络服务所在服务器的上行带宽与用户下行带宽的最小值.
若某一网站部署在上行带宽为 1Mbps 服务器上, 那么即使访问者拥有 100Mbps 的下行带宽, 用户仍然只能以 1Mbps 的速度下载网页上的内容.
2.4. 联系与区别
对终端用户而言, 延时可以理解为某一网络服务的响应速度, 而带宽可以理解为上传下载文件的最大速度, 而实际可用的带宽, 往往又是由网络服务所在服务器的上行带宽与用户下行带宽的最小值所决定.
以浏览网页为例子, 若响应速度快, 用户实际可用的带宽 (见 2.3 节的定义) 小, 就可能导致页面上的图片以肉眼可见的速度一点点显示出来; 若响应速度慢, 用户实际可用的带宽大, 就可能导致页面上的内容需要等待很久才能有显示, 在此之前都是空白. 但是当响应完成, 会立即显示网页内容.
有人说带宽和时延没有关系, 这句话是有问题的. 因为在 2.2 节中介绍了发送延时, 它通常由服务器的上行带宽与用户下行带宽的最小值所决定. 准确的说是, 目前现实场景中大部分的时延不是由带宽决定, 而往往是由传播距离, 网络状况等所决定.
3. 性能优化
了解了带宽和时延, 那么就可以更好地理解网站性能优化背后的本质 -- 减少延时, 增加带宽. 常见的性能优化的方式有合并请求和建立内容分发网络(CDN):
合并请求. 从优化角度来说, 合并请求就是在减少总时延. 一个 100KB 的文件和 10 个 10KB 大小的文件大小相同. 若 D 为传播时延, T 为发送 10KB 文件的发送时延, 那么一次发送 100KB 文件的时延为 D + 10T, 而发送 10 次单个 10KB 文件的延时为 10D+10T. 相同情况下, 请求次数越少, 总时延就越少.
建立内容分发网络. 内容分发网络通过将网站内容服务器分布在靠近用户的位置, 从而使用户就近获取所需内容, 减少传播延时, 进而显著提升网站的响应速度.
举例来说, 高质量的视频网站必须租用高速的上行带宽, 确保能够承担大规模的视频流量, 因为没人愿意等待几分钟缓冲一个流媒体视频. 同时它也要在各地建立大规模的内容分发网络 (CDN) 来降低视频内容的传播延迟, 这样才不会让用户等待很久才能获得网站的响应.
4. 总结
本文网络应用优化中最重要的两个目标: 时延与带宽. 通过定义并区分两者的关系, 并引申出网络服务优化的几种基本方法. 和所有的教程一样, 本文不可能涵盖到网络优化的所有细节, 但是若能对你有所启发, 那就是再好不过了.
5. 参考链接
- Primer on Latency and Bandwidth https://hpbn.co/primer-on-latency-and-bandwidth/
- Bandwidth vs. Latency: What is the Difference?
来源: http://blog.jobbole.com/114523/