基于任务流的自适应负载均衡算法

时间:2022-09-13 09:30:11

基于任务流的自适应负载均衡算法

[摘 要]一个高可用、高性能的负载均衡体系架构可以有效地解决服务器和整个系统的压力。通过对几种负载均衡算法优劣的比较,针对负载均衡算法的有效性和其带来的额外开销这一矛盾问题,提出基于任务流的负载均衡调度机制。结合加权随机数的负载均衡算法,提出了平滑的动态加权随机数算法,并将其应用于Riak数据库节点的负载均衡实验之中。通过对实验结果的分析和对其他几种方法的实验结果的对比,证明这一方法的高可用性和有效性。

[关键词]负载均衡算法; 高可用; 任务流; Riak; Erlang-OTP

中图分类号:TM422 文献标识码:A 文章编号:1009-914X(2017)12-0316-01

1 引言

因互联网技术急速地推进与发展而剧增的用户量为服务器、数据库,或是整个存储系统都带来了不小的压力。随着大数据时代的到来,庞大的数据量不断递增,非关系型数据库也得以发展与壮大,并迅速流行起来。而非关系型数据库大多以多节点的形式部署,因此,好的负载均衡策略对于数据库,乃至整个存储系统都是至关重要的。

负载均衡问题作为一个经典的组合优化问题,其对应的相关算法也层出不穷。然而,没有哪种特定的方法可以有效地解决所有问题,对于不同的场景与环境,每种算法也各有优劣。

在分布式存储系统的负载均衡优化问题中,本文提出了基于任务流的自适应负载均衡算法,通过对同一时刻同一节点上的用户量和其操作的频次等相关数据分析,并采用平滑加权随机数算法,来对各节点的权值进行自动调整,从而实现数据库各节点的负载均衡。

2 相关内容介绍

本次实验平台采用的是利用Erlang-OTP搭建的server(服务器)和Riak数据库所构成的存储系统。该系统最大的特点就是可用性高,伸缩性好。通过server来实现资源的配置和任务的调度,以及Riak节点的管理。

2.1 Erlang-OTP架构

Erlang是由爱立信工程师Joe Armstrong所创,是一门函数式编程语言,其最大的特性就是面向并发。Erlang-OTP架构原先用于欧洲电信方面的应用,具有效率高、稳定性好、支持大并发等优点。而随着这门技术的不断发展,已不再局限于电信方面,而凭借其优点适用于各个行业。

2.2 Riak数据库

Riak数据库是一种分布式的键-值(Key-Value)数据库,如同其他非关系型数据库一样,无论存储的值是何种数据类型都可以,包括普通文本、JSON、XML、图片甚至是视频片段。Riak以节点(node)的形式分布,节点与节点之间构成一个哈希环,并可以互相通信,存入的数据会根据初始的设定备份到不同的节点中。因此,即使有节点崩掉,也可以通过其他节点来获得数据。

本文通过由Erlang-OTP搭建的server和Riak数据库所构成的存储系统进行实验。server负责接收来自用户的指令并将这些任务按照提出的负载均衡算法分配给Riak数据库的各个节点,从而实现Riak数据库节点的负载均衡。且因为Riak数据库是通过Erlang编写的,因此使用原生Erlang语言来实现Riak的接口无疑是最直接有效的,而性能和效率也是较高的。

3 调度机制与算法

3.1 基于任务流的调度机制

一般动态或是自适应的负载均衡算法是通过获取服务器或是数据库节点处CPU、内存等相关资源的使用情况,将这些相关数据传送至主节点端,并以此为依据来执行资源的分配和任务的调度。有些优化算法还会同时修改相关算法的权值,从而实现更加精确的负载均衡,这些算法有效地提高了负载均衡的有效性,但无疑在更加精确的同时也增大了开销和时延。包括主从节点通信的时间开销和网络资源开销,以及从节点对额外任务的资源开销,而这些开销在一些结构环境下是完全不必要的。

在绝大多数的分布式存储系统中,为了更充分地、更简单地实现资源的利用,在部署各数据库节点时,其资源的配置一般也是均匀一致的。各节点的负载状况只会随着之后分配到各节点上的任务的不同而发生改变。由此可以提出一种模型,任务流即负载,如图2所示。

3.2 负载状况测评

当client向server发送相关请求时,server会获取到类如增、删、改、查等相关操作指令。对于不同的操作指令,给节点带来的负载压力也是不同的,这需要视具体的数据库特性而定。然而,若实时地对各节点的负载状况进行测评并对权值进行改动,会使主节点的压力剧增并带来极大的额外开销,而其带来的收益并不明显。因此采取周期性的检测评估和自适应性调整是比较合理的做法,即在固定的时间间隔内对各从节点的状态进行一次测评并调整权值。假设在一个周期中,主节点向某一从节点发送的单个create请求而带来的负载压力记为P(c),该节点i接收的总create请求数为(c),则该周期内create请求给这一节点带来的负载压力为P(c)*(c)。同理记delete、update和lookup操作带来的负载压力分别为P(d)、P(u)、P(l),对应的请求数分别为(d)、(u)和(l),那么该周期内该节点的负载状况Pi(total)为:

(total)=P(c)*(c)+P(d)*(d)+P(u)*(u)+P(l)*(l)

而对于具体的数据库,譬如Riak数据库,集群中的所有节点都能同时进行读写操作,但是因Riak自身的特性所致,其在写入数据时只是负责写入,而在数据读取的时候再来定义数据冲突的处理逻辑。因而可见,在Riak数据库中,就create操作带来的负载压力是要小于lookup操作的。估测出各从节点本次周期的负载状况,便可以此为自适应性调整的依据来对各从节点的权值进行调整。

理论可以得知,随着client调用server次数增多,基数足够大时,各节点的client数会按照设定的比例分配。

4 结束语

基于任务流的负载均衡调度C制是一种以准确性来换取资源的机制。在适当的范围内减少网络通信带来的额外开销和各节点的计算开销可以较大地提升整个系统的性能和运作效率。但该机制的困难之处在于对任务流给节点带来压力量的分析,尤其是在复杂指令的下压力量的评估。这也将是我们进一步开展研究的重点之一。

平滑加权随机数算法是对加权随机数算法的平滑处理,可以有效地降低负载均衡过程中,分配任务时给节点带来的冲击,且该算法简单易实现。在今后的研究中,我们将对该算法的准确性作进一步研究。

参考文献

[1] 刘朵,曾锋,陈志刚,等.Hadoop平台中一种Reduce负载均衡贪心算法[J].计算机应用研究,2016,33(9):2656-2659.

[2] 吴和生,王崇骏,谢俊元.TeraPELB:云计算中基于预测的弹性负载均衡算法[J].系统仿真学报,2013,25(8):1751-1760.

作者简介

宦奥胜(1992-),男,硕士研究生,主要研究方向:云存储技术,E;黄海辉(1969-),男,重庆邮电大学软件工程学院高级工程师,主要研究方向:嵌入式。

上一篇:校园餐饮O2O销售模式研究offline部分 下一篇:浅谈新时期供热企业设备管理