论文出处:[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判断操作权限,鉴权成功后通过与实际数据库的连接访问数据库。
数据库集群中间件在对第三方的应用系统的请求进行处理时,其工作流程如下所示:
负载均衡的主要作用就是根据数据库节点的负载信息,通过负载均衡算法判定数据库节点的状态并进行负载的分配。负载均衡的主要职责是数据库节点负载信息的收集、数据库节点状态的判定和负载的分配,让集群中数据库节点获得大致与其自身性能相符的负载。目的就是为了避免部分节点阻塞或空闲,从而缩短数据库集群的平均响应时间,提高集群的可靠性和稳定性
负载均衡模块的关键问题主要包括SQL解析、数据库负载信息收集、负载分配和数据库健康检查四部分。
以上就是大概的内容,具体的实现和测试请看原文,如果不方便下载的,给我留言“原文”我会发百度云连接的。