论负载均衡技术在Web系统中的应用

摘要
本人于2020年1月参与某集团保险一体化研发项目,该系统致力于实现全国保险业务种类的整合、数据分析、订单汇总、账单汇总,为集团人员提供全国保险账单的管理、安全监控、数据保护方面提供全方位的软件支持,在该项目中我主要担任系统架构师岗位,负责整体架构设计。
本文以该保险一体化项目为例,主要讨论了负载均衡技术在Web系统中的具体应用。在网络请求到服务器的过程中,我们先使用了F5负载,利用F5负载均衡技术降低了服务器的压力。经过F5负载之后,我们又接入了SLB负载均衡,将访问流量根据转发策略分发到后端多台云服务器上,因为我们的项目是前后端分离的架构,经过slb负载之后,到达前端的服务器上,前端的配置里面增加了nginx配置,根据nginx的转发策略再请求到后端的服务器上,从而提升了web服务器的性能和安全性。
正文
随着该集团保险业务的迅猛扩展,之前的互联网上的入口已经不能满足每天几十万的流量控制和访问量,在订单量高发的情况下,系统总是会出现卡顿、反应缓慢等问题,极端的情况是整个服务器直接挂掉,系统直接不可用,极大的影响了业务的营销,影响了公司的正常运转。为了解决高并发和高流量的访问,该集团决定重新搭建集团保险一体化项目,实现系统的高可用、高负载,提高系统的访问性能和稳定性。2020年1月,我被该集团任命为该保险一体化项目的系统架构师,架构小组共6人,我主要负责整体的架构设计,5月份完成架构工作,整个项目共耗时1年,2021年1月顺利通过验收,获得了业务的一致好评。
在架构开始阶段,我们便意识到,之前系统出现不可用的情况,是因为是单台服务器导致的,当这台服务器出现异常的时候,直接就挂掉了。每次恢复都需要手动重启,影响业务使用。所以,为了解决这个问题,我们搭建了多台服务器,并从网络访问入口到后端服务器的整个调用链我们都做了负载均衡处理。
众所周知,常见的负载均衡算法有三种,(1)轮询法。轮询法就是将用户的请求轮流分配给服务器,就像是挨个数数,轮流分配。这种算法比较简单,具有绝对均衡的优点,但是也正是因为绝对均衡,它必须付出很大的代价,例如它无法保证分配任务的合理性,无法根据服务器承受能力来分配任务。(2)随机法。随机法是随机选择一台服务器来分配任务 。它保证了请求的分散性达到了均衡的目的。同时它是没有状态的,不需要维持上次的选择状态和均衡因子。但是随着任务量的增大,它的效果趋向轮询后也会具有轮询法的部分缺点 。(3)最小连接法。最小连接法将任务分配给此时具有最小连接数的节点,因此它是动态负载均衡算法。一个结点收到一个任务后连接数就会加1,当结点发生故障时就将结点权值设置0,不再给结点分配任务 。最小连接法适用于各个结点处理的性能相似的情形。任务分发单元会将任务平滑分配给服务器。但当服务器性能差距较大时,就无法达到预期的效果。因为此时连接数并不能准确表明处理能力,连接数小而自身性能很差的服务器可能不及连接数大而自身性能极好的服务器。所以在这个时候就会导致任务无法准确地分配到剩余处理能力强的机器上。本文将重点围绕F5负载均衡、SLB负载均衡、nginx反向负载均衡技术来进行论证。
F5负载均衡是一种硬件负载均衡技术,建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。这里需要说明的是:F5负载均衡设备不是基础网络设备,而是一种性能优化设备。对于网络应用而言,并不是一开始就需要负载均衡,当网络应用的访问量不断增长,单个处理单元无法满足负载需求时,网络应用流量将要出现瓶颈时,负载均衡才会起到作用。在该项目中,我们为了减轻后端服务器的压力和提高系统的响应时间,将从互联网上过来的流量请求平均的分配到后端的slb服务器上。因为是平均分配流量和请求,所以这里使用的负载均衡算法是轮询法。
上面经过F5硬件负载之后,又到了SLB软件负载,这里我们接入的SLB是阿里云的服务器,阿里云负载均衡SLB主要由3个基本概念组成:负载均衡器LoadBalancer,监听器Listener,后端服务器BackendServer。负载均衡实例Server Loader Balancer instances:一个负载均衡实例是一个运行的负载均衡服务,用来接收流量并将其分配给后端服务器。监听器Listeners:监听器用来检查客户端请求并将请求转发给后端服务器。监听也会对后端服务器进行健康检查。后端服务器Backend Servers:一组接收前端请求的ECS实例,ECS实例是真正提供服务访问的,后端服务器的数据要一致,对后端服务器的操作系统等配置没有要求,只要求它们的数据是一致的。应用接入slb负载均衡之后,可以在负载均衡实例下添加多台ECS实例。当其中一部分ECS实例发生故障后,将请求分发给正常运行的ECS实例,成功消除了单点服务的故障。同时,slb还支持同城容灾(多可用区容灾)和跨地域容灾,提高了应用程序的可用性和可靠性。
经过上面的slb负载之后,请求就正常的连接到后端的服务器上面来,首先,接入的是前端服务器,在前端服务器请求后端的接口上面增加了一层nginx路由转发,这里主要是利用了nginx反向代理的特性,将来自Internet的连接请求以反向代理的方式动态转发给内部网络上的多台服务器进行处理,而从达到负载均衡的目的。基于反向代理则可以根据内部服务器的性能差异及实时负载情况进行动态负载均衡,当系统多个Web服务器性能存在明显差异或内部Web服务器出现故障时,负载均衡器可以更快做出响应,从而保证客户端的访问效率。采用基于反向代理的负载均衡机制,可在代理服务器中引入调速缓存机制,对Web服务器返回的静态页面或图片等静态资源进行缓存,由代理服务器承担对原始服务器的静态资源访问请求,从而进一步降低原始Web服务器的负载。从安全性方面讲,采用基于反向代码的负载均衡机制,代理服务器屏蔽了客户端对真实Web服务器的直接访问,恶意用户无法对真实Web服务器进行攻击,且可以通过代理服务器为原本不安全的客户端与Web服务器之间的连接建立安全通道。因此采用基于反向代理的负载均衡机制可为系统提供更好的安全性保障。
经过上面的三层负载均衡,提高了该集团保险一体化项目的高可靠性,并使该系统能应对互联网上大量的并发和流量请求。项目运行至今,再也没有出现过系统不可用的情况,且运行一直良好,并在2021年1月成功通过用户验收,得到了一致好评。
但是,在架构设计中也存在不足。主要有2点,一是后端部署节点过多,在部署上面比较麻烦。二是部署节点缺少统一性的管理,扩容和缩容都有待提高。针对第一个问题,我们在系统部署的时候接入了jenkins+Devops,每次提交代码的时候自动触发流水线,然后带出到生产环境,大大降低了人工操作带来的风险。针对第二个问题,我们接入了k8s集群管理技术,将docker运行的实例全部管理起来,大大提升了系统应用的自动扩容和缩容。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值