当前位置: 首页 > news >正文

网络应用优化——时延与带宽

  1. 用户感知的“速度”

用户体验能给网站带来更多的收益,因此人们也投入了更多精力去研究它。用户体验中,除了好的交互,精美的界面,用户感知的“速度”也是重要的一环。从网络角度来说,时延(latency)和带宽(bindwidth)是决定“速度”的重要环节。
不同的应用对时延和带宽需求的侧重点往往不同:
网络游戏需要更低的时延。在一些对抗激烈的FPS、MOBA类的游戏中,单次数据传输的量并不大,因此带宽要求不高。但是若你顶着延迟和别人进行对抗,那么这局比赛可能已经输了一半;
流媒体需要更高的带宽。高速带宽能让你观看高清电影,而延时就显得不那么重要,带来问题无非是在加载前等待一段时间罢了;
视频聊天需要更低的时延。更低的时延意味着你能看到更流畅的实时画面,而不会掉帧。也许只有当你想要切换更高清晰度的时候才需要选择更高的带宽。
浏览网页需要更低的时延。因为没人愿意在一个空白页面上花上几秒钟。更高的带宽常常无关紧要,除非你需要流量高分辨率的图片或者高清的视频。

  1. 时延与带宽

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.总结

本文网络应用优化中最重要的两个目标:时延与带宽。通过定义并区分两者的关系,并引申出网络服务优化的几种基本方法。和所有的教程一样,本文不可能涵盖到网络优化的所有细节,但是若能对你有所启发,那就是再好不过了。

相关文章:

  • nginx、tomcat调优方向及压测网站步骤
  • Python组织文件 实践:将带有美国风格日期的文件改名为欧洲风格日期
  • 聚合查询, 分组查询,F查询,Q查询
  • [面试题记录01]实现一个function sum达到一下目的
  • 你和大神之间只差一个高效工具
  • 蓝桥——商标倒放
  • 05 面向对象之:类的成员
  • [古怪问题] Marshal.GetActiveObject 在管理员模式下无法正常运行
  • wind.print(); 打印的样式设置
  • 612.1.004 ALGS4 | Elementary Sorts - 基础排序算法
  • 读《构建之法》疑问
  • 如何设置linux支持上传的文件中文不乱吗
  • 致远慧图孙宇辉:出走英特尔的AI眼科野望
  • 为什么你设定的目标最后实现往往都会打折扣?
  • Golang数据结构
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • co.js - 让异步代码同步化
  • CSS魔法堂:Absolute Positioning就这个样
  • iOS 颜色设置看我就够了
  • PHP的Ev教程三(Periodic watcher)
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Redux 中间件分析
  • 关于for循环的简单归纳
  • 后端_MYSQL
  • 前端自动化解决方案
  • 使用 @font-face
  • 思维导图—你不知道的JavaScript中卷
  • 从如何停掉 Promise 链说起
  • ​2020 年大前端技术趋势解读
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​secrets --- 生成管理密码的安全随机数​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #git 撤消对文件的更改
  • #大学#套接字
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (windows2012共享文件夹和防火墙设置
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • **CI中自动类加载的用法总结
  • **python多态
  • .Net Remoting常用部署结构
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @Conditional注解详解
  • @private @protected @public
  • @Transactional 详解
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [20150707]外部表与rowid.txt
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决