一种基于高并发场景下的多服务器负载均衡的设计方案
2018-09-12刘文博谭裴汪宁
刘文博,谭裴,汪宁
(中国移动通信集团设计院有限公司安徽分公司,合肥 230041)
1 引言
在无线基站智能查勘系统的大范围推广应用过程中,LTE和NB-IoT网络建设规模的日益增大,系统的访问量急剧增加。由于服务器硬件资源的限制,系统处理能力遇到了瓶颈,在用户访问系统时出现页面反应慢、数据处理效率低下的现象。基于以上问题,本文通过对数据库进行分布式设计,对Web服务进行负载均衡部署,在应用层对不同数据进行源整合,提出了一套对从数据到应用的整体负载均衡方案。经过压力测试证明,本方案能够有效提高系统的承载和处理能力。
2 关键技术介绍与实现
2.1 数据拆分
从拆分规则上来说,数据拆分可分成两种拆分的模式。一种是将不同的表分别拆分到不同的数据库上面,这种拆分被称作数据库垂直拆分;第二种是根据表中的不同逻辑关系, 将一张表中的数据按照一定的条件拆分到不同的和数据库上面,这种拆分叫做水平拆分。
2.1.1 垂直拆分
数据库是由多个数据块组成,我们将这些数据块垂直拆开并分散到多个数据库上面。具体就是将一个属性较多,一行数据较大的表,把不同的属性拆分到不同的表中,以降低单库(表)大小,达到提升性能的目的的方法。垂直切分后, 各个库(表)的结果不同, 每个库(表)的属性至少有一列交集, 所有库(表)的并集是全量数据。
一个应用系统的整体功能是由多个功能模块组成,数据库中的一张或者多张表对应到每个功能模块需要的数据。不同的数据库存放不同功能模块的数据,这种方式可以避免存在跨数据库连接。垂直拆分的架构如图1所示。
垂直拆分的优点是数据库的拆分简单、规则明确、系统模块清晰、易整合、数据维护简单。
图1 垂直拆分
2.1.2 水平拆分
水平拆分是将某一张访问频繁的表按照某个字段的规则来分散在多张表中,每个表中都包含了部分数据。数据的水平拆分是将表中的部分行拆分到另外一个数据库中,而其他行拆分到其他数据库中。拆分需要按照特定的规则来进行,这主要是为了让我们能够轻易的判定各行数据存放在哪一个数据库中。如根据不同用户群的编码或者用户工号等进行拆分。基于用户的ID进行数据水平拆分,如图2 所示。
图2 水平拆分
水平拆分的优点在于可以在数据库端完成表的关联,不存在高负荷和大数据量的表,事务处理简单。
2.1.3 联合拆分
在实际使用过程中,系统的业务逻辑经常会较为复杂,系统负荷高,不能通过单一的数据拆分方式实现,需要将两种拆分方法进行结合使用。
联合拆分的优点为可以将垂直和水平拆分的优点进行结合,最大化提升系统的扩展性。
本方案采用的是联合拆分的方法,将单一数据库的数据存放在不同的数据库中。具体来说,无线基站智能查勘系统包括勘察数据、查询统计、 流程审核、人员管理、 GIS展示等子系统,各个子系统的功能模块耦合度低。首先把各个业务模块拆分,拆分后的业务可以形成独立子系统。具体做法就是把不同用户群的基本信息、统计信息、人员管理等子系统的数据拆分并存储在多个服务器的数据库上并通过中间数据层对不同数据库的数据进行整合,整合后的分布式系统在用户使用体验上与拆分前的系统相同。其次利用读写分离以及数据库的分库分表解决数据库高频读写的性能问题。数据拆分的过程其实就是利用特定的手段,将存放在一个数据库中的数据进行分离并且存储到多个云主机上从而减轻单个服务器的负载。除此之外,数据拆分还可以提高系统的稳定性,例如突然单台设备崩溃的情况只会导致总体数据的某部分不能正常的使用,其他部分的数据是安全的。
2.2 基于Nginx技术的负载均衡
对于并发访问量大、单台服务器处理能力一般导致的卡顿、宕机的问题,我们采用多服务器集群技术来应对,核心就是负载均衡。负载均衡技术能够将大量并发访问请求较为合理地均分到集群内的各服务器进行处理,从而能够避免单个服务器访问数据量过大的情况,同时可以让各个服务器的资源都能够得到均衡使用。负载均衡目前主要有硬件负载均衡和软件负载均衡两种技术,由于硬件的成本比较高昂,我们采用Nginx负载均衡的技术。Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行,其特点是占有内存少,并发能力强,并已在较多门户网站中成功应用。
如图3所示,我们可以将服务1部署到A、B两台不同的云主机上, 对服务2也可以做类似的部署。这样部署既能够有效的避免由于云主机故障导致的服务中断,又能够有效地利用了云主机的资源。
图3 负载均衡
3 测试分析
在方案应用后,我们采用了专门的测试工具对改进后的系统性能继续综合能力测试。
3.1 测试工具
在完成数据库分库,并进行Nginx负载均衡后,我们测试采用的软件是LoadRunner。LoadRunner是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。LoadRunner可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。
3.2 测试性能指标
本次测试记录和分析了并发用户数量、业务响应的时间、服务器资源利用率3个具有代表性的参数。
3.2.1 并发用户
指模拟的所有用户在同一时刻做同一事情或操作,这种操作主要针对同样类型的业务或者所有用户进行同样的操作,主要目的是测试系统对于并发操作的处理能力。
3.2.2 响应时间
响应时间主要是从用户的角度出发,分析操作的时间延迟。对于用户来说,只能通过感觉时间的快慢来评价系统性能的优劣,并发访问量等其他因素并不是他关心的重点。从某种程度上说,系统的平均响应时间的快慢决定了Web应用系统的性能好坏。通常情况下,响应时间越短说明系统应对负载的能力越强。访问的用户数越多,相应的系统响应时间就会越慢。
3.2.3 资源利用率
资源利用率只是针对系统资源的使用程度,是测试和分析系统瓶颈所在以及改善系统性能的重要依据。
3.3 测试结果分析
通过测试分析后,将分析结果与实施本方案前的数据进行对比如图4所示。
图4 测试结果
3.3.1 并发用户
通过数据库拆分以及负载均衡的优化后,当并发用户达到13 430个的时候出现第一个访问错误,随着虚拟用户并发访问量的进一步增加,错误数量的增加较少,浏览器访问网站页面速度有所减慢,页面可以正常登陆,数据库运行正常。
3.3.2 系统平均响应时间
系统响应时间和优化前相比减少,减少时间平均在2 s左右。
3.3.3 系统资源
通过远程登录查看云主机的资源,发现CPU利用率平均约56%,内存利用率平均约55%,跟优化前没有明显区别。与优化前相比,服务器在增加了并发访问量的情况下,减少了系统响应时间,提高了 Web服务器的资源的利用率。
4 结束语
本文综合应用数据库分布式设计以及服务器负载均衡技术,解决了高并发访问量、高频读写数据库表以及单台服务器硬件能力一般带来的访问变慢、宕机的问题,减少了系统平均响应时间,提高了系统资源的利用率,同时避免了因单一设备故障导致的服务停止的风险。