CN111225007A - 数据库连接方法、装置和系统 - Google Patents
数据库连接方法、装置和系统 Download PDFInfo
- Publication number
- CN111225007A CN111225007A CN201811416040.9A CN201811416040A CN111225007A CN 111225007 A CN111225007 A CN 111225007A CN 201811416040 A CN201811416040 A CN 201811416040A CN 111225007 A CN111225007 A CN 111225007A
- Authority
- CN
- China
- Prior art keywords
- database connection
- request
- database
- semaphore
- pool
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 66
- 238000004590 computer program Methods 0.000 claims description 10
- 238000010586 diagram Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 4
- WBEJYOJJBDISQU-UHFFFAOYSA-N 1,2-Dibromo-3-chloropropane Chemical compound ClCC(Br)CBr WBEJYOJJBDISQU-UHFFFAOYSA-N 0.000 description 3
- 230000003213 activating effect Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1044—Group management mechanisms
- H04L67/1046—Joining mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1044—Group management mechanisms
- H04L67/1053—Group management mechanisms with pre-configuration of logical or physical connections with a determined number of other peers
- H04L67/1055—Group management mechanisms with pre-configuration of logical or physical connections with a determined number of other peers involving connection limits
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/143—Termination or inactivation of sessions, e.g. event-controlled end of session
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Theoretical Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提出一种数据库连接方法、装置和系统,涉及数据处理技术领域。本公开的一种数据库连接方法包括:获取数据库连接请求;在当前存在空闲信号量的情况下,为数据库连接请求分配信号量;根据已分配的信号量,向数据库连接池请求为数据库连接请求分配数据库连接。通过这样的方法,能够在使用数据库连接池前添加控制逻辑,利用信号量的数量控制允许分配的数据库连接的数量,避免出现数据库连接风暴,提高数据库连接的稳定性。
Description
技术领域
本公开涉及数据处理技术领域,特别是一种数据库连接方法、装置和系统。
背景技术
数据库连接的建立是一种耗时、性能低、代价高的操作,频繁的数据库连接的建立和关闭极大的影响了系统的性能。一般来说,Java应用程序访问数据库的过程是:
①装载数据库驱动程序;
②通过JDBC((Java DataBase Connectivity,JAVA数据库连接)建立数据库连接;
③访问数据库,执行SQL(Structured Query Language,结构化查询语言)语句;
④断开数据库连接。
数据库连接池是在系统初始化过程中创建一定数量的数据库连接放于连接池中,当程序需要访问数据库时,不需要建立新的连接,而是从连接池中取出一个已建立的空闲连接,使用完毕后,程序将连接归还连接池供其他请求使用,从而实现了连接资源的共享,连接的建立、断开都由连接池自身来管理。
为了发挥数据库连接池的作用,在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,请求将被加入等待队列。
然而在项目发布的过程中,当应用启动的时候或者网络发生瞬断时,经常会碰到各应用服务器的连接数异常飙升。假设连接数的设置为:最小数据库连接数为3,最大数据库连接数为10,正常的业务使用连接数在5个左右。当重启应用时,各应用连接数可能会飙升到10个,瞬间甚至还有可能部分应用会报取不到连接,启动完成后接下来的时间内,连接开始慢慢返回到业务的正常值。这种情况即发生了所谓的连接风暴。
连接风暴会造成如下危害:
1.在多个应用系统同时启动时,系统大量占用数据库连接资源,可能导致数据库连接数耗尽。
2.数据库创建连接的能力是有限的,并且是非常耗时和消耗CPU(CentralProcessing Unit,中央处理器)等资源的,突然大量请求落到数据库上,极端情况下可能导致数据库异常崩溃。
3.对于应用系统来说,多一个连接也就多占用一点资源。在启动的时候,连接会填充到最大数据库连接数,并有可能导致瞬间业务请求失败。
为了预防连接风暴,相关技术中采用的方案包括:
1)配置数据库连接池的初始化连接个数或者在应用启动时对数据库连接池进行初始化;
2)将数据库连接池的最小连接数及最大连接数改小。
发明内容
发明人发现,基于JAVA的数据库连接池包括C3p0、DBCP(DataBase ConnectionPool)、Tomcat JDBC Pool以及Druid等。实际使用时,因为C3p0和DBCP采用单线程实现,性能较差,只适用于小型系统,对于要求大并发量的系统更多的是使用Tomcat JDBC Pool及Druid等,如果采用上述相关技术中的方法预防数据库连接风暴,会存在如下问题:
1)需要对每个数据库连接池进行配置,而且不能解决网络中断时可能发生的连接风暴问题;
2)将数据库连接池的大小改小后,对于并发量较大的应用系统,将出现连接不够用的问题,同时也不能解决应用启动时可能发生的连接风暴问题。
本公开的一个目的在于提出一种避免数据库连接风暴发生的方案。
根据本公开的一些实施例的一个方面,提出一种数据库连接方法,包括:获取数据库连接请求;在当前存在空闲信号量的情况下,为数据库连接请求分配信号量;根据已分配的信号量,向数据库连接池请求为数据库连接请求分配数据库连接。
在一些实施例中,数据库连接方法还包括:在当前不存在空闲信号量的情况下,向分布式集群发送分布式锁请求,以便分布式集群在分布式锁未被占用的情况下反馈分布式锁;根据分布式集群反馈的分布式锁,向数据库连接池请求为数据库连接请求分配数据库连接。
在一些实施例中,数据库连接方法还包括:在分布式集群未反馈分布式锁的情况下,拒绝向数据库连接池请求分配数据库连接。
在一些实施例中,数据库连接方法还包括:在当前不存在空闲信号量的情况下,拒绝向数据库连接池请求分配数据库连接。
在一些实施例中,数据库连接方法还包括:接收数据库连接归还请求;接受数据库连接归还请求归还的信号量,其中,信号量为申请归还的数据库连接时分配的信号量;将相关联的数据库连接归还数据库连接池。
在一些实施例中,数据库连接方法还包括:接收数据库连接归还请求;释放数据库连接归还请求归还的分布式锁,其中,分布式锁为申请归还的数据库连接时向分布式集群请求的分布式锁;将相关联的数据库连接归还数据库连接池。
在一些实施例中,数据库连接方法还包括:在获取数据库连接请求后,确定数据库连接池是否已经初始化;在数据库连接池已初始化的情况下,则执行判断当前是否存在空闲信号量的操作;在数据库连接池未初始化的情况下,则请求数据库连接池执行初始化操作,在初始化完成后,执行判断当前是否存在空闲信号量的操作。
在一些实施例中,数据库连接方法还包括:根据服务器性能确定和/或调节信号量的数量。
在一些实施例中,分布式锁的数量为1。
通过这样的方法,能够在使用数据库连接池前添加控制逻辑,利用信号量的数量控制允许分配的数据库连接的数量,避免出现数据库连接风暴,提高数据库连接的稳定性。
根据本公开的另一些实施例一个方面,提出一种数据库连接装置,包括:请求获取单元,被配置为获取数据库连接请求;信号量分配单元,被配置为在当前存在空闲信号量的情况下,为数据库连接请求分配信号量;连接分配单元,被配置为根据已分配的信号量,向数据库连接池请求为数据库连接请求分配数据库连接。
在一些实施例中,数据库连接装置还包括:分布式锁请求单元,被配置为在当前不存在空闲信号量的情况下,向分布式集群发送分布式锁请求,以便分布式集群在分布式锁未被占用的情况下反馈分布式锁;连接分配单元还被配置为根据分布式集群反馈的分布式锁,向数据库连接池请求为数据库连接请求分配数据库连接。
在一些实施例中,连接分配单元还被配置为在分布式集群未反馈分布式锁的情况下,拒绝向数据库连接池请求分配数据库连接。
在一些实施例中,请求获取单元还被配置为接收数据库连接归还请求;信号量分配单元还被配置为接受数据库连接归还请求归还的信号量,其中,信号量为申请归还的数据库连接时分配的信号量;连接分配单元还被配置为将数据库连接归还请求归还的数据库连接归还数据库连接池。
在一些实施例中,请求获取单元还被配置为接收数据库连接归还请求;分布式锁请求单元还被配置为释放数据库连接归还请求归还的分布式锁,其中,分布式锁为申请归还的数据库连接时向分布式集群请求的分布式锁;连接分配单元还被配置为将数据库连接归还请求归还的数据库连接归还数据库连接池。
在一些实施例中,数据库连接装置还包括:初始化单元,被配置为在请求获取单元获取数据库连接请求后:在数据库连接池已初始化的情况下,激活信号量分配单元;在数据库连接池未初始化的情况下,则请求数据库连接池执行初始化操作,在初始化完成后,激活信号量分配单元。
根据本公开的又一些实施例的一个方面,提出一种数据库连接装置,包括:存储器;以及耦接至存储器的处理器,处理器被配置为基于存储在存储器的指令执行上文中任意一种数据库连接方法。
这样的数据库连接装置能够在使用数据库连接池前添加控制逻辑,利用信号量的数量控制允许分配的数据库连接的数量,避免出现数据库连接风暴,提高数据库连接的稳定性。
根据本公开的再一些实施例的一个方面,提出一种计算机可读存储介质,其上存储有计算机程序指令,该指令被处理器执行时实现上文中任意一种数据库连接方法的步骤。
通过执行这样的计算机可读存储介质上的指令,能够在使用数据库连接池前添加控制逻辑,利用信号量的数量控制允许分配的数据库连接的数量,避免出现数据库连接风暴,提高数据库连接的稳定性。
另外,根据本公开的一些实施例的一个方面,提出一种数据库连接系统,包括:上文中任意一种数据库连接装置;数据源接口,被配置为从数据源中获取数据库连接;和数据库连接池,被配置为存储和维护数据库连接。
这样的数据库连接系统在使用数据库连接池前添加控制逻辑,利用信号量的数量控制允许分配的数据库连接的数量,避免出现数据库连接风暴,提高数据库连接的稳定性。
附图说明
此处所说明的附图用来提供对本公开的进一步理解,构成本公开的一部分,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。在附图中:
图1为应用程序通过数据库连接池与数据库交互的一个实施例的示意图。
图2为数据库连接池内部获取数据库连接的一个实施例的流程图。
图3为本公开的数据库连接方法的一个实施例的流程图。
图4为本公开的数据库连接方法的另一个实施例的流程图。
图5为本公开的数据库连接方法的又一个实施例的流程图。
图6为本公开的数据库连接方法的再一个实施例的示意图。
图7为本公开的数据库连接装置的一个实施例的示意图。
图8为本公开的数据库连接装置的又一个实施例的示意图。
图9为本公开的数据库连接装置的再一个实施例的示意图。
图10为本公开的数据库连接系统的一个实施例的示意图。
具体实施方式
下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。
应用程序通过数据库连接池与数据库交互的一个实施例的示意图如图1所示,执行如图2所示的流程。
当用户1的请求到达应用系统时,对应线程1,线程1向数据库连接池申请连接,此时如果数据库连接池还是未初始化状态,会如步骤201中所示,根据数据库连接池配置对数据库连接池进行初始化,建立与数据库的连接,形成如图2中20所示的数据库连接池、以及数据库连接池与数据库的连接关系,并返回给线程1,对用户1的请求做出响应。
当用户2的请求到达应用系统时,对应线程2,线程2向数据库连接池申请连接,执行步骤202。此时如果连接池有空闲线程就返回给线程2使用,执行步骤203-204;如果没有空闲线程,执行步骤205,判断激活的线程数是否达到数据库连接池的线程数上限。若激活的线程数没有达到配置的最大线程数量,则执行步骤207,向数据库建立连接,然后返回给线程2使用。
如果线程2申请连接时,数据库连接池已经没有空闲连接,并且当前维护的连接数已经达到了最大连接数,则执行步骤206,线程2等待直到连接池中有可用的空闲线程。
当线程处理完用户的请求后,如步骤208中所示,将所使用的数据库连接释放,返回给数据库连接池,以供其他请求使用。如果数据库连接池中的空闲线程数超过了配置的最小空闲连接数,数据库连接会关闭。
上述过程为正常情况下数据库连接池的运行情况。在本公开的数据库连接方法中,在用户发出请求至使用各个具体的数据库连接词从数据库连接池中获取数据库连接之间添加逻辑控制,控制数据库连接请求是否到达数据库连接池。
本公开的数据库连接方法的一个实施例的流程图如图3所示。
在步骤301中,获取来自用户的数据库连接请求。
在步骤302中,判断当前是否存在空闲信号量。在一个实施例中,信号量的总个数可以为最大允许执行的线程个数。在一个实施例中,可以通过控制、调节信号量的个数调节数据库连接池最大允许执行的线程个数。在一个实施例中,若当前存在空闲信号量,则执行步骤303。
在一个实施例中,若不存在空闲信号量,则拒绝向数据库连接池请求分配数据库连接。
在另一个实施例中,若不存在空闲信号量,可以向分布式集群请求分布式锁,以分布式锁为凭证请求分配数据库连接。
在步骤303中,为数据库连接请求分配信号量。
在步骤304中,根据已分配的信号量,向数据库连接池请求为数据库连接请求分配数据库连接。
通过这样的方法,能够在使用数据库连接池前添加控制逻辑,利用信号量的数量控制允许分配的数据库连接的数量,避免出现数据库连接风暴,提高数据库连接的稳定性。
本公开的数据库连接方法的另一个实施例的流程图如图4所示。
在步骤401中,获取来自用户的数据库连接请求。
在步骤402中,判断当前是否存在空闲信号量。若当前存在空闲信号量,则执行步骤403。若当前不存在空闲信号量,则执行步骤405。
在步骤403中,为数据库连接请求从空闲信号量中分配信号量。
在步骤404中,根据已分配的信号量,向数据库连接池请求为数据库连接请求分配数据库连接。
在步骤405中,向分布式集群发送分布式锁请求,以便分布式集群在分布式锁未被占用的情况下反馈分布式锁。
在步骤406中,判断分布式集群是否反馈分布式锁。若分布式集群反馈分布式锁,则执行步骤407;若分布式集群未反馈分布式锁,则执行步骤408。在一个实施例中,分布式集群具有唯一的分布式锁。分布式集群判断分布式锁是否已经被占用。若未被占用,则反馈分布式锁;若已经被占用,则不反馈分布式锁,在一个实施例中,可以返回空。
在步骤407中,根据分布式集群反馈的分布式锁,向数据库连接池请求为数据库连接请求分配连接。
在步骤408中,拒绝向数据库连接池请求分配数据库连接。
通过这样的方法,能够利用分布式锁提供额外的从数据库连接池中申请连接的权利,有助于为重要的、需要紧急建立数据库连接的任务分配数据库连接,提高任务成功的概率。
本公开的数据库连接方法的又一个实施例的流程图如图5所示。
在步骤501中,获取来自用户的数据库连接请求。
在步骤502中,判断数据库连接池是否已经初始化。若未能初始化,则执行步骤503。若已经初始化,则执行步骤504。
在步骤503中,请求数据库连接池执行初始化操作。在初始化操作完成后,执行步骤504。
在步骤504中,判断当前是否存在空闲信号量。若存在空闲信号连个,则执行步骤505;若不存在空闲信号量,则执行步骤506。
在步骤505中,为数据库连接请求分配信号量。
在步骤506中,向分布式集群发送分布式锁请求。
在步骤507中,判断分布式集群是否反馈分布式锁。若反馈分布式锁,则执行步骤508;若未反馈分布式锁,则执行步骤509。
在步骤508中,向数据库连接池请求为数据库连接请求分配连接,进而执行步骤510。
在步骤509中,拒绝向数据库连接池请求分配数据库连接。
在步骤510中,判断是否收到数据库连接归还请求。在一个实施例中,当用户使用完数据库连接后,会发送数据库连接归还请求。在一个实施例中,数据库连接归还请求中可以包括归还的数据库连接标识和信号量标识。在另一个实施例中,数据库连接归还请求中可以包括数据库连接标识,或其相关联的数据库连接请求标识,通过分配信号量和数据库连接时记录的对应关系确定需要归还的信号量和数据库连接。
在步骤511中,接受数据库连接归还请求归还的信号量或分布式锁,并将相关联的数据库连接归还数据库连接池,其中,信号量为申请归还的数据库连接时分配的信号量。在一个实施例中,若分配数据库连接时为基于分布式锁分配数据库连接,则释放分配的分布式锁。
通过这样的方法,能够在数据库连接请求到来时先判断数据库连接池是否已经初始化,在未初始化的情况下先执行初始化操作,从而无需额外的配置初始化过程,提高了使用的便捷度和系统的稳定性。
本公开的数据库连接方法的再一个实施例的示意图如图6所示。Semaphore(计数信号量)为信号量,在加载完配置文件后进行初始化,信号量的大小可以控制最大允许执行的线程数,以信号量为2进行举例说明,Zookeeper分布式集群用来实现分布式一致性,以获取分布式锁,图6中R开头的操作代表请求数据库连接,S开头代表拿到的信号量,C开头代表返回的数据库连接,具体处理过程如下:
1)请求1发起getConnection(获取连接)请求,首先向Semaphore申请信号量,得到信号量S1,允许向数据库连接池申请连接。若此时数据库连接池尚未进行初始化,则等待数据库连接池初始化完成,并最终返回连接C1。
请求1使用完数据库连接C1后将信号量S1归还,将C1归还到数据库连接池中。
2)请求2发起getConnection请求,首先向Semaphore申请信号量,得到信号量S2,允许向数据库连接池申请连接,得到已经初始化完成的连接2。
请求2使用完数据库连接C2后将信号量S2归还,将C2归还到数据库连接池中。
3)请求3发起getConnection请求,首先向Semaphore申请信号量,此时信号量已用完,信号量S1及信号量S2尚未归还,此时请求R3无法获取信号量,则进入分支流程,尝试从Zookeeper集群中获取分布式锁,成功获取分布式锁,则可以调用数据库连接池,申请获取连接,最终获得数据库连接3,请求3使用完数据库连接C3后将C3归还到数据库连接池中,并释放分布式锁。
4)请求4发起getConnection请求,首先向Semaphore申请信号量,此时信号量已用完,信号量1及信号量2尚未归还,此时请求R4无法获取信号量,则进入分支流程,尝试从Zookeeper集群中获取分布式锁,由于锁被R3占有,R4无法获取锁,则不允许再去数据库连接池申请连接,返回空。
上述流程中Semaphore信号量及Zookeeper分布式锁,在保证了客户端正常并发申请数据库连接的前提下,在应用重启或者网络中断时不会有过多线程去对数据库连接池进行初始化和连接请求操作,避免了数据库连接风暴的发生。
本公开的数据库连接装置的一个实施例的示意图如图7所示。请求获取单元701能够获取来自用户的数据库连接请求。信号量分配单元702能够在当前存在空闲信号量的情况下,为数据库连接请求分配信号量。连接分配单元703能够根据已分配的信号量,向数据库连接池请求为数据库连接请求分配数据库连接。
这样的数据库连接装置能够在使用数据库连接池前添加控制逻辑,利用信号量的数量控制允许分配的数据库连接的数量,避免出现数据库连接风暴,提高数据库连接的稳定性。
在一个实施例中,如图7所示,数据库连接装置还可以包括分布式锁请求单元704。分布式锁请求单元704能够在当前不存在空闲信号量的情况下,向分布式集群发送分布式锁请求,并在分布式集群在分布式锁未被占用的情况下接收分布式集群反馈的分布式锁。连接分配单元703能够根据分布式锁向数据库连接池请求为数据库连接请求分配连接。在一个实施例中,在数据库连接池请求既未获得信号量,又未获得分布式锁的情况下,连接分配单元703拒绝向数据库连接池请求分配数据库连接。
这样的装置能够利用分布式锁提供额外的从数据库连接池中申请连接的权利,有助于为重要的、需要紧急建立数据库连接的任务分配数据库连接,提高任务成功的概率。
在一个实施例中,如图7所示,数据库连接装置还可以包括初始化单元705,能够在请求获取单元701获取来自用户的数据库连接请求后,判断数据库连接池是否已经初始化。若数据库连接池已经初始化,则激活信号量分配单元702;若数据库连接池未初始化,则先请求数据库连接池执行初始化操作。在初始化操作完成后激活信号量分配单元702。
这样的数据库连接装置能够在数据库连接请求到来时先判断数据库连接池是否已经初始化,在未初始化的情况下先执行初始化操作,从而无需额外的配置初始化过程,提高了使用的便捷度和系统的稳定性。
在一个实施例中,请求获取单元701还能够接收来自用户的数据库连接归还请求。信号量分配单元702能够接受数据库连接归还请求归还的信号量,其中,信号量为申请归还的数据库连接时分配的信号量。在一个实施例中,若与数据库连接归还请求相关联的为分布式锁,则分布式锁请求单元704释放该分布式锁,以便分布式集群分配给其他的数据库连接请求。连接分配单元703能够将数据库连接归还请求归还的数据库连接归还数据库连接池。
这样的数据库连接装置能够及时回收使用完成的信号量和数据库连接,以便分配给其他数据库连接请求,从而保证装置的持续稳定运行。
在一个实施例中,数据库连接装置可以为封装有上文中任意一种数据库连接方法的jar(Java Archive,Java归档文件)包,各应用系统在将原有数据库连接池jar包替换为数据库连接装置的jar包,不需要修改数据库连接池配置,易于实现和推广应用。
本公开数据库连接装置的一个实施例的结构示意图如图8所示。数据库连接装置包括存储器801和处理器802。其中:存储器801可以是磁盘、闪存或其它任何非易失性存储介质。存储器用于存储上文中数据库连接方法的对应实施例中的指令。处理器802耦接至存储器801,可以作为一个或多个集成电路来实施,例如微处理器或微控制器。该处理器802用于执行存储器中存储的指令,能够实现避免出现数据库连接风暴,提高数据库连接的稳定性。
在一个实施例中,还可以如图9所示,数据库连接装置900包括存储器901和处理器902。处理器902通过BUS总线903耦合至存储器901。该数据库连接装置900还可以通过存储接口904连接至外部存储装置905以便调用外部数据,还可以通过网络接口906连接至网络或者另外一台计算机系统(未标出)。此处不再进行详细介绍。
在该实施例中,通过存储器存储数据指令,再通过处理器处理上述指令,能够实现避免出现数据库连接风暴,提高数据库连接的稳定性。
在另一个实施例中,一种计算机可读存储介质,其上存储有计算机程序指令,该指令被处理器执行时实现数据库连接方法对应实施例中的方法的步骤。本领域内的技术人员应明白,本公开的实施例可提供为方法、装置、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本公开的数据库连接系统的一个实施例的示意图如图10所示。
数据库连接装置1001可以为上文中任意一种数据库连接装置。在一个实施例中,数据库连接装置1001可以为Proxy(代理类),可以命名为如DynamicDataSourceStormPrevention,实现数据源DataSource的接口,是最终提供给客户端使用的类,持有真正数据库连接池实体的引用,在调用数据库连接池前添加逻辑判断,预防连接风暴的发生。
数据源接口1002可以为DataSource,是JAVA提供的数据源接口,定义方法getConnection从数据源中获取数据库连接,所有的数据库连接池都实现了该接口。
数据库连接池1003可以为ReadDataSource,包括数据库连接池的具体实现方法,如C3p0、DBCP、Tomcat JDBC Pool、Druid等,是实际使用中应用系统常用的数据库连接池实体,实现了getConnection方法以及其他辅助方法,如数据库连接池的初始化,连接池的大小维护,空闲连接的释放,等待队列的管理等。
这样的数据库连接系统在使用数据库连接池前添加控制逻辑,利用信号量的数量控制允许分配的数据库连接的数量,避免出现包括应用系统重启及网络中断发生时在内的可能出现的数据库连接风暴,提高了数据库连接的稳定性。这样的数据库连接系统不需要修改数据库连接池配置,且不需要客户端额外的工作量对数据库连接池进行初始化等维护工作,替换方便,便于推广应用。
本公开是参照根据本公开实施例的方法、设备(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
至此,已经详细描述了本公开。为了避免遮蔽本公开的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。
可能以许多方式来实现本公开的方法以及装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法以及装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
最后应当说明的是:以上实施例仅用以说明本公开的技术方案而非对其限制;尽管参照较佳实施例对本公开进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本公开的具体实施方式进行修改或者对部分技术特征进行等同替换;而不脱离本公开技术方案的精神,其均应涵盖在本公开请求保护的技术方案范围当中。
Claims (12)
1.一种数据库连接方法,包括:
获取数据库连接请求;
在当前存在空闲信号量的情况下,为所述数据库连接请求分配信号量;
根据已分配的信号量,向数据库连接池请求为所述数据库连接请求分配数据库连接。
2.根据权利要求1所述的方法,还包括:
在当前不存在空闲信号量的情况下,向分布式集群发送分布式锁请求,以便所述分布式集群在所述分布式锁未被占用的情况下反馈所述分布式锁;
根据所述分布式集群反馈的分布式锁,向所述数据库连接池请求为所述数据库连接请求分配数据库连接。
3.根据权利要求2所述的方法,还包括:
在所述分布式集群未反馈所述分布式锁的情况下,拒绝向所述数据库连接池请求分配数据库连接。
4.根据权利要求1所述的方法,还包括:
在当前不存在空闲信号量的情况下,拒绝向所述数据库连接池请求分配数据库连接。
5.根据权利要求1~4任意一项所述的方法,还包括:
接收数据库连接归还请求;
接受所述数据库连接归还请求归还的信号量,其中,所述信号量为申请归还的数据库连接时分配的信号量;
将相关联的数据库连接归还数据库连接池。
6.根据权利要求2所述的方法,还包括:
接收数据库连接归还请求;
释放所述数据库连接归还请求归还的分布式锁,其中,所述分布式锁为申请归还的数据库连接时向所述分布式集群请求的分布式锁;
将相关联的数据库连接归还数据库连接池。
7.根据权利要求1~4任意一项所述的方法,还包括:
在获取数据库连接请求后,确定数据库连接池是否已经初始化;
在数据库连接池已初始化的情况下,则执行判断当前是否存在空闲信号量的操作;
在数据库连接池未初始化的情况下,则请求所述数据库连接池执行初始化操作,在初始化完成后,执行判断当前是否存在空闲信号量的操作。
8.根据权利要求2所述的方法,
还包括:根据服务器性能确定和/或调节所述信号量的数量;或,
其中,所述分布式锁的数量为1。
9.一种数据库连接装置,包括:
请求获取单元,被配置为获取数据库连接请求;
信号量分配单元,被配置为在当前存在空闲信号量的情况下,为所述数据库连接请求分配信号量;
连接分配单元,被配置为根据已分配的信号量,向数据库连接池请求为所述数据库连接请求分配数据库连接。
10.一种数据库连接装置,包括:
存储器;以及
耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器的指令执行如权利要求1至8任一项所述的方法。
11.一种计算机可读存储介质,其上存储有计算机程序指令,该指令被处理器执行时实现权利要求1至8任意一项所述的方法的步骤。
12.一种数据库连接系统,包括:
权利要求9或10所述的数据库连接装置;
数据源接口,被配置为从数据源中获取数据库连接;和
数据库连接池,被配置为存储和维护数据库连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811416040.9A CN111225007B (zh) | 2018-11-26 | 2018-11-26 | 数据库连接方法、装置和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811416040.9A CN111225007B (zh) | 2018-11-26 | 2018-11-26 | 数据库连接方法、装置和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111225007A true CN111225007A (zh) | 2020-06-02 |
CN111225007B CN111225007B (zh) | 2024-01-12 |
Family
ID=70827930
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811416040.9A Active CN111225007B (zh) | 2018-11-26 | 2018-11-26 | 数据库连接方法、装置和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111225007B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112231384A (zh) * | 2020-10-30 | 2021-01-15 | 中国建设银行股份有限公司 | 适配多种数据源的分布式应用国产化改造方法及设备 |
CN113407562A (zh) * | 2021-06-04 | 2021-09-17 | 北京金山云网络技术有限公司 | 分布式数据库系统的通信方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110153581A1 (en) * | 2009-12-23 | 2011-06-23 | International Business Machines Corporation | Method for Providing Connections for Application Processes to a Database Server |
CN105095438A (zh) * | 2015-07-23 | 2015-11-25 | 北京按钮云商科技有限公司 | 一种基于.net数据库连接池的数据管理方法及系统 |
CN108255825A (zh) * | 2016-12-28 | 2018-07-06 | 中国移动通信集团江西有限公司 | 用于动态分配数据库连接的方法和装置 |
CN108694199A (zh) * | 2017-04-10 | 2018-10-23 | 北京京东尚科信息技术有限公司 | 数据同步装置、方法、存储介质及电子设备 |
-
2018
- 2018-11-26 CN CN201811416040.9A patent/CN111225007B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110153581A1 (en) * | 2009-12-23 | 2011-06-23 | International Business Machines Corporation | Method for Providing Connections for Application Processes to a Database Server |
CN105095438A (zh) * | 2015-07-23 | 2015-11-25 | 北京按钮云商科技有限公司 | 一种基于.net数据库连接池的数据管理方法及系统 |
CN108255825A (zh) * | 2016-12-28 | 2018-07-06 | 中国移动通信集团江西有限公司 | 用于动态分配数据库连接的方法和装置 |
CN108694199A (zh) * | 2017-04-10 | 2018-10-23 | 北京京东尚科信息技术有限公司 | 数据同步装置、方法、存储介质及电子设备 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112231384A (zh) * | 2020-10-30 | 2021-01-15 | 中国建设银行股份有限公司 | 适配多种数据源的分布式应用国产化改造方法及设备 |
CN112231384B (zh) * | 2020-10-30 | 2024-03-29 | 中国建设银行股份有限公司 | 适配多种数据源的分布式应用国产化改造方法及设备 |
CN113407562A (zh) * | 2021-06-04 | 2021-09-17 | 北京金山云网络技术有限公司 | 分布式数据库系统的通信方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111225007B (zh) | 2024-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6209018B1 (en) | Service framework for a distributed object network system | |
US8392564B1 (en) | Cluster-wide resource usage monitoring | |
US10686728B2 (en) | Systems and methods for allocating computing resources in distributed computing | |
CN106874125B (zh) | 多容器系统间共享系统资源的方法及装置 | |
CN102214118A (zh) | 一种虚拟机控制方法、系统及装置 | |
CN110971700B (zh) | 分布式锁的实现方法及装置 | |
US20220283846A1 (en) | Pod deployment method and apparatus | |
CN105786603B (zh) | 一种基于分布式的高并发业务处理系统及方法 | |
CN110289965B (zh) | 一种应用程序服务的管理方法及装置 | |
CN109960591B (zh) | 一种面向租户资源侵占的云应用资源动态调度的方法 | |
CN111225007B (zh) | 数据库连接方法、装置和系统 | |
CN111414256A (zh) | 基于麒麟移动操作系统的应用程序进程派生方法、系统及介质 | |
US8973008B2 (en) | Combining different resource types | |
CN112866314B (zh) | 分布式主从系统中从节点的切换方法、主节点设备和存储介质 | |
CN109992415B (zh) | 一种容器调度方法及调度系统 | |
CN114880386B (zh) | 一种任务调度平台及任务调度方法 | |
CN107809323B (zh) | 一种资源的控制方法、装置及系统 | |
CN111767122A (zh) | 分布式任务调度管理方法和装置 | |
CN115063282A (zh) | 一种gpu资源调度方法、装置、设备及存储介质 | |
CN113342511A (zh) | 一种分布式任务管理系统及方法 | |
CN112328387A (zh) | 一种面向多租户的微服务资源调度方法 | |
CN113590306A (zh) | 一种实现域控制器双系统之间可靠通讯的方法 | |
CN107862042B (zh) | 一种数据库并行度的控制方法及装置 | |
CN108255820B (zh) | 分布式系统中数据入库的方法、装置以及电子设备 | |
CN109257201B (zh) | 一种License的发送方法和装置 |
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 |