近期,掘金发出技术专题的邀约,我也是紧跟潮流,写了一篇关于网络协议的性能优化与性能评估的文章,本篇文章主要讲了三个大方向包括:网络协议的性能指标、性能优化策略、性能评估方法;并针对这三个方面进行深入的分析,希望与大家一起交流分享。
延迟是衡量数据从源点到目的地所需时间的指标。对于实时应用,如VoIP(语音通话)和在线游戏,减少延迟至关重要,因为它直接影响用户体验。
源主机和目的主机之间路径会由多段链路和多个路由器组成,所以网络时延主要由以下组成:
发送时延
传播时延
处理实验
下图为计算公式:
处理时延一般忽略不计,网络总时延中哪一时延占主导需要**具体问题具体分析。
** 如下图举例:
当传输的数据量远远大于路径时,发送时延占主导因素 当路径远远大于传输的数据量时,传播时延占主导因素(如从地球向太空发送数据)
吞吐量是网络在单位时间内处理的数据量。对于视频流媒体和大型数据传输,高吞吐量能够确保更流畅的体验和更快的数据处理速率。
吞吐量表示在单位时间内通过某个网络(或信道、接口)的数据量。 吞吐量被经常用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。 吞吐量受网络的带宽或额定速率的限制。
带宽为不受影响情况下,然而一般吞吐量受限制,还要在带宽的基础上进行削减。
吞吐量的大小主要由防火墙内网卡,及程序算法的效率决定,尤其是程序算法,会使防火墙系统进行大量运算,通信量大打折扣。因此,大多数防火墙虽号称100M防火墙,由于其算法依靠软件实现,通信量远远没有达到100M,实际只有10M-20M。纯硬件防火墙,由于采用硬件进行运算,因此吞吐量可以达到线性90-95M,是真正的100M防火墙。
带宽利用率反映了网络资源的有效使用。通过优化带宽利用率,可以减少网络拥塞,提高数据传输效率。
用来表示网络的通信线路所能传送数据的能力,因此网络带宽表示在单位时间内从网络中的某一点到另一点所能通过的“最高数据率” 单位同速率也是bps
举一个生活中的小例子,假如平时家里带宽为800M,其实是指的是800Mbps或800Mb/s,真实速度其实要在带宽的基础上除以8即,800Mbps/8=100M/s(当然这是完全理想状况,真实情况要以吞吐量计算)
利用率分为:
信道利用率
:表示某信道有百分之几的时间有数据通过网络利用率
:全网络的信道率用率加权平均根据排队理论,某信道利用率增大,其时延也增加,所以信道率用率并非越高越好,一般让其保持在50%以下
利用率分为信道利用率和网络利用率
信道利用率
- 指出某**信道**有**百分之几的时间**是被利用的(**有数据通过**)
- **完全空闲**的信道的利用率是**零**
网络利用率
- 过低会造成资源浪费
- 但是过高(当某信道的利用率增大时),**该信道引起的时延也就迅速增加**
1. **使用CDN(内容分发网络)** :CDN是一组分布在全球各地的服务器,可以缓存网站内容并将其提供给用户。
2. **使用压缩**:压缩可以减小文件的大小,从而减少下载时间。常见的压缩格式包括**Gzip**和**Brotli**。
3. **使用HTTP/2**:HTTP/2是HTTP协议的最新版本,它可以减少延迟并提高性能。HTTP/2使用多路复用技术,可以同时传输多个请求和响应,从而减少了网络延迟。
4. **使用WebP格式**:WebP是一种新的图像格式,可以比JPEG和PNG格式更快地加载。WebP图像通常比JPEG和PNG图像更小,可以更快地下载。
5. **使用视频和音频流**:对于大型媒体文件,可以使用视频和音频流来减少加载时间。用户可以在下载文件的同时开始观看视频或听取音频。
6. **使用预加载**:预加载可以在用户请求之前加载资源,从而加快网站的加载速度。预加载可以通过在HTML中使用标签来实现。
1. **减少网络请求次数**:通过合并多个请求,减少网络请求次数,从而减少网络延迟。例如,可以将多个小文件合并成一个大文件进行传输,或者使用CSS Sprites技术将多个小图片合并成一张大图片进行加载。
2. **减少DNS查询次数**:DNS查询也会消耗时间,可以通过减少DNS查询次数来降低网络延迟。例如,可以将静态资源的域名与主站点的域名分开,从而减少DNS查询次数。
1. **升级网络设备**:最简单暴力的方式就是更换更高性能的网络设备,以提升提高网络吞吐量和响应速度。
2. **增加带宽**:我们也可以通过增加网络带宽,可以容纳更多的网络流量,提高系统的吞吐量。
3. **网络负载均衡**:我们通过在网络层实现负载均衡,可以将网络流量分发到多个网络设备或服务器,通过平衡负载并提高系统的吞吐量。
4. **零拷贝技术(重要)** :在网络传输过程中,采用零拷贝技术可以避免不必要的数据拷贝,减少系统资源的消耗,从而提高网络吞吐量。面试中也经常遇到零拷贝,可以简单了解一下,**零拷贝**指在进行数据 IO 时,数据在用户态下经历了零次 CPU 拷贝,并非不拷贝数据。通过减少数据传输过程中 内核缓冲区和用户进程缓冲区 间不必要的CPU数据拷贝 与 用户态和内核态的上下文切换次数,降低 CPU 在这两方面的开销,释放 CPU 执行其他任务,更有效的利用系统资源,提高传输效率,同时还减少了内存的占用,也提升应用程序的性能。
1. **浏览器缓存**:浏览器可以将经常访问的网页内容或资源缓存到本地,以减少每次请求的处理时间和网络流量。通过设置HTTP头中的缓存相关字段,如**Cache-Control**和**ETag**,可以控制浏览器缓存的行为。
2. **反向代理缓存**:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!