本发明涉及数据库领域,尤其涉及一种用于多实例数据库负载的数据库连接池平衡方法及系统。
背景技术:
目前,软件在使用数据库时,通常是使用数据库连接池方式访问数据库。这种访问方式在一个连接池中只使用一个连接配置,因此同一连接池就只能连接到其中一个数据库实例,并通过不同应用或进程的不同配置,实现对多个数据库实例的连接,在此种环境下,当多个数据库实例的负载较高的情况下,就要求平衡各实例的负载。
目前的负载平衡方式,通常是通过对各实例的运行负载监控数据采集的方式来逐步修正配置部署,这种方式占用系统资源较多,并且比较耗时,不容易取得较优化的调整结果。
技术实现要素:
本发明所要解决的技术问题是针对现有技术的不足,提供一种用于多实例数据库负载的数据库连接池平衡方法及系统。
本发明解决上述技术问题的技术方案如下:
一种用于多实例数据库负载的数据库连接池平衡方法,包括:
在配置bean初始化的过程中读取连接池的配置文件,所述配置文件中包含连接池的配置属性和配置值;
将所述配置属性中jdbc.urlvars配置项的配置值以预设排列方法拆分成字符串组;
使用所述配置属性中jdbc.urltemplate配置项的内容作为模板,把所述模板中的var变量替换成所述字符串组;
根据与数据库连接的连接池数量,从所述模板的字符串组中按照预设读取规则读取元素,根据所述元素为每个连接池分配数据库实例地址,与对应的数据库建立连接。
本发明的有益效果是:本发明提供的平衡方法,适用于多实例数据库负载的数据库连接池平衡,通过对连接池的配置文件进行改进,对数据库实例地址进行排列,然后按照一定的读取规则读取数据库实例的地址进行分配,从而实现了各实例间均衡应用连接数量,在一定程度上增加各实例的负载均衡程度,避免个别实例负载过高,从而提高硬件资源的有效利用,同时兼顾了fail-over策略,保持了原有的高可用。此外,本发明作为软件系统的数据库连接池组件的扩展组件,在连接池的基础上,只影响连接池新建连接的过程,对其它特性不产生影响,具有很强的实用性。
本发明解决上述技术问题的另一种技术方案如下:
一种用于多实例数据库负载的数据库连接池平衡系统,包括:
读取单元,用于在配置bean初始化的过程中读取连接池的配置文件,所述配置文件中包含连接池的配置属性和配置值;
排列单元,用于将所述配置属性中jdbc.urlvars配置项的配置值以预设排列方法拆分成字符串组;
替换单元,用于使用所述配置属性中jdbc.urltemplate配置项的内容作为模板,把所述模板中的var变量替换成所述字符串组;
平衡单元,用于根据与数据库连接的连接池数量,从所述模板的字符串组中按照预设读取规则读取元素,根据所述元素为每个连接池分配数据库实例地址,与对应的数据库建立连接。
本发明附加的方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明实践了解到。
附图说明
图1为本发明平衡方法的实施例提供的流程示意图;
图2为本发明平衡方法的其他实施例提供的流程示意图;
图3为本发明平衡系统的实施例提供的结构框架图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实施例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,为本发明平衡方法的实施例提供的流程示意图,该平衡方法适用于多实例数据库负载的数据库连接池平衡,包括:
s1,在配置bean初始化的过程中读取连接池的配置文件,配置文件中包含连接池的配置属性和配置值;
应理解,配置属性在xml文件中,配置值在.properties文件中,配置属性可以包括用户名、密码、连接地址和连接超时时间等。
s2,将配置属性中jdbc.urlvars配置项的配置值以预设排列方法拆分成字符串组;
应理解,配置值通常是字符串行驶,例如,原始值为a||b||c,假设使用排列方法生成全排列,则排列输出如下的字符串列表abc、acb、bac、bca、cab、cba,其中,jdbc.urlvars是新增的配置属性。
s3,使用配置属性中jdbc.urltemplate配置项的内容作为模板,把模板中的var变量替换成字符串组ulist;
应理解,jdbc.urltemplate是配置中新增的项目,可以由预先编写的程序读取处理。
s4,根据与数据库连接的连接池数量,从模板的字符串组ulist中按照预设读取规则读取元素,根据元素为每个连接池分配数据库实例地址,与对应的数据库建立连接。
需要说明的是,本发明适用于如下环境的使用数据库的软件组件:软件使用数据库,且数据库支持多实例部署,软件使用数据库连接池方式访问数据库。在此种环境下,当多个数据库实例的负载较高的情况下,可以通过本发明提供的平衡方法平衡各实例的负载。
应理解,开源社区拥有大量的数据库连接池实现,在常用的一些连接池中有部分拥有较为开放的结构,允许开发者通过api扩展实现一些定制功能,比如自定义数据库密码的解密方法,允许在线更新一些配置信息等等。本发明利用这些扩展特性,对配置文件进行修改,从而使得连接池对多个数据库实例的连接能相对均衡。本发明作为软件系统的数据库连接池组件的扩展组件,在连接池的基础上,只影响连接池新建连接的过程,对其它特性不产生影响。
在传统的连接池配置方式中,对于多服务器节点的oracle连接,是通过在url中按顺序指定多个服务地址来设置failover,这种配置依赖oraclejdbcdriver的failover功能默认情况下首先连接第一个配置地址,如果失败才会尝试后边的配置地址,其中,jdbc.url用于指定连接地址的配置项。
在配置中的jdbc.url中,采用了oracle-jdbc的failover配置模式,允许多个实例间进行failover,但对于单个客户端来说,对于全部实例正常运行情况下,使用此url建立的数据库连接,始终会优先选择列表中的第一个地址,因此采用上面配置的连接池,实际上绝大多数情况下都只与第一个实建立连接,这导致多个实例间的连接数量难以均衡。
而通过本发明提供的方法进行调整后的配置,能向连接池提供变化的jdbc.url,将多个实例的以均衡的排列输出,并使每个排列出现的概率相近。
具体地,本发明通过调整连接池的properties配置文件实现,properties配置文件中,jdbc.urltemplate是数据库连接的模板;var是要替换的变量;jdbc.urlvars是以“||”分隔的多个数据库实例地址;jdbc.urlselmode是对url的选择模式,rand是随机选择,round是轮询方式,轮询方式有更好的均匀度。
本实施例提供的平衡方法,通过对连接池的配置文件进行改进,对数据库实例地址进行排列,然后按照一定的读取规则读取数据库实例的地址进行分配,从而实现了各实例间均衡应用连接数量,在一定程度上增加各实例的负载均衡程度,避免个别实例负载过高,从而提高硬件资源的有效利用,同时兼顾了fail-over策略,保持了原有的高可用。此外,本发明作为软件系统的数据库连接池组件的扩展组件,在连接池的基础上,只影响连接池新建连接的过程,对其它特性不产生影响,具有很强的实用性。
如图2所示,给出了一种实例化的平衡方法流程示意图,下面结合图2,对本发明的一些可选实施方式进行说明。
可选地,在一些可能的实施方式中,将配置属性中jdbc.urlvars配置项的配置值以预设排列方法拆分成字符串组,具体包括:
读取配置属性中jdbc.urlvars配置项的每个数据库实例地址,按照全排列的方式将每个数据库实例地址进行排列,得到字符串组。
可选地,在一些可能的实施方式中,从模板的字符串组中按照预设读取规则读取元素,具体包括:
从模板的字符串组中按照随机或轮询的读取规则读取元素。
rand是随机选择,round是轮询方式,图2中以随机方式为例。
可选地,在一些可能的实施方式中,元素为以预设符号分隔的多个数据库实例地址。
例如,预设符号通常为“||”,例如,原始值可以为a||b||c,a、b、c分别表示多个数据库实例地址。
可选地,在一些可能的实施方式中,还包括:
在连接池运行过程中,接收新加入的连接池的连接请求;
从模板的字符串组中按照预设读取规则读取元素,根据元素为新加入的连接池分配数据库实例地址,与对应的数据库建立连接。
可以理解,在一些实施例中,可以包含如上述各实施例中的部分或全部可选实施方式。
如图3所示,为本发明平衡系统的实施例提供的结构框架图,该平衡系统适用于多实例数据库负载的数据库连接池平衡系统,包括:
读取单元1,用于在配置bean初始化的过程中读取连接池的配置文件,配置文件中包含连接池的配置属性和配置值;
排列单元2,用于将配置属性中jdbc.urlvars配置项的配置值以预设排列方法拆分成字符串组;
替换单元3,用于使用配置属性中jdbc.urltemplate配置项的内容作为模板,把模板中的var变量替换成字符串组;
平衡单元4,用于根据与数据库连接的连接池数量,从模板的字符串组中按照预设读取规则读取元素,根据元素为每个连接池分配数据库实例地址,与对应的数据库建立连接。
本发明提供的平衡系统,通过对连接池的配置文件进行改进,对数据库实例地址进行排列,然后按照一定的读取规则读取数据库实例的地址进行分配,从而实现了各实例间均衡应用连接数量,在一定程度上增加各实例的负载均衡程度,避免个别实例负载过高,从而提高硬件资源的有效利用,同时兼顾了fail-over策略,保持了原有的高可用。此外,本发明作为软件系统的数据库连接池组件的扩展组件,在连接池的基础上,只影响连接池新建连接的过程,对其它特性不产生影响,具有很强的实用性。
可选地,在一些可能的实施方式中,排列单元2具体用于读取配置属性中jdbc.urlvars配置项的每个数据库实例地址,按照全排列的方式将每个数据库实例地址进行排列,得到字符串组。
可选地,在一些可能的实施方式中,平衡单元4具体用于从模板的字符串组中按照随机或轮询的读取规则读取元素。
可选地,在一些可能的实施方式中,元素为以预设符号分隔的多个数据库实例地址。
可选地,在一些可能的实施方式中,还包括:接收单元5,用于在连接池运行过程中,接收新加入的连接池的连接请求;
平衡单元4还用于从模板的字符串组中按照预设读取规则读取元素,根据元素为新加入的连接池分配数据库实例地址,与对应的数据库建立连接。
可以理解,在一些实施例中,可以包含如上述各实施例中的部分或全部可选实施方式。
需要说明的是,上述各实施例是与在先方法实施例对应的产品实施例,对于产品实施例中各可选实施方式的说明可以参考上述各方法实施例中的对应说明,在此不再赘述。
读者应理解,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的方法实施例仅仅是示意性的,例如,步骤的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个步骤可以结合或者可以集成到另一个步骤,或一些特征可以忽略,或不执行。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。