基于web应用的高并发业务处理研究之负载均衡
2019-10-08李洁
摘 要: 随着信息时代的到来、互联网技术的高速发展,随之而来的不可避免的一个至关重要的问题就是web系统性能的好坏。当多个用户同时访问同一个资源,当同一时刻服务器接收到数以亿计甚至更多的请求,引起的网路堵塞或者是服务超载会出现请求失败、系统响应缓慢,甚至会导致web网站的崩溃,这种高并发性问题引起的后果是难以想象的。本文针对web系统的高并发业务处理方式之负载均衡方式进行相对深入的研究,将对三种实现负载均衡的方式进行详解。可根据情况合情合理地选择合适的负载均衡方式,以提高系统对高并发业务处理的响应速度,提高系统的整体性能。本文对大型web系统的性能提高有一定的帮助作用。
关键词: 负载均衡;高并发业务处理;Web性能
中图分类号: TP302.7 文献标识码: A DOI:10.3969/j.issn.1003-6970.2019.08.032
本文著录格式:李洁. 基于web应用的高并发业务处理研究之负载均衡[J]. 软件,2019,40(8):136138
【Abstract】: With coming of the technology age and the rapid development of Internet technology, an unavoidable and crucial problem is the performance of web system. When multiple users access the same resource at the same time, when the server receives tens of thousands or more requests at the same time, the network congestion or service overload will result in request failure, slow system response, and even the collapse of the web site. The consequences of this high concurrency problem are unimaginable. In this paper, the load balancing of high concurrent service processing mode in web system is studied in depth, and three implementation methods of load balancing are introduced in detail. The appropriate load balancing mode can be reasonably selected according to the situation to improve the response speed of the system to high concurrent business processing and the overall performance of the system. This paper is helpful to improve the performance of large-scale web systems.
【Key words】: Load balancing; High concurrent business processing; Web performance
0 引言
随着信息时代的到来、互联网技术的快速发展,随之而来的不可避免的一个至关重要的问题就是web系统性能的好坏。系统性能是否优良是用户满意度高不高的一个重要体现。就好比淘宝双十一的抢购,看到页面显示的加载失败或是稍后再试,用户的心情是很绝望的;节假日车票发售时,网上抢票购票却怎么也买不到的不易;各类考试报名网站报名在高峰期运行的差强人意。这些情况就用户而言,体验感是极差的。而对web开发者来讲,这无疑也是web开发者面临的巨大的考验。当多个用户同时访问同一个资源,当同一时刻服务器收到数以亿计甚至更多的请求,引起的网路堵塞或者是服务超载会出现请求失败、系统响应缓慢,甚至会导致web网站的崩溃,这种高并发性问题引起的后果是难以想象的。
我们对于这种web系统的整体性能优化,能够从硬件以及软件两大方面解决。人们可以通过在服务器和外部网络直接安装负载均衡器、提高硬件质量、扩大内存、增加服务器的数量等多种方式来减轻服务器端的压力,提高web站点的性能,但是很多情况下,这不但解决不了问题,反而会导致资源无法被充分的利用,造成资源的浪费。而且对于开发者来说,经济成本也较为昂贵。举个简单的例子,就比如一个人流量很少的地方一开始交通不便,后來为了提供更好的服务,通行了多趟公交车,然而真实情况是在该地区运行的每趟公交车很多情况下都坐不满,人很少,这就是一种对公交车资源的浪费。再如图1所示:当请求1、请求2、请求3、请求4以及请求5都到达web服务器时,web服务器将请求按类型分发给子服务器0和子服务器1,由于请求分配的不均匀,子服务器2此刻便是闲暇状态。这就是对资源的不充分利用。所以通过硬件的这种方式是有一定缺陷的。
那么由此可看出:当一台服务器的吞吐量到达最大值时,可以通过应用web服务器集群来优化web站点,对web系统整体性能进行提升。所以在web服务器集群中,需要一个服务器作为调度者来接收用户的所有请求,该服务器再按照实际情况下各个服务器的负载状态依赖于某个具体的调度策略将用户的请求合理分发到具体的后端服务器处理,从节点上减少单个服务器的负载,提升web站点的响应能力[1]。
很明显在该过程里,我们关注于服务器,也就是调度者该如何合理分发请求,以达到所有的后端服务器都能够被充分使用,充分发挥其作用,使得web服务器集群的整体性能相对最高化,这就是要详细说明的问题——负载均衡[2]。本文针对web系统的高并发业务处理方式之负载均衡进行深入的研究,说明实现负载均衡的三种方式。
1 负载均衡处理方式
1.1 HTTP重定向负载均衡
HTTP重定向是由HTTP请求代理和Web服务器共同实现的。客户端浏览器(HTTP请求代理)发送HTTP请求,Web服务器接收到请求URL后发送302状态码响应,并通过HTTP请求响应头信息中的Location标识返回一个新的URL发给客户端浏览器,浏览器发现是302响应码,则再次发送一个新的URL给服务器,web服务器通过该URL寻找资源并将结果返回给用户[3]。在该过程中,浏览器至少做了两次请求。在Web应该开发中,我们经常会使用它来实现请求的转移以及页面的跳转。若将其应用到负载均衡的过程中,则可以理解为浏览器的两次请求,第一次是向作为调度者的服务器发起请求,以得到要真正接收处理的后端服务器的地址,第二次则是向该后端服务器发起请求,以得到后端服务器进行处理后返回的结果[4]。
很明显在这个过程中,我们关注于服务器,也就是调度者该采取何种策略合理分发请求。具体的策略一般包括随机分配策略、轮询策略、最小连接、hash等,具体如下:
(1)随机分配策略:随机分配请求到各个服务器,在请求量大的时候分配越均匀。
(2)轮询策略(Round-Robin):该算法将用户的请求顺序分发给后端服务器,按顺序从头开始,至尾结束,再重新开始新一轮循环。该算法更适合于所有的服务器都有一样的软件和硬件配置,处理能力相同,只有在这种情况下,服务器间才能够得相对负载均衡。
(3)最小连接(Least Connections):根据服务器当前的处理情况,在多个请求到来时,交付给处理连接数最少的服务器,它是动态负载均衡算法。即使在每台服务器处理能力各不相同,每笔业务处理量也不相同的情况下,也能够在一定程度上降低服务器的负载[5]。
(4)Hash方式:相同的请求根据自定义的hash()算法总是到达同一个服务器,但是如果某个服务器发生宕机,那么后面的请求都会重新计算,重新分配服务器,导致请求大量转移。
1.2 DNS域名解析负载均衡
用户向域名发送请求,DSN服务器按照开发者自定义的调度策略返回一个IP地址给用户,用户收到该IP地址后,重新向该IP地址发送请求,从而实现web服务器集群的负载均衡。
这种方式的负载均衡是交给DNS去做的,所以开发者只需关注后端服务器的稳定性和吞吐量即可。但由于DNS是无法知道各个服务器的实际负载状况,它其实也是和HTTP重定向一样,将接收到的一切请求均分给后端服务器,所以它也无法真正地实现负载均衡。
一般的大型网站会将域名解析作为一级负载均衡,在服务器内部会进行二级负载均衡,所以一般情况下,用户获得的IP地址实际上是内部负载均衡服务器的IP地址[6]。
另外如果服务器发生故障,必须将它从调度策略中移除,将指向故障该服务器的DNS记录暂停,由于修正DNS记录在一定的时间后才会有效,即DNS更新延迟,有多种方式在意识到故障时来尽快修改DNS记录,但是都需要人力,无法自动实现故障转移,所以当我们监测发现实际情况下某个的服务器出现问题时,可使用动态DNS协议快速修改DNS记录[7]。
1.3 反向代理负载均衡
反向代理器位于实际的web服务器前面,当接收到用户的请求时,代理服务器作为调度者,按照设置好的负载均衡策略将请求转发给真实的服务器,真实的服务器处理完该请求后将结果返回给代理服务器,用户在这个过程中是不知道真实服务器的存在的。代理服务器的两个IP地址,一个用于外部用户访问,一个用于内部转发。
相较于HTTP重定向,请求需要通过反向代理服务器下发到真实的服务器,浏览器通过反向代理服务器与后端真实的服务器进行间接的交互,故而它可以保证反向代理服务器拥有绝对的控制权。
与DNS负载均衡相比,当某个服务器发生故障时,由于反向代理服务器的存在,如果系统检测到服务器发生了故障,可以很快告诉反向代理服务器,将该故障服务器移除,那么请求就不会转发到该故障服务器,从而将故障转移,将请求分发给其他服务器来处理。
如果客户端浏览器的请求数过多甚至大于了代理服务器的最高负载量,因为反向代理服务器处理所有的请求,那么会导致整个服务器集群的性能整体降低;当后端服务器处理能力达到最大,通过增加后端服务器的数量解决别的请求是一种有效的方式,但不可以无限制增加,毕竟代理服务器有最大吞吐量的限制,故而反向代理服务器的扩展是受到限制的。
2 结束语
本文讨论了web系统高并发业务处理的方式——负载均衡[8-10],给出了相关的调度策略,详细说明了负载均衡的三种方式以及不同方式的优缺点,可根据情况合情合理地选择合适的负载均衡方式,以提高系统对高并发业务处理的响应速度,提高系统的整体性能。本文对大型web系统的性能[11]提高有一定的帮助作用。
参考文献
[1] https://blog.csdn.net/github_37515779/article/details/79953788.
[2] 饶磊. 服务器集群负载均衡策略研究[J]. 计算机与现代化, 2013, 1.
[3] 陈恒. Spring MVC开发技术指南[M]. 北京: 清华大学出版社, 2017.
[4] https://blog.csdn.net/shixiansen6535/article/details/81509480.
[5] https://www.cnblogs.com/data2value/p/6107450.html.
[6] 盧鹏. 几种常见的网络接入方式[J]. 软件, 2017.
[7] 郭欣. 构建高性能Web站点[M]. 北京: 电子工业出版社, 2012. 6.
[8] 冯学兵. Wireless HART 负载均衡方法研究[J]. 软件, 2018, 39(2): 166-169.
[9] 庞玲. 网络流量分析多机负载均衡系统设计[J]. 软件, 2012, 33(5): 75-77.
[10] 王龙. 田野. 基于纳什均衡的多用户分布式系统负载均衡的研究[J]. 软件, 2012, 33(12): 210-213.
[11] 王文明, 高经纬. 一种Linux环境下搭建高性能网络库交互平台的方法[J]. 软件, 2012, 33(4): 50-54.