CN111562987A - 用于多实例数据库负载的数据库连接池平衡方法及系统 - Google Patents

用于多实例数据库负载的数据库连接池平衡方法及系统 Download PDF

Info

Publication number
CN111562987A
CN111562987A CN202010401591.9A CN202010401591A CN111562987A CN 111562987 A CN111562987 A CN 111562987A CN 202010401591 A CN202010401591 A CN 202010401591A CN 111562987 A CN111562987 A CN 111562987A
Authority
CN
China
Prior art keywords
database
configuration
connection pool
instance
connection
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202010401591.9A
Other languages
English (en)
Other versions
CN111562987B (zh
Inventor
官元峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Si Tech Information Technology Co Ltd
Original Assignee
Beijing Si Tech Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Si Tech Information Technology Co Ltd filed Critical Beijing Si Tech Information Technology Co Ltd
Priority to CN202010401591.9A priority Critical patent/CN111562987B/zh
Publication of CN111562987A publication Critical patent/CN111562987A/zh
Application granted granted Critical
Publication of CN111562987B publication Critical patent/CN111562987B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5011Pool

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种用于多实例数据库负载的数据库连接池平衡方法及系统,涉及数据库领域。该方法包括:在配置bean初始化的过程中读取连接池的配置文件,配置文件中包含连接池的配置属性和配置值;将配置属性中jdbc.urlVars配置项的配置值以预设排列方法拆分成字符串组;使用配置属性中jdbc.urlTemplate配置项的内容作为模板,把模板中的Vars变量替换成字符串组;根据与数据库连接的连接池数量,从模板的字符串组中按照预设读取规则读取元素,根据元素为每个连接池分配数据库实例地址,与对应的数据库建立连接。本发明适用于多实例数据库负载的数据库连接池平衡,提高硬件资源的有效利用,同时兼顾了fail‑over策略,保持了原有的高可用。

Description

用于多实例数据库负载的数据库连接池平衡方法及系统
技术领域
本发明涉及数据库领域,尤其涉及一种用于多实例数据库负载的数据库连接池平衡方法及系统。
背景技术
目前,软件在使用数据库时,通常是使用数据库连接池方式访问数据库。这种访问方式在一个连接池中只使用一个连接配置,因此同一连接池就只能连接到其中一个数据库实例,并通过不同应用或进程的不同配置,实现对多个数据库实例的连接,在此种环境下,当多个数据库实例的负载较高的情况下,就要求平衡各实例的负载。
目前的负载平衡方式,通常是通过对各实例的运行负载监控数据采集的方式来逐步修正配置部署,这种方式占用系统资源较多,并且比较耗时,不容易取得较优化的调整结果。
发明内容
本发明所要解决的技术问题是针对现有技术的不足,提供一种用于多实例数据库负载的数据库连接池平衡方法及系统。
本发明解决上述技术问题的技术方案如下:
一种用于多实例数据库负载的数据库连接池平衡方法,包括:
在配置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,这种配置依赖oracle jdbc driver的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还用于从模板的字符串组中按照预设读取规则读取元素,根据元素为新加入的连接池分配数据库实例地址,与对应的数据库建立连接。
可以理解,在一些实施例中,可以包含如上述各实施例中的部分或全部可选实施方式。
需要说明的是,上述各实施例是与在先方法实施例对应的产品实施例,对于产品实施例中各可选实施方式的说明可以参考上述各方法实施例中的对应说明,在此不再赘述。
读者应理解,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的方法实施例仅仅是示意性的,例如,步骤的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个步骤可以结合或者可以集成到另一个步骤,或一些特征可以忽略,或不执行。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (10)

1.一种用于多实例数据库负载的数据库连接池平衡方法,其特征在于,包括:
在配置bean初始化的过程中读取连接池的配置文件,所述配置文件中包含连接池的配置属性和配置值;
将所述配置属性中jdbc.urlVars配置项的配置值以预设排列方法拆分成字符串组;
使用所述配置属性中jdbc.urlTemplate配置项的内容作为模板,把所述模板中的var变量替换成所述字符串组;
根据与数据库连接的连接池数量,从所述模板的字符串组中按照预设读取规则读取元素,根据所述元素为每个连接池分配数据库实例地址,与对应的数据库建立连接。
2.根据权利要求1所述的用于多实例数据库负载的数据库连接池平衡方法,其特征在于,将所述配置属性中jdbc.urlVars配置项的配置值以预设排列方法拆分成字符串组,具体包括:
读取所述配置属性中jdbc.urlVars配置项的每个数据库实例地址,按照全排列的方式将每个数据库实例地址进行排列,得到字符串组。
3.根据权利要求1所述的用于多实例数据库负载的数据库连接池平衡方法,其特征在于,从所述模板的字符串组中按照预设读取规则读取元素,具体包括:
从所述模板的字符串组中按照随机或轮询的读取规则读取元素。
4.根据权利要求1所述的用于多实例数据库负载的数据库连接池平衡方法,其特征在于,所述元素为以预设符号分隔的多个数据库实例地址。
5.根据权利要求1至4中任一项所述的用于多实例数据库负载的数据库连接池平衡方法,其特征在于,还包括:
在连接池运行过程中,接收新加入的连接池的连接请求;
从所述模板的字符串组中按照预设读取规则读取元素,根据所述元素为所述新加入的连接池分配数据库实例地址,与对应的数据库建立连接。
6.一种用于多实例数据库负载的数据库连接池平衡系统,其特征在于,包括:
读取单元,用于在配置bean初始化的过程中读取连接池的配置文件,所述配置文件中包含连接池的配置属性和配置值;
排列单元,用于将所述配置属性中jdbc.urlVars配置项的配置值以预设排列方法拆分成字符串组;
替换单元,用于使用所述配置属性中jdbc.urlTemplate配置项的内容作为模板,把所述模板中的var变量替换成所述字符串组;
平衡单元,用于根据与数据库连接的连接池数量,从所述模板的字符串组中按照预设读取规则读取元素,根据所述元素为每个连接池分配数据库实例地址,与对应的数据库建立连接。
7.根据权利要求6所述的用于多实例数据库负载的数据库连接池平衡系统,其特征在于,所述排列单元具体用于读取所述配置属性中jdbc.urlVars配置项的每个数据库实例地址,按照全排列的方式将每个数据库实例地址进行排列,得到字符串组。
8.根据权利要求6所述的用于多实例数据库负载的数据库连接池平衡系统,其特征在于,所述平衡单元具体用于从所述模板的字符串组中按照随机或轮询的读取规则读取元素。
9.根据权利要求6所述的用于多实例数据库负载的数据库连接池平衡系统,其特征在于,所述元素为以预设符号分隔的多个数据库实例地址。
10.根据权利要求6至9中任一项所述的用于多实例数据库负载的数据库连接池平衡系统,其特征在于,还包括:接收单元,用于在连接池运行过程中,接收新加入的连接池的连接请求;
所述平衡单元还用于从所述模板的字符串组中按照预设读取规则读取元素,根据所述元素为所述新加入的连接池分配数据库实例地址,与对应的数据库建立连接。
CN202010401591.9A 2020-05-13 2020-05-13 用于多实例数据库负载的数据库连接池平衡方法及系统 Active CN111562987B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010401591.9A CN111562987B (zh) 2020-05-13 2020-05-13 用于多实例数据库负载的数据库连接池平衡方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010401591.9A CN111562987B (zh) 2020-05-13 2020-05-13 用于多实例数据库负载的数据库连接池平衡方法及系统

Publications (2)

Publication Number Publication Date
CN111562987A true CN111562987A (zh) 2020-08-21
CN111562987B CN111562987B (zh) 2023-03-21

Family

ID=72070960

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010401591.9A Active CN111562987B (zh) 2020-05-13 2020-05-13 用于多实例数据库负载的数据库连接池平衡方法及系统

Country Status (1)

Country Link
CN (1) CN111562987B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103500180A (zh) * 2013-09-09 2014-01-08 北京思特奇信息技术股份有限公司 一种基于连接池管理的分布式事务处理方法
US20190065258A1 (en) * 2017-08-30 2019-02-28 ScalArc Inc. Automatic Provisioning of Load Balancing as Part of Database as a Service
CN111061801A (zh) * 2019-12-25 2020-04-24 天津南大通用数据技术股份有限公司 一种事务型数据库读写分离实现方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103500180A (zh) * 2013-09-09 2014-01-08 北京思特奇信息技术股份有限公司 一种基于连接池管理的分布式事务处理方法
US20190065258A1 (en) * 2017-08-30 2019-02-28 ScalArc Inc. Automatic Provisioning of Load Balancing as Part of Database as a Service
CN111061801A (zh) * 2019-12-25 2020-04-24 天津南大通用数据技术股份有限公司 一种事务型数据库读写分离实现方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
刘翠霞: "Java数据库连接池的原理与应用", 《无线互联科技》 *
鲍宏图等: "JSP软件开发中数据库连接池技术的探讨与应用", 《内蒙古大学学报(自然科学版)》 *

Also Published As

Publication number Publication date
CN111562987B (zh) 2023-03-21

Similar Documents

Publication Publication Date Title
US11194627B2 (en) Managing a virtualized application workspace on a managed computing device
US10812566B2 (en) Distributed steam processing
US9841882B2 (en) Providing application and device management using entitlements
US10341187B2 (en) Discovering, defining, and implementing computer application topologies
US8973011B2 (en) Multi-core resource utilization planning
US11893002B2 (en) System or method to run distributed validation of workflows across a network in a shared distributed ledger in multi-tenant cloud environment
US20020023180A1 (en) Method of controlling software applications specific to a group of users
US7207040B2 (en) Multi-CPUs support with thread priority control
KR20010099633A (ko) 전자 디바이스들의 업그레이드를 제어하기 위한 재구성처리기
US8849870B2 (en) Method, apparatus and computer program product for providing context triggered distribution of context models
US8589394B2 (en) System and method for dynamically configuring a multi-model node table
EP3442201B1 (en) Cloud platform construction method and cloud platform
US20160140028A1 (en) Testing systems and methods
US10511484B1 (en) Membership self-discovery in distributed computing environments
US20190004844A1 (en) Cloud platform construction method and cloud platform
CN111614760A (zh) 一种将物联网设备均衡分配接入的方法及装置
CN111562987B (zh) 用于多实例数据库负载的数据库连接池平衡方法及系统
US8533333B2 (en) Shared hosting using host name affinity
CN109067558A (zh) 数据服务方法及系统
CN112691382B (zh) 资源处理方法、装置及计算机可读存储介质
CN108810143A (zh) 一种客户端负载均衡挂载虚拟ip的方法、系统及装置
CN109947451A (zh) 一种集群应用文件更新方法、系统、介质及设备
JP2001282737A (ja) 業務負荷分散システム
US11272031B2 (en) Device configuration using artificial intelligence-based profiling
US20210117218A1 (en) Security risk load balancing systems and methods

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant