数据库集群中间件负载均衡模块的设计与实现

 论文出处:[1]崔丹. 数据库集群中间件负载均衡模块的设计与实现[D].北京邮电大学,2017.

         该篇论文主要研究的内容设计一个位于数据库集群中间件中的负载均衡模块,用来处理大量的应用系统的查询请求。至于本论文中涉及的相关概念知识,接下来为具体介绍(功能,设计方式)。

        目前随着数据爆炸式的增长,海量的信息存储在数据库中,而大量的用户请求希望能够处理来自多个数据库的数据。而且数据库所需要解决的问题不再仅仅是记录程序正确的处理结果,还需要解决:是否能够横向拓展达到更高的吞吐量;是否拥有实时同步的副本,保证面临灾难时数据库的可用性;数据库的横向拓展是否对应用程序透明等。由此,数据库集群技术出现了,数据库集群技术是将所有的数据库有机连接起来,进行统一管理,使应用系统充分利用集群中服务器的资源,提升整个集群的利用率。同时随着应用系统负载的增加,只需要将新的服务器添加到集群中即可,即可完成集群的拓展。实际上数据库集群就是一组计算机,该组计算机作为一个整体向用户提供网络资源和服务,这些单个的计算机系统就是集群的节点。

        目前数据库集群开发技术主要有基于双机容错技术基于实时数据同步技术。基于双机容错技术开发的集群的特点是若运行中的服务器出现问题,备份系统将通过心跳机制的检测,切换到备份系统;基于实时数据同步技术开发的集群将应用系统的请求分为两类,查询请求会由负载均衡模块进行分配任务给集群的各节点,而数据更新请求会交由各个数据库节点同时执行,从而达到数据的一致性。数据库集群中间件系统的整体架构是C/S架构。应用系统作为客户端,通过数据库集群中间件来访问后端的数据库节点,主要的操作包括查询和更新数据,其中,查询数据的操作通过调用负载均衡模块来提高整体系统的系能,结果返回给第三方应用。应用系统的操作包括数据的插入、更新、删除和查找,数据库数据的修改是全量的,所有节点都要进行相同的操作 ,所以不涉及负载分配的问题M。故本文讨论的负载请求只针对查找操作。数据库集群中间件接收到应用系统的请求后,SCF将该请求封装成一个特定格式的MESSAGE,由其业务模块调用数据库中间件,然后数据库中间件调用负载均衡模块,选择数据库节点进行负载的分配。数据库接收到SQL请求后进行查询,将结果返回给数据库集群中间件,中间件再将结果返回给应用系统。

                                             

        本数据库集群中间件系统主要基于SCF数据库中间件技术,建议数据库中间件平台,隐藏数据库中的各个节点,为用户提供统一透明的接口。其中SCF中间件是一种独立的系统软件或服务程序,可以将分布式服务资源进行整合为客户端提供统一的使用接口,管理网络资源和通信,实现资源的共享。在SCF中间件上运行了由SLPL语言完成实现的业务脚本,SCF通过任务调度和管理控制实现自动机实例的触发和执行。SCF中的自动机用于加载业务逻辑,在调用业务逻辑时,会自动创建自动机;在执行业务逻辑过程中,自动机存储业务逻辑运行的中间数据和处理过程;在执行完业务逻辑时,自动机被销毁。SCF可以在多种操作系统上运行,比如unix、linux,、windows等,具备平台无关性。SCF中间件支持多种通信协议,包括tccp/sccp、INAP、MAP、SIP等,从而可以让开发人员实现多种多样的业务,具有良好的扩展能力。

                             

        接下来介绍负载均衡模块。负载均衡模块是依据节点的负载信息。通过负载均衡算法判定节点的状态并进行负载的分配,使集群中的每个数据库节点获得大致相等的负载,避免出现单个节点负载阻塞而其他节点比较空闲的情况,从而缩短整个集群系统的平均响应时间,提高系统的效率。本论文中研究的负载均衡,主要有以下两种实现思路:1),基于数据库连接的负载均衡;(数据库负载均衡模块统一 分配请求负载给数据库节点)3),基于批处理请求的负载均衡(应用系统同时连接多台数据库节点,发送请求的时候独立选择数据库节点来执行请求,不经过负载均衡模块)。负载均衡的两种实现方法:软件/硬件负载均衡 ,静态/动态负载均衡。第一种实现方法顾名思义,通过在服务器中安装附加软件来实现负载均衡(如Nginx、LVS)或者购买昂贵的硬件负载均衡器(F5、Array)安装在服务器和外部网络之间来进行智能化的流量管理,达到最佳的负载均衡需求;第二种方法中,静态负载均衡是根据静态负载均衡算法进行负载的分配,比如随机、轮询、加权,忽略整个系统当前的负载状况分配负载。动态负载均衡是根据系统当前的负载状态进行负载分配的一种策略。相对于静态负载均衡策略,它需要收集服务器运行的负载信息,判断服务器的负载状态从而进行负载的灵活分配。当然这些方法都各有优缺点,本文主要的实现方法是通过软件来实现的。

        数据库集群中间件的负载均衡模块依据节点的负载信息,通过负载均衡算法判定节点的状态并进行负载的分配,需要实现SQL解析、数据库节点负载信息的收集、数据库节点状态的判定、负载的分配和数据库健康检查功能。同时负载均衡模块还要能处理好数据库之间性能差异的问题。主要保证每个数据库节点的性能得到充分发挥,减少某些极端情况的发生,提高数据库集群的整体利用率和响应速度,尽可能提高整个数据库集群的性能,避免某个数据库节点出现阻塞导致的数据库集群平均响应时间过长的问题。负载信息收集主要收集各个节点的平均响应时间、任务队列长度和内存使用情况,再通过负载均衡算法进行计算来判定数据库节点的负载状态,并实现负载的合理分配。负载均衡模块中的核心是负载均衡算法,负载均衡算法可分为静态负载均衡算法(随机、轮询和加权等)和动态负载均衡算法(最少响应时间、最短队列、动态反馈算法)。在负载均衡模块中数据库健康检查也是必不可少的,包括检查数据库的状态、是否可用、数据库的Session连接是否正常,通过健康检查来判定该节点服务器是否可以作为负载均衡策略的选择节点。健康检查组件会检测出某些数据库节点的状态是否发生变化,并及时的更新数据库节点列表。健康检查的间隔实际和尝试次数要不会对业务产生影响并不会对节点造成较大负担。数据库集群负载均衡模块作为中间件的关键组成部分,除了满足进行负载合理调度分配的基础功能,还需要满足一定的非公能需求包括可用性和拓展性(不停机,一般3-4个数据库节点)。

                            

        数据库集成中间件(DCM)的总体架构如下图。DCM针对不同的数据库集群,提供了不同的协议接口,其中针对分布式数据集群和内存数据库提供单次操作和批量操作接口。关系数据库集群对应用系统提供HDBC和ODBC接口;内存数据库对应用系统提供REST接口;DCM对应用系统设置连接池,具备连接数限制策略,可根据需要配置;DCM具备SQL任务队列,通过任务调度和控制保障数据一致性;DCM对各数据库设置连接池和线程池,充分挖掘数据库的服务能力,可根据主机配置调优参数,发挥最大性能。

 

                                           

        应用系统先向DCM发起登录请求;DCM服务管理根据预先为应用系统配置的用户及其权限进行用户密码验证;DCM服务管理将配置信息同步给服务节点,服务节点缓存配置于内存;执行SQL时,DCM根据链接对象中的逻辑名动态路由,并解析SQL判断操作权限,鉴权成功后通过与实际数据库的连接访问数据库。

                                    

