Nginx负载均衡技术在高速公路视频云联网平台中的应用

2021-04-17 05:47伍春生
关键词:哈希权值磁盘

伍春生

(中远海运科技股份有限公司,上海 200135)

0 引 言

根据交通运输部发布的《全国高速公路视频联网监测工作实施方案》的要求,全国高速公路视频监测设施要实现全网联通和视频资源实时在线共享,同时高速公路视频云联网平台需具有一定的并发访问能力。高速公路视频云联网平台的用户比较多,用户可通过Web端、APP和微信公众号访问该平台,访问量通常比较大,因此需采用合适的负载均衡技术处理客户端的请求。目前应用最广泛的负载均衡软件有Nginx、HAProxy和LVS(Linux Virtual Server)。本文采用Nginx负载均衡技术处理客户端请求,综合分析Nginx内置的多种负载均衡算法的优劣,比选出合适的负载均衡算法。同时,结合服务器的中央处理器(Central Processing Unit,CPU)、内存、磁盘IO和网络带宽等不同性能指标,综合计算出各服务器初始设定的权值,进而提高各服务器的资源利用率和系统的并发访问能力,为用户提供更优质的服务。

1 研究现状

Nginx是一种高性能的反向代理服务器,目前很多主流互联网公司都采用这种技术实现负载均衡。负载均衡一直是服务端研究领域内的热点问题[1],当前已有很多学者对Nginx负载均衡技术进行研究,通过对该技术的性能进行深度优化,使其更好地服务于应用系统,为用户提供更好的上网体验。刘振宇[2]和陈大才[3]从影响并发负载均衡的因素和服务器的性能出发,对历史数据进行训练,得到各服务器的响应预测时间模型,通过将当前的请求分配给预测响应时间最短的服务器,提高服务器集群中请求分配的均衡性。王利萍[4]和余钦水等[5]提出一种动态自适应负载均衡算法,对后端服务器集群最近一段时间内的请求响应时间进行数学分析,根据分析所得结果对各服务器的权值进行重新计算,实现动态调整请求分配策略。服务器负载均衡并不是单一的技术,而是由多种技术组合而成的体系[6]。当客户端发送请求时,负载均衡策略会将客户端发送的请求分配到最空闲的服务器中处理[7],整个过程对客户端是完全透明的,用户只感觉到是1台服务器在提供服务。

本文将当前主流的互联网负载均衡技术应用到高速公路视频云联网平台中,采用Nginx加权负载均衡算法建立高效的权值计算数学模型,为每个服务器设置最优的权值,进而提高整个系统的负载均衡能力。图1为Nginx负载均衡主要过程。

图1 Nginx负载均衡主要过程

2 Nginx负载均衡算法分析

不同的负载均衡算法对系统的性能有不同的影响,因此为高效地利用各服务器资源[8],向用户提供优质的服务,应选取合适的负载均衡算法。同时,随着平台用户量的不断增多,平台的并发访问量不断增加,可通过适当增加服务器节点提高系统的并发能力。Nginx内置有多种负载均衡算法,包括轮询算法、IP哈希算法、最小连接数算法和加权负载均衡算法等。下面详细分析这些算法的优缺点。

2.1 轮询算法

轮询算法是按客户端发送请求的先后顺序逐一将请求分配到后端服务器的算法,是Nginx中最简单的负载均衡算法,适用于后端服务器性能均衡的情况。但是,对于实际的应用场景而言,受硬件等各方面因素的影响,各后端服务器的性能差异很大,若采用该算法,性能较差的服务器易出现过载或宕机的问题,性能较好的服务器的资源不能得到有效利用,大部分时间处于空闲状态。

2.2 IP哈希算法

IP哈希算法的原理是每次对发送请求的客户端的IP地址进行哈希计算,根据得到的哈希值将其映射到对应的后端服务器上,在Nginx内部默认设置“如果连续20次以上获取服务器失败,将会启动轮询算法分配该请求”。IP哈希算法的优点在于,相同的IP地址请求会被映射到同一台服务器上,从而保持客户端与后端服务器的长连接。然而,该优点会导致IP哈希算法存在非常大的隐患,即当同一时刻大量IP地址相同的客户端发送请求时,若这些请求的哈希值相同,则会被分配到同一台服务器上,此时该服务器的压力非常大,而其他服务器较为空闲,存在请求负载不均衡的问题。

2.3 最小连接数算法

最小连接数算法在分配客户端请求时始终遵循一条规则,即将请求分配给当前连接数最小的后端服务器节点处理。每台服务器都有一个记录请求数count,接收到请求时count执行加1,处理完一个请求时count执行减1,因此每次count值最小的服务器都会分配到请求。但是,不同请求对应的任务不同,其资源的消耗也不同,仅依靠服务器的请求连接数不能直观反映服务器真实的负载情况。

2.4 加权负载均衡算法

加权负载均衡算法的原理是在Nginx的upstream模块中为每台服务器设定一个权值(weight),当接收到客户端发送的请求时,Nginx会根据既定的权值更配请求。该算法有3个重要参数,即设定权值(effect_weight)、当前权值(current_weight)和总权值(total_weight),每次执行完请求之后,服务器权值都执行减1操作,当服务器当前权值为0时,对其标志位down进行设置,若所有服务器的权值都为0,则当前轮询结束,系统发出结束指令。该算法有很强的适应能力,在分配请求过程中不依赖客户端的任何信息,完全依靠后端服务器已设置的权值分配请求。对于该算法无法保证用户长连接的问题,可通过JWT和cookie等方式解决,这样能同时具备IP哈希算法的优点。该算法的流程见图2。

图2 加权负载均衡算法流程

3 加权负载均衡算法权值计算数学模型建立

Nginx加权负载均衡算法的核心是为不同性能的服务器设定权值。若权值设定过大,会导致该服务器出现过载甚至宕机的风险;若权值设定过小,会导致该服务器资源不能得到有效利用。因此,需合理结合各服务器性能指标计算出每台服务器的权值。

本文采用内存、CPU、磁盘IO和网络带宽作为服务器权值计算的参数。Sum表示服务器各部分性能总和,Ni表示第i台服务器,其中i∈(1,2,3,…,n),有

(1)

(2)

(3)

(4)

式(1)~式(4)中:Summemory为服务器内存性能总和;SumCPU为服务器CPU性能总和;Sumdisk为服务器磁盘IO性能总和;Sumnet为网络带宽性能总和。

对于单个服务器权值的计算,分别将该服务器的内存、CPU、磁盘IO和网络带宽与服务器整体的比值乘以系数σ,即可得到服务器的实际权值。

(5)

式(5)中:Weight(Ni)为第i台服务器的实际权值(若有小数,则取整数部分);A为常数;Summemory(Ni)、SumCPU(Ni)、Sumdisk(Ni)和Sumnet(Ni)分别为第i台服务器的内存、CPU、磁盘IO和网络带宽的情况;i∈(1,2,3,…,n);σmemory、σCPU、σdisk和σnet分别为第i个服务器节点的内存、CPU、磁盘IO和网络带宽占整个服务器的比重。σmemory、σCPU、σdisk和σnet满足

σmemory+σCPU+σdisk+σnet=1

(6)

下面分别计算服务器内存、CPU、磁盘IO和网络带宽的使用率。

1)内存使用率。在计算内存使用率时,涉及的主要参数有总内存(MemoryTotal)、缓存(Cache)和文件缓存(BufferFile)等。

考核成绩设置为平时成绩∶期中成绩∶期末成绩=4∶2∶4的模式(见表1).该模式充分体现了过程考核和集中考核相结合的原则,培养了学生参与意识、责任意识和规则意识.其假设的前提是学生平时表现直接影响平时成绩,进而间接影响期中和期末集中考核成绩.线上考核满足个性化学习需要,培养责任意识与规则意识,课堂考核培养学生参与意识、责任意识、团队意识、担当意识及创新意识.考核方式与学生学习状态及学习效果直接相关.考核过程公开、公正、透明,对所有学生一视同仁,才能获得学生尊重与合作.

Usememery=(MemoryTotal-(MemoryFree+Cache+BufferFile))/MemoryTotal

(7)

