CN118132234A - 基于数据库访问的流量控制方法、装置、介质及计算设备 - Google Patents
基于数据库访问的流量控制方法、装置、介质及计算设备 Download PDFInfo
- Publication number
- CN118132234A CN118132234A CN202410331273.8A CN202410331273A CN118132234A CN 118132234 A CN118132234 A CN 118132234A CN 202410331273 A CN202410331273 A CN 202410331273A CN 118132234 A CN118132234 A CN 118132234A
- Authority
- CN
- China
- Prior art keywords
- flow
- target service
- database
- value
- variable
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 69
- 238000012544 monitoring process Methods 0.000 claims description 44
- 230000001960 triggered effect Effects 0.000 claims description 11
- 230000002159 abnormal effect Effects 0.000 claims description 7
- 230000005540 biological transmission Effects 0.000 claims description 6
- 238000004590 computer program Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 description 22
- 238000010586 diagram Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Abstract
本公开的实施方式提供了一种基于数据库访问的流量控制方法、装置、介质及计算设备,涉及计算机技术技术领域。该流量控制方法包括:获取目标业务访问数据库返回的流量值,可以更新目标业务对应的总流量值,再检测该总流量值是否大于对应于内存限制的流量阈值,并在大于该流量阈值时,中断目标业务对数据库的访问。通过这种方式,可以在数据库返回流量超出内存限制的情况下,阻断目标业务对该返回流量的接收,从而可以减小内存溢出的风险,以尽可能保证目标业务的正常运行。
Description
技术领域
本公开的实施方式涉及计算机技术领域,更具体地,本公开的实施方式涉及一种基于数据库访问的流量控制方法、装置、介质及计算设备。
背景技术
本部分旨在为本公开的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
随着计算机技术的发展,各类应用程序层出不穷。一些应用程序的业务运行需要对数据库进行访问,以从数据库中得到返回数据。
然而,有些业务访问数据库所返回的数据流量大小可能超出内存限制,导致程序存在内存溢出的风险,容易影响整个程序的正常运行。
发明内容
本公开提供一种基于数据库访问的流量控制方法、装置、介质及计算设备,以解决数据库返回流量导致内存溢出的问题。
在本公开实施方式的第一方面中,提供了一种基于数据库访问的流量控制方法,包括:
获取目标业务访问数据库返回数据的流量值;
根据所述流量值,更新所述目标业务对应的总流量值;
检测所述总流量值是否大于预设的流量阈值,所述流量阈值的设置用于避免内存溢出;
若大于所述流量阈值,中断所述目标业务对数据库的访问。
在本公开的一个实施例中,所述中断所述目标业务对数据库的访问,包括:
执行抛出异常指令,所述抛出异常指令用于中断数据库访问指令的执行;
或,
中断所述目标业务与所述数据库之间的数据传输。
在本公开的另一实施例中,所述目标业务包含多个线程,所述总流量值包含与每个线程对应的线程流量值,所述获取目标业务访问数据库返回数据的流量值包括:
执行当前线程的数据库访问任务,得到所述数据库访问任务的返回数据,所述当前线程为所述多个线程中的一个;
所述根据所述流量值,更新所述目标业务对应的总流量值,包括:
根据所述返回数据的流量值,更新所述当前线程对应的线程流量值。
在本公开的另一实施例中,所述根据所述流量值,更新所述目标业务对应的总流量值,包括:
获取所述目标业务对应的流量监测变量,所述流量监测变量用于记录所述目标业务对应的总流量值;
根据所述流量值,更新所述流量监测变量的值。
在本公开的另一实施例中,该方法还包括:
响应于目标业务触发的第一指令,调用对应于所述目标业务的第一变量,所述第一变量用于设置流量阈值。
在本公开的另一实施例中,该方法还包括:响应于目标业务触发的第二指令,调用对应于所述目标业务的第二变量,所述第二变量用于重置所述流量监测变量的值。
在本公开的另一实施例中,该方法还包括:响应于目标业务触发的第三指令,调用对应于所述目标业务的第三变量,所述第三变量用于控制目标变量的启用或停止,所述目标变量包括所述流量监测变量、所述第一变量、所述第二变量中的一项或多项。
在本公开的另一实施例中,该方法还包括:加载预设的代码数据包;
通过字节码操作库编译所述代码数据包,得到编译后的字节码;所述编译后的字节码用于生成所述流量监测变量、所述第一变量、所述第二变量、所述第三变量中的一项或多项;
将所述编译后的字节码注入目标业务的套接字实现类。
在本公开的另一实施例中,所述第一变量、所述第二变量、所述第三变量为线程局部变量ThreadLocal变量。
在本公开实施方式的第二方面中,提供了一种基于数据库访问的流量控制装置,包括:
获取模块,用于获取目标业务访问数据库返回数据的流量值;
更新模块,用于根据所述流量值,更新所述目标业务对应的总流量值;
监测模块,用于检测所述总流量值是否大于预设的流量阈值,所述流量阈值的设置用于避免内存溢出;
中断模块,用于在所述总流量值大于所述流量阈值的情况下,中断所述目标业务对数据库的访问。
在本公开实施方式的第三方面中,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如第一方面中任一项所述的方法。
在本公开实施方式的第四方面中,提供了一种计算设备,包括:至少一个处理器;
以及与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述计算设备执行如第一方面中任一项所述的方法。
在本公开实施方式的第五方面中,提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的方法。
根据本公开实施方式的基于数据库访问的流量控制方法、装置、介质及计算设备,通过获取目标业务访问数据库返回的流量值,可以更新目标业务对应的总流量值,再检测该总流量值是否大于对应于内存限制的流量阈值,并在大于该流量阈值时,中断目标业务对数据库的访问。通过这种方式,可以在数据库返回流量超出内存限制的情况下,阻断目标业务对该返回流量的接收,从而可以减小内存溢出的风险,以尽可能保证目标业务的正常运行。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:
图1示意性地示出了根据本公开实施例的一种基于数据库访问的流量控制方法的应用场景示意图;
图2示意性地示出了根据本公开实施例的一种基于数据库访问的流量控制方法的流程示意图;
图3示意性地示出了根据本公开实施例的一种更新总流量值的方法的流程示意图;
图4示意性地示出了根据本公开另一实施例一种基于数据库访问的流量控制方法的流程示意图;
图5示意性地示出了根据本公开实施例的一种转化率预测模型的原理示意图;
图6示意性地示出了根据本公开实施例的一种流量控制功能变量的原理示意图;
图7示意性地示出了根据本公开实施例在一次JDBC任务中应用流量控制功能的原理示意图;
图8示意性地示出了应用本公开实施例的方法控制JDBC访问数据库的过程示意图;
图9示意性地示出了本公开实施例的一种存储介质的示意图;
图10示意性地示出了根据本公开实施例的一种基于数据库访问的流量控制装置的结构示意图;
图11示意性地示出了根据本公开实施例的一种计算设备的示意图。
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本公开的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本公开的实施方式,提出了一种基于数据库访问的流量控制方法、介质、装置和计算设备。
在本文中,需要理解的是,所涉及的术语含义如下:
JDBC:全称Java Database Connectivity(Java数据库连接),JDBC是一种用于在Java应用程序和各种数据库之间进行交互的API(Application Programming Interface,应用程序接口)。JDBC提供了一组标准的Java接口,以帮助Java应用程序实现连接数据库、执行SQL语句、处理结果集等针对数据库的操作。
Statement陈述:JDBC中的对象,JDBC可以通过Statement陈述这一对象向数据库发送SQL(Structured Query Language,结构化查询语言)语句,以实现对数据库的插入数据、删除数据、修改数据、查询数据等操作。
内存溢出:是指程序在运行过程中需要使用的内存空间超出了系统所能分配的内存大小。内存溢出可能导致程序崩溃或异常退出。
此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。
发明概述
数据通信对于应用程序而言至关重要,在应用程序运行过程中,不可避免地要对数据库进行访问,获取数据库返回的数据以保证一些业务功能的运行或满足客户端的数据需求。如JDBC可以通过数据库提供的JDBC驱动程序与数据库连接,应用程序可以通过JDBC访问数据库并从数据库获取数据。此外,若数据库提供HTTP接口,应用程序也可以通过HTTP对数据库进行访问。
然而,本发明人发现,在访问数据库时,有些情况下数据库返回的数据流量过大,可能会超出程序的内存限制,导致内存溢出,影响程序正常运行。经过发明人进一步研究发现,这种问题是由于无法确定数据库返回流量大小造成的。
发明人因而想到,可以在应用程序接收数据库返回的数据流量之前确定流量大小,并根据流量大小是否超出限制来控制程序与数据库的数据通信。通过这种方式,可以在数据库返回的数据流量超出限制的情况下,阻断程序对数据的接收,从而可以控制应用程序对内存的使用,减小内存溢出的风险,降低对程序运行的影响。
在介绍了本公开的基本原理之后,下面具体介绍本公开的各种非限制性实施方式。
应用场景总览
本公开实施方式的基于数据库访问的流量控制方法可以应用于多种涉及流量控制的应用场景。
首先参考图1,图1为本公开实施方式的流量控制方法的应用场景示意图。应用程序可以通过JDBC或HTTP等接口访问数据库,实现对数据库的查询数据、更新数据等操作。本公开实施方式的基于数据库访问的流量控制方法可以应用于程序通过JDBC等接口访问数据库的过程。
上述涉及的应用场景仅部分举例,本领域技术人员可以基于数据库访问的流量控制需求进行拓展应用,本公开实施例对此不作具体限制。
示例性方法
下面结合图1的应用场景,参考图2~图8来描述根据本公开示例性实施方式的基于数据库访问的流量控制方法。需要注意的是,上述应用场景仅是为了便于理解本公开的精神和原理而示出,本公开的实施方式在此方面不受任何限制。相反,本公开的实施方式可以应用于适用的任何场景。
图2是本公开实施例的一种基于数据库访问的流量控制方法的流程示意图。如图2所示,该方法可以包括:
步骤S201,获取目标业务访问数据库返回数据的流量值。
其中,目标业务可以是需要进行流量控制的目标业务程序。
可选地,在目标业务接收数据库返回的数据之前,可以通过JDBC或HTTP等接口获取数据库返回数据的流量值,该流量值用于表示该返回数据的大小。
在一些可能的实现方式中,若目标业务通过JDBC访问数据库,JDBC利用数据库提供的JDBC驱动程序与数据库建立连接,并创建Statement陈述以执行SQL语句,该SQL语句是根据目标业务的数据库访问需求生成的,JDBC通过执行SQL语句可以接收数据库返回的数据。在JDBC执行SQL语句后,可以通过设置变量或调用其他API等方式获取JDBC接收到的数据的流量值。
在一些其他可能的实现方式中,若目标业务通过其他方式访问数据库,也可以在数据库返回的数据传回目标业务之前获取其流量值,例如目标业务通过HTTP接口访问数据库,也可以通过调用预设的变量或调用其他API等方式获取HTTP接口接收到的数据库返回数据的流量值。
步骤S202,根据流量值,更新目标业务对应的总流量值。
其中,流量值为表示数据大小的数值。在一些实施方式中,流量值的单位可以设为Byte(字节)、KB(KiloByte,千字节)或其他计算单位。
可选地,针对目标业务可以设置用于记录目标业务接收数据总流量值的变量,该变量可以由JDBC等接口维护,用于自动获取返回数据的流量值并根据该流量值更新自身数值。
在一些可能的实现方式中,更新目标业务对应的总流量值可以通过累加计数的方式实现,每次获取到流量值后都在原有总流量值的数值上进行累加,得到新的总流量值。
步骤S203,检测总流量值是否大于预设的流量阈值。
其中,流量阈值的设置用于避免内存溢出。该流量阈值可以是根据目标业务被分配的内存大小确定的。
在一些可能的实现方式中,目标业务可以通过预设的程序指令控制JDBC等接口将更新后的总流量值与流量阈值进行比较,该流量阈值可以设置为该程序指令的参数,也可以存储在内存中以供JDBC执行指令时获取。
步骤S204,若大于流量阈值,中断目标业务对数据库的访问。
在一些可能的实现方式中,若更新后的总流量值大于预设的流量阈值,则可以中断目标业务对数据库的访问,以阻止数据库返回数据被传至目标业务。例如,可以通过一些Java关键字执行中断指令,以使JDBC等接口不再将针对数据库操作的结果传递给目标业务。
上述实施例中,通过获取目标业务访问数据库返回的流量值,可以更新目标业务对应的总流量值,再检测该总流量值是否大于对应于内存限制的流量阈值,并在大于该流量阈值时,中断目标业务对数据库的访问。通过这种方式,可以在数据库返回流量超出内存限制的情况下,阻断目标业务对该返回流量的接收,从而可以减小内存溢出的风险,以尽可能保证目标业务的正常运行。
在本公开的又一个实施例中,中断目标业务对数据库的访问,可以包括:执行抛出异常指令。其中,抛出异常指令(throw exception)为Java中的一个程序处理动作,可以用于中断数据库访问指令的执行。
可选地,通过throws关键字可以设置抛出异常指令的触发条件,可以将该触发条件设置为总流量值大于预设的流量阈值,从而可以及时中断数据库访问。
在本公开的又一个实施例中,中断目标业务对数据库的访问,还可以包括:中断目标业务与数据库之间的数据传输。
可选地,若更新后的总流量值大于预设的流量阈值,可以中断目标业务的TCP(Transmission Control Protocol,传输控制协议)连接,从而可以中断目标业务的数据传输,阻断目标业务对返回流量的接收。若总流量值小于或等于流量阈值,则可以继续获取数据库返回数据的流量值并更新目标业务对应的总流量值。
在本公开的又一个实施例中,如图3所示,根据流量值,更新目标业务对应的总流量值,可以包括:
步骤S301,获取目标业务对应的流量监测变量。
其中,流量监测变量用于记录目标业务对应的总流量值。
在一些可能的实现方式中,在得到数据库返回数据的流量值后,可以加载已编译的Java字节码,该Java字节码定义了该流量监测变量的功能。
步骤S302,根据流量值,更新流量监测变量的值。
在一些可能的实现方式中,流量监测变量可以读取数据库返回的数据,并可以根据该数据自动更新已记录的流量数值。
在本公开的又一个实施例中,获取目标业务访问数据库返回数据的流量值包括:
执行当前线程的数据库访问任务,得到数据库访问任务的返回数据。其中,当前线程可以为多个线程中的任意一个线程。
可选地,若目标业务包括多个线程,则总流量值可以包括对应于每一个线程的线程流量值,该线程流量值可以用于表示数据库响应于某一线程的访问任务而返回给该线程的数据的流量大小。
在一些可能的实现方式中,根据流量值,更新目标业务对应的总流量值,包括:根据返回数据的流量值,更新当前线程对应的线程流量值。
在一些可能的实现方式中,针对目标业务的每一个线程,可以设置一个对应的流量监测变量,JDBC等接口通过调用当前线程对应的流量监测变量来记录当前线程待接收数据的流量值。
上述实施例中,通过调用线程对应的相关变量,可以实现线程级别的流量监测,从而可以控制目标业务中每一线程对内存的使用。在数据库返回的数据流量过大时,可以针对该数据对应的线程进行处理,减少该线程对业务其他线程正常运行的干扰。
在本公开的又一个实施例中,如图4所示,该流量控制方法还包括:
步骤S401,响应于目标业务触发的第一指令,调用对应于目标业务的第一变量。
其中,第一变量用于设置流量阈值。
在一些可能的实现方式中,JDBC等接口中存在可调用的第一变量,目标业务可以向JDBC等接口请求将目标数值或目标地址中存储的数值设置为流量阈值;JDBC等接口响应于目标业务的请求,调用第一变量,该第一变量可以将目标业务请求的数值设置为流量阈值并进行记录,以供JDBC等接口将第一变量记录的流量阈值与流量监测变量记录的总流量值进行比较。
在一些其他可能的实现方式中,若目标业务包含多个线程,则可以针对每一线程均维护一个对应的第一变量,根据不同线程的请求分别调用对应于不同线程的第一变量,以设置每个线程的对应的流量阈值。
步骤S402,响应于目标业务触发的第二指令,调用对应于目标业务的第二变量。
其中,第二变量用于重置流量监测变量的值。
在一些可能的实现方式中,JDBC等接口中存在可调用的第二变量,目标业务可以向JDBC等接口请求将流量监测变量的值重置为预设值;JDBC等接口响应于目标业务的请求,调用第二变量,以通过第二变量实现对流量监测变量的重置。可以理解的是,流量监测变量可以被重置为任意数值,例如可以被重置为零,也可以被重置为变量初始值。
在一些其他可能的实现方式中,若目标业务包含多个线程,则可以针对每一线程均维护一个对应的第二变量,根据不同线程的请求分别调用对应于不同线程的第二变量,从而可以对任一线程对应的流量监测变量的值进行重置。
上述实施例中,在JDBC等接口检测目标业务总流量大小前,通过调用第一变量,可以根据目标业务当前被分配的内存大小对流量阈值进行设置,从而可以使流量控制符合目标业务的实时可用内存。此外,在JDBC等接口检测目标业务总流量大小前,通过调用第二变量,还可以重置流量监测变量的值,从而可以精确控制某一段时间的流量,实现针对一条或多条SQL语句执行结果的流量进行控制。
在本公开的又一个实施例中,该流量控制方法还包括:
响应于目标业务触发的第三指令,调用对应于目标业务的第三变量。
其中,第三变量用于控制目标变量的启用或停止,目标变量包括流量监测变量、第一变量和第二变量中的一项或多项。
在一些可能的实现方式中,JDBC等接口中存在可调用的第三变量,目标业务可以向JDBC等接口请求启停与流量控制有关的部分或全部功能;JDBC等接口响应于目标业务的请求,可以调用第三变量,以通过第三变量实现对流量监测变量、第一变量和第二变量中的任意一项或多项变量的启动或停止。
在一些其他可能的实现方式中,若目标业务包含多个线程,则可以针对每一线程均维护一个对应的第三变量,根据不同线程的请求分别调用对应于不同线程的第三变量,从而可以控制任一线程对应的流量控制功能的使用。
本公开各实施例中涉及的第一变量、第二变量和第三变量均可以为ThreadLocal变量(线程局部变量)。
ThreadLocal是Java中的一个类,它提供了一种在多线程环境下存储线程局部变量的机制,从而可以使不同线程独立维护线程对应的该类型变量。
上述实施例中,通过调用第三变量,可以实现对单线程基本的功能控制,从而可以基于目标业务不同线程的需要灵活启停对应线程的部分或全部流量控制功能,增强流量控制的灵活性。
在本公开的又一个实施例中,如图5所示,该流量控制方法还包括:
步骤S501,加载预设的代码数据包。
步骤S502,通过字节码操作库编译代码数据包,得到编译后的字节码。
其中,编译后的字节码用于生成流量监测变量、第一变量、第二变量、第三变量中的一项或多项。
步骤S503,将编译后的字节码注入目标业务的套接字实现类。
在一些可能的实现方式中,可以在目标业务的运行环境中加载预设的代码数据包,该代码数据包中含有功能代码,该功能代码可以用于实现流量监测变量、第一变量、第二变量和第三变量的部分或全部功能,该功能代码还可以提供对外的控制接口,该控制接口可以用于调用第一变量、第二变量和第三变量中的一项或多项。这些功能代码通过字节码操作库编译后得到可用的Java字节码,再将这些Java字节码注入目标业务的Socket类,以生成可供调用的流量监测变量、第一变量、第二变量和第三变量,目标业务可以通过JDBC等接口分别调用第一变量、第二变量和第三变量各自对应的控制接口,以实现相应变量的功能。
可以理解的是,本实施例中的步骤S501~步骤S503可以执行于上述实施例中的步骤S201之前。
上述实施例中,通过加载流量控制功能对应的代码数据包并利用字节码操作库进行编译,可以得到Java字节码,这些Java字节码可以直接应用到可运行于JVM(JavaVirtual Machine,Java虚拟机)的程序,且无需对程序本身代码进行修改。这样,通过注入这些Java字节码,可以在不改动程序底层源码的情况下对程序进行逻辑功能增强,使其增加流量控制功能的同时不影响其原有性能。
为进一步体现本公开实施例中的流量控制方法的应用过程,下面结合图6~图8说明一个具体示例中的流量控制过程实现原理。
首先参见图6,图6可以表示该示例中涉及的各个与流量控制相关的变量的功能逻辑。如图6所示,在获取数据库返回数据后,可以通过第三变量确定是否开启流量控制功能,若不开启,则继续原有流程。若开启,则可以确定是否进行流量重置。若不重置,则可以通过第一变量设置流量阈值,并通过流量监测变量获取返回数据的流量值并更新总流量值,以检测总流量值是否大于流量阈值。若进行重置,则可以通过第二变量重置流量监测变量的值后,再通过流量监测变量获取返回数据的流量值为总流量值,以检测总流量值是否大于流量阈值。若大于流量阈值,则可以通过执行抛出异常指令或中断TCP连接等方式中断目标业务对数据库的访问。若小于或等于流量阈值,则可以在更新总流量值后继续原有流程。
需要说明的是,图6所示过程可以由JDBC等接口实现,继续原有流程可以是JDBC等接口将获取的数据库返回的数据传输给目标业务。此外,如图6所示,第一变量、第二变量和第三变量均存在对外提供的控制接口,以便JDBC等接口可以通过对应的控制接口调用第一变量、第二变量和第三变量来实现相应的功能逻辑。
在一些可能的实现方式中,可以根据图6所示的功能逻辑进行编程,并可以通过ASM字节码操作库或其他字节码操作库对编程代码进行编译,得到编译后的Java字节码。
图7是一个示例中在一次JDBC任务中应用流量控制功能的原理示意图。如图7所示,目标业务对应的程序启动后可以给程序的Socket(套接字)类注入编译后的Java字节码,在业务线程中可以通过Threadlocal变量的控制接口调用对应的变量,以实现图6中的部分或全部的流量控制功能。
在未使用本公开实施例的流量控制方法时,JDBC访问数据库的过程可以包括:先建立与数据库的连接,并创建Statement陈述这一对象,通过Statement陈述可以对执行SQL语句并获取该SQL语句的执行结果这一过程进行循环,当不需要执行SQL语句时,可以关闭Statement陈述并断开与数据库的连接。
图8是一个示例中使用本公开中流量控制方法时JDBC访问数据库的过程示意图。如图8所示,使用本公开实施例的流量控制方法后,JDBC仍先建立与数据库的连接,并创建Statement陈述这一对象,但是在通过Statement陈述执行SQL语句的过程中,在每次执行SQL语句前,可以通过第一变量和第二变量实现流量统计重置和设置流量阈值的功能,并可以在执行SQL语句后通过流量监测变量更新和记录流量值,以确定流量值是否超出流量阈值的限制。通过这种方式,可以在循环执行SQL过程中,增加针对当前JDBC链路的Socket流量统计,在每次从Socket中读取数据时,都可以更新和记录流量值,并判断是否超限,从而可以在超限的情况下中断数据库访问,保护业务功能正常运行。
示例性介质
在介绍了本公开示例性实施方式的方法之后,接下来,参考图9对本公开示例性实施方式的存储介质进行说明。
参考图9所示,存储介质90中存储着根据本公开的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开公开操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备。
示例性装置
在介绍了本公开示例性实施方式的介质之后,接下来,参考图10对本公开示例性实施方式的基于数据库访问的流量控制装置进行说明,用于实现上述任一方法实施例中的方法,其实现原理和技术效果类似,在此不再赘述。
如图10所示,基于数据库访问的流量控制装置1000可以包括:
获取模块1001,用于获取目标业务访问数据库返回数据的流量值;
更新模块1002,用于根据流量值,更新目标业务对应的总流量值;
监测模块1003,用于检测总流量值是否大于预设的流量阈值,流量阈值的设置用于避免内存溢出;
中断模块1004,用于在总流量值大于流量阈值的情况下,中断目标业务对数据库的访问。
在本公开的又一个实施例中,中断模块1004可以包括:
抛出异常单元,可以用于执行抛出异常指令,抛出异常指令用于中断数据库访问指令的执行。
在本公开的又一个实施例中,中断模块1004还可以包括:
中断单元,可以用于中断目标业务与数据库之间的数据传输。
在本公开的又一个实施例中,目标业务包含多个线程,总流量值包含与每个线程对应的线程流量值,获取模块1001可以包括:
数据获取单元,可以用于执行当前线程的数据库访问任务,得到数据库访问任务的返回数据,当前线程为多个线程中的一个。
更新模块1002可以包括:
第一更新单元,可以用于根据返回数据的流量值,更新当前线程对应的线程流量值。
在本公开的又一个实施例中,更新模块1002可以包括:
监测变量获取单元,可以用于获取目标业务对应的流量监测变量,流量监测变量用于记录目标业务对应的总流量值。
第二更新单元,可以用于根据流量值,更新流量监测变量的值。
在本公开的又一个实施例中,该流量控制装置1000还可以包括:
第一变量模块,可以用于响应于目标业务触发的第一指令,调用对应于目标业务的第一变量,第一变量用于设置流量阈值。
在本公开的又一个实施例中,该流量控制装置1000还可以包括:
第二变量模块,可以用于响应于目标业务触发的第二指令,调用对应于目标业务的第二变量,第二变量用于重置流量监测变量的值。
在本公开的又一个实施例中,该流量控制装置1000还可以包括:
第三变量模块,可以用于响应于目标业务触发的第三指令,调用对应于目标业务的第三变量,第三变量用于控制目标变量的启用或停止,目标变量包括流量监测变量、第一变量、第二变量中的一项或多项。
在本公开的又一个实施例中,该流量控制装置1000还可以包括:
加载模块,可以用于加载预设的代码数据包。
编译模块,可以用于通过字节码操作库编译代码数据包,得到编译后的字节码;编译后的字节码用于生成流量监测变量、第一变量、第二变量、第三变量中的一项或多项。
注入模块,可以用于将编译后的字节码注入目标业务的套接字实现类。
在本公开的又一个实施例中,该流量控制装置1000还可以包括:
变量设置模块,可以用于将第一变量、第二变量、第三变量设置为线程局部变量ThreadLocal变量。
示例性计算设备
在介绍了本公开示例性实施方式的方法、介质和装置之后,接下来,参考图11对本公开示例性实施方式的计算设备进行说明。
图11显示的计算设备110仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图11所示,计算设备110以通用计算设备的形式表现。计算设备110的组件可以包括但不限于:至少一个处理单元1101、至少一个存储单元1102,连接不同系统组件(包括处理单元1101和存储单元1102)的总线1103。其中,至少一个存储单元1102中存储有计算机执行指令;至少一个处理单元1101包括处理器,处理器执行该计算机执行指令,以实现上文描述的方法。
总线1103包括数据总线、控制总线和地址总线。
存储单元1102可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)11021和/或高速缓存存储器11022,可以进一步包括非易失性存储器形式的可读介质,例如只读存储器(ROM)11023。
存储单元1102还可以包括具有一组(至少一个)程序模块11024的程序/实用工具11025,这样的程序模块11024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
计算设备110也可以与一个或多个外部设备1104(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(I/O)接口1105进行。并且,计算设备110还可以通过网络适配器1106与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图11所示,网络适配器1106通过总线1103与计算设备110的其它模块通信。应当理解,尽管图中未示出,可以结合计算设备110使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
应当注意,尽管在上文详细描述中提及了基于数据库访问的流量控制装置以及转化率预测模型的处理装置的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (10)
1.一种基于数据库访问的流量控制方法,其特征在于,包括:
获取目标业务访问数据库返回数据的流量值;
根据所述流量值,更新所述目标业务对应的总流量值;
检测所述总流量值是否大于预设的流量阈值,所述流量阈值的设置用于避免内存溢出;
若大于所述流量阈值,中断所述目标业务对数据库的访问。
2.根据权利要求1所述的流量控制方法,其特征在于,所述中断所述目标业务对数据库的访问,包括:
执行抛出异常指令,所述抛出异常指令用于中断数据库访问指令的执行;
或,
中断所述目标业务与所述数据库之间的数据传输。
3.根据权利要求1或2所述的流量控制方法,其特征在于,所述目标业务包含多个线程,所述总流量值包含与每个线程对应的线程流量值,所述获取目标业务访问数据库返回数据的流量值包括:
执行当前线程的数据库访问任务,得到所述数据库访问任务的返回数据,所述当前线程为所述多个线程中的一个;
所述根据所述流量值,更新所述目标业务对应的总流量值,包括:
根据所述返回数据的流量值,更新所述当前线程对应的线程流量值。
4.根据权利要求1或2所述的流量控制方法,其特征在于,所述根据所述流量值,更新所述目标业务对应的总流量值,包括:
获取所述目标业务对应的流量监测变量,所述流量监测变量用于记录所述目标业务对应的总流量值;
根据所述流量值,更新所述流量监测变量的值。
5.根据权利要求4所述的流量控制方法,其特征在于,包括:
响应于目标业务触发的第一指令,调用对应于所述目标业务的第一变量,所述第一变量用于设置流量阈值。
6.根据权利要求5所述的流量控制方法,其特征在于,包括:
响应于目标业务触发的第二指令,调用对应于所述目标业务的第二变量,所述第二变量用于重置所述流量监测变量的值。
7.一种基于数据库访问的流量控制装置,其特征在于,包括:
获取模块,用于获取目标业务访问数据库返回数据的流量值;
更新模块,用于根据所述流量值,更新所述目标业务对应的总流量值;
监测模块,用于检测所述总流量值是否大于预设的流量阈值,所述流量阈值的设置用于避免内存溢出;
中断模块,用于在所述总流量值大于所述流量阈值的情况下,中断所述目标业务对数据库的访问。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1至6中任一项所述的方法。
9.一种计算设备,其特征在于,包括:
至少一个处理器;
以及与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述计算设备执行如权利要求1至6中任一项所述的方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的方法。
Publications (1)
Publication Number | Publication Date |
---|---|
CN118132234A true CN118132234A (zh) | 2024-06-04 |
Family
ID=
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9529694B2 (en) | Techniques for adaptive trace logging | |
US9111033B2 (en) | Compiling source code for debugging with user preferred snapshot locations | |
US20090228875A1 (en) | Method and System for Reducing Disk Allocation by Profiling Symbol Usage | |
US10528729B2 (en) | Methods and systems for defending against cyber-attacks | |
CN108334779B (zh) | 一种应用的处理方法、设备和计算存储介质 | |
CN111800490A (zh) | 获取网络行为数据的方法、装置及终端设备 | |
CN111078367A (zh) | 一种请求处理方法、装置、电子设备和存储介质 | |
US10083125B2 (en) | Method to efficiently implement synchronization using software managed address translation | |
US9870240B2 (en) | Dynamic code injection | |
US8839272B2 (en) | Method and system for the support of application specific policies for conventional operating systems | |
US8874865B2 (en) | Memory type-specific access control of a field of a record | |
CN109271193A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN113176926A (zh) | 一种基于虚拟机自省技术的api动态监控方法及系统 | |
EP2228722A1 (en) | System and method for file integrity monitoring using timestamps | |
US7836434B1 (en) | Method and system for analyzing array access to a pointer that is referenced as an array | |
CN118132234A (zh) | 基于数据库访问的流量控制方法、装置、介质及计算设备 | |
CN113342376B (zh) | 一种针对物联网设备的操作系统进行升级的方法及装置 | |
EP3940566A1 (en) | Using a variable write profile for detecting intrusion of a computer program | |
CN113986391A (zh) | 请求处理方法、装置、介质和计算设备 | |
US11556374B2 (en) | Compiler-optimized context switching with compiler-inserted data table for in-use register identification at a preferred preemption point | |
CN115705294A (zh) | 用于获取函数调用信息的方法、装置、电子设备和介质 | |
Bhatia et al. | Remote customization of systems code for embedded devices | |
CN113138835A (zh) | 基于ipt与虚拟机自省的api调用监控方法及系统 | |
CN110909349A (zh) | docker容器内反弹shell的检测方法和系统 | |
US11340915B2 (en) | Encaching and sharing transformed libraries |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication |