基于负载均衡技术的公共自行车数据分流与存储系统
2018-06-21李晓明
刘 炎,李晓明
(浙江理工大学 机械与自动控制学院,浙江 杭州 310018)
杭州市公共自行车系统是目前世界上最大的公共自行车系统[1],截止2014年6月底共有服务点3 111个,自行车7.8万辆,日均租用量28.8人次,最高日租量达41.14万人次.在现有系统中,所有的站点终端数据只能通过一台服务器实现存储和访问,当短时间内数据存取量较大时,该服务器程序响应时间较长,交易数据延迟量较大,在一定程度上影响了用户的使用体验;另外,系统中所有数据均通过一台服务器与数据库交互,该服务器一旦发生故障,就会造成整个系统无法正常运行,因此必须改变这种单一节点服务的现状.为了解决公共自行车系统在数据存储方面存在的瓶颈问题,本文设计了一种面向公共自行车业务的数据分流和存储系统.新的存储服务器架构分为分流(负载分配)服务器和区域服务器两大部分.其中分流服务器数量为一,用于接收系统中所有自行车站点的数据包裹,同时监测区域服务器的负载情况并实现数据转发;区域服务器可按照系统区域划分为多台,用于接收分流节点转发来的数据并将数据写入后台数据库中.
目前,负载计算方法已经成熟,比较简单的方法是根据计算机的CPU使用率和内存使用率等情况对服务器的负载进行分析[2];也可以根据服务器处理的请求数据量进行负载能力计算.通常情况下,服务器处理请求的数量是一个比较准确的负载估算值,而并发的网络连接数是服务器服务能力的一个制约因素[3].在配置相同的情况下,单位时间内处理请求数目多的服务器负载更高.考虑到公共自行车系统需要根据请求的区域来源和服务器的负载状态进行综合分析,本文提出了一种区域负载均衡算法.
1 数据分流与存储系统
公共自行车系统中的数据存储系统主要包括数据的接收和存储两部分.在传统的单服务器结构中,存储服务器直接接收自行车站点终端的数据并将数据存入数据库中.传统的单服务器结构如图1所示.
图1 单服务器结构
1.1 系统需求
为了解决传统公共自行车系统单服务器结构的数据存储瓶颈问题,新系统应满足短时间内大量数据的存储需求.由公共自行车业务特点所决定,公共自行车系统的数据流量具有很强的时段性,受时间、事件、天气条件的影响较大,每天早、晚时段的数据量较大,借还车、押金操作等数据集中上传,会给服务器带来较大的压力.因此,数据分流和存储系统应当适应这种处理数据的压力.这是其一.
其次,新系统需要具有灵活、动态分配服务器处理和存储数据的能力.区域服务器的划分通常是依据站点地理区划进行的,以便于布置.但是由于公共自行车数据有较为鲜明的区域特点,按地理区划设置区域服务器会造成某一区域的服务器负载较大而其他区域服务器较为空闲的局面.因此,新系统的数据存储和分流管理系统应能够动态均衡各个区域服务器的压力,使数据流量在不同区域服务器之间合理分配.
其三,新的区域分流和存储系统需要兼容原有数据库和前端设备,以便将部署的成本减到最低.
1.2 系统结构
根据新系统的基本需求,本文设计了图2所示的分流服务器和区域服务器结构.
图2 分流服务器和区域服务器结构
与传统系统相比,新系统设置了区域服务器和分流服务器.这样做的优点在于:①安全性更强(将原有单一的服务器数据处理模式改成了多台服务器并行处理,通过服务器冗余,避免了服务器故障造成系统停止服务的风险);②速度更快(并行处理数据请求的优势就在于处理能力成倍增长,在相同数据库性能之下,系统能够处理的终端请求量大大增加);③更柔性(增加区域服务器的数量就可以增加系统的服务能力,随着业务量的不断增大,可采用渐进升级服务器的方式满足更高的性能要求.
该系统对分流服务器提出了更高的要求.因为所有的数据均需要通过分流服务器转发到对应的区域服务器,所以分流服务器性能的好坏会直接影响整个公共自行车系统的运行.
1.3 软件设计
区域服务器和分流服务器采用云计算虚拟机方式,可根据需要给不同的服务器分配不同的计算资源,灵活性非常强.
在图3所示的存储系统功能模型中,将区域服务器划分为3个功能模块,分别为请求处理模块、数据存取模块和负载计算模块.同时将分流服务器划分为4个功能模块,分别为请求响应模块、服务器节点队列模块、选择器模块和请求分配器模块.
图3 存储系统功能模型
1.3.1 分流服务器功能模块
(1)请求响应模块:该模块监听网络端口,响应终端设备发送的各种数据请求,并与终端建立连接.该模块并不处理终端的请求,而是根据选择器模块的输出将该请求传递给请求分配器.此外,该模块会将不符合要求的请求或者非法连接剔除.
(2)服务器节点负载队列模块:该模块与服务器节点进行通信,以维护一个队列数据结构.该数据结构能够描述各服务器节点的状态及负载情况.
(3)选择器模块:该模块根据预设规则动态地决定负责处理请求的服务器ID.
(4)请求分配器模块:该模块将请求转发给指定的服务器.
1.3.2 区域服务器功能模块
(1)请求处理模块:该模块处理来自分流服务器或终端的请求,负责创建网络连接和监听请求端口,并过滤掉不合法的请求.
(2)数据存取模块:该模块与数据库系统交互,负责数据的读取及写入.
(3)负载计算模块:该模块主要计算服务器的负载情况.其计算的依据主要是服务器单位时间内处理的请求数目以及数据库存取的数据量.
1.3.3 终端请求的代理交接模式
对于来自终端的请求,分流服务器和区域服务器一般有两种交接方式(跳转式和代理式),本系统采用代理式服务方案.首先,终端设备向分流服务器发送请求,分流服务器受理后会维持连接,并将该请求内容转发给区域服务器.区域服务器对请求处理后将结果反馈给分流服务器,然后分流服务器将结果传给前端设备.在该方案中,分流服务器的一部分功能充当了代理的功能,终端无需做任何改动,只需要等待请求的结果就可以完成一次访问.这在网络质量不高的情况下能够提高终端设备存取数据的速度.其缺点在于整个服务过程中分流服务器都要保持与终端设备的连接,在一定程度上会限制分流服务器的响应能力.当然,由于分流服务器不处理数据也不与数据库交互,仅需要维持连接,因此可以采取低CPU配置和高内存分配的策略来弥补大网络连接的网络延迟.
2 区域负载均衡技术
负载均衡技术指以对称的方式在系统中部署多台服务器,每台服务器都具有相同的状态和能力,并且可以独立地向外部提供服务而不需要其他服务器的支撑[4].使用负载均衡技术,将前端发送来的请求按照某种策略分配给系统中的一台服务器,接收请求的服务器执行处理流程并给予响应.它通过服务器阵列高效地分配前端请求,以最少的资源实现了大型机的性能,是高效处理关键数据的有效手段[5].
2.1 负载计算模型
为了确保算法的有效性和准确性,系统需要实时监控存储服务器的任务队列以及数据库连接池的使用情况,并根据服务器中任务队列的数据量以及数据库连接池的使用率来判断该服务器的负载状况.
用i表示存储服务器系统中区域服务器的第i台服务器,Nr、Nmax和P分别表示区域服务器当前连接数、总连接数和数据库连接池的使用率.那么,区域服务器的负载为:
B=αNr/Nmax+(1-α)P
(1)
式中,α为调节区域服务器中任务线程池和数据库连接池使用率的权重.通常区域服务器会出现等待连接的情况,而数据库连接池由于速度较快,常常处于等待状态,所以α的值一般大于0.5,即优先考虑服务器连接池的使用率.
2.2 数据分流模型
(2)
式中:t为数据包裹的编号;Tj为系统中第j台服务站点;Bj为第j台区域服务器的实时负载.
从式(2)可知,如果某个服务站点向存储服务器发送连接请求,系统需要先判断该站点属于哪个区域服务器的管辖范围.如果该区域服务器处于正常运行状态,没有达到临界负载,则选择该区域服务器进行连接处理;如果该区域服务器已经饱和,负载能力已经达到临界值,则选择剩下区域服务器中负载情况最为良好的一台进行连接转发.
3 实验与测试
由于分流服务器的主要功能在于分流和转发,几乎不对数据做任何处理,因此分流服务器软件在运行时仅需要消耗较低的CPU资源,但是需要大量的网络资源和文件描述符资源,而网络资源和文件描述符资源均受限于操作系统的约束,存在上限.因此需要合理地选择测试方案和测试系统.该测试系统的结构如图4所示.它包括一台测试服务器、多台测试客户机,并且它们被置于同一个局域网中[6-7].
图4 测试系统结构
测试客户机上的测试程序模拟公共自行车站点工控机的功能,向安装在测试服务器上的分流服务器软件发起连接请求,建立网络连接并传送一定长度的数据,然后关闭网络连接.
在模拟测试环境下,测试客户机不可能太多,因此需要在一台测试客户机上模拟运行多个站点的数据请求.在测试程序开发过程中使用了多线程技术,一个线程代表一台站点机器.由于大部分操作系统将网络连接的并发数限制为1 024,因此一台测试客户机上的测试程序在默认条件下可创建1 000个虚拟站点(也可更改配置模拟更多站点).当需要更多测试客户机时可以动态地接入更多计算机.
实验中服务器通过WIFI与实验室路由器连接,测试客户机通过有线或无线的方式与同一路由器连接.测试用服务器配置为Intel Core i7-470HQ CPU @2.5 GHz,16 G内存,64位Windows操作系统.所选计算机和操作系统均为普通的桌面计算机和桌面操作系统.存储服务器程序采用Java编写,在CMD(命令提示符)程序中运行,并实时输出过程数据.
最终测试结果如图5所示.从图5可以看出,服务器在满负荷情况下会出现少许连接失败的情况.但在实际测试的过程中,服务器未到达满负载的时候连接成功率是100%,只有在极端情况下才会出现丢包的现象.
图5 测试结果截图
表1所示为具体的测试结果.其中服务器平均每分钟处理连接数为16 138,这一速率对于存储服务来说已绰绰有余.目前杭州市的公共自行车系统大约有3 000多个站点,每个站点平均每5 min发起一次请求,此系统完全能够胜任高峰期的数据存储任务.
表1 具体测试结果
4 结束语
本文提出的公共自行车数据分流和存储系统,经过需求调研、设计开发和实验测试,最终证明可以有效缓解公共自行车系统在数据存储方面的困难,实现了数据的分区转发和动态存储.下一阶段将着重研究存储系统的备份系统和异常处理系统,进一步提高系统的安全性和实用性.
参考文献:
[1] Fishman E, Washington S, Haworth N,et al.Factors influencing bike share membership: An analysis of melbourne and brisbane[J]. Transportation Research Part A,2015,71:17-30.
[2] 周莹莲,刘 甫.服务器负载均衡技术研究[J].计算机与数字工程,2010,38(4):11-14.
[3] 李 坤,王百杰.服务器集群负载均衡技术研究及算法比较[J].计算机与现代化,2009(8):7-10.
[4] 田绍亮,左 明,吴绍伟.一种改进的基于动态反馈的负载均衡算法[J].计算机工程与设计,2007,28(3):572-573.
[5] 龚 梅,王 鹏,吴 跃.一种集群系统的透明动态反馈负载均衡算法[J].计算机应用,2007,27(11):2662-2665.
[6] 李志峥,杨社堂.基于B/S结构下的软件系统测试研究[J].科技情报开发与经济,2006,16(7):232-234,251.
[7] 武海平,蒋东兴,程志锐,等.Web服务器通用性能测试系统的设计与实现[J].小型微型计算机系统,2003,24(2):188-190.