CN112612834B - 数据库中间件及其实现客户端与服务器连接的方法 - Google Patents
数据库中间件及其实现客户端与服务器连接的方法 Download PDFInfo
- Publication number
- CN112612834B CN112612834B CN202011537589.0A CN202011537589A CN112612834B CN 112612834 B CN112612834 B CN 112612834B CN 202011537589 A CN202011537589 A CN 202011537589A CN 112612834 B CN112612834 B CN 112612834B
- Authority
- CN
- China
- Prior art keywords
- connection
- service
- idle
- subprocesses
- client
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库中间件及其实现客户端与服务器连接的方法。数据库中间件实现客户端与服务器连接的方法,包括:创建最小空闲服务子进程数的服务子进程;服务子进程接收客户端的连接请求,并根据连接请求将客户端连接至服务器;当空闲的服务子进程的个数小于最小空闲服务子进程数时,再次创建最小空闲子进程数的服务子进程,直至达到最大服务子进程数限制;当空闲的服务子进程的个数大于最大空闲服务子进程数时,回收部分空闲的服务子进程。采用本发明,可以动态的创建维护连接服务子进程,既能在开始时减少计算机资源的浪费,又能在客户端连接数增多时,增加服务子进程的数量,为更多的客户端服务,从而可以提高整个数据库服务系统的性能。
Description
技术领域
本发明涉及数据库中间件领域,尤其涉及一种数据库中间件及其实现客户端与服务器连接的方法。
背景技术
数据库中间件位于数据库服务器和数据库客户端的中间位置。客户端直接将sql语句发往中间件由中间件去操作底层的数据库并将结果返回。中间件一般提供有集群管理、连接池、sql语句路由等功能。
中间件的连接池具有保存到后端数据库连接的特性;对于大量客户端频繁的连接,断开的操作,连接池能够减少数据库服务器的连接建立次数,能够提高数据库服务器的效率。因此连接池是中间件中一个重要的功能点。对于连接池的设计,postgresql社区中的pgpool中间件实现了连接池的功能。Pgpool启动时,创建固定数目(例如32个)连接服务子进程等待客户端的连接,在每个子进程中维护有各自的连接池。但是pgpool实现的连接池有如下的缺点:
1、中间件启动后,开启的服务子进程数固定不变。启动时,开启数量较大的连接服务子进程会造成计算机资源的浪费,降低了中间件的性能。开启数量较小的连接服务子进程会引起客户端的并发连接数减少。
2、每个子进程对连接池的信息分别进行保存,导致连接池内的连接复用性不强。只有在连接的子进程客户端断开连接后,下次再由该子进程接收相同参数的连接才可复用,连接能够被复用的概率低。
3、复用率低同时增加了中间件连接到数据库服务器的连接数量,加大的数据库服务器的连接负载。
4、只支持会话级的连接,当会话空闲时会导致连接浪费,降低服务器的性能。
发明内容
本发明实施例提供一种数据库中间件及其实现客户端与服务器连接的方法,用以解决现有技术中数据库中间件工作效率低的问题。
根据本发明实施例的数据库中间件实现客户端与服务器连接的方法,包括:
创建最小空闲服务子进程数的服务子进程;
所述服务子进程接收客户端的连接请求,并根据所述连接请求将所述客户端连接至服务器;
当空闲的服务子进程的个数小于所述最小空闲服务子进程数时,再次创建所述最小空闲子进程数的服务子进程,直至达到最大服务子进程数限制;
当空闲的服务子进程的个数大于最大空闲服务子进程数时,回收部分空闲的服务子进程。
根据本发明的一些实施例,所述方法还包括:
初始化一个所有进程共享的全局连接池,所述全局连接池包括多个连接槽位,每个所述连接槽位用于存储一条客户端与服务器之间的连接信息,所述连接信息包括客户端的用户名、服务器的数据库名、访问时间、连接标识信息。
根据本发明的一些实施例,所述根据所述连接请求将所述客户端连接至服务器,包括:
基于所述连接请求,在所述全局连接池中查找是否有可复用的连接,若有,则复用该连接,否则,创建连接,并将连接信息保存至所述全局连接池。
根据本发明的一些实施例,所述方法还包括:
当所述全局连接池中的所有连接槽位均被占用时,检测所述全局连接池中是否存在空闲的连接,若有,则剔除空闲的相同连接次数最多的连接,否则,剔除相同连接次数最多的连接。
根据本发明的一些实施例,所述剔除部分空闲的连接,包括:
当存在多个空闲的相同连接次数最多的连接,则剔除空闲的相同连接次数最多且访问时间最远的连接;
当存在多个相同连接次数最多的连接,则剔除相同连接次数最多且访问时间最远的连接。
根据本发明的一些实施例,所述方法,还包括:
定期检测所述全局连接池中各个连接的最近访问时间;
当所述最近访问时间超过预设时间时,剔除该连接。
根据本发明的一些实施例,所述方法,还包括:
当所述服务子进程的个数超过所述最大服务子进程数,向当前连接请求对应的客户端返回连接超过最大限制连接数的消息。
根据本发明的一些实施例,所述连接包括事务连接;
所述方法还包括:
当所述连接为事务连接,所述事务连接执行完后将该事务连接设置为空闲。
根据本发明实施例的数据库中间件,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的方法的步骤。
根据本发明实施例的计算机可读存储介质,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如上所述的方法的步骤。
采用本发明实施例,动态的创建维护连接服务子进程,开始时创建较少数量的服务子进程,这样能够减少计算机资源的浪费;而在客户端连接数增多时,增加服务子进程的数量,为更多的客户端服务,从而可以提高整个数据库服务系统的性能。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。在附图中:
图1是本发明实施例中数据库中间件实现客户端与服务器连接的方法流程图;
图2是本发明实施例中数据库中间件实现客户端与服务器连接的方法流程图;
图3是本发明实施例中全局连接池示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
第一实施例,一种数据库中间件实现客户端与服务器连接的方法,如图1所示,包括:
S1,创建最小空闲服务子进程数的服务子进程;
S2,服务子进程接收客户端的连接请求,并根据连接请求将客户端连接至服务器;
S3,当空闲的服务子进程的个数小于最小空闲服务子进程数时,再次创建最小空闲子进程数的服务子进程,直至达到最大服务子进程数限制;
S4,当空闲的服务子进程的个数大于最大空闲服务子进程数时,回收部分空闲的服务子进程。
进一步的,所述方法还包括:
初始化一个所有进程共享的全局连接池,全局连接池包括多个连接槽位,每个连接槽位用于存储一条客户端与服务器之间的连接信息,连接信息包括客户端的用户名、服务器的数据库名、访问时间、连接标识信息。
进一步的,所述根据所述连接请求将所述客户端连接至服务器,包括:
基于连接请求,在全局连接池中查找是否有可复用的连接,若有,则复用该连接,否则,创建连接,并将连接信息保存至全局连接池。
进一步的,所述方法还包括:
当全局连接池中的所有连接槽位均被占用时,检测全局连接池中是否存在空闲的连接,若有,则剔除空闲的相同连接次数最多的连接,否则,剔除相同连接次数最多的连接。
进一步的,所述剔除部分空闲的连接,包括:
当存在多个空闲的相同连接次数最多的连接,则剔除空闲的相同连接次数最多且访问时间最远的连接;
当存在多个相同连接次数最多的连接,则剔除相同连接次数最多且访问时间最远的连接。
进一步的,所述方法,还包括:
定期检测全局连接池中各个连接的最近访问时间;
当最近访问时间超过预设时间时,剔除该连接。
进一步的,所述方法,还包括:
当服务子进程的个数超过最大服务子进程数,向当前连接请求对应的客户端返回连接超过最大限制连接数的消息。
进一步的,连接包括事务连接;
所述方法还包括:
当连接为事务连接,事务连接执行完后将该事务连接设置为空闲。
采用上述技术方案,可以增加连接池复用性以及提高整个数据库服务系统的性能,改进了pgpool中服务子进程创建的方式,连接池的实现方式。具体实现的技术效果包括:(1)动态的创建维护连接服务子进程。开始时创建较少数量的服务子进程,这样能够减少计算机资源的浪费;而在客户端连接数增多时,增加服务子进程的数量,为更多的客户端服务。(2)采用全局共享的连接池,而不是每个服务子进程单独维护的连接池,这样能够增加连接到后端数据库服务器的连接的复用率。减少后端数据库服务器建立撤销连接带来的开销。(3)增加不同级别的连接池,pgpool原始只有会话级别的连接池,增加事务级的连接池,减少连接空闲带来的资源浪费,提高效率。
这些更改能够在计算机资源允许的情况下提高客户端并发连接的数量,增加连接池内连接的复用性,减少了数据库服务器的连接负载。
第二实施例,一种应用于会话级连接的数据库中间件实现客户端与服务器连接的方法,如图2所示,所述方法包括:
服务器启动时,主进程创建可配置的一定数量的服务子进程等待客户端的连接;
初始化一个所有进程共享的全局连接池。通过连接池连接到后端的数据库服务器集群。全局连接池保存前后端的连接信息。连接池通过配置文件可设置其大小。
如图3所示,全局连接池保存的信息包括,连接的用户名、数据库名、访问时间等信息。除了这些信息外,还保存有中间件连接到后端数据库集群各节点的连接标识信息。后端数据库集群可以为一主多备,也可以为多主多备。
为了使得设计能够正确实施,需要输入一些可配置的参数:最小空闲服务子进程数、最大空闲服务子进程数、最大服务子进程数、全局连接池槽位数(大小)。
服务器启动时,主进程创建最小空闲服务子进程数的服务子进程等待客户端的连接,当空闲的服务子进程数量小于最小空闲服务子进程数时,再次创建最小空闲子进程数量的服务子进程,直至达到最大服务子进程数限制。当空闲的服务子进程数量大于最大空闲服务子进程的数量时,回收一部分空闲的子进程,节省计算机资源,增加服务器的性能。
当新的连接请求到来时,其中一个空闲服务子
进程接收到该连接请求,并在全局连接池中查找是否有相同用户名和数据库名的后端空闲连接,有则复用到后端数据库服务器的连接。如果没有,则创建到后端数据库服务器的连接,并将连接加入到全局连接池中。
当全局连接池中槽位被使用完时,并且前端新的连接请求到来后;检测连接池中的连接槽位是否空闲(槽位已连接到后端数据库服务器,但无对应前端连接)。如果有多个空闲的,则剔除空闲的相同用户名和连接数据库名次数最多的连接;如果次数相同,则剔除空闲的访问时间最远的连接;将新建立的后端数据库连接以及前端连接分配到该槽位中。如果没有空闲的槽位,则剔除相同用户名和连接数据库名次数最多并且访问时间最远的连接;将新的建立的连接保留在该槽位中。
定期检测连接池中连接的最近访问时间,如果最近访问时间超过具体的某一值时,剔除该连接在连接池中占据的槽位,为新的连接空出位置。
如果连接超过配置的最大服务子进程数,则向客户端返回连接超过最大限制连接数的消息,退出该连接。
第三实施例,一种应用于事务级别连接的数据库中间件实现客户端与服务器连接的方法,其基本的处理流程和会话级别连接一样,其区别在于:当一个槽位中的连接执行完一个事务后,会将该连接置为空闲状态,这样前端相同用户相同数据库的连接可以再次利用该槽位连接实现复用。
会话级别的连接处理有一个缺陷:一个会话一直占据着一个连接池槽位中的连接到后端数据库服务器的连接,即使这个会话现在没有执行任何操作;这样就会导致该槽位中连接资源的浪费,使得整个系统的性能降低。而采用事务级别的连接,能够有效的使用该部分资源,提升整个系统的性能。
第四实施例,一种数据库中间件,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现第一实施例至第三实施例中的至少一个实施例的方法的步骤。
根据本发明实施例的计算机可读存储介质,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现第一实施例至第三实施例中的至少一个实施例的方法的步骤。
本实施例所述计算机可读存储介质包括但不限于为:ROM、RAM、磁盘或光盘等。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
Claims (10)
1.一种数据库中间件实现客户端与服务器连接的方法,其特征在于,包括:
创建最小空闲服务子进程数的服务子进程;
所述服务子进程接收客户端的连接请求,并根据所述连接请求将所述客户端连接至服务器;
当空闲的服务子进程的个数小于所述最小空闲服务子进程数时,再次创建所述最小空闲子进程数的服务子进程,直至达到最大服务子进程数限制;
当空闲的服务子进程的个数大于最大空闲服务子进程数时,回收部分空闲的服务子进程。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
初始化一个所有进程共享的全局连接池,所述全局连接池包括多个连接槽位,每个所述连接槽位用于存储一条客户端与服务器之间的连接信息,所述连接信息包括客户端的用户名、服务器的数据库名、访问时间、连接标识信息。
3.如权利要求2所述的方法,其特征在于,所述根据所述连接请求将所述客户端连接至服务器,包括:
基于所述连接请求,在所述全局连接池中查找是否有可复用的连接,若有,则复用该连接,否则,创建连接,并将连接信息保存至所述全局连接池。
4.如权利要求2所述的方法,其特征在于,所述方法还包括:
当所述全局连接池中的所有连接槽位均被占用时,检测所述全局连接池中是否存在空闲的连接,若有,则剔除空闲的相同连接次数最多的连接,否则,剔除相同连接次数最多的连接。
5.如权利要求4所述的方法,其特征在于,所述剔除部分空闲的连接,包括:
当存在多个空闲的相同连接次数最多的连接,则剔除空闲的相同连接次数最多且访问时间最远的连接;
当存在多个相同连接次数最多的连接,则剔除相同连接次数最多且访问时间最远的连接。
6.如权利要求2所述的方法,其特征在于,所述方法,还包括:
定期检测所述全局连接池中各个连接的最近访问时间;
当所述最近访问时间超过预设时间时,剔除该连接。
7.如权利要求2所述的方法,其特征在于,所述方法,还包括:
当所述服务子进程的个数超过所述最大服务子进程数,向当前连接请求对应的客户端返回连接超过最大限制连接数的消息。
8.如权利要求4所述的方法,其特征在于,所述连接包括事务连接;
所述方法还包括:
当所述连接为事务连接,所述事务连接执行完后将该事务连接设置为空闲。
9.一种数据库中间件,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至8中任一项所述的方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如权利要求1至8中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011537589.0A CN112612834B (zh) | 2020-12-23 | 2020-12-23 | 数据库中间件及其实现客户端与服务器连接的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011537589.0A CN112612834B (zh) | 2020-12-23 | 2020-12-23 | 数据库中间件及其实现客户端与服务器连接的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112612834A CN112612834A (zh) | 2021-04-06 |
CN112612834B true CN112612834B (zh) | 2022-08-02 |
Family
ID=75244424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011537589.0A Active CN112612834B (zh) | 2020-12-23 | 2020-12-23 | 数据库中间件及其实现客户端与服务器连接的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112612834B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114064149A (zh) * | 2021-11-22 | 2022-02-18 | 首约科技(北京)有限公司 | 一种服务启动请求失败的降低方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9098565B1 (en) * | 2009-10-08 | 2015-08-04 | Cellco Partnership | In-house elegant JDBC connection pooling solution for message broker |
CN105740301B (zh) * | 2014-12-12 | 2019-03-26 | 北大方正集团有限公司 | 一种分布式数据库内部调整连接的方法及装置 |
CN104572974B (zh) * | 2014-12-31 | 2018-10-12 | 北京奇虎科技有限公司 | 业务请求处理方法和装置 |
CN106354801B (zh) * | 2016-08-26 | 2019-12-20 | 广州品唯软件有限公司 | 分布式数据库连接方法和装置 |
CN111324644B (zh) * | 2018-11-28 | 2023-10-27 | 中国移动通信集团浙江有限公司 | 大型微服务架构下的数据库连接风暴的监控方法及装置 |
-
2020
- 2020-12-23 CN CN202011537589.0A patent/CN112612834B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112612834A (zh) | 2021-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7725446B2 (en) | Commitment of transactions in a distributed system | |
CN101196912B (zh) | 用于应用程序状态同步的方法和设备 | |
CN109783229A (zh) | 线程资源分配的方法及装置 | |
CN104065636B (zh) | 数据处理方法和系统 | |
CN112732441B (zh) | 一种多元动态连接池的连接方法、装置及系统 | |
CN112612834B (zh) | 数据库中间件及其实现客户端与服务器连接的方法 | |
CN112000285A (zh) | 强一致存储系统、数据强一致存储方法、服务器及介质 | |
US6839732B1 (en) | Efficient use of domain socket pairs in communication for tightly coupled transactions | |
CN110888739B (zh) | 延迟任务的分布式处理方法与装置 | |
CN112099864A (zh) | 一种异步数据的处理方法及装置 | |
CN114640657A (zh) | 多注册中心的融合方法、装置 | |
JP2001229058A (ja) | データベースサーバ処理方法 | |
CN114218317B (zh) | 进度信息管控方法、微服务装置、电子设备及存储介质 | |
CN102811154B (zh) | 资源获取方法与网络服务器系统 | |
CN111343101A (zh) | 服务器限流方法、装置、电子设备及可读存储介质 | |
CN112379978A (zh) | 后端服务调用方法、装置、设备和存储介质 | |
CN107317693B (zh) | 业务管理设备、装置及方法 | |
CN112019452B (zh) | 一种业务需求的处理方法、系统及相关装置 | |
CN112953912A (zh) | 一种创建授权节点的方法、客户端和存储介质 | |
CN117176800A (zh) | 一种反向代理请求处理方法、装置、电子设备及存储介质 | |
CN116820688A (zh) | 一种事务检测方法及相关装置 | |
CN116089023A (zh) | 数据库的事务处理方法、装置、设备及介质 | |
CN116991575A (zh) | 线程池管理方法及装置、介质、设备 | |
CN115840629A (zh) | 一种基于分布式存储的分布式调度方法及系统 | |
CN115641135A (zh) | 一种交易处理方法、装置、系统、电子设备及存储介质 |
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 |