数据库集群中间件在对第三方的应用系统的请求进行处理时,其工作流程如下所示:

  1. 第三方应用作为客户端发起SQL查询
  2. 客户端接口解析SQL,通过SCF的invoke service命令触发DCM业务,将SQL传递给业务。
  3. DCM业务解析SQL操作类型,针对select和写操作分别调用不同的接口。对于写操作,调用负载均衡模块选择目标数据库并将SQL发送到目标数据库的SQL队列;对于写操作,调用同步模块将SQL分发到各个数据库的SQL队列。
  4. DB线程池从各自的SQL队列中获取任务,根据任务中指定的数据库名称从连接池中选择空闲连接。
  5. 线程执行SQL,等待数据库返回结果
  6. 数据库返回结果到线程,线程将结果返回给SCF自动机
  7. DCM业务将结果返回给客户端接口
  8. 客户端接口将结果进行编码并返回给第三方应用

         负载均衡的主要作用就是根据数据库节点的负载信息,通过负载均衡算法判定数据库节点的状态并进行负载的分配。负载均衡的主要职责是数据库节点负载信息的收集、数据库节点状态的判定和负载的分配,让集群中数据库节点获得大致与其自身性能相符的负载。目的就是为了避免部分节点阻塞或空闲,从而缩短数据库集群的平均响应时间,提高集群的可靠性和稳定性

                                   

负载均衡模块的关键问题主要包括SQL解析、数据库负载信息收集、负载分配和数据库健康检查四部分。

  • SQL语句解析包含:SQL语句预处理、将SQL语句分离成片段、正则表达式匹配和分离主体部分。
  •                                          
  • 负载信息收集:数据库负载收集请求发送给负载信息收集组件,该组件通过给哦通信组件发送负载信息收集请求,通信组件将数据库节点的相关性能参数发送给负载信息收集组件,该组件将信息存储在负载信息表中。负载分配组件读取负载信息表,通过特定的负载均衡算法判定数据库节点的状态,并以此分配请求给数据库。
  •                            
  • 负载分配算法分为静态和动态负载均衡算法。静态负载均衡算法包括随机、加权、轮询等,动态负载均衡算法包括最短队列、最少连接、平均延迟、基于负载指标的多参数动态反馈算法等。
  •                                                                                                                                           
  • 数据库健康检查可以确保在负载分配时选择的数据库可以提供服务。检查数据库健康状况主要有两种方法,一种方法使用check table和repair table的SQL语句,另一种方法是使用myisamchk,isamchk等数据检测恢复工具。第一种方法先执行check table tableName若执行命令的结果state是ok,则说明数据库可正常服务,若结果为error则需要使用repair table tableName进行数据库修复,修复之后需再次检查。第二种是通过工具来检测恢复。数据库检查组件是通过编写SHELL脚本实现的,该脚本嵌入在负载均衡模块的开发程序中,当需要进行数据库健康检查时,调用该脚本,并将查询的数据库健康信息存储在数据库健康类,以便负载分配组建的使用。

以上就是大概的内容,具体的实现和测试请看原文,如果不方便下载的,给我留言“原文”我会发百度云连接的。

 

 

        

      

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我要出家当道士

打赏是不可能,这辈子都不可能

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值