CN113765817A - 上游系统限流方法和装置 - Google Patents
上游系统限流方法和装置 Download PDFInfo
- Publication number
- CN113765817A CN113765817A CN202011310371.1A CN202011310371A CN113765817A CN 113765817 A CN113765817 A CN 113765817A CN 202011310371 A CN202011310371 A CN 202011310371A CN 113765817 A CN113765817 A CN 113765817A
- Authority
- CN
- China
- Prior art keywords
- upstream
- started
- quota
- server
- downstream
- 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
- 238000011144 upstream manufacturing Methods 0.000 title claims abstract description 449
- 238000000034 method Methods 0.000 title claims abstract description 45
- 238000012545 processing Methods 0.000 claims abstract description 56
- 230000005540 biological transmission Effects 0.000 claims description 29
- 238000012544 monitoring process Methods 0.000 claims description 16
- 238000004891 communication Methods 0.000 claims description 4
- 238000004590 computer program Methods 0.000 claims description 4
- 230000007423 decrease Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000006424 Flood reaction Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/20—Traffic policing
-
- 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/141—Setup of application sessions
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了一种上游系统限流方法和装置,包括:限流器实时监测当前是否发生预设的限额配置触发事件;所述限额配置触发事件包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化;当发生所述限额配置触发事件,且当前至少一台上游服务器已启动时,所述限流器根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器,确定最大请求发送限额并通知上游服务器;所述上游服务器根据所述通知,在本地创建线程池;所述线程池支持的最大线程数为所述最大请求发送限额;当前已启动的每台上游服务器,利用本地最新创建的线程池,请求所述下游系统。采用本发明,可以提高请求成功率。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种上游系统限流方法和装置。
背景技术
限流机制是一种用于对流入系统的请求量进行限制的机制,以保证在任何时候进入系统的请求量都是可控的,即不能超过系统预设的最大流量值,超过则需要排队等待或者直接拒绝,从而避免高并发流量全部涌入系统,导致超出了系统的处理能力而出现系统机器宕机和服务不可用问题。
目前,常用的限流方案主要有包括计数器方法、漏桶方法和令牌桶方法。
其中,在计数器方法中,是限制一秒内请求的数量,在每一秒内,当累加的请求数量达到了限额后,会拒绝之后的请求。
在漏桶方法中,不管服务调用多么不稳定,都会通过漏桶算法进行限流,每10ms处理一次请求。因为处理的速度是固定的,请求进来的速度是未知的,可能突然进来很多请求,没时间处理的就先放在桶里,当桶满时就直接丢弃。
在令牌桶方案中,使用一个桶,来存放固定数量的令牌,按照一定的速度往桶里面放令牌,每次请求必须要先获取令牌,只有拿到令牌,才有机会继续执行,否则等待可用的令牌。放置令牌这个动作是持续不断进行的,如果令牌达到上线,就丢弃令牌。初始状态桶中就有大量可用的令牌,这时进来的请求可以直接拿到令牌执行。如果桶中没有令牌,就会等待,相当于以一定的速率进行执行。
在实现本发明的过程中,发明人发现上述现有的限流方案容易导致请求失败,具体原因如下:
上述限流方案是采用对下游系统进行限流的方式实现。其中,下游系统即请求的目标系统,上游系统即请求的发起方。例如,如果A系统请求调用B系统的某一项功能,则A系统为上游系统,B系统为下游系统。上述限流方案由于是在下游系统进行限流,使得只能控制下游系统对请求的处理速度,而无法控制上游系统的请求发起量,这样,当下游系统收到的请求超过其处理能力时,就会被丢弃或等待,这样,当下游系统整体发起的请求数量较大时,就会出现服务端带宽占满,进而大量请求因超时而被丢失,从而导致上游系统无法请求到下游系统。
另外,由于现有限流方案是在下游系统实现限流,使得只能将所有上游系统的请求作为整体进行限流处理,而不能区分不同的上游系统系统分别限流,从而使得如果某个上游系统的请求量很大而导致服务端带宽占满,就会导致其他上游系统无法请求到下游系统,从而导致限流的不公平性。
发明内容
有鉴于此,本发明的主要目的在于提供一种上游系统限流方法和装置,该方法可以提高上游系统请求的成功率。
为了达到上述目的,本发明实施例提出的技术方案为:
一种上游系统限流方法,包括:
限流器实时监测当前是否发生预设的限额配置触发事件;所述限额配置触发事件包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化;
当发生所述限额配置触发事件,且当前至少一台上游服务器已启动时,所述限流器根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器,确定最大请求发送限额并通知上游服务器;所述上游服务器根据所述通知,在本地创建线程池;所述线程池支持的最大线程数为所述通知的最大请求发送限额;
当前已启动的每台上游服务器,利用本地最新创建的线程池,请求所述下游系统。
较佳地,所述限额配置触发事件进一步包括:所述上游系统的发送限额占比发生变化。
较佳地,当所述下游系统中已启动的下游服务器数量发生变化,且当前至少一台上游服务器已启动时,所述为当前已启动的相应上游服务器,确定最大请求发送限额包括:
将当前已启动的所有下游服务器各自支持的最大请求处理限额累加,得到当前所述下游系统的最大请求处理限额Smax;
对于每个所述上游系统,将所述Smax与当前该上游系统的发送限额占比相乘,得到当前该上游系统的最大请求发送限额;如果该上游系统中存在已启动的上游服务器,则根据当前该上游系统的最大请求发送限额和当前该上游系统中已启动的上游服务器数量,确定当前该上游系统中已启动的每台上游服务器的最大请求发送限额。
较佳地,当任一所述上游系统中已启动的上游服务器数量发生变化,且当前至少一台上游服务器已启动时,所述为当前已启动的相应上游服务器,确定最大请求发送限额包括:
对于每个所述上游系统,如果当前该上游系统中已启动的上游服务器数量发生变化,则根据当前该上游系统的最大请求发送限额和当前该上游系统中已启动的上游服务器数量,确定当前该上游系统中已启动的每台上游服务器的最大请求发送限额;其中,当前该上游系统的最大请求发送限额为当前该上游系统的发送限额占比与当前已启动的所有下游服务器的最大请求处理限额的累加值的乘积。
较佳地,当所述上游系统的发送限额占比发生变化,且当前至少一台上游服务器已启动时,所述为当前已启动的相应上游服务器,确定最大请求发送限额包括:
对于发送限额占比发生变化的每个所述上游系统,将该上游系统当前的发送限额占比与当前所述下游系统的最大请求处理限额相乘,得到该上游系统的最大请求发送限额;如果该上游系统中存在已启动的上游服务器,则根据当前该上游系统的最大请求发送限额和当前该上游系统中已启动的上游服务器数量,确定当前该上游系统中已启动的每台上游服务器的最大请求发送限额。
较佳地,所述确定当前该上游系统中已启动的每台上游服务器的最大请求发送限额包括:
将当前上游系统Gi的最大请求发送限额与上游系统Gi中当前已启动的上游服务器数量相除;
根据所述相除的结果,生成上游系统Gi中已启动的每个上游服务器的最大请求发送限额。
较佳地,根据所述相除的结果,确定上游系统Gi中已启动的每个上游服务器的最大请求发送限额包括:
如果d=0,则将所述上游系统Gi中当前已启动的每个上游服务器的最大请求发送限额确定为所述相除的结果;d为所述相除的余数;
如果d≠0,则对于所述上游系统Gi中当前已启动的上游服务器,将其中前d个启动的上游服务器的最大请求发送限额,确定为对所述相除的结果进行向上取整的结果,将其中除所述前d个启动的上游服务器之外的其他上游服务器的最大请求发送限额,确定为对所述相除的结果进行向下取整的结果。
较佳地,所述方法进一步包括:
当一个以上所述上游系统的发送限额占比需要增加时,所述限流器在执行所述增加的同时,相应地减少其他所述上游系统的发送限额占比;其中,所述减少的发送限额占比总量与所述增加的发送限额占比总量相同。
较佳地,所述方法进一步包括:
当所述下游系统的下游服务器启动时,与所述限流器建立长连接;
当所述上游系统的上游服务器启动时,与所述限流器建立长连接;
所述限流器根据所述长连接的连通状态,获得相应的下游服务器或上游服务器的实时运行状态。
较佳地,所述方法进一步包括:
当所述下游系统中已启动的下游服务器数量降低至零时,所述限流器通知当前已启动的所有所述上游服务器禁止请求所述下游系统。
较佳地,所述方法进一步包括:
当所述下游系统中的下游服务器启动时,如果当前不存在已启动的上游服务器,则所述限流器将当前已启动的所有下游服务器各自支持的最大请求处理限额累加,得到当前所述下游系统的最大请求处理限额Smax;
对于每个所述上游系统,所述限流器将所述Smax与当前该上游系统的发送限额占比相乘,得到当前该上游系统的最大请求发送限额;
当所述上游系统的发送限额占比发生变化时,如果当前不存在已启动的上游服务器,则对于每个所述上游系统,所述限流器将当前所述下游系统的最大请求处理限额与当前该上游系统的发送限额占比相乘,得到当前该上游系统的最大请求发送限额。
本发明实施例还公开了一种上游系统限流装置,设置于限流器中,包括:
事件监测模块,用于实时监测当前是否发生预设的限额配置触发事件;所述限额配置触发事件包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化;
限流控制模块,用于当监测到当前发生预设的限额配置触发事件,且当前至少一台上游服务器已启动时,根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器,确定最大请求发送限额并通知上游服务器,以触发所述上游服务器根据所述通知,在上游服务器本地首次创建或重新创建用于请求所述下游系统的线程池;所述线程池支持的最大线程数为所述通知的最大请求发送限额。
本发明实施例还公开了一种电子设备,包括处理器、存储器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
实时监测当前是否发生预设的限额配置触发事件;所述限额配置触发事件包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化;
当监测到发生所述限额配置触发事件,且当前至少一台上游服务器已启动时,根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器配置最大请求发送限额,以触发所述上游服务器根据所述配置,在上游服务器本地首次创建或重新创建用于请求所述下游系统的线程池;所述线程池支持的最大线程数为所述通知的最大请求发送限额。
本发明实施例还公开了一种计算机可读存储介质,其中存储有计算机可读指令,该计算机可读指令被处理器执行时,实现以下步骤:
实时监测当前是否发生预设的限额配置触发事件;所述限额配置触发事件包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化;
当监测到发生所述限额配置触发事件,且当前至少一台上游服务器已启动时,根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器,确定最大请求发送限额并通知上游服务器,以触发所述上游服务器根据所述通知,在上游服务器本地首次创建或重新创建用于请求所述下游系统的线程池;所述线程池支持的最大线程数为所述通知的最大请求发送限额。
由上述技术方案可见,本发明提出的上游系统限流方法和装置,实时监测预设的限额配置触发事件是否发生,并在事件发生时,根据当前下游系统支持的最大请求处理能力,对当前已启动的相应上游服务器的最大请求发送限额进行设置或更新,触发上游服务器对用于请求下游系统的线程池进行首次创建或重新创建,如此,实现了在下游系统支持的最大请求处理能力范围内对上游系统的动态限流,使得上游系统的请求量不会超过下游系统的处理能力,从而避免了上游系统带宽被占满的情况发生,进而可以避免由于请求超时而在上游系统被丢弃导致请求失败,因此可以有效提高请求成功率,避免了上游系统带宽资源的浪费。
附图说明
图1为本发明实施例的上游系统限流方法流程示意图;
图2为本发明实施例在场景一的实现示意图;
图3为本发明实施例在场景二的实现示意图;
图4为本发明实施例在场景三的实现示意图;
图5为本发明实施例在场景四的实现示意图;
图6为本发明实施例在场景五的实现示意图;
图7为本发明实施例在场景六的实现示意图;
图8为根据本发明实施例的上游系统限流装置的结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
图1为本发明实施例的上游系统限流方法流程示意图,如图1所示,该实施例实现的上游系统限流方法主要包括:
步骤101、限流器实时监测当前是否发生预设的限额配置触发事件。
本步骤中,用于对预设的限额配置触发事件进行实时监测,以根据实时发生的这些事件,实现上游系统的动态限流。
所述限额配置触发事件具体包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化。这样,可以在下游系统支持的最大请求处理能力发生变化时,或者上游系统的请求需求量发生变化时,及时地调整上游系统各服务器的请求限额,以较好地实现上游系统的动态限流。
在实际应用中,为了避免由于个别上游系统的大量请求,占用了大量的请求资源,而影响其他上游系统对下游系统的请求,在一个实施方式中,限流器可以为每个上游系统配置发送限额占比,通过为每个上游系统分别进行限流,以保障限流的公平性。相应地,本步骤中,限流器可以进一步对上游系统的发送限额占比发生变化进行监测,在发生该事件时,触发为当前已启动的上游服务器,更新最大请求发送限额。
所述限额配置触发事件可以进一步包括:所述上游系统的发送限额占比发生变化。
在一个实施方式中,为了提高限流效率,节约资源开销,限流器可以通过对上下流服务器与自身的连接状态,获知下游服务器或上游服务器的实时运行状态,进而可以实时监测到限额配置触发事件是否发生。具体地,可以进一步采用下述技术手段实现上述效果:
当所述下游系统的下游服务器启动时,与所述限流器建立长连接;
当所述上游系统的上游服务器启动时,与所述限流器建立长连接;
所述限流器根据所述长连接的连通状态,获得相应的下游服务器或上游服务器的实时运行状态。
在实际应用中,并不限于采用建立长连接的方式监测下游服务器或上游服务器的实时运行状态,还可以采用其他方法进行所述监测,例如心跳方法等。
步骤102、当发生所述限额配置触发事件,且当前至少一台上游服务器已启动时,所述限流器根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器,确定最大请求发送限额并通知上游服务器;所述上游服务器根据所述通知,在本地创建线程池;所述线程池支持的最大线程数为所述通知的最大请求发送限额。
本步骤中,当步骤101中的任一限额配置触发事件发生时,且当前已有上游服务器启动,需要对已启动的上游服务器的最大请求发送限额进行及时调整,以确保限流与实际的运行环境相匹配,进而既能获得较好的限流效果,又能充分利用带宽资源和系统处理资源。
下面分别针对上述每个事件的发生,对本步骤中确定最大请求发送限额的具体实现进行说明:
在一个实施方式中,当所述下游系统中已启动的下游服务器数量发生变化,且当前至少一台上游服务器已启动时,可以采用下述方法为当前已启动的相应上游服务器,确定最大请求发送限额:
将当前已启动的所有下游服务器各自支持的最大请求处理限额累加,得到当前所述下游系统的最大请求处理限额Smax;
对于每个所述上游系统,将所述Smax与当前该上游系统的发送限额占比相乘,得到当前该上游系统的最大请求发送限额;如果该上游系统中存在已启动的上游服务器,则根据当前该上游系统的最大请求发送限额和当前该上游系统中已启动的上游服务器数量,确定当前该上游系统中已启动的每台上游服务器的最大请求发送限额。
在一个实施方式中,当任一所述上游系统中已启动的上游服务器数量发生变化,且当前至少一台上游服务器已启动时,可以采用下述方法为当前已启动的相应上游服务器,确定最大请求发送限额:
对于每个所述上游系统,如果当前该上游系统中已启动的上游服务器数量发生变化,则根据当前该上游系统的最大请求发送限额和当前该上游系统中已启动的上游服务器数量,确定当前该上游系统中已启动的每台上游服务器的最大请求发送限额;其中,当前该上游系统的最大请求发送限额为当前该上游系统的发送限额占比与当前已启动的所有下游服务器的最大请求处理限额的累加值的乘积。
在一个实施方式中,当所述上游系统的发送限额占比发生变化,且当前至少一台上游服务器已启动时,可以采用下述方法为为当前已启动的相应上游服务器,确定最大请求发送限额:
对于发送限额占比发生变化的每个所述上游系统,将该上游系统当前的发送限额占比与当前所述下游系统的最大请求处理限额相乘,得到该上游系统的最大请求发送限额;如果该上游系统中存在已启动的上游服务器,则根据当前该上游系统的最大请求发送限额和当前该上游系统中已启动的上游服务器数量,确定当前该上游系统中已启动的每台上游服务器的最大请求发送限额。
在上述几种实施方式中,具体可以采用下述方法确定当前上游系统中已启动的每台上游服务器的最大请求发送限额:
将当前上游系统Gi的最大请求发送限额与上游系统Gi中当前已启动的上游服务器数量相除;根据所述相除的结果,生成上游系统Gi中已启动的每个上游服务器的最大请求发送限额。
进一步地,为了避免上游系统Gi中所有上游服务器的最大请求发送限额累加值大于上游系统Gi中的最大请求发送限额,同时又能充分利用上游系统Gi中的最大请求发送限额,上述方法中可以利用下述方法根据所述相除的结果,确定上游系统Gi中已启动的每个上游服务器的最大请求发送限额:
如果d=0,则将所述上游系统Gi中当前已启动的每个上游服务器的最大请求发送限额确定为所述相除的结果;d为所述相除的余数;
如果d≠0,则对于所述上游系统Gi中当前已启动的上游服务器,将其中前d个启动的上游服务器的最大请求发送限额,确定为对所述相除的结果进行向上取整的结果,将其中除所述前d个启动的上游服务器之外的其他上游服务器的最大请求发送限额,确定为对所述相除的结果进行向下取整的结果。
步骤103、当前已启动的每台上游服务器,利用本地最新创建的线程池,请求所述下游系统。
本步骤中,上游系统中已启动的每台上游服务器,在需要请求下游系统时,需要从本地最新创建的线程池中获取用于请求的线程,如此,由于线程池中的线程数量是上游服务器的最大请求发送限额,因此,可以有效控制上游服务器发起请求的数量不会超过下游系统的处理能力,从而可以避免下游带宽被占满,进而可以避免请求因为超时而丢弃,从而提高请求的成功率、减少对下游系统的请求时延。
在一个实施方式中,可以根据实际各上游系统的业务需要对上游系统的发送限额占比进行动态调整,为此,上述实施例可以进一步包括:
当一个以上所述上游系统的发送限额占比需要增加时,所述限流器在执行所述增加的同时,相应地减少其他所述上游系统的发送限额占比;其中,所述减少的发送限额占比总量与所述增加的发送限额占比总量相同。
在一个实施方式中,在没有已启动的下游服务器时,可以通知各已启动的上游服务器停止发起请求下游系统,以避免无效的请求操作,具体地可以采用下述步骤实现:
当所述下游系统中已启动的下游服务器数量降低至零时,所述限流器通知当前已启动的所有所述上游服务器禁止请求所述下游系统。
在一个实施方式中,为了提高限流效率,在下游服务器启动时,即使当前不存在已启动的上游服务器,也对上游系统的最大请求发送限额进行调整,以使得限流器中保存的上游系统的最大请求发送限额与实际的下游系统的请求支持能力相匹配。这样,当此后有上游服务器启动时,可以直接利用当前保存的相应上游系统的最大请求发送限额,为其配置最大请求发送限额即可,而不需要再计算,从而可以提高限流的整体效率。具体方法如下:
当所述下游系统中的下游服务器启动时,如果当前不存在已启动的上游服务器,则所述限流器将当前已启动的所有下游服务器各自支持的最大请求处理限额累加,得到当前所述下游系统的最大请求处理限额Smax;
对于每个所述上游系统,所述限流器将所述Smax与当前该上游系统的发送限额占比相乘,得到当前该上游系统的最大请求发送限额;
当所述上游系统的发送限额占比发生变化时,如果当前不存在已启动的上游服务器,则对于每个所述上游系统,所述限流器将当前所述下游系统的最大请求处理限额与当前该上游系统的发送限额占比相乘,得到当前该上游系统的最大请求发送限额。
下面分别通过首个上、下游服务器启动、启动的上、下游服务器数量增加,启动的上、下游服务器关闭以及上游系统的发送限额占比调整等场景,对上述实施例的具体实现进行说明:
假设:上游系统包括上游系统A和上游系统B,在限流器中初始配置上游系统A的发送限额占比50%,上游系统B的发送限额占比50%。
场景一:首个下游服务器(机器1)启动,如图2所示。
简述:下游系统机器1启动成功后与限流器创建长连接,同时发送机器1支持最大请求限额。
暂定每台机器默认支持同时200个请求。
限流器记录机器1的最大请求处理限额200。
同时,计算上游系统A最大请求发送限额为100。具体地,根据限流器初始化上游系统A的发送限额占比计算得到;上游系统B最大请求发送限额为100,即根据限流器初始化上游系统B的发送限额占比计算得到。
场景二:首个上游服务器(机器1)启动,如图3所示。
简述:上游系统机器1启动成功后与限流器创建长连接。
限流器根据上游系统A长连接数(即已启动的上游服务器),计算给每个连接的上游机器下发的最大请求发送限额。
上游机器的最大请求发送限额的具体计算方法:
将上游系统A的最大请求发送限额与上游系统A的长连接数相除;
余数为0,上游机器的最大请求发送限额为上游系统A的最大请求发送限额与上游系统A的长连接数相除结果;
余数不为0,按照(上游系统A的最大请求发送限额-余数)÷上游系统A长连接数,得到系统A中每个上游机器的最大请求发送平均限额。按照上游系统A与限流器创建连接顺序,依次遍历系统A中每个已启动的上游机器,将该上游机器的最大请求发送平均限额进行加1,得到该上游机器的最大请求发送限额,同时余数减1,继续遍历下一上游机器,直到余数0为止。
上游系统A机器1得到限流器下发的最大请求发送限额100。具体地,按照100(即上游系统A最大请求发送限额)×1(即长连接数)得到。
上游系统A机器1根据其最大请求发送限额,创建自定义线程池(最大支持线程为机器1的最大请求发送限额),上游系统A机器1通过该线程池请求下游系统。
场景三:启动的下游服务器数量增加,如图4所示。
简述:在下游系统中机器1已启动的情况下,机器2启动,启动成功后与限流器创建长连接,同时发送机器2支持的最大请求处理限额。
限流器将上游系统的机器1和2支持的最大请求处理限额相加,得到下游系统最大支持请求数为400。计算限流器给上游系统A每个机器下发限额为200。具体地,按照400(下游系统的最大请求处理限额)×50%(上游系统A发送限额占比)÷1(上游系统A连接数)得到。
上游系统A中机器1接收到限流器下发的最大请求发送限额,生成自定义线程池最大线程数200。此后,上游系统A中机器1通过该线程池请求下游系统。
场景四:启动的上游服务器数量增加,如图5所示。
简述:在上游系统中机器1已启动的情况下,上游机器2启动,启动成功后与限流器创建长连接。
限流器根据上游A系统的长连接数,计算给每一个连接对应的上游机器下发的最大请求发送限额。
计算限流器给上游系统A中每个机器下发的最大请求发送限额为100。具体地,按照400(下游系统最大支持请求数)×50%(上游A系统发送限额占比)÷2(上游A系统连接数)得到。
上游系统A中机器1、机器2接收到限流器下发最大请求发送限额,生成自定义线程池最大线程数100。通过线程池请求下游系统。
场景五:启动的下游服务器关闭,如图6所示。
简述:场景四中的下游机器2关闭。
当前的下游系统的最大请求处理限额更新为原限流器下游系统的最大请求处理限额-下游机器2支持的最大请求处理限额=200。
限流器根据上游A系统长连接数,计算给每一个连接对应的上游机器下发的最大请求发送限额。
计算限流器给上游系统A每个机器下发最大请求发送限额为50。具体地,按照200(下游系统的最大请求处理限额)×50%(上游系统A的发送限额占比)÷2(上游系统A的连接数),计算得到。
上游系统A的机器1和机器2在接收到限流器下发的最大请求发送限额之后,生成自定义线程池最大线程数50,通过该线程池请求下游系统。
如果下游系统的机器全部关闭,即没有与限流器建立连接的下游机器,则限流器给上游系统的机器下发禁止请求下游系统的通知。上游机器将会根据该通知不会请求下游系统。
场景六:启动的上游服务器关闭,如图7所示。
简述:场景五中的上游机器2关闭。限流器根据上游A系统长连接数计算,给每一个连接的上游机器下发最大请求发送限额。
重新计算限流器给上游系统A中每个已启动机器下发的最大请求发送限额为100。具体地,按照200(下游系统的最大请求处理限额)×50%(上游系统A的发送限额占比)÷1(上游系统A的连接数),计算得到。
上游系统A中机器1接收到限流器下发的的最大请求发送限额,生成自定义线程池最大线程数100。通过线程池请求下游系统。
场景七:上游系统的发送限额占比降低。
在配置上游系统A限额占比50%,上游系统B限额占比50%的情况下,上游系统A的发送限额占比降低到40%。
限流器根据上游系统A的长连接数,计算给每一个连接的上游机器下发的最大请求发送限额。
限流器给上游系统A中每个已启动上游机器下发最大请求发送限额为80。具体地,按照200(下游系统的最大请求处理限额)×40%(上游系统A发送限额占比)÷1(上游系统A的连接数),计算得到。
上游系统A中机器1接收到限流器下发的最大请求发送限额,生成自定义线程池最大线程数80。通过线程池请求下游系统。
如果上游系统A发送限额占比0%,限流器给上游系统发送停止请求下游系统标识,以使上游系统不会再请求下游系统。
如果上游系统A的最大请求发送限额带有小数,进行向下取整(比如:8.5向下取整为8)。
上游系统A中各上游机器的最大请求发送限额计算方法:
上游系统A限额与上游系统A长连接数相除
当余数为0时,上游机器的最大请求发送限额为相除的结果;
余数不为0时,(上游系统A的最大请求发送限额-余数)除以上游系统A的长连接数,得到最大请求发送平均限额。余数按照上游系统A与限流器创建连接顺序依次将每个上游机器的最大请求发送平均限额进行加1,同时余数减1,直到余数减到0为止。
场景八:上游系统的发送限额占比升高。
在配置上游系统A发送限额占比50%,上游系统B发送限额占比50%的情况下,将系统A的发送限额占比需要提高到60%,相应的,系统B的发送限额占比会降低到40%,以满足所有上游系统的发送限额占比之和为1。
限流器根据上游A系统长连接数计算,给每一个连接对应的上游机器下发最大请求发送限额。具体地,按照200(当前下游系统的最大请求处理限额)×60%(上游系统A的发送限额占比)÷1(上游系统A的连接数),得到120。
限流器给上游系统A每个机器下发最大请求发送限额120。
上游系统A中机器1接收到限流器下发限额,生成自定义线程池最大线程数120。通过线程池请求下游系统。
与上述方法实施例相对应,本发明实施例还公开了一种上游系统限流装置,设置于限流器中。图8为该实施例实现的上游系统限流装置结构图,如图8所示该装置包括:
事件监测模块,用于实时监测当前是否发生预设的限额配置触发事件;所述限额配置触发事件包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化;
限流控制模块,用于当监测到当前发生预设的限额配置触发事件,且当前至少一台上游服务器已启动时,根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器,确定最大请求发送限额并通知上游服务器,以触发所述上游服务器根据所述通知,在上游服务器本地首次创建或重新创建用于请求所述下游系统的线程池;所述线程池支持的最大线程数为所述通知的最大请求发送限额。
与上述方法实施例相对应,本发明实施例还公开了一种电子设备,包括处理器、存储器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
实时监测当前是否发生预设的限额配置触发事件;所述限额配置触发事件包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化;
当监测到发生所述限额配置触发事件,且当前至少一台上游服务器已启动时,根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器配置最大请求发送限额,以触发所述上游服务器根据所述配置,在上游服务器本地首次创建或重新创建用于请求所述下游系统的线程池;所述线程池支持的最大线程数为所述通知的最大请求发送限额。
其中,存储器具体可以实施为电可擦可编程只读存储器(EEPROM)、快闪存储器(Flash memory)、可编程程序只读存储器(PROM)等多种存储介质。处理器可以实施为包括一或多个中央处理器或一或多个现场可编程门阵列,其中现场可编程门阵列集成一或多个中央处理器核。具体地,中央处理器或中央处理器核可以实施为CPU或MCU。
需要说明的是,上述各流程和各结构图中不是所有的步骤和模块都是必须的,可以根据实际的需要忽略某些步骤或模块。各步骤的执行顺序不是固定的,可以根据需要进行调整。各模块的划分仅仅是为了便于描述采用的功能上的划分,实际实现时,一个模块可以分由多个模块实现,多个模块的功能也可以由同一个模块实现,这些模块可以位于同一个设备中,也可以位于不同的设备中。
各实施方式中的硬件模块可以以机械方式或电子方式实现。例如,一个硬件模块可以包括专门设计的永久性电路或逻辑器件(如专用处理器,如FPGA或ASIC)用于完成特定的操作。硬件模块也可以包括由软件临时配置的可编程逻辑器件或电路(如包括通用处理器或其它可编程处理器)用于执行特定操作。至于具体采用机械方式,或是采用专用的永久性电路,或是采用临时配置的电路(如由软件进行配置)来实现硬件模块,可以根据成本和时间上的考虑来决定。
与上述方法实施例相对应,本发明实施例还公开了一种计算机可读存储介质,具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着计算机可读指令,该计算机可读指令被处理器执行时,实现上述实施例中任一实施方式的功能的软件程序代码,且使该系统或者装置的计算机(或CPU或MPU)读出并执行存储在存储介质中的程序代码。此外,还可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作。还可以将从存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的CPU等来执行部分和全部实际操作,从而实现上述实施方式中任一实施方式的功能。
用于提供程序代码的存储介质实施方式包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD+RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机或云上下载程序代码。
在本文中,“示意性”表示“充当实例、例子或说明”,不应将在本文中被描述为“示意性”的任何图示、实施方式解释为一种更优选的或更具优点的技术方案。为使图面简洁,各图中的只示意性地表示出了与本发明相关部分,而并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。在本文中,“一个”并不表示将本发明相关部分的数量限制为“仅此一个”,并且“一个”不表示排除本发明相关部分的数量“多于一个”的情形。在本文中,“上”、“下”、“前”、“后”、“左”、“右”、“内”、“外”等仅用于表示相关部分之间的相对位置关系,而非限定这些相关部分的绝对位置。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种上游系统限流方法,其特征在于,包括:
限流器实时监测当前是否发生预设的限额配置触发事件;所述限额配置触发事件包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化;
当发生所述限额配置触发事件,且当前至少一台上游服务器已启动时,所述限流器根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器,确定最大请求发送限额并通知上游服务器;所述上游服务器根据所述通知,在本地创建线程池;所述线程池支持的最大线程数为所述通知的最大请求发送限额;
当前已启动的每台上游服务器,利用本地最新创建的线程池,请求所述下游系统。
2.根据权利要求1所述的方法,其特征在于,所述限额配置触发事件进一步包括:所述上游系统的发送限额占比发生变化。
3.根据权利要求2所述的方法,其特征在于,当所述下游系统中已启动的下游服务器数量发生变化,且当前至少一台上游服务器已启动时,所述为当前已启动的相应上游服务器,确定最大请求发送限额包括:
将当前已启动的所有下游服务器各自支持的最大请求处理限额累加,得到当前所述下游系统的最大请求处理限额Smax;
对于每个所述上游系统,将所述Smax与当前该上游系统的发送限额占比相乘,得到当前该上游系统的最大请求发送限额;如果该上游系统中存在已启动的上游服务器,则根据当前该上游系统的最大请求发送限额和当前该上游系统中已启动的上游服务器数量,确定当前该上游系统中已启动的每台上游服务器的最大请求发送限额。
4.根据权利要求2所述的方法,其特征在于,当任一所述上游系统中已启动的上游服务器数量发生变化,且当前至少一台上游服务器已启动时,所述为当前已启动的相应上游服务器,确定最大请求发送限额包括:
对于每个所述上游系统,如果当前该上游系统中已启动的上游服务器数量发生变化,则根据当前该上游系统的最大请求发送限额和当前该上游系统中已启动的上游服务器数量,确定当前该上游系统中已启动的每台上游服务器的最大请求发送限额;其中,当前该上游系统的最大请求发送限额为当前该上游系统的发送限额占比与当前已启动的所有下游服务器的最大请求处理限额的累加值的乘积。
5.根据权利要求2所述的方法,其特征在于,当所述上游系统的发送限额占比发生变化,且当前至少一台上游服务器已启动时,所述为当前已启动的相应上游服务器,确定最大请求发送限额包括:
对于发送限额占比发生变化的每个所述上游系统,将该上游系统当前的发送限额占比与当前所述下游系统的最大请求处理限额相乘,得到该上游系统的最大请求发送限额;如果该上游系统中存在已启动的上游服务器,则根据当前该上游系统的最大请求发送限额和当前该上游系统中已启动的上游服务器数量,确定当前该上游系统中已启动的每台上游服务器的最大请求发送限额。
6.根据权利要求3至5所述的任一方法,其特征在于,所述确定当前该上游系统中已启动的每台上游服务器的最大请求发送限额包括:
将当前上游系统Gi的最大请求发送限额与上游系统Gi中当前已启动的上游服务器数量相除;
根据所述相除的结果,生成上游系统Gi中已启动的每个上游服务器的最大请求发送限额。
7.根据权利要求6所述的方法,其特征在于,根据所述相除的结果,确定上游系统Gi中已启动的每个上游服务器的最大请求发送限额包括:
如果d=0,则将所述上游系统Gi中当前已启动的每个上游服务器的最大请求发送限额确定为所述相除的结果;d为所述相除的余数;
如果d≠0,则对于所述上游系统Gi中当前已启动的上游服务器,将其中前d个启动的上游服务器的最大请求发送限额,确定为对所述相除的结果进行向上取整的结果,将其中除所述前d个启动的上游服务器之外的其他上游服务器的最大请求发送限额,确定为对所述相除的结果进行向下取整的结果。
8.根据权利要求2所述的方法,其特征在于,所述方法进一步包括:
当一个以上所述上游系统的发送限额占比需要增加时,所述限流器在执行所述增加的同时,相应地减少其他所述上游系统的发送限额占比;其中,所述减少的发送限额占比总量与所述增加的发送限额占比总量相同。
9.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
当所述下游系统的下游服务器启动时,与所述限流器建立长连接;
当所述上游系统的上游服务器启动时,与所述限流器建立长连接;
所述限流器根据所述长连接的连通状态,获得相应的下游服务器或上游服务器的实时运行状态。
10.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
当所述下游系统中已启动的下游服务器数量降低至零时,所述限流器通知当前已启动的所有所述上游服务器禁止请求所述下游系统。
11.根据权利要求2所述的方法,其特征在于,所述方法进一步包括:
当所述下游系统中的下游服务器启动时,如果当前不存在已启动的上游服务器,则所述限流器将当前已启动的所有下游服务器各自支持的最大请求处理限额累加,得到当前所述下游系统的最大请求处理限额Smax;
对于每个所述上游系统,所述限流器将所述Smax与当前该上游系统的发送限额占比相乘,得到当前该上游系统的最大请求发送限额;
当所述上游系统的发送限额占比发生变化时,如果当前不存在已启动的上游服务器,则对于每个所述上游系统,所述限流器将当前所述下游系统的最大请求处理限额与当前该上游系统的发送限额占比相乘,得到当前该上游系统的最大请求发送限额。
12.一种上游系统限流装置,设置于限流器中,其特征在于,包括:
事件监测模块,用于实时监测当前是否发生预设的限额配置触发事件;所述限额配置触发事件包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化;
限流控制模块,用于当监测到当前发生预设的限额配置触发事件,且当前至少一台上游服务器已启动时,根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器,确定最大请求发送限额并通知上游服务器,以触发所述上游服务器根据所述通知,在上游服务器本地首次创建或重新创建用于请求所述下游系统的线程池;所述线程池支持的最大线程数为所述通知的最大请求发送限额。
13.一种电子设备,其特征在于,包括处理器、存储器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现以下步骤:
实时监测当前是否发生预设的限额配置触发事件;所述限额配置触发事件包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化;
当监测到发生所述限额配置触发事件,且当前至少一台上游服务器已启动时,根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器配置最大请求发送限额,以触发所述上游服务器根据所述配置,在上游服务器本地首次创建或重新创建用于请求所述下游系统的线程池;所述线程池支持的最大线程数为所述通知的最大请求发送限额。
14.一种计算机可读存储介质,其特征在于,其中存储有计算机可读指令,该计算机可读指令被处理器执行时,实现以下步骤:
实时监测当前是否发生预设的限额配置触发事件;所述限额配置触发事件包括:所述下游系统中已启动的下游服务器数量发生变化和任一预设上游系统中已启动的上游服务器数量发生变化;
当监测到发生所述限额配置触发事件,且当前至少一台上游服务器已启动时,根据当前下游系统支持的最大请求处理能力,为当前已启动的相应上游服务器,确定最大请求发送限额并通知上游服务器,以触发所述上游服务器根据所述通知,在上游服务器本地首次创建或重新创建用于请求所述下游系统的线程池;所述线程池支持的最大线程数为所述通知的最大请求发送限额。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011310371.1A CN113765817A (zh) | 2020-11-20 | 2020-11-20 | 上游系统限流方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011310371.1A CN113765817A (zh) | 2020-11-20 | 2020-11-20 | 上游系统限流方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113765817A true CN113765817A (zh) | 2021-12-07 |
Family
ID=78786065
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011310371.1A Pending CN113765817A (zh) | 2020-11-20 | 2020-11-20 | 上游系统限流方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113765817A (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110219377A1 (en) * | 2010-03-05 | 2011-09-08 | Rohith Thammana Gowda | Dynamic thread pool management |
CN103842955A (zh) * | 2013-11-28 | 2014-06-04 | 华为技术有限公司 | 一种业务流量控制方法、装置和系统 |
CN104753956A (zh) * | 2015-04-13 | 2015-07-01 | 网神信息技术(北京)股份有限公司 | 一种数据处理方法和装置 |
CN109617831A (zh) * | 2019-02-20 | 2019-04-12 | 北京三快在线科技有限公司 | 用于分布式系统的流量管理方法和装置以及计算设备 |
CN110059987A (zh) * | 2019-05-20 | 2019-07-26 | 中国建筑科学研究院有限公司 | 一种水系统智能控制方法及智能节点 |
CN110061930A (zh) * | 2019-02-01 | 2019-07-26 | 阿里巴巴集团控股有限公司 | 一种数据流量的限制、限流值的确定方法和装置 |
CN110058940A (zh) * | 2019-03-08 | 2019-07-26 | 苏宁易购集团股份有限公司 | 一种多线程环境下的数据处理方法及装置 |
CN111262791A (zh) * | 2020-01-08 | 2020-06-09 | 江苏满运软件科技有限公司 | 一种流量管控方法、装置、电子设备及存储介质 |
-
2020
- 2020-11-20 CN CN202011310371.1A patent/CN113765817A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110219377A1 (en) * | 2010-03-05 | 2011-09-08 | Rohith Thammana Gowda | Dynamic thread pool management |
CN103842955A (zh) * | 2013-11-28 | 2014-06-04 | 华为技术有限公司 | 一种业务流量控制方法、装置和系统 |
CN104753956A (zh) * | 2015-04-13 | 2015-07-01 | 网神信息技术(北京)股份有限公司 | 一种数据处理方法和装置 |
CN110061930A (zh) * | 2019-02-01 | 2019-07-26 | 阿里巴巴集团控股有限公司 | 一种数据流量的限制、限流值的确定方法和装置 |
CN109617831A (zh) * | 2019-02-20 | 2019-04-12 | 北京三快在线科技有限公司 | 用于分布式系统的流量管理方法和装置以及计算设备 |
CN110058940A (zh) * | 2019-03-08 | 2019-07-26 | 苏宁易购集团股份有限公司 | 一种多线程环境下的数据处理方法及装置 |
CN110059987A (zh) * | 2019-05-20 | 2019-07-26 | 中国建筑科学研究院有限公司 | 一种水系统智能控制方法及智能节点 |
CN111262791A (zh) * | 2020-01-08 | 2020-06-09 | 江苏满运软件科技有限公司 | 一种流量管控方法、装置、电子设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
刘怀兰;聂兰兰;: "线程池中最大并发数的研究与设计", 网络新媒体技术, no. 06, 15 November 2013 (2013-11-15) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110166376B (zh) | 流量控制方法及装置、系统、服务器、计算机可读介质 | |
EP3264723B1 (en) | Method, related apparatus and system for processing service request | |
CN110505155B (zh) | 请求降级处理方法、装置、电子设备及存储介质 | |
US20220263768A1 (en) | Method and Apparatus for Node Speed Limiting, Electronic Device and Storage Medium | |
EP3758325A1 (en) | Traffic limiting method and system | |
CN108134814B (zh) | 一种业务数据处理方法及装置 | |
CN111158878B (zh) | 资源转移请求线程控制方法、装置及存储介质 | |
CN111190745A (zh) | 一种数据处理方法、装置及计算机可读存储介质 | |
US11438271B2 (en) | Method, electronic device and computer program product of load balancing | |
CN115277577A (zh) | 数据处理方法、装置、计算机设备和计算机可读存储介质 | |
CN114401224B (zh) | 一种数据限流方法、装置、电子设备以及存储介质 | |
CN112448987A (zh) | 一种熔断降级的触发方法、系统和存储介质 | |
CN102087618A (zh) | 云计算操作系统的资源管理方法及系统 | |
CN113765817A (zh) | 上游系统限流方法和装置 | |
Xie et al. | Software rejuvenation policies for cluster systems under varying workload | |
CN107786371A (zh) | 一种数据的加速方法、装置及存储介质 | |
CN108880930B (zh) | 一种网络环路的检测方法及设备 | |
CN116155816A (zh) | 针对云网关的流量调度方法、装置、计算机设备及介质 | |
CN111193760B (zh) | 一种信息发送方法、装置及存储介质 | |
CN114745278B (zh) | 一种业务系统扩缩容的方法、装置、电子设备和存储介质 | |
CN113268327A (zh) | 事务请求的处理方法、装置和电子设备 | |
CN114443274A (zh) | 调节微服务线程池中线程数的方法、装置及可读存储介质 | |
CN114024913A (zh) | 一种网络性能优化方法、装置、设备以及存储介质 | |
CN113014945B (zh) | 一种数据处理方法、装置、存储介质及计算机设备 | |
CN116582501B (zh) | 一种基于动态优先级解决Vpc-agent网络配置生效慢的方法及系统 |
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 |