当前位置: 首页 > 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数据结构
  • [NodeJS] 关于Buffer
  • 【RocksDB】TransactionDB源码分析
  • Create React App 使用
  • CSS实用技巧干货
  • java中的hashCode
  • Koa2 之文件上传下载
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • npx命令介绍
  • springboot_database项目介绍
  • yii2权限控制rbac之rule详细讲解
  • 初识MongoDB分片
  • 前端之React实战:创建跨平台的项目架构
  • 正则学习笔记
  • 06-01 点餐小程序前台界面搭建
  • 关于Android全面屏虚拟导航栏的适配总结
  • 积累各种好的链接
  • 组复制官方翻译九、Group Replication Technical Details
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (4)logging(日志模块)
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • ***检测工具之RKHunter AIDE
  • .net core 6 redis操作类
  • .NET MVC第五章、模型绑定获取表单数据
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • @angular/cli项目构建--Dynamic.Form
  • @media screen 针对不同移动设备
  • @Not - Empty-Null-Blank
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ IOS ] iOS-控制器View的创建和生命周期
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [BZOJ3223]文艺平衡树
  • [CC-FNCS]Chef and Churu
  • [Excel VBA]单元格区域引用方式的小结