CN115801889B - 通信资源管理系统和方法、存储介质 - Google Patents
通信资源管理系统和方法、存储介质 Download PDFInfo
- Publication number
- CN115801889B CN115801889B CN202210999339.1A CN202210999339A CN115801889B CN 115801889 B CN115801889 B CN 115801889B CN 202210999339 A CN202210999339 A CN 202210999339A CN 115801889 B CN115801889 B CN 115801889B
- Authority
- CN
- China
- Prior art keywords
- resource
- connection
- heartbeat
- error
- node
- 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
- 238000000034 method Methods 0.000 title claims abstract description 50
- 238000004891 communication Methods 0.000 title claims abstract description 35
- 238000003860 storage Methods 0.000 title claims abstract description 19
- 238000012360 testing method Methods 0.000 claims abstract description 122
- 238000004140 cleaning Methods 0.000 claims abstract description 15
- 230000005540 biological transmission Effects 0.000 claims description 23
- 230000001960 triggered effect Effects 0.000 claims description 8
- 238000007726 management method Methods 0.000 description 20
- 238000012545 processing Methods 0.000 description 13
- 238000013461 design Methods 0.000 description 7
- 230000002159 abnormal effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 238000004590 computer program Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 230000000977 initiatory effect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 239000002360 explosive Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Abstract
本申请涉及通信资源管理系统和方法、存储介质,所述系统包括:资源池,其中存放有多个连接资源;业务线程,其配置成从资源池中获取连接资源,并且根据对连接资源的调用结果将其识别为正常连接资源和错误连接资源,其中,正常连接资源将被放回资源池;出错资源队列,其配置成以关于调用测试时间的优先队列存放错误连接资源;以及清理线程,其配置成根据调用测试时间对出错资源队列中的错误连接资源进行连接测试,并且将通过连接测试的错误连接资源放回资源池,将没有通过连接测试的错误连接资源在更新调用测试时间后重新插入到出错资源队列中。
Description
技术领域
本申请涉及通信资源管理的领域,具体而言,涉及通信资源管理系统和方法、存储介质。
背景技术
随着移动互联网的蓬勃发展,大量的并发请求涌入联机系统,这经常会导致联机系统面临很大压力。系统之间的相互调用(如数据库连接,跨系统调用等)由于网络波动和被调用系统存在性能瓶颈等原因,可能会导致请求方各种情况的调用超时。为了避免过多的调用超时影响系统性能,需要尽快的释放超时连接和等待资源,以提高资源利用率、减少响应时间,因此通信资源架构设计应运而生。
通信资源池架构设计是伴随异步化技术发展起来的。现有的通信资源处理机制普遍是粗粒度的,不支持多种不同类型的连接资源。另一方面,也可能存在高并发处理外部调用事件时超时连接过多等情况,这可能会导致大面积的调用失败,进而影响调用事件处理的准确性。另外,传统的通信资源池设计对出错资源的清理、重连操作耗时较长,影响执行效率,无法满足目前联机系统处理大量系统间调用的需要。
有鉴于此,需要提出一种改进的通信资源管理机制。
发明内容
本申请的实施例提供了一种通信资源管理系统和方法、存储介质,用于高效地管理通信资源池中的通信资源。
根据本申请的一方面,提供一种通信资源管理系统。所述系统包括:资源池,其中存放有多个连接资源;业务线程,其配置成从所述资源池中获取连接资源,并且根据对连接资源的调用结果将其识别为正常连接资源和错误连接资源,其中,所述正常连接资源将被放回所述资源池;出错资源队列,其配置成以关于调用测试时间的优先队列存放所述错误连接资源;以及清理线程,其配置成根据所述调用测试时间对所述出错资源队列中的错误连接资源进行连接测试,并且将通过所述连接测试的错误连接资源放回所述资源池,将没有通过所述连接测试的错误连接资源在更新调用测试时间后重新插入到所述出错资源队列中。
在本申请的一些实施例中,可选地,所述出错资源队列被构造为小根堆形式的优先队列。
在本申请的一些实施例中,可选地,所述小根堆的每个节点用于存放一个错误连接资源,并且节点的key值为所述错误连接资源的调用测试时间、value值对应于所述错误连接资源。
在本申请的一些实施例中,可选地,所述清理线程被配置成:访问所述小根堆的根节点;将当前时间与所述根节点的key值作比较;以及在所述根节点的key值大于所述当前时间的情况下退出访问。
在本申请的一些实施例中,可选地,所述清理线程还配置成在所述根节点的key值小于或者等于所述当前时间的情况下:删除所述根节点并对所述小根堆作再平衡处理;根据所述根节点的value值进行所述连接测试,其中,在所述根节点的value值所对应的错误连接资源通过所述连接测试的情况下将其放回所述资源池;以及在所述根节点的value值所对应的错误连接资源没有通过所述连接测试的情况下:将所述根节点的key值更新为当前时间与测试间隔时间之和以形成更新节点;并且,将所述更新节点插入到再平衡后的小根堆中以更新所述小根堆。
在本申请的一些实施例中,可选地,所述系统还包括:心跳任务队列,其配置成以关于心跳数据发送时间的优先队列存放心跳任务,其中所述心跳任务用于按照所述心跳数据发送时间触发所述资源池中的连接资源;和心跳线程,其配置成根据所述心跳数据发送时间执行所述心跳任务队列中的心跳任务。
在本申请的一些实施例中,可选地,所述心跳任务队列被构造为小根堆形式的优先队列。
在本申请的一些实施例中,可选地,所述小根堆的每个节点用于存放一个心跳任务,并且节点的key值为所述心跳任务的心跳数据发送时间、value值对应于所述心跳任务要触发的连接资源。
在本申请的一些实施例中,可选地,所述心跳线程被配置成:访问所述小根堆的根节点;将当前时间与所述根节点的key值作比较;以及在所述根节点的key值大于所述当前时间的情况下退出访问。
在本申请的一些实施例中,可选地,所述心跳线程还配置成在所述根节点的key值小于或者等于所述当前时间的情况下:删除所述根节点并对所述小根堆作再平衡处理;根据所述根节点的value值执行所述心跳任务,并且将所述根节点的key值更新为当前时间与心跳间隔时间之和以形成更新节点;并且,将所述更新节点插入到再平衡后的小根堆中以更新所述小根堆。
在本申请的一些实施例中,可选地,所述资源池被配置成根据连接资源的类型初始化为多个子资源池,并且每个子资源池用于存放同一类型的连接资源。
在本申请的一些实施例中,可选地,所述子资源池为Redis(Remote DictionaryServer,远程字典服务)子资源池、MySQL(关系型数据库管理系统)子资源池或RPC(RemoteProcedure Call,远程过程调用)子资源池。
在本申请的一些实施例中,可选地,所述业务线程被配置成根据外部请求中的类型字段从相应的子资源池中获取连接资源。
根据本申请的另一方面,提供一种通信资源管理方法。所述方法包括:从资源池中获取连接资源并调用,其中所述资源池中存放有多个连接资源;根据对连接资源的调用结果将其识别为正常连接资源和错误连接资源,其中,所述正常连接资源将被放回所述资源池;以及根据调用测试时间对出错资源队列中的错误连接资源进行连接测试:将通过所述连接测试的错误连接资源放回所述资源池,并且将没有通过所述连接测试的错误连接资源在更新调用测试时间后重新插入到所述出错资源队列中;其中,所述出错资源队列以关于所述调用测试时间的优先队列存放所述错误连接资源。
在本申请的一些实施例中,可选地,所述出错资源队列被构造为小根堆形式的优先队列。
在本申请的一些实施例中,可选地,所述小根堆的每个节点用于存放一个错误连接资源,并且节点的key值为所述错误连接资源的调用测试时间、value值对应于所述错误连接资源。
在本申请的一些实施例中,可选地,根据调用测试时间对出错资源队列中的错误连接资源进行连接测试包括:访问所述小根堆的根节点;将当前时间与所述根节点的key值作比较;以及在所述根节点的key值大于所述当前时间的情况下退出访问。
在本申请的一些实施例中,可选地,根据调用测试时间对出错资源队列中的错误连接资源进行连接测试还包括:在所述根节点的key值小于或者等于所述当前时间的情况下:删除所述根节点并对所述小根堆作再平衡处理;根据所述根节点的value值进行所述连接测试,其中,在所述根节点的value值所对应的错误连接资源通过所述连接测试的情况下将其放回所述资源池;以及在所述根节点的value值所对应的错误连接资源没有通过所述连接测试的情况下:将所述根节点的key值更新为当前时间与测试间隔时间之和以形成更新节点;并且,将所述更新节点插入到再平衡后的小根堆中以更新所述小根堆。
在本申请的一些实施例中,可选地,所述方法还包括:在心跳任务队列中以关于心跳数据发送时间的优先队列存放心跳任务,其中所述心跳任务用于按照所述心跳数据发送时间触发所述资源池中的连接资源;和根据所述心跳数据发送时间执行所述心跳任务队列中的心跳任务。
在本申请的一些实施例中,可选地,所述心跳任务队列被构造为小根堆形式的优先队列。
在本申请的一些实施例中,可选地,所述小根堆的每个节点用于存放一个心跳任务,并且节点的key值为所述心跳任务的心跳数据发送时间、value值对应于所述心跳任务要触发的连接资源。
在本申请的一些实施例中,可选地,根据所述心跳数据发送时间执行所述心跳任务队列中的心跳任务包括:访问所述小根堆的根节点;将当前时间与所述根节点的key值作比较;以及在所述根节点的key值大于所述当前时间的情况下退出访问。
在本申请的一些实施例中,可选地,根据所述心跳数据发送时间执行所述心跳任务队列中的心跳任务还包括:在所述根节点的key值小于或者等于所述当前时间的情况下:删除所述根节点并对所述小根堆作再平衡处理;根据所述根节点的value值执行所述心跳任务,并且将所述根节点的key值更新为当前时间与心跳间隔时间之和以形成更新节点;并且,将所述更新节点插入到再平衡后的小根堆中以更新所述小根堆。
在本申请的一些实施例中,可选地,所述资源池被配置成根据连接资源的类型初始化为多个子资源池,并且每个子资源池用于存放同一类型的连接资源。
在本申请的一些实施例中,可选地,所述子资源池为Redis子资源池、MySQL子资源池或RPC子资源池。
在本申请的一些实施例中,可选地,从所述资源池中获取连接资源并调用包括:根据外部请求中的类型字段从相应的子资源池中获取连接资源。
根据本申请的另一方面,提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,其特征在于,当所述指令由处理器执行时,使得所述处理器执行如上文所述的任意一种通信资源管理方法。
本发明一些示例提出的通信资源管理系统和方法、存储介质可以结合诸如小根堆的通用型通信资源池的设计方案,能够提供一种高性能、高效率的通信资源处理机制,为异步化高并发技术的实现提供了可能性。
附图说明
从结合附图的以下详细说明中,将会使本申请的上述和其他目的及优点更加完整清楚,其中,相同或相似的要素采用相同的标号表示。
图1示出了根据本申请的一个实施例的通信资源管理系统;
图2示出了根据本申请的一个实施例的通信资源管理方法;
图3示出了根据一些示例的通信资源管理系统。
具体实施方式
出于简洁和说明性目的,本文主要参考其示范实施例来描述本申请的原理。但是,本领域技术人员将容易地认识到相同的原理可等效地应用于所有类型的通信资源管理系统和方法、存储介质,并且可以在其中实施这些相同或相似的原理,任何此类变化不背离本申请的真实精神和范围。
图3示出了现有技术中通常使用的通信资源池。如图3所示,目前通信资源池设计机制多采用双队列的方式。当进行系统间调用操作(例如,访问数据库、调用远程RPC接口等),业务线程先维护好当前事件请求的数据等相关信息,然后判断如果有系统调用则从通信资源池中获取连接资源。如果该连接正常,则在使用完成之后放回资源池;如果连接异常,则将该连接放入出错资源池后,再处理其他业务请求。资源池线程负责从出错资源池中捞出异常的连接资源,然后进行重连测试,如果重新连接成功,则放回资源池中,如果重连失败,则继续放回出错资源池中。上述方式保证业务线程一直在发送和处理请求,没有阻塞状态,因而异步化技术在并发效率上也有一定提升。
但是该方案存在一些技术上的缺点:首先,该方案无法处理复杂的多连接多超时时间场景。当出错资源池中的连接资源各不相同且处理时间也各不相同时,普通的资源池机制无法满足要求。这是因为出错资源池线程获取出错资源是随机或者按队列方式捞取的,且无法将数据库连接资源和RPC连接资源放入一个资源池中。
其次,该方案不支持使用资源池发起心跳。如果需要与外部服务通过心跳保持连接,通过上述方式会占用资源池中资源,极端情况下可能导致资源池中资源被心跳线程占用一部分,业务线程能够获取到的资源变少的情况,进而严重影响到业务的高并发性能。同时对于多个外部连接,每个连接的心跳时间可能不一致,如何按照各个连接指定的心跳时间发心跳也是一个问题。
为了至少解决以上提出的至少一个问题,以下将结合具体实施例说明本申请的基本原理。
根据本申请的一方面,提供一种通信资源管理系统。如图1所示,通信资源管理系统10(以下简称系统10)包括资源池101、业务线程102、出错资源队列(图示为出错资源小根堆)103和清理线程104。系统10通过以上构造可以实现处理复杂的多连接多超时时间场景,详细原理将在下文中介绍。
系统10的资源池101中存放有多个连接资源。在本申请的一些实施例中,资源池101可以根据连接资源的类型初始化为多个子资源池,并且每个子资源池用于存放同一类型的连接资源。其中,根据可被调用的资源类型,子资源池可以为Redis子资源池、MySQL子资源池、RPC子资源池等等。此外,在一些示例,业务线程102可以根据外部请求中的类型字段从相应的子资源池中获取连接资源。
系统10的业务线程102可以从资源池101中获取各种连接资源(图中表示为“获取资源”),并且根据对连接资源的调用结果(亦即,根据是否能够正常使用该连接资源)将连接资源识别为正常连接资源和错误连接资源。其中,正常连接资源将被放回资源池101(图中表示为“放回资源”),而错误资源则会被放进出错资源队列103(图中表示为“资源出错,放入出错资源堆中”)。
系统10的出错资源队列103能够以关于调用测试时间的优先队列存放错误连接资源。换言之,出错资源队列103被构造成了优先队列,每个节点都存在优先级别,并且优先级别是根据节点所对应的连接资源的调用测试时间设定的。本文中的“调用测试时间”是指将出错资源队列103中那些过往存在错误的错误连接资源捞取出来进行测试的时间。由于对于不同的错误连接资源的测试需要在测试频率与效率之间取舍,因而调用测试时间可能在数百毫秒、数秒到数十秒之间不等。在出错资源队列103中,调用测试时间较小的错误连接资源将始终排在调用测试时间较大的错误连接资源之前,排在出错资源队列103最前面的始终是调用测试时间最小的错误连接资源,以此保证能够根据先后顺序来测试这些过往存在错误的错误连接资源。
系统10的清理线程104能够从出错资源队列103中捞出各个待处理的资源(图中表示为“捞出待处理资源”),并且可以根据调用测试时间对出错资源队列103中的错误连接资源进行连接测试,将通过连接测试的错误连接资源放回资源池101(图中表示为“正常资源放回资源池”)。由此,存在临时故障或不可访问的资源将在恢复服务后被重新放回资源池101供调用。清理线程104还将没有通过连接测试的错误连接资源在更新调用测试时间后重新插入到出错资源队列103中(图中未示出),并且将参与下个周期(亦即,更新后的调用测试时间计满)的连接测试。
在本申请的一些实施例中,出错资源队列103被构造为小根堆形式的优先队列。小根堆又称为最小堆,是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于其左子节点和右子节点的值。在本申请的一些实施例中,小根堆的每个节点用于存放一个错误连接资源,并且节点的key值为错误连接资源的调用测试时间、value值对应于错误连接资源。如图1所示,每个节点上表示的数值为节点的key值(例如,300ms、400ms、350ms等),并且节点按照key值构建出了小根堆。
在本申请的一些实施例中,清理线程104可通过访问小根堆的根节点来实现对各个节点的轮询。在访问到小根堆的根节点后,清理线程104将当前时间与根节点的key值作比较,如果根节点的key值大于(或者说晚于)当前时间则表明根节点所对应的错误连接资源的调用测试时间尚未计满,此时还不能执行测试。此时,由于根节点的调用测试时间是整个小根堆中最小的,因而也无必要再查询其他节点,可以退出对根节点和小根堆的访问。清理线程104可以在满足一定条件后(例如,等待若干毫秒后)再对小根堆的根节点进行访问,并且继续执行上文中描述的访问过程。
在本申请的一些实施例中,清理线程104还配置成在根节点的key值小于或者等于当前时间的情况下(此时表明根节点所对应的错误连接资源的调用测试时间已经计满)执行如下操作:首先,清理线程104可以指示删除根节点(亦即,从小根堆中提出根节点)并对小根堆进行再平衡。其次,可以根据根节点的value值进行连接测试。若根节点的value值所对应的错误连接资源能够通过连接测试,则表明原先存在故障或者暂时不可调用的资源已经恢复了正常,可以将其放回资源池101。
另一方面,在根节点的value值所对应的错误连接资源没有通过连接测试的情况下需要将节点重新赋值并插回小根堆中。具体而言,可以将根节点的key值更新为当前时间与测试间隔时间之和以形成更新节点(相对于原根节点而言更新了key值,新的key值为下一个周期的调用测试时间)。随后,可以将更新节点插入到再平衡后的小根堆中以更新小根堆。
在本申请的一些实施例中,系统10还可以支持使用资源池发起心跳。如图1所示,系统10还包括心跳任务队列105和心跳线程106。其中,与出错资源队列103类似,心跳任务队列105中以关于心跳数据发送时间的优先队列存放心跳任务,心跳任务用于按照心跳数据发送时间触发资源池101中的连接资源。换言之,心跳任务队列105被构造成了优先队列,每个节点都存在优先级别,并且优先级别是根据节点所对应的连接资源的心跳数据发送时间设定的。本文中的“心跳数据发送时间”是指将心跳任务队列105中那些心跳任务捞取出来以触发心跳动作的时间。由于对于不同的心跳任务的触发频率不同,心跳数据发送时间可能在数百毫秒、数秒到数十秒之间不等。在心跳任务队列105中,心跳数据发送时间较小的心跳任务将始终排在心跳数据发送时间较大的心跳任务之前,排在心跳任务队列105最前面的始终是心跳数据发送时间最小的心跳任务,以此保证能够根据先后顺序来触发这些心跳任务。
系统10的心跳线程106能够从心跳任务队列105中获取各个心跳任务,并且可以根据心跳数据发送时间执行心跳任务队列105中的心跳任务。
在本申请的一些实施例中,心跳任务队列105被构造为小根堆形式的优先队列。在本申请的一些示例中,小根堆的每个节点用于存放一个心跳任务,并且节点的key值为心跳任务的心跳数据发送时间、value值对应于心跳任务要触发的连接资源。如图1所示,每个节点上表示的数值为节点的key值(例如,200ms、400ms、350ms等)。
在本申请的一些实施例中,心跳线程106可通过访问小根堆的根节点来实现对各个节点的轮询。在访问到小根堆的根节点后,心跳线程106将当前时间与根节点的key值作比较。如果根节点的key值大于(晚于)当前时间则表明根节点所对应的心跳任务的心跳数据发送时间尚未计满,此时还不能执行心跳任务。此时,由于根节点的心跳数据发送时间是整个小根堆中最小的,因而也无必要再查询其他节点,可以退出对根节点和小根堆的访问。心跳线程106可以在满足一定条件后(例如,等待若干毫秒后)再对小根堆的根节点进行访问,并且继续执行上文中描述的访问过程。
在本申请的一些实施例中,心跳线程106还配置成在根节点的key值小于或者等于当前时间的情况下(此时表明根节点所对应的心跳任务的心跳数据发送时间已经计满)执行如下操作:首先,心跳线程106可以指示删除根节点并对小根堆作再平衡处理。其次,可以根据根节点的value值执行心跳任务。随后,可以将根节点的key值更新为当前时间与心跳间隔时间之和以形成更新节点(相对于原根节点而言更新了key值)。紧接着,可以将更新节点插入到再平衡后的小根堆中以更新小根堆。
根据本申请的另一方面,提供一种通信资源管理方法。如图2所示,通信资源管理方法20(以下简称方法20)包括如下步骤:在步骤S202中从资源池中获取连接资源并调用;在步骤S204中根据对连接资源的调用结果将其识别为正常连接资源和错误连接资源;以及在步骤S206中根据调用测试时间对出错资源队列中的错误连接资源进行连接测试。通过方法20的以上步骤可以实现处理复杂的多连接多超时时间场景,方法20的详细原理将在下文中介绍。
方法20在步骤S202中从资源池中获取连接资源并调用,其中资源池中存放有多个连接资源。在本申请的一些实施例中,资源池可以根据连接资源的类型初始化为多个子资源池,并且每个子资源池用于存放同一类型的连接资源。其中,根据可被调用的资源类型,子资源池可以为Redis子资源池、MySQL子资源池、RPC子资源池等等。在一些示例,在步骤S202中可以根据外部请求中的类型字段从相应的子资源池中获取连接资源。
方法20在步骤S204中可以从资源池中获取各种连接资源,并且可以根据对连接资源的调用结果(亦即,根据是否能够正常使用该连接资源)将连接资源识别为正常连接资源和错误连接资源,其中,正常连接资源将被放回资源池,而错误资源则会被放进出错资源队列。
方法20在步骤S206中根据调用测试时间对出错资源队列中的错误连接资源进行连接测试。出错资源队列能够以关于调用测试时间的优先队列存放错误连接资源。换言之,出错资源队列被构造成了优先队列,每个节点都存在优先级别,并且优先级别是根据节点所对应的连接资源的调用测试时间设定的。本文中的“调用测试时间”是指将出错资源队列中那些过往存在错误的错误连接资源捞取出来进行测试的时间。由于对于不同的错误连接资源的测试需要在测试频率与效率之间取舍,因而调用测试时间可能在数百毫秒、数秒到数十秒之间不等。在出错资源队列中,调用测试时间较小的错误连接资源将始终排在调用测试时间较大的错误连接资源之前,排在出错资源队列最前面的始终是调用测试时间最小的错误连接资源,以此保证能够根据先后顺序来测试这些过往存在错误的错误连接资源。
在步骤S206中,可以将通过连接测试的错误连接资源放回资源池,由此,存在临时故障或不可访问的资源将在恢复服务后被重新放回资源池供调用。在步骤S206中还可以将没有通过连接测试的错误连接资源在更新调用测试时间后重新插入到出错资源队列中,并且将参与下个周期(亦即,更新后的调用测试时间计满)的连接测试。
在本申请的一些实施例中,出错资源队列被构造为小根堆形式的优先队列。小根堆又称为最小堆,是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于其左子节点和右子节点的值。在本申请的一些实施例中,小根堆的每个节点用于存放一个错误连接资源,并且节点的key值为错误连接资源的调用测试时间、value值对应于错误连接资源。如图1所示,每个节点上表示的数值为节点的key值(例如,300ms、400ms、350ms等)。
在本申请的一些实施例中,在步骤S206中具体包括了如下步骤:首先,访问小根堆的根节点。随后,在访问到小根堆的根节点后,可以将当前时间与根节点的key值作比较。最后,可以在根节点的key值大于当前时间的情况下退出访问。如果根节点的key值大于当前时间则表明根节点所对应的错误连接资源的调用测试时间尚未计满,此时还不能执行测试。此时,由于根节点的调用测试时间是整个小根堆中最小的,因而也无必要再查询其他节点,可以退出对根节点和小根堆的访问。方法20可以在满足一定条件后(例如,等待若干毫秒后)再对小根堆的根节点进行访问,并且继续执行上文中描述的访问过程。
在本申请的一些实施例中,在步骤S206中,若判断所述根节点的key值小于或者等于所述当前时间(此时表明根节点所对应的错误连接资源的调用测试时间已经计满),则执行如下操作:删除根节点并对小根堆作再平衡处理;根据根节点的value值进行连接测试,其中,在根节点的value值所对应的错误连接资源通过连接测试的情况下(表明原先存在故障或者暂时不可调用的资源已经恢复了正常)将其放回资源池。
此外,在根节点的value值所对应的错误连接资源没有通过连接测试的情况下:将根节点的key值更新为当前时间与测试间隔时间之和以形成更新节点(相对于原根节点而言更新了key值);并且,将更新节点插入到再平衡后的小根堆中以更新小根堆。
在本申请的一些实施例中,方法20还可以支持使用资源池发起心跳。如图2所示,方法20还包括如下步骤:在步骤S208中可以在心跳任务队列中以关于心跳数据发送时间的优先队列存放心跳任务,其中心跳任务用于按照心跳数据发送时间触发资源池中的连接资源;和在步骤S210中根据心跳数据发送时间执行心跳任务队列中的心跳任务。
方法20在步骤S208中以关于心跳数据发送时间的优先队列存放心跳任务,心跳任务用于按照心跳数据发送时间触发资源池中的连接资源。换言之,心跳任务队列被构造成了优先队列,每个节点都存在优先级别,并且优先级别是根据节点所对应的连接资源的心跳数据发送时间设定的。本文中的“心跳数据发送时间”是指将心跳任务队列中那些心跳任务捞取出来以触发心跳的时间。由于对于不同的心跳任务的触发频率不同,心跳数据发送时间可能在数百毫秒、数秒到数十秒之间不等。在心跳任务队列中,心跳数据发送时间较小的心跳任务将始终排在心跳数据发送时间较大的心跳任务之前,排在心跳任务队列最前面的始终是心跳数据发送时间最小的心跳任务,以此保证能够根据先后顺序来触发这些心跳任务。
方法20在步骤S210中根据心跳数据发送时间执行心跳任务队列中的心跳任务。在本申请的一些实施例中,心跳任务队列被构造为小根堆形式的优先队列。在本申请的一些实施例中,小根堆的每个节点用于存放一个心跳任务,并且节点的key值为心跳任务的心跳数据发送时间、value值对应于心跳任务要触发的连接资源。如图1所示,每个节点上表示的数值为节点的key值(例如,200ms、400ms、350ms等)。
在本申请的一些实施例中,在步骤S210中根据心跳数据发送时间执行心跳任务队列中的心跳任务具体包括了如下过程:访问小根堆的根节点;将当前时间与根节点的key值作比较;以及在根节点的key值大于当前时间的情况下(表明根节点所对应的心跳任务的心跳数据发送时间尚未计满)退出访问。此时,由于根节点的心跳数据发送时间是整个小根堆中最小的,因而也无必要再查询其他节点,可以退出对根节点和小根堆的访问。方法20可以在满足一定条件后(例如,等待若干毫秒后)再对小根堆的根节点进行访问,并且继续执行上文中描述的访问过程。
在本申请的一些实施例中,在步骤S210中根据心跳数据发送时间执行心跳任务队列中的心跳任务还包括如下过程:在根节点的key值小于或者等于当前时间的情况下(此时表明根节点所对应的心跳任务的心跳数据发送时间已经计满)执行如下操作:删除根节点并对小根堆作再平衡处理;根据根节点的value值执行心跳任务,并且将根节点的key值更新为当前时间与心跳间隔时间之和以形成更新节点;并且,将更新节点插入到再平衡后的小根堆中以更新小根堆。
在本申请的一些实施例中,资源池被配置成根据连接资源的类型初始化为多个子资源池,并且每个子资源池用于存放同一类型的连接资源。
为更清晰说明本申请的原理,以下将结合实际使用场景加以描述。返回图1,系统10包括/执行以下实体/任务。
1. 连接资源及其初始化
(1)资源池初始化
通信资源池初始化时根据业务配置分为多个不同类型的子池,比如,Redis连接资源子池MySQL连接资源子池,RPC连接资源子池等。当业务线程需要获取资源时,根据请求中的类型字段可以从不同子池中获取指定类型的连接资源。
(2)心跳任务小根堆
在心跳线程初始化时维护一个心跳任务小根堆。资源池设计如图1所示,用于快速存取心跳事件节点,其key值为连接资源下次发心跳的绝对时间,是在节点初始化的时候当前时间加心跳间隔时间而来,value值包含连接资源的引用等,当心跳线程获取小根堆最顶层的节点之后与当前时间进行比较,如果发现已经超时则取出该节点,再平衡小根堆,处理该节点资源对应的心跳任务后,将该节点的key值修改为当前时间加上心跳间隔后,再插入到心跳任务小根堆中。实际上心跳任务小根堆中的节点个数是不会变化,与资源池中需要发心跳的资源个数保持一致。
(3)出错资源小根堆
业务线程和清理线程初始化维护一个小根堆。小根堆各个节点key值为需要被清理线程捞取的绝对时间,value值为对应的连接资源。当业务线程处理的业务中设计系统间调用时,则会从资源池中获取到相应资源,然后发起外部调用,如果资源连接成功则放回资源池中,否则生成一个小根堆节点,key值为当前时间加上待处理的超时时间,插入到出错资源小根堆中。
2. 资源出错处理
清理线程会轮询小根堆,当清理线程从小根堆中获取到根节点之后,通过节点中key值与当前时间进行比对,如果节点key值大于当前时间说明没有超时,则跳出本次循环,如果小于等于则说明该节点已经到达超时时间需要被处理。首先从小根堆上获取并删除该节点,然后再平衡小根堆,随后处理该节点上的资源。如果连接资源成功,则放回资源池中,如果连接失败则更新节点key重新插入到小根堆中,然后再继续处理下一个节点。该方式保证了每一个出错资源按照处理时间能够正常得到处理并尝试重连,避免业务线程无资源可用的情况。
根据本申请的另一方面,提供一种计算机可读存储介质,其中存储有指令,当所述指令由处理器执行时,使得所述处理器执行如上文所述的任意一种通信资源管理方法。本申请中所称的计算机可读介质包括各种类型的计算机存储介质,可以是通用或专用计算机能够存取的任何可用介质。举例而言,计算机可读介质可以包括RAM、ROM、EPROM、E2PROM、寄存器、硬盘、可移动盘、CD-ROM或其他光盘存储器、磁盘存储器或其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码单元并能够由通用或专用计算机、或者通用或专用处理器进行存取的任何其他临时性或者非临时性介质。如本文所使用的盘通常磁性地复制数据,而碟则用激光来光学地复制数据。上述的组合也应当包括在计算机可读介质的保护范围之内。示例性存储介质耦合到处理器以使得该处理器能从/向该存储介质读写信息。在替换方案中,存储介质可以被整合到处理器。处理器和存储介质可驻留在ASIC中。ASIC可驻留在用户终端中。在替换方案中,处理器和存储介质可作为分立组件驻留在用户终端中。
和传统的通信资源池机制相比,本申请以上实施例将具有如下至少一个优势:(1)支持心跳任务。心跳任务小根堆和出错资源小根堆相结合的资源池设计,能够将心跳任务和出错资源处理隔离,同时小根堆可以实现根据不同资源的不同心跳时间来发送心跳。(2)精确的出错资源处理时间控制。通过增加出错资源小根堆,可以实现将正常资源与异常资源隔离,同时支持不同异常资源的处理时间不同,比如数据库连接和普通服务调用对于出错资源的重连处理时间要求可能就不同。
本申请是参照根据本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此。本领域的技术人员可以根据本申请所披露的技术范围想到其他可行的变化或替换,此等变化或替换皆涵盖于本申请的保护范围之中。在不冲突的情况下,本申请的实施方式及实施方式中的特征还可以相互组合。本申请的保护范围以权利要求的记载为准。
Claims (27)
1.一种通信资源管理系统,其特征在于,所述系统包括:
资源池,其中存放有多个连接资源;
业务线程,其配置成从所述资源池中获取连接资源,并且根据对连接资源的调用结果将其识别为正常连接资源和错误连接资源,其中,所述正常连接资源将被放回所述资源池;
出错资源队列,其配置成以关于调用测试时间的优先队列存放所述错误连接资源,其中在所述出错资源队列中,调用测试时间较小的错误连接资源排在调用测试时间较大的错误连接资源之前;以及
清理线程,其配置成根据所述调用测试时间对所述出错资源队列中的错误连接资源进行连接测试,并且将通过所述连接测试的错误连接资源放回所述资源池,将没有通过所述连接测试的错误连接资源在更新调用测试时间后重新插入到所述出错资源队列中,其中所述调用测试时间是指将出错资源队列中那些过往存在错误的错误连接资源捞取出来进行测试的时间。
2.根据权利要求1所述的系统,其中,所述出错资源队列被构造为小根堆形式的优先队列。
3.根据权利要求2所述的系统,其中,所述小根堆的每个节点用于存放一个错误连接资源,并且节点的key值为所述错误连接资源的调用测试时间、value值对应于所述错误连接资源。
4.根据权利要求3所述的系统,其中,所述清理线程被配置成:
访问所述小根堆的根节点;
将当前时间与所述根节点的key值作比较;以及
在所述根节点的key值大于所述当前时间的情况下退出访问。
5.根据权利要求4所述的系统,其中,所述清理线程还配置成在所述根节点的key值小于或者等于所述当前时间的情况下:
删除所述根节点并对所述小根堆作再平衡处理;
根据所述根节点的value值进行所述连接测试,其中,在所述根节点的value值所对应的错误连接资源通过所述连接测试的情况下将其放回所述资源池;以及
在所述根节点的value值所对应的错误连接资源没有通过所述连接测试的情况下:将所述根节点的key值更新为当前时间与测试间隔时间之和以形成更新节点;并且,将所述更新节点插入到再平衡后的小根堆中以更新所述小根堆。
6.根据权利要求1所述的系统,其中,所述系统还包括:
心跳任务队列,其配置成以关于心跳数据发送时间的优先队列存放心跳任务,其中所述心跳任务用于按照所述心跳数据发送时间触发所述资源池中的连接资源;和
心跳线程,其配置成根据所述心跳数据发送时间执行所述心跳任务队列中的心跳任务。
7.根据权利要求6所述的系统,其中,所述心跳任务队列被构造为小根堆形式的优先队列。
8.根据权利要求7所述的系统,其中,所述小根堆的每个节点用于存放一个心跳任务,并且节点的key值为所述心跳任务的心跳数据发送时间、value值对应于所述心跳任务要触发的连接资源。
9.根据权利要求8所述的系统,其中,所述心跳线程被配置成:
访问所述小根堆的根节点;
将当前时间与所述根节点的key值作比较;以及
在所述根节点的key值大于所述当前时间的情况下退出访问。
10.根据权利要求9所述的系统,其中,所述心跳线程还配置成在所述根节点的key值小于或者等于所述当前时间的情况下:
删除所述根节点并对所述小根堆作再平衡处理;
根据所述根节点的value值执行所述心跳任务,并且将所述根节点的key值更新为当前时间与心跳间隔时间之和以形成更新节点;并且,将所述更新节点插入到再平衡后的小根堆中以更新所述小根堆。
11.根据权利要求1所述的系统,其中,所述资源池被配置成根据连接资源的类型初始化为多个子资源池,并且每个子资源池用于存放同一类型的连接资源。
12.根据权利要求11所述的系统,其中,所述子资源池为Redis子资源池、MySQL子资源池或RPC子资源池。
13.根据权利要求11所述的系统,其中,所述业务线程被配置成根据外部请求中的类型字段从相应的子资源池中获取连接资源。
14.一种通信资源管理方法,其特征在于,所述方法包括:
从资源池中获取连接资源并调用,其中所述资源池中存放有多个连接资源;
根据对连接资源的调用结果将其识别为正常连接资源和错误连接资源,其中,所述正常连接资源将被放回所述资源池;以及
根据调用测试时间对出错资源队列中的错误连接资源进行连接测试:将通过所述连接测试的错误连接资源放回所述资源池,并且将没有通过所述连接测试的错误连接资源在更新调用测试时间后重新插入到所述出错资源队列中;其中,
所述出错资源队列以关于所述调用测试时间的优先队列存放所述错误连接资源,其中在所述出错资源队列中,调用测试时间较小的错误连接资源排在调用测试时间较大的错误连接资源之前,以及其中所述调用测试时间是指将出错资源队列中那些过往存在错误的错误连接资源捞取出来进行测试的时间。
15.根据权利要求14所述的方法,其中,所述出错资源队列被构造为小根堆形式的优先队列。
16.根据权利要求15所述的方法,其中,所述小根堆的每个节点用于存放一个错误连接资源,并且节点的key值为所述错误连接资源的调用测试时间、value值对应于所述错误连接资源。
17.根据权利要求16所述的方法,其中,根据调用测试时间对出错资源队列中的错误连接资源进行连接测试包括:
访问所述小根堆的根节点;
将当前时间与所述根节点的key值作比较;以及
在所述根节点的key值大于所述当前时间的情况下退出访问。
18.根据权利要求17所述的方法,其中,根据调用测试时间对出错资源队列中的错误连接资源进行连接测试还包括:
在所述根节点的key值小于或者等于所述当前时间的情况下:
删除所述根节点并对所述小根堆作再平衡处理;
根据所述根节点的value值进行所述连接测试,其中,在所述根节点的value值所对应的错误连接资源通过所述连接测试的情况下将其放回所述资源池;以及
在所述根节点的value值所对应的错误连接资源没有通过所述连接测试的情况下:将所述根节点的key值更新为当前时间与测试间隔时间之和以形成更新节点;并且,将所述更新节点插入到再平衡后的小根堆中以更新所述小根堆。
19.根据权利要求14所述的方法,其中,所述方法还包括:
在心跳任务队列中以关于心跳数据发送时间的优先队列存放心跳任务,其中所述心跳任务用于按照所述心跳数据发送时间触发所述资源池中的连接资源;和
根据所述心跳数据发送时间执行所述心跳任务队列中的心跳任务。
20.根据权利要求19所述的方法,其中,所述心跳任务队列被构造为小根堆形式的优先队列。
21.根据权利要求20所述的方法,其中,所述小根堆的每个节点用于存放一个心跳任务,并且节点的key值为所述心跳任务的心跳数据发送时间、value值对应于所述心跳任务要触发的连接资源。
22.根据权利要求21所述的方法,其中,根据所述心跳数据发送时间执行所述心跳任务队列中的心跳任务包括:
访问所述小根堆的根节点;
将当前时间与所述根节点的key值作比较;以及
在所述根节点的key值大于所述当前时间的情况下退出访问。
23.根据权利要求22所述的方法,其中,根据所述心跳数据发送时间执行所述心跳任务队列中的心跳任务还包括:
在所述根节点的key值小于或者等于所述当前时间的情况下:
删除所述根节点并对所述小根堆作再平衡处理;
根据所述根节点的value值执行所述心跳任务,并且将所述根节点的key值更新为当前时间与心跳间隔时间之和以形成更新节点;并且,将所述更新节点插入到再平衡后的小根堆中以更新所述小根堆。
24.根据权利要求14所述的方法,其中,所述资源池被配置成根据连接资源的类型初始化为多个子资源池,并且每个子资源池用于存放同一类型的连接资源。
25.根据权利要求24所述的方法,其中,所述子资源池为Redis子资源池、MySQL子资源池或RPC子资源池。
26.根据权利要求24所述的方法,其中,从所述资源池中获取连接资源并调用包括:根据外部请求中的类型字段从相应的子资源池中获取连接资源。
27.一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,其特征在于,当所述指令由处理器执行时,使得所述处理器执行如权利要求14-26中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210999339.1A CN115801889B (zh) | 2022-08-19 | 通信资源管理系统和方法、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210999339.1A CN115801889B (zh) | 2022-08-19 | 通信资源管理系统和方法、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115801889A CN115801889A (zh) | 2023-03-14 |
CN115801889B true CN115801889B (zh) | 2024-07-12 |
Family
ID=
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102020112050A1 (de) * | 2019-05-17 | 2021-02-18 | Intel Corporation | Verfahren, Computerprogramme und Vorrichtungen zur Konfiguration von Zeitressourcen und zur Bestimmung von Latenzzeiten, Zentraleinheit, Teileinheit und Infrastrukturknoten |
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102020112050A1 (de) * | 2019-05-17 | 2021-02-18 | Intel Corporation | Verfahren, Computerprogramme und Vorrichtungen zur Konfiguration von Zeitressourcen und zur Bestimmung von Latenzzeiten, Zentraleinheit, Teileinheit und Infrastrukturknoten |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7698602B2 (en) | Systems, methods and computer products for trace capability per work unit | |
US10338958B1 (en) | Stream adapter for batch-oriented processing frameworks | |
US7747717B2 (en) | Fast application notification in a clustered computing system | |
CN107016480B (zh) | 任务调度方法、装置及系统 | |
US6961865B1 (en) | Techniques for resuming a transaction after an error | |
US20060167921A1 (en) | System and method using a distributed lock manager for notification of status changes in cluster processes | |
US7093237B2 (en) | High performance debugging in a message flow environment | |
CN111324423B (zh) | 容器内进程的监控方法、装置、存储介质和计算机设备 | |
KR102445871B1 (ko) | 병렬로 애플리케이션 서버를 부팅하기 위한 시스템 및 방법 | |
CN112817710A (zh) | 定时任务处理方法、系统、计算机设备及计算机存储介质 | |
US20070088871A1 (en) | Implementation of shared and persistent job queues | |
CN111708793A (zh) | 一种分布式应用锁实现方法及装置 | |
CN115801889B (zh) | 通信资源管理系统和方法、存储介质 | |
CN112598529B (zh) | 数据处理方法及装置、计算机可读存储介质、电子设备 | |
CN105550028A (zh) | 一种基于缓存锁的多任务时序执行方法及系统 | |
CN111913804A (zh) | 访前报告的生成方法、装置、电子设备及存储介质 | |
US7171410B1 (en) | Fault tolerant network element | |
CN115801889A (zh) | 通信资源管理系统和方法、存储介质 | |
CN115756769A (zh) | 任务执行方法、装置和电子设备 | |
CN115373886A (zh) | 服务群组容器停机方法、装置、计算机设备和存储介质 | |
KR101692964B1 (ko) | 프로비저닝 장치 및 그 방법 | |
CN112130900B (zh) | 一种bmc的用户信息管理方法、系统、设备以及介质 | |
CN112685142A (zh) | 分布式数据处理系统 | |
CN111930475B (zh) | 启动ett运行的方法及装置 | |
CN112732453B (zh) | 跨线程消息处理方法、装置、系统和计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |