APP下载

服务器集群中的负载均衡策略研究

2019-05-23陈岗

电脑知识与技术 2019年8期
关键词:负载均衡异构集群

陈岗

摘要:目前接入互联网的应用越来越多,服务器在使用时经常会面临并发量、资源使用率以及响应时间等各种要求,单台服务器通常难以满足繁忙的业务。服务器集群可以解决单台服务器的问题,但是又面临着负载均衡的问题。Nginx可以实现负载均衡,能够有效解决服务器集群,尤其是异构机器的负载均衡问题。

关键词:集群;负载均衡;动态;异构

中图分类号:G642 文献标识码:A

文章编号:1009-3044(2019)08-0009-02

互联网技术和移动技术的结合,使互联网用户访问量呈级数级别的不断增长,如此庞大的用户量给网络系统运营以及服务器性能带来的巨大的挑战。很多情况下一台服务器已经难以满足大量并发访问的需求。为了解决服务器的单点性能问题,通常是搭建一个服务器集群响应用户请求。

大量用户请求如何均衡的分发到服务器集群中的各个服务器上是一个非常关键的问题,这就是通常所说的负载均衡。负载均衡技术可以使服务器集群中的各服务器按照其性能合理地按比例分担用户请求,以保证性能高的服务器能够更好、更快的处理请求。

1 Nginx技术及负载均衡

Nginx诞生于2004年,是一款反向代理服务器,具备高可靠性、高扩展性的优点,在支持大量的并发连接的同时内存消耗还相对比较低,因此非常适合用于充当服务器负载均衡器[1]。Nginx的内部支持多种高级的数据结构及开发模型,因此同等条件下要比apache tomcat的性能好。

Nginx是一种高度模块化的负载均衡产品,包括event、upstream、fastcgi、memcached、Proxy等模块,event模块主要用于处理各种采集管理和分发的事件,fastcgi模块用于便利地调用c、python等各种语言编写的程序,upstream模块可以解决一个请求有多个TCP连接、多个读写事件的问题,从而实现Nginx和上游服务器的交互;memcached模块使Nginx能够从后端的服务器获取响应,服务代理模块能够将用户的请求传递到另外一台服务器。

Nginx启动后有多个服务进程,比如master进程、worker进程以及cache相关的进程等。master进程和worker进程间的通信用于传递信息。master进程通常就是Nginx的主进程,此进程并不实际执行业务,也不处理各种事件,而仅仅作为Nginx启动后的进程组和用户的交互接口;另外,master进程还可以监控worker进程的执行状态,在worker进程意外终止时重新启动一个新的worker进程。worker进程一般是由master进程fork产生的,作用是处理客户端应用程序与后端服务器间的数据交互和读写操作。

Nginx的upstream模块的功能主要是实现用户请求的负载均衡,其工程流程如图1所示:

图1 Nginx的upstream模块工作流程

客户端应用的http请求发送给Nginx后,Nginx会根据请求向后端服务器发送TCP请求,后端服务器返回对应的响应报文[2]。Nginx会根据后端服务器的响应报文决定是否转发给客户端。upstream模块的处理机制会保证在处理Nginx上下游数据时,可以根据上下游网络的具体情况采取不同的措施,如果上下游网络差距不大,那么为了更多的并发处理用户请求,可以开辟一块固定的内存,用于处理上游的响应,同时把保存的响应页面返回给下游。如果上游网速比下游网速快很多,则需要开辟足够大的内存缓冲区,以缓存上游响应,在必要时还需要将其缓存到磁盘上。

2 负载均衡策略

为了更加高效的处理用户请求,需要有一个高效的负载均衡策略,常用的负载均衡策略包括加权轮询策略、IP Hash策略以及第三方负载均衡策略[3]。

加权轮询策略需要事先为每台服务器设置一个权值,代表各服务器处理用户请求能力的高低。Nginx在分发请求时,就会有些选择权重大的服务器,每次分发请求后都会更新权值,然后再分发新的请求。一段时间后各服务器处理的请求数量比值趋近于权值之比。这种负载均衡策略不依赖于客户端,因此用户请求能够更合理地加权均匀分配到后端服务器。然而,同一个客户端的多次请求可能被分配到不同的后端服务器处理,因此难以满足需要会话保持的场景。

IP Hash负载均衡策略解决了同一客户端的多次请求可能被分配到不同后端服务器的问题,先根据客户端的IP计算一个哈希值,然后根据哈希值选择后端服务器进行分发,这样就克服了加权轮询策略难以保持会话的不足。但是IP Hash策略实现负载均衡的依据是客户端的IP地址,因此对于使用NAT代理的用户而言,如果短时间内大量使用同一NAT代理的用户发起请求,则某台后端服务器可能面临巨大的压力。

第三方负载均衡策略需要在安装Nginx过程中编译添加进去,可以支持Fair Weight策略以及最小连接数策略。Fair Weight策略根据后端服务器的响应时间分配请求,优先分配响应时间端的服务器;最小连接数策略优先选择连接数最少的后端服务器。虽然这些第三方负载均衡策略在一定程度上反映并利用了后端服务器的处理能力,但是它们还都是仅仅在加权轮询的基础上添加了一定的动态反馈,并没有实质性的改进。

基于内容分类的负载均衡算法会把用户的请求分为若干类,并均匀地分配给各个服务器,以保证各个服务器得到的请求量大致相當。基于HTTP请求内容的负载均衡策略把用户的HTTP请求内容分为静态请求和动态请求两类,静态请求只需要提高请求的cache命中率即可,动态请求才考虑进行负载均衡。

在实现负载均衡时,服务器当前的负载信息是关键,因此对负载信息评价的准确性直接影响到负载均衡策略的选取。经典的负载信息评价标准会综合考虑服务器的CPU利用率、内存使用率、网络带宽利用率以及磁盘IO情况等各种信息。

3 业务异构集群的负载均衡

WEB请求通常会涉及到多种业务,比如发表型业务、事务处理型业务、多媒体型业务等[4]。在多业务组成的业务异构集群中,业务类型的不同会在很大程度上影响后端服务器的资源使用情况。例如,对单台服务器而言事务性业务使用的资源主要是磁盘I/O,因此如果此类业务被分配到磁盘I/O相对差的服务器时就会减慢用户的处理速度;对集群整体而言,电商类业务需要较高的服务器性能。

在多业务异构集群的情况下,可以先把异构服务器集群分为不同的业务子集群,然后依据动态负载均衡策略分发请求;另外,在请求分发过程中,如果某一个业务子集群的负载过重,则需要从负载较轻的业务子集群中抽调服务器,以缓解负载压力。基于这样的思路,可以把负载均衡模块划分为请求分类模块、请求分发模块、负载反馈模块。

请求分类模块的作用是把用户的请求分成不同的类型,以便有针对性的分发到不同服务器。请求分发模块根据识别的用户请求,然后询问后端服务器的IP地址,并将用户请求分发到对应的IP。负载反馈模块维护业务集群的结构信息和整体负载信息,并根据实际情况选择不同的负载均衡策略。

具体的服务请求分发步骤是:1) 用户发起请求。通俗地讲,就是在浏览器中输入url地址并回车后,请求被发送到负载均衡器。2) 请求分类。请求分类模块接收到用户的请求url后,会把请求url转换为(url ,type)的格式,然后发送给请求分发模块。3) 请求分发。请求分发模块根据其维护的每个用户请求的负载值,把(type, request)发送给负载采集模块,以便循环后端服务器的IP地址。4) 负载采集模块根据一定的负载均衡策略,选择合适的后端服务器处理用户请求。

在请求分发过程中,如果在短时间内用户的请求都是某一类固定的业务,那么可能会导致处理此业务的业务子集群负载过高,而且其他服务器因为空闲而没有得到合理的利用。为了解决这一“旱涝不均”的现象,在负载分发过程中还需要进行服务器的动态划分,也就是在出现某类业务集中处理、负载过高的情况时,就从负载较轻的业务子集群中临时抽调服务器,以缓解负载较高业务集群的压力,在处理完毕后再把抽调的服务器归还到原来的业务子集群。这样一来,服务器的动态划分既解决了用户请求分发的负载均衡问题,又有效提高了后端服务器集群的利用效率。

4 总结

本文对服务器集群的负载均衡技术进行研究。首先,介绍了Nginx技术及其负载均衡模块,接下来在此基础上阐述了动态负载均衡技术,以及用于异构集群的负载均衡技术,对服务器集群的负载均衡研究有一定的参考意义。

参考文献:

[1] 王永辉.基于Nginx高性能web服务器性能优化与负载均衡的改进和实现[D].电子科技大学,2017.

[2] A. Yousofi, M. Banitaba,S. Yazdanpanah.A Novel Method for Achieving Load Balancing in Web Clusters Based on Congestion Control and Cost Reduction[J]. IEEE Symposium on Computers &informatics, 2017,17(9): 55-58.

[3] 鄧珍荣,唐兴兴,黄文明,等.一种Web服务器集群负载均衡调度算法[J].计算机应用与软件,2013(10):53-56.

[4] 陈伟. 异构Web集群中基于动态反馈机制的负载均衡的研究与实现[D].重庆大学,2018.

【通联编辑:王力】

猜你喜欢

负载均衡异构集群
试论同课异构之“同”与“异”
海上小型无人机集群的反制装备需求与应对之策研究
一种无人机集群发射回收装置的控制系统设计
Python与Spark集群在收费数据分析中的应用
异构醇醚在超浓缩洗衣液中的应用探索
异构环境下改进的LATE调度算法
overlay SDN实现异构兼容的关键技术
LTE异构网技术与组网研究