2)CPU使用率。在计算CPU使用率时,需取2个时间间隔足够短的t1和t2,t1与t2的差值TimeTotal为该时间段CPU总的使用时间,有

TimeTotal=t2-t1

(8)

在t1与t2时间段,CPU的空闲时间只需将t2时刻的空闲时间减去t1时刻的空闲时间即可求得,即

LeisureTime=LeisureTime2-LeisureTime1

(9)

式(9)中:LeisureTime为CPU在t1与t2时间段内的空闲时间;LeisureTime1和LeisureTime2分别为t1和t2时间段内除IO等待时间外的其他等待时间。

综上可计算出CPU的使用率UseCPU为

UseCPU=(TimeTotal-LeisureTime)/TimeTotal

(10)

3)磁盘IO使用率。磁盘IO相关数据可通过iostat-d-x-k12命令获取,如每秒读写次数、每秒读写数据量和磁盘IO使用率。

4)网络带宽使用率(Usenet)。记录t1和t2时刻网络中接收和发送的字节数值(此时以“byte”为单位),t1时刻发送和接收的文件大小为OutSize1和InSize1,t2时刻发送和接收的文件大小为OutSize2和InSize2,有

Usenet=(InSize2-InSize1+OutSize2-OutSize1)×8/(1 000 000·BandWidth)

(11)

式(11)中:BandWidth为网络带宽,注意t1与t2时间段网络接收和发送总量的单位与网络带宽的单位不统一,需进行转换。

通过上述计算为每台服务器设置权值,负载均衡一段时间之后,各服务器节点资源的使用情况为

Use(Ni)=σmemory·Usememory(Ni)+σCPU·UseCPU(Ni)+σdisk·Usedisk(Ni)+σnet·Usenet(Ni)

(12)

式(12)中:Use(Ni)为第i台服务器资源使用率;Usememory(Ni)、UseCPU(Ni)、Usedisk(Ni)和Usenet(Ni)分别为当前服务器内存、CPU、磁盘IO和网络带宽的使用率;i∈(1,2,3,…,n)。

4 结果展示与分析

宁夏高速公路视频云联网平台目前已上线试运行,截至2020年12月17日,当月平台总访问量为4 751次,平台运行稳定,请求响应时间也较为理想。图3为宁夏高速公路视频云联网平台主页。通过查询后台日志可看到,目前部署的124.70.31.141服务器和124.70.31.55服务器是按计算设定的权值分配客户端请求的,为用户提供可靠的服务,2台服务器后台日志状态见图4。

图3 宁夏高速公路视频云联网平台主页

a)124.70.31.141服务器

获取2020年12月15日09:56—10:36时间段,在10:24—10:36时间段出现114个用户并发访问,此时系统的响应时间可有效反映采用本文建立的数学计算模型得出的服务器权值分配方案是高效的、可行的。图5和图6分别为宁夏高速公路视频云联网平台线上并发连接数和线上请求响应时间。从图5和图6中可看出,在并发访问用户为114个的情况下,系统最长响应时间为0.651 400 s。

5 结 语

本文从实际问题出发,深入研究了Nginx加权负载均衡算法,提出了一种高效的权值计算数学模型,综合考虑各服务器的综合性能指标,为其设定合理的权值,使系统在分配请求过程中充分利用各服务器的性能,大大提升系统的并发能力,缩短系统的响应时间。目前视频云联网平台还处于线上试运行阶段,系统的并发最高峰还未到来,考虑到以后正式上线推广使用,保证平台能承受10万个用户并发访问,应用层会随着用户的增多而适当增加服务器,提升其并发能力。下一步将对持久层进行优化,主要工作是对数据库分库分表和主从复制等进行优化,引入高性能非关系型数据库Redis作为缓存,缓解数据库层的压力等。

猜你喜欢
哈希权值磁盘
哈希值处理 功能全面更易用
Windows哈希值处理不犯难
文件哈希值处理一条龙
它的好 它的坏 详解动态磁盘
解决Windows磁盘签名冲突
Windows系统下动态磁盘卷的分析与研究
财务风险跟踪评价方法初探
巧用哈希数值传递文件
基于洪泛查询的最短路径算法在智能交通系统中的应用
克隆硬盘很简单