引言
近期,掘金发出技术专题的邀约,我也是紧跟潮流,写了一篇关于网络协议的性能优化与性能评估的文章,本篇文章主要讲了三个大方向包括:网络协议的性能指标 、性能优化策略 、性能评估方法;并针对这三个方面进行深入的分析,希望与大家一起交流分享。
一、网络协议的性能指标
1、延迟
延迟是衡量数据从源点到目的地所需时间的指标。对于实时应用,如VoIP(语音通话)和在线游戏,减少延迟至关重要,因为它直接影响用户体验。
源主机和目的主机之间路径会由多段链路和多个路由器组成,所以网络时延主要由以下组成:
发送时延
传播时延
处理实验
下图为计算公式:
处理时延一般忽略不计,网络总时延中哪一时延占主导需要具体问题具体分析。
如下图举例:
当传输的数据量远远大于路径时,发送时延占主导因素 当路径远远大于传输的数据量时,传播时延占主导因素(如从地球向太空发送数据)
2、吞吐量
吞吐量是网络在单位时间内处理的数据量。对于视频流媒体和大型数据传输,高吞吐量能够确保更流畅的体验和更快的数据处理速率。
吞吐量表示在单位时间内通过某个网络(或信道、接口)的数据量。 吞吐量被经常用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。 吞吐量受网络的带宽或额定速率的限制。
带宽为不受影响情况下,然而一般吞吐量受限制,还要在带宽的基础上进行削减。
吞吐量的大小主要由防火墙内网卡,及程序算法的效率决定,尤其是程序算法,会使防火墙系统进行大量运算,通信量大打折扣。因此,大多数防火墙虽号称100M防火墙,由于其算法依靠软件实现,通信量远远没有达到100M,实际只有10M-20M。纯硬件防火墙,由于采用硬件进行运算,因此吞吐量可以达到线性90-95M,是真正的100M防火墙。
3、带宽
带宽利用率反映了网络资源的有效使用。通过优化带宽利用率,可以减少网络拥塞,提高数据传输效率。
用来表示网络的通信线路所能传送数据的能力,因此网络带宽表示在单位时间内从网络中的某一点到另一点所能通过的"最高数据率" 单位同速率也是bps
举一个生活中的小例子,假如平时家里带宽为800M,其实是指的是800Mbps或800Mb/s,真实速度其实要在带宽的基础上除以8即,800Mbps/8=100M/s(当然这是完全理想状况,真实情况要以吞吐量计算)
4、利用率
利用率分为:
信道利用率
:表示某信道有百分之几的时间有数据通过网络利用率
:全网络的信道率用率加权平均
根据排队理论,某信道利用率增大,其时延也增加,所以信道率用率并非越高越好,一般让其保持在50%以下
利用率 分为信道利用率 和网络利用率
信道利用率
-
信道利用率
- 指出某信道 有百分之几的时间 是被利用的(有数据通过)
- 完全空闲 的信道的利用率是零
网络利用率
-
网络利用率:是全网络的信道利用率的加权平均值
-
信道利用率并非越高越好
- 过低会造成资源浪费
- 但是过高(当某信道的利用率增大时),该信道引起的时延也就迅速增加
二、性能优化策略
1、减少延迟
- 优化路由算法:选择更短或更快的路径以减少数据包的传输时间。在面试中也是经常遇到这类问题,比较重要,需牢记!!
- 启用TCP Fast Open:TCP Fast Open是一种加速TCP连接建立的机制,它可以在三次握手的第一次握手时就开始传输数据,从而减少连接建立的时间和延迟。
- 启用TCP窗口缩放:TCP窗口缩放可以增加TCP连接的吞吐量,从而减少延迟。
- 启用TCP SACK:TCP SACK可以在网络拥塞时更好地处理数据包丢失和重传,从而减少延迟。
- 启用TCP BBR:TCP BBR是一种新的拥塞控制算法,可以在网络拥塞时更好地处理数据包丢失和重传,从而减少延迟。
-
使用更快的传输媒介:比如光纤代替铜线,以减少传播延迟。
- 使用CDN(内容分发网络) :CDN是一组分布在全球各地的服务器,可以缓存网站内容并将其提供给用户。
- 使用压缩 :压缩可以减小文件的大小,从而减少下载时间。常见的压缩格式包括Gzip 和Brotli。
- 使用HTTP/2:HTTP/2是HTTP协议的最新版本,它可以减少延迟并提高性能。HTTP/2使用多路复用技术,可以同时传输多个请求和响应,从而减少了网络延迟。
- 使用WebP格式:WebP是一种新的图像格式,可以比JPEG和PNG格式更快地加载。WebP图像通常比JPEG和PNG图像更小,可以更快地下载。
- 使用视频和音频流:对于大型媒体文件,可以使用视频和音频流来减少加载时间。用户可以在下载文件的同时开始观看视频或听取音频。
- 使用预加载:预加载可以在用户请求之前加载资源,从而加快网站的加载速度。预加载可以通过在HTML中使用标签来实现。
-
减少处理时间:优化网络设备,减少数据包处理时间。
- 减少网络请求次数:通过合并多个请求,减少网络请求次数,从而减少网络延迟。例如,可以将多个小文件合并成一个大文件进行传输,或者使用CSS Sprites技术将多个小图片合并成一张大图片进行加载。
- 减少DNS查询次数:DNS查询也会消耗时间,可以通过减少DNS查询次数来降低网络延迟。例如,可以将静态资源的域名与主站点的域名分开,从而减少DNS查询次数。
2、提升吞吐量
- 负载均衡:通过分散流量,避免单一路径的过载。
-
硬件负载均衡 :使用专门的硬件设备(如负载均衡器)来实现负载均衡。这些设备可以安装在网络入口处,根据特定的算法将流量分发到不同的服务器或网络节点。特点 :硬件负载均衡通常具有高性能 和可扩展性。
-
软件负载均衡:通过在软件层面实现负载均衡,将流量分发到多个服务器或网络节点。这种方法可以通过在操作系统或应用程序中进行配置来实现。软件负载均衡可以根据不同的算法(如轮询、随机、加权轮询等)来分配流量。
-
反向代理:使用反向代理服务器来接收客户端的请求,并将其转发到后端服务器。反向代理服务器可以缓存静态内容,减少对后端服务器的请求,并提高系统的吞吐量。
- IP 负载均衡:通过配置网络交换机或路由器来实现负载均衡。IP负载均衡又可以称之为网络层负载均衡,其核心原理就是通过内核驱动更改IP的目的地址来完成数据负载均衡的。
-
网络升级:使用更高效的网络设备和技术,如升级到更高速的路由器和交换机。
- 升级网络设备:最简单暴力的方式就是更换更高性能的网络设备,以提升提高网络吞吐量和响应速度。
- 增加带宽:我们也可以通过增加网络带宽,可以容纳更多的网络流量,提高系统的吞吐量。
- 网络负载均衡:我们通过在网络层实现负载均衡,可以将网络流量分发到多个网络设备或服务器,通过平衡负载并提高系统的吞吐量。
- 零拷贝技术(重要) :在网络传输过程中,采用零拷贝技术可以避免不必要的数据拷贝,减少系统资源的消耗,从而提高网络吞吐量。面试中也经常遇到零拷贝,可以简单了解一下,零拷贝指在进行数据 IO 时,数据在用户态下经历了零次 CPU 拷贝,并非不拷贝数据。通过减少数据传输过程中 内核缓冲区和用户进程缓冲区 间不必要的CPU数据拷贝 与 用户态和内核态的上下文切换次数,降低 CPU 在这两方面的开销,释放 CPU 执行其他任务,更有效的利用系统资源,提高传输效率,同时还减少了内存的占用,也提升应用程序的性能。
- 流量管理:对网络流量进行识别、分类、优化和控制的相关技术,以提高网络性能和用户体验。
-
流量识别和分类:通过识别和分类网络流量,可以了解流量的来源和类型,如数据、语音、视频等,以便进行分类处理和优化。
-
流量控制:通过流量控制技术,如QoS(Quality of Service)和队列管理,可以优先处理重要的流量,避免网络拥堵和延迟,提高系统的吞吐量。
-
流量优化:通过优化网络流量的传输和处理方式,可以提高网络性能和吞吐量。例如,使用压缩技术减少数据传输量,或使用缓存技术减少重复的数据传输。
-
流量控制应用:针对特定的应用程序进行流量控制,以确保关键业务流量(如VoIP、视频会议等)的优先传输,并避免对其他流量造成干扰或影响。
3、提高带宽利用率
- 数据压缩 :通过压缩数据减少传输量。常见的数据压缩算法有Gzip 、Deflate 等。在网络传输过程中,服务器可以对数据进行压缩,客户端则需要解压缩,以实现数据的传输和解析。同时,也需要注意压缩和解压缩过程中的性能和资源消耗,避免对系统性能产生负面影响。
- Gzip :gzip是⼀种⽆损压缩算法,其基础为Deflate,Deflate是LZ77与哈弗曼编码的⼀个组合体。它的基本原理是:对于要压缩的⽂件,⾸先使⽤LZ77算法的⼀个变种进⾏压缩,对得到的结果再使⽤哈夫曼编码(根据情况,使⽤静态哈弗曼编码或动态哈夫曼编码)的⽅法进⾏压缩。
-
缓存技术:在网络边缘存储常用数据,减少重复传输。缓存技术可以将经常访问的数据或资源存储在离用户更近的地方,以减少每次请求的处理时间和网络流量,提高带宽利用率。
-
浏览器缓存 :浏览器可以将经常访问的网页内容或资源缓存到本地,以减少每次请求的处理时间和网络流量。通过设置HTTP头中的缓存相关字段,如Cache-Control 和ETag,可以控制浏览器缓存的行为。
-
反向代理缓存:反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。
-
- 数据库查询缓存 :数据库查询缓存可以将频繁执行的数据库查询结果缓存在内存中,减少对数据库的访问次数。常用的有:redis 、memcache 和ehcache ;这里就不详细介绍了,感兴趣的可以看我主页的redis专栏了解:redis详解专栏