CN114338535B - 基于zookeeper的集群限流方法、系统、设备及存储介质 - Google Patents
基于zookeeper的集群限流方法、系统、设备及存储介质 Download PDFInfo
- Publication number
- CN114338535B CN114338535B CN202210030142.7A CN202210030142A CN114338535B CN 114338535 B CN114338535 B CN 114338535B CN 202210030142 A CN202210030142 A CN 202210030142A CN 114338535 B CN114338535 B CN 114338535B
- Authority
- CN
- China
- Prior art keywords
- current limiting
- server
- application
- current
- zookeeper
- 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
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明实施例提供了一种基于zookeeper的集群限流方法,包括:当所述当前应用未选择有所述对应的限流服务器时,在多个应用服务器中进行主应用服务器的选举操作,以使选举出来的所述主应用服务器在多个限流服务器中进行所述限流服务器的选择,所述主应用服务器的选举操作基于zookeeper的选举策略进行选举;根据所述限流服务器的选择结果,创建与所述限流服务器的连接,以通过所述限流服务器进行限流;当所述限流服务器宕机时,执行对限流服务器的重连操作。通过本发明实施例,能够实现应用集群的限流,并当该连接的限流服务器宕机时,进行限流服务器的重连操作,从而保证了集群限流的高可用。
Description
技术领域
本发明实施例涉及通信技术领域,尤其涉及一种基于zookeeper的集群限流方法、系统、计算机设备及计算机可读存储介质。
背景技术
服务限流,是当服务器资源不足以应对大量请求时,为了保障有限的资源能够正常服务,对系统按照特定的规则进行流量限制或规则限制的一种方法。
常见的限流方案都是对发送到当前服务器的请求进行限流,也就是单机限流。单机限流的方案比较多,例如:自定义计数器或者使用Guava的RateLimiter进行操作。
在实际的产线环境中,应用都是以集群模式进行部署的。此时若我们期望对应用进行集群总阈值限流时,使用单机限流模式就无法实现该功能。此时,我们就需要一个可以实现集群模式的限流方案。
业界也有一些使用第三方服务来实现集群限流的方案,比如使用Redis作为集群计数器等,这个只能实现简单的计数器限流,复杂的规则则无法实现。还有开源的sentinel限流,使用一个独立的sentinel-service服务来进行限流计算,但是当该服务宕机后,则只能回退到单机限流模式。
发明内容
有鉴于此,本发明实施例的目的是提供一种基于zookeeper的集群限流方法、系统、计算机设备及计算机可读存储介质,以解决现有技术中对于集群模式部署的应用,对于复杂的限流规则无法实现,以及当服务宕机时,只能使用单机限流模式的问题。
为实现上述目的,本发明实施例提供了一种基于zookeeper的集群限流方法,应用于应用客户端中,包括以下步骤:
当所述应用客户端启动后,判断当前应用是否选择有对应的限流服务器;
当所述当前应用未选择有所述对应的限流服务器时,在多个应用服务器中进行主应用服务器的选举操作,以使选举出来的所述主应用服务器在多个限流服务器中进行所述限流服务器的选择,所述主应用服务器的选举操作基于zookeeper的选举策略进行选举;
根据所述限流服务器的选择结果,创建与所述限流服务器的连接,以通过所述限流服务器进行限流;
当所述限流服务器宕机时,执行对限流服务器的重连操作。
可选地,在所述判断当前应用是否选择有对应的限流服务器之前,所述方法还包括:
启动所述限流服务器;
判断所述限流服务器是否注册到所述zookeeper;
当所述限流服务器未注册到所述zookeeper时,将所述限流服务器的IP地址以及端口信息注册到所述zookeeper上;
指定预设端口启动netty服务,以接收所述应用客户端的请求信息。
可选地,所述方法还包括:
当与所述限流服务器的连接成功时,将与所述当前应用关联的所述限流服务器信息注册到所述zookeeper,其中,所述与所述限流服务器相关联的所述当前应用以应用列表的形式保存于所述zookeeper中。
可选地,所述当所述限流服务器宕机时,执行对限流服务器的重连操作,包括:
当所述限流服务器宕机时,则在预设时间内不断重连所述限流服务器,直至与所述限流服务器连接成功或超过所述预设时间仍然与所述限流服务器的连接失败。
可选地,所述当所述限流服务器宕机时,执行对限流服务器的重连操作,还包括:
当所述限流服务器宕机,且在所述预设时间内重连所述限流服务器失败时,则从多个所述限流服务器中除所述限流服务器之外的其他限流服务器中选择新的限流服务器进行重新连接。
可选地,所述方法还包括:
多个所述限流服务器进行主限流服务器的选举;
选举出的所述主限流服务器从所述zookeeper获取多个所述限流服务器所关联的应用列表,其中,每个应用列表中的所有应用称为应用集合;
根据每个限流服务器所关联的所述应用列表,对所述每个限流服务器关联的应用集合进行重新分配,以便所述主应用服务器监听所述限流服务器对关联的应用集合的重新分配结果,并根据所述重新分配结果进行限流服务器的重新连接。
可选地,所述方法还包括:
当所述当前应用选择有所述对应的限流服务器时,则直接使用所述限流服务器进行限流。
为实现上述目的,本发明实施例还提供了基于zookeeper的集群限流系统,应用于应用客户端中,所述系统包括:
判断模块,用于当所述应用客户端启动后,判断当前应用是否选择有对应的限流服务器;
选举模块,用于当所述当前应用未选择有对应的限流服务器时,在多个应用服务器中进行主应用服务器的选举操作,以使选举出来的所述主应用服务器在多个限流服务器中进行所述限流服务器的选择,所述主应用服务器的选举操作基于zookeeper的选举策略进行选举;
连接限流模块,用于根据所述限流服务器的选择结果,创建与所述限流服务器的连接,以通过所述限流服务器进行限流,
重连模块,用于当所述限流服务器宕机时,执行限流服务器的重连操作。
为实现上述目的,本发明实施例还提供了一种计算机设备,所述计算机设备存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被处理器执行时实现如上所述的基于zookeeper的集群限流方法的步骤。
为实现上述目的,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行如上所述的基于zookeeper的集群限流方法的步骤。
本发明实施例提供的基于zookeeper的集群限流方法、系统、计算机设备及计算机可读存储介质,通过采用集群的方式,从多个应用服务器中选举出主应用服务器,并通过主应用服务器在多个限流服务器中进行限流服务器的选择,并根据限流服务器的选择结果创建与限流服务器的连接,从而实现应用的限流,并当该连接的限流服务器宕机时,进行限流服务器的重连操作,从而保证了集群限流的高可用。
附图说明
图1为本发明实施例提供的基于zookeeper的集群限流方法的运行环境示意图。
图2为本发明实施例提供的基于zookeeper的集群限流方法实施例一的一种示例性的流程示意图。
图3为本发明实施例提供的基于zookeeper的集群限流方法的一种示例性的具体流程示意图。
图4为本发明实施例提供的基于zookeeper的集群限流方法实施例一的另一种示例性的流程示意图。
图5为本发明实施例提供的限流服务器启动定时压力再平衡任务的一种示例性的具体流程示意图。
图6为本发明基于zookeeper的集群限流系统实施例二的程序模块示意图。
图7为本发明计算机设备实施例三的硬件结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本申请中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
图1所示,为本发明实施例之基于zookeeper的集群限流方法的运行环境示意图。图1包括计算机设备2、多个应用服务器a~m和多个限流服务器A~N。所述计算机设备2安装有对应的应用客户端,以通过应用客户端执行对相应的应用的访问和操作,所述应用客户端可以为一个或多个,相应的通过安装的应用客户端执行的应用也可以为一个或多个。当所述应用没有选择有对应的限流服务器时,通过多个应用服务器a~m实现对多个限流服务器A~N的选择,以通过选择出的限流服务器进行限流。为了实现本发明实施例,本发明还包括zookeeper(图1未示)。本发明仅以计算机设备2中一个应用为例进行详细介绍。
以下实施例将以计算机设备2为执行主体进行示例性描述。
实施例一
参阅图2,示出了本发明实施例一之基于zookeeper的集群限流方法的步骤流程图。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。具体如下:
步骤S100,当应用客户端启动后,判断当前应用是否选择有对应的限流服务器。
在实际应用中,应用都是以集群模式部署的,此时需要对应用集群进行总阈值的限流,同时通过限流服务器集群(也即本发明实施例中的多个限流服务器组成的集群)的方式对该应用集群进行限流。针对每个应用,可以选择限流服务器集群中的一个限流服务器实现限流。
在示例性的实施例中,当所述当前应用选择有对应的限流服务器时,则直接使用该限流服务器进行限流。
在示例性的实施例中,在所述判断当前应用是否选择有对应的限流服务器之前,所述方法还包括:
启动所述限流服务器;
判断所述限流服务器是否注册到zookeeper;
当所述限流服务器未注册到所述zookeeper时,将所述限流服务器的ip地址以及端口信息注册到所述zookeeper上;
指定预设端口启动netty服务,以接收所述应用客户端的请求信息。
Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。在具体实施例中,当限流服务器cluster-limit-service启动后,会在zookeeper注册所述限流服务器的IP地址:端口(port)信息。若所述限流服务器cluster-limit-service已经在所述zookeeper注册IP:port信息,则无需重复注册。当所述限流服务器cluster-limit-service启动后,会在指定端口(port)启动一个netty server,用于接收客户端的请求信息。
需要说明的是,Netty是一个NIO client-server(客户端服务器)框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。
步骤S200,当所述当前应用未选择有所述对应的限流服务器时,在多个应用服务器中进行主应用服务器的选举操作,以使选举出来的所述主应用服务器在多个限流服务器中进行所述限流服务器的选择,所述主应用服务器的选举操作基于zookeeper的选举策略进行选举。
由于本发明实施例是基于zookeeper,故所述主应用服务器的选择操作根据zookeeper的选举策略进行选择。
具体地,在进行主应用服务器的选举操作时,被选举出来的应用服务器称为主应用服务器(也即,master),其他的应用服务器则称为从应用服务器(也即,slave)。所述主应用服务器为多个所述应用服务器中的一个应用服务器,如图1中的应用服务器a~m中的一个应用服务器。所述从应用服务器为多个所述应用服务器中除所述主应用服务器中的任意一个应用服务器,例如:若主应用服务器为应用服务器a,则应用服务器b~m均为从应用服务器。当所述主应用服务器选举出来后,选举出来的所述主应用服务器执行限流服务器的选择操作。所述限流服务器为图1中多个所述限流服务器A~N中的一个。
步骤S300,根据所述限流服务器的选择结果,创建与所述限流服务器的连接,以通过所述限流服务器进行限流。
具体地,所述创建与所述限流服务器的连接为长连接。在实际应用中,当选择出所述限流服务器时,所述slave应用服务器也创建与所述限流服务器的长连接。
在示例性的实施例中,所述方法还包括:
当与所述限流服务器的连接成功时,将与所述当前应用关联的所述限流服务器信息注册到所述zookeeper,其中,所述与所述限流服务器相关联的所述当前应用以应用列表的形式保存于所述zookeeper中。
在实际应用中,所有应用相关联的限流服务器信息均注册到所述zookeeper中,也即,所述zookeeper中保存有多个所述限流服务器(也即所述限流服务器集群的所有限流服务器)相关联的应用信息,每个限流服务器相关联的应用信息可以以应用列表的形式进行保存。例如:
表1
限流服务器A | 应用1、应用2 |
限流服务器B | 应用3、应用4、应用5 |
… | … |
本发明仅以当前应用为例进行示例性的说明。
步骤S400,当所述限流服务器宕机时,执行对限流服务器的重连操作。
在示例性的实施例中,所述步骤S400可以具体包括:
当所述限流服务器宕机时,则在预设时间内不断重连所述限流服务器,直至与所述限流服务器连接成功或超过所述预设时间仍然与所述限流服务器的连接失败。
具体地,当所述限流服务器发生网络故障或其他异常,出现短暂不可用时,则不断重连所述限流服务器,直至与所述限流服务器连接成功或超过所述预设时间仍然与所述限流服务器的连接失败。当在预设时间内(例如5秒内)重连成功时,则继续使用所述限流服务。本发明实施例能够当限流服务器集群中的某一台限流服务器宕机后,连接在其上的应用客户端可以快速的进行重试,从而加快限流服务器的连接效率。
在示例性的实施例中,所述步骤S400还可以具体包括:
当所述限流服务器宕机,且在所述预设时间内重连所述限流服务器失败时,则从多个所述限流服务器中除所述限流服务器之外的其他限流服务器中选择新的限流服务器进行重新连接。
具体地,当所述限流服务器发生网络故障或其他异常,且在预设时间内(例如5秒)不可用时,则表示与所述限流服务器的连接失败,并从多个所述限流服务器中选择新的限流服务器进行连接。例如,与限流服务器A的连接失败,则从限流服务器B~N中选择一个限流服务器作为新的限流服务器进行连接。通过本发明实施例,能够当限流服务器集群中的一台宕机且重试失败后,执行限流服务器的重选操作,从而保证了集群限流的高可用。
需要说明的是,当所述主应用服务器的选择失败或者多个所述限流服务器均连接失败时,则所述当前应用启动失败。
如图3所示,为本发明实施例提供的基于zookeeper的集群限流方法的一种示例性的具体流程示意图。应用客户端启动应用服务,然后注册服务信息至zookeeper中,并根据zookeeper进行master服务器的选举。Master服务器执行限流服务器的选择策略,若限流服务器选择成功,则创建应用对限流服务器的长连接,若限流服务器选择失败,则应用启动失败。若创建应用对限流服务器的长连接成功,则注册应用关联的限流服务器信息至zookeeper,若创建应用对限流服务器的长连接失败,则在5秒内不断重试连接,若5秒内所有限流服务器均连接失败,则应用启动失败,master重新执行限流服务器的选择策略。若限流服务器服务关闭,也即限流服务器宕机,则应用不断重试连接,若5秒内重连成功,则使用原限流服务器,应用正常集群限流,否则master重新执行限流服务器的选择策略。当然,在应用客户端启动应用服务之前,限流服务器应该启动服务,并注册自身的节点信息至zookeeper中。
在示例性的实施例中,如图4所示,所述方法还包括:
步骤S401,多个所述限流服务器进行主限流服务器的选举;
步骤S402,选举出的所述主限流服务器从所述zookeeper获取多个所述限流服务器所关联的应用列表,其中,每个应用列表中的所有应用称为应用集合;
步骤S403,根据每个限流服务器所关联的所述应用列表,对所述每个限流服务器关联的应用集合进行重新分配,以便所述主应用服务器监听所述限流服务器对关联的应用集合的重新分配结果,并根据所述重新分配结果进行限流服务器的重新连接。
在实际应用中,限流服务器集群中的每台限流服务器所关联的应用数据都可能不一致,因为在长时间的网络故障或其他原因,应用客户端都会进行限流服务器的重新选择,这样会导致每台限流服务器所关联的客户端应用数量不一致。为了均衡每台限流服务器的压力,此时,需要定时的对限流服务器进行再平衡操作。
具体地,当所述主限流服务器(也即master)选举成功后,所述限流服务器集群(图1中限流服务器A~N)中出所述主限流服务器之外的其他限流服务器即为从限流服务器(也即slave)。每个限流服务器均关联有对应的应用,每个限流服务器相关联的应用均可以以应用列表的方式保存于所述zookeeper中。例如:表1中限流服务器A关联的应用包括应用1和应用2,应用1和应用2则为限流服务器A关联的应用集合。限流服务器B关联的应用包括应用3、应用4和应用5,应用3、应用4和应用5则为限流服务器B关联的应用集合。当限流服务器每隔预设时间执行压力再平衡操作时,可在限流服务器集群中进行master的选举,然后master根据预设的再平衡策略进行应用的重新分配,以实现每个限流服务器压力均衡。当然,若后续有新增的客户端应用使用限流,则可以通过扩容来保证服务能力。
当多个所述限流服务器每执行完一次压力再平衡操作时,主应用服务器监听之前连接的限流服务器对关联的应用结合的重新分配结果,并根据重新分配结果进行限流服务器的重新连接。示例性地,多个所述限流服务器执行一次压力再平衡操作之前,与限流服务器A具有关联的应用集合包括应用1和应用2,应用1的主应用服务器为应用服务器a,应用2的主应用服务器为应用服务器b;多个所述限流服务器执行一次压力再平衡操作之后,与限流服务器A具有关联的应用集合包括应用1和应用3,与应用2具有关联关系的限流服务器为限流服务器B,此时应用2的主应用服务器b监听到与限流服务器A具有关联关系的应用集合不包括应用2,且监听到与限流服务器B具有关联关系的应用集合包括应用2,则应用2的主应用服务器b进行与限流服务器B的连接。由于应用1的主应用服务器a监听到与限流服务器A具有关联关系的应用集合仍然包括应用1,则应用1的主应用服务器a仍然保持与限服务器A的连接。更为直观的限流服务器启动定时压力再平衡任务具体流程示意图请参见图5。
本发明实施例通过限流服务器内部的再平衡策略,保证了每台限流服务器的压力均衡。
实施例二
请继续参阅图6,基于上述实施例,图6示出了本发明基于zookeeper的集群限流系统实施例二的程序模块示意图。在本实施例中,基于zookeeper的集群限流系统20可以包括或被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本发明,并可实现上述基于zookeeper的集群限流方法。本发明实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序本身更适合于描述基于zookeeper的集群限流系统20在存储介质中的执行过程。以下描述将具体介绍本实施例各程序模块的功能:
判断模块200,当应用客户端启动后,判断当前应用是否选择有对应的限流服务器。
在实际应用中,应用都是以集群模式部署的,此时需要对应用集群进行总阈值的限流,同时通过限流服务器集群(也即本发明实施例中的多个限流服务器组成的集群)的方式对该应用集群进行限流。针对每个应用,可以选择限流服务器集群中的一个限流服务器实现限流。
在示例性的实施例中,当所述当前应用选择有对应的限流服务器时,则直接使用该限流服务器进行限流。
在示例性的实施例中,所述系统20还包括启动单元、判断单元及注册单元:
所述启动单元,用于启动所述限流服务器;
所述判断单元,用于判断所述限流服务器是否注册到zookeeper;
所述注册单元,用于当所述限流服务器未注册到所述zookeeper时,将所述限流服务器的ip地址以及端口信息注册到所述zookeeper上;
所述启动单元,还用于指定预设端口启动netty服务,以接收所述应用客户端的请求信息。
Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。在具体实施例中,当限流服务器cluster-limit-service启动后,所述注册单元会在zookeeper注册所述限流服务器的IP地址:端口(port)信息。若所述限流服务器cluster-limit-service已经在所述zookeeper注册IP:port信息,则无需重复注册。当所述限流服务器cluster-limit-service启动后,所述启动单元会在指定端口(port)启动一个netty server,用于接收客户端的请求信息。
需要说明的是,Netty是一个NIO client-server(客户端服务器)框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。
选举模块201,用于当所述当前应用未选择有所述对应的限流服务器时,在多个应用服务器中进行主应用服务器的选举操作,以使选举出来的所述主应用服务器在多个限流服务器中进行所述限流服务器的选择,所述主应用服务器的选举操作基于zookeeper的选举策略进行选举。
由于本发明实施例是基于zookeeper,故所述主应用服务器的选择操作根据zookeeper的选举策略进行选择。
具体地,在进行主应用服务器的选举操作时,被选举出来的应用服务器称为主应用服务器(也即,master),其他的应用服务器则称为从应用服务器(也即,slave)。所述主应用服务器为多个所述应用服务器中的一个应用服务器,如图1中的应用服务器a~m中的一个应用服务器。所述从应用服务器为多个所述应用服务器中除所述主应用服务器中的任意一个应用服务器,例如:若主应用服务器为应用服务器a,则应用服务器b~m均为从应用服务器。当所述主应用服务器选举出来后,选举出来的所述主应用服务器执行限流服务器的选择操作。所述限流服务器为图1中多个所述限流服务器A~N中的一个。
连接限流模块202,用于根据所述限流服务器的选择结果,创建与所述限流服务器的连接,以通过所述限流服务器进行限流。
具体地,所述创建与所述限流服务器的连接为长连接。在实际应用中,当选择出所述限流服务器时,所述slave应用服务器也创建与所述限流服务器的长连接。
在示例性的实施例中,所述注册单元还用于:
当与所述限流服务器的连接成功时,将与所述当前应用关联的所述限流服务器信息注册到所述zookeeper,其中,所述与所述限流服务器相关联的所述当前应用以应用列表的形式保存于所述zookeeper中。
在实际应用中,所有应用相关联的限流服务器信息均注册到所述zookeeper中,也即,所述zookeeper中保存有多个所述限流服务器(也即所述限流服务器集群的所有限流服务器)相关联的应用信息,每个限流服务器相关联的应用信息可以以应用列表的形式进行保存。例如:
表1
限流服务器A | 应用1、应用2 |
限流服务器B | 应用3、应用4、应用5 |
… | … |
本发明仅以当前应用为例进行示例性的说明。
重连模块203,用于当所述限流服务器宕机时,执行对限流服务器的重连操作。
在示例性的实施例中,所述重连模块203可以具体用于:
当所述限流服务器宕机时,则在预设时间内不断重连所述限流服务器,直至与所述限流服务器连接成功或超过所述预设时间仍然与所述限流服务器的连接失败。
具体地,当所述限流服务器发生网络故障或其他异常,出现短暂不可用时,则不断重连所述限流服务器,直至与所述限流服务器连接成功或超过所述预设时间仍然与所述限流服务器的连接失败。当在预设时间内(例如5秒内)重连成功时,则继续使用所述限流服务。本发明实施例能够当限流服务器集群中的某一台限流服务器宕机后,连接在其上的应用客户端可以快速的进行重试,从而加快限流服务器的连接效率。
在示例性的实施例中,所述重连模块203还可以具体用于:
当所述限流服务器宕机,且在所述预设时间内重连所述限流服务器失败时,则从多个所述限流服务器中除所述限流服务器之外的其他限流服务器中选择新的限流服务器进行重新连接。
具体地,当所述限流服务器发生网络故障或其他异常,且在预设时间内(例如5秒)不可用时,则表示与所述限流服务器的连接失败,并从多个所述限流服务器中选择新的限流服务器进行连接。例如,与限流服务器A的连接失败,则从限流服务器B~N中选择一个限流服务器作为新的限流服务器进行连接。通过本发明实施例,能够当限流服务器集群中的一台宕机且重试失败后,执行限流服务器的重选操作,从而保证了集群限流的高可用。
需要说明的是,当所述主应用服务器的选择失败或者多个所述限流服务器均连接失败时,则所述当前应用启动失败。
在示例性的实施例中,所述系统20还用于:
多个所述限流服务器进行主限流服务器的选举;
选举出的所述主限流服务器从所述zookeeper获取多个所述限流服务器所关联的应用列表,其中,每个应用列表中的所有应用称为应用集合;
根据每个限流服务器所关联的所述应用列表,对所述每个限流服务器关联的应用集合进行重新分配,以便所述主应用服务器监听所述限流服务器对关联的应用集合的重新分配结果,并根据所述重新分配结果进行限流服务器的重新连接。
在实际应用中,限流服务器集群中的每台限流服务器所关联的应用数据都可能不一致,因为在长时间的网络故障或其他原因,应用客户端都会进行限流服务器的重新选择,这样会导致每台限流服务器所关联的客户端应用数量不一致。为了均衡每台限流服务器的压力,此时,需要定时的对限流服务器进行再平衡操作。
具体地,当所述主限流服务器(也即master)选举成功后,所述限流服务器集群(图1中限流服务器A~N)中出所述主限流服务器之外的其他限流服务器即为从限流服务器(也即slave)。每个限流服务器均关联有对应的应用,每个限流服务器相关联的应用均可以以应用列表的方式保存于所述zookeeper中。例如:表1中限流服务器A关联的应用包括应用1和应用2,应用1和应用2则为限流服务器A关联的应用集合。限流服务器B关联的应用包括应用3、应用4和应用5,应用3、应用4和应用5则为限流服务器B关联的应用集合。当限流服务器每隔预设时间执行压力再平衡操作时,可在限流服务器集群中进行master的选举,然后master根据预设的再平衡策略进行应用的重新分配,以实现每个限流服务器压力均衡。当然,若后续有新增的客户端应用使用限流,则可以通过扩容来保证服务能力。
当多个所述限流服务器每执行完一次压力再平衡操作时,主应用服务器监听之前连接的限流服务器对关联的应用结合的重新分配结果,并根据重新分配结果进行限流服务器的重新连接。示例性地,多个所述限流服务器执行一次压力再平衡操作之前,与限流服务器A具有关联的应用集合包括应用1和应用2,应用1的主应用服务器为应用服务器a,应用2的主应用服务器为应用服务器b;多个所述限流服务器执行一次压力再平衡操作之后,与限流服务器A具有关联的应用集合包括应用1和应用3,与应用2具有关联关系的限流服务器为限流服务器B,此时应用2的主应用服务器b监听到与限流服务器A具有关联关系的应用集合不包括应用2,且监听到与限流服务器B具有关联关系的应用集合包括应用2,则应用2的主应用服务器b进行与限流服务器B的连接。由于应用1的主应用服务器a监听到与限流服务器A具有关联关系的应用集合仍然包括应用1,则应用1的主应用服务器a仍然保持与限服务器A的连接。更为直观的限流服务器启动定时压力再平衡任务具体流程图请参见图5。
本发明实施例通过限流服务器内部的再平衡策略,保证了每台限流服务器的压力均衡。
实施例三
参阅图7,是本发明实施例三之计算机设备的硬件架构示意图。本实施例中,所述计算机设备2是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。该计算机设备2可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图所示,所述计算机设备2至少包括,但不限于,可通过系统总线相互通信连接存储器21、处理器22、网络接口23、以及基于zookeeper的集群限流系统20。其中:
本实施例中,存储器21至少包括一种类型的计算机可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是计算机设备2的内部存储单元,例如该计算机设备2的硬盘或内存。在另一些实施例中,存储器21也可以是计算机设备2的外部存储设备,例如该计算机设备20上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器21还可以既包括计算机设备2的内部存储单元也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于计算机设备2的操作系统和各类应用软件,例如实施例二的基于zookeeper的集群限流系统20的程序代码等。此外,存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器22在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制计算机设备2的总体操作。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据,例如运行基于zookeeper的集群限流系统20,以实现实施例一的基于zookeeper的集群限流方法。
所述网络接口23可包括无线网络接口或有线网络接口,该网络接口23通常用于在所述计算机设备2与其他电子装置之间建立通信连接。例如,所述网络接口23用于通过网络将所述计算机设备2与外部终端相连,在所述计算机设备2与外部终端之间的建立数据传输通道和通信连接等。所述网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobile communication,GSM)、宽带码分多址(WidebandCode Division Multiple Access,WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。
需要指出的是,图7仅示出了具有部件20-23的计算机设备2,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
在本实施例中,存储于存储器21中的所述基于zookeeper的集群限流系统20还可以被分割为一个或者多个程序模块,所述一个或者多个程序模块被存储于存储器21中,并由一个或多个处理器(本实施例为处理器22)所执行,以完成本发明。
例如,图6示出了所述实现基于zookeeper的集群限流系统20实施例二的程序模块示意图,该实施例中,所述基于zookeeper的集群限流系统20可以被划分为判断模块200、选举模块201、连接限流模块202及重连模块203。其中,本发明所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述所述基于zookeeper的集群限流系统20在所述计算机设备2中的执行过程。所述程序模块200-203的具体功能在实施例二中已有详细描述,在此不再赘述。
实施例四
本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于存储基于zookeeper的集群限流系统20,被处理器执行时实现实施例一的基于zookeeper的集群限流方法。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种基于zookeeper的集群限流方法,其特征在于,应用于应用客户端中,所述方法包括:
当所述应用客户端启动后,判断当前应用是否选择有对应的限流服务器;
当所述当前应用未选择有所述对应的限流服务器时,在多个应用服务器中进行主应用服务器的选举操作,以使选举出来的所述主应用服务器在多个限流服务器中进行所述限流服务器的选择,所述主应用服务器的选举操作基于zookeeper的选举策略进行选举;
根据所述限流服务器的选择结果,创建与所述限流服务器的连接,以通过所述限流服务器进行限流;
当所述限流服务器宕机时,执行对限流服务器的重连操作。
2.根据权利要求1所述的基于zookeeper的集群限流方法,其特征在于,在所述判断当前应用是否选择有对应的限流服务器之前,所述方法还包括:
启动所述限流服务器;
判断所述限流服务器是否注册到所述zookeeper;
当所述限流服务器未注册到所述zookeeper时,将所述限流服务器的IP地址以及端口信息注册到所述zookeeper上;
指定预设端口启动netty服务,以接收所述应用客户端的请求信息。
3.根据权利要求1或2所述的基于zookeeper的集群限流方法,其特征在于,所述方法还包括:
当与所述限流服务器的连接成功时,将与所述当前应用关联的所述限流服务器信息注册到所述zookeeper,其中,所述与所述限流服务器相关联的所述当前应用以应用列表的形式保存于所述zookeeper中。
4.根据权利要求3所述的基于zookeeper的集群限流方法,其特征在于,所述当所述限流服务器宕机时,执行对限流服务器的重连操作,包括:
当所述限流服务器宕机时,则在预设时间内不断重连所述限流服务器,直至与所述限流服务器连接成功或超过所述预设时间仍然与所述限流服务器的连接失败。
5.根据权利要求4所述的基于zookeeper的集群限流方法,其特征在于,所述当所述限流服务器宕机时,执行对限流服务器的重连操作,还包括:
当所述限流服务器宕机,且在所述预设时间内重连所述限流服务器失败时,则从多个所述限流服务器中除所述限流服务器之外的其他限流服务器中选择新的限流服务器进行重新连接。
6.根据权利要求4-5中任意一项所述的基于zookeeper的集群限流方法,其特征在于,所述方法还包括:
多个所述限流服务器进行主限流服务器的选举;
选举出的所述主限流服务器从所述zookeeper获取多个所述限流服务器所关联的应用列表,其中,每个应用列表中的所有应用称为应用集合;
根据每个限流服务器所关联的所述应用列表,对所述每个限流服务器关联的应用集合进行重新分配,以便所述主应用服务器监听所述限流服务器对关联的应用集合的重新分配结果,并根据所述重新分配结果进行限流服务器的重新连接。
7.如权利要求1所述的基于zookeeper的集群限流方法,其特征在于,所述方法还包括:
当所述当前应用选择有所述对应的限流服务器时,则直接使用所述限流服务器进行限流。
8.一种基于zookeeper的集群限流系统,其特征在于,应用于应用客户端中,所述系统包括:
判断模块,用于当所述应用客户端启动后,判断当前应用是否选择有对应的限流服务器;
选举模块,用于当所述当前应用未选择有对应的限流服务器时,在多个应用服务器中进行主应用服务器的选举操作,以使选举出来的所述主应用服务器在多个限流服务器中进行所述限流服务器的选择,所述主应用服务器的选举操作基于zookeeper的选举策略进行选举;
连接限流模块,用于根据所述限流服务器的选择结果,创建与所述限流服务器的连接,以通过所述限流服务器进行限流,
重连模块,用于当所述限流服务器宕机时,执行限流服务器的重连操作。
9.一种计算机设备,所述计算机设备存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的基于zookeeper的集群限流方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行如权利要求1至7中任一项所述的基于zookeeper的集群限流方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210030142.7A CN114338535B (zh) | 2022-01-12 | 2022-01-12 | 基于zookeeper的集群限流方法、系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210030142.7A CN114338535B (zh) | 2022-01-12 | 2022-01-12 | 基于zookeeper的集群限流方法、系统、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114338535A CN114338535A (zh) | 2022-04-12 |
CN114338535B true CN114338535B (zh) | 2023-09-22 |
Family
ID=81026948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210030142.7A Active CN114338535B (zh) | 2022-01-12 | 2022-01-12 | 基于zookeeper的集群限流方法、系统、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114338535B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015101260A1 (zh) * | 2013-12-30 | 2015-07-09 | 广州华多网络科技有限公司 | 对即时通讯业务进行处理的方法及系统 |
CN106980678A (zh) * | 2017-03-30 | 2017-07-25 | 温馨港网络信息科技(苏州)有限公司 | 基于zookeeper技术的数据分析方法及系统 |
CN109995669A (zh) * | 2019-04-09 | 2019-07-09 | 深圳前海微众银行股份有限公司 | 分布式限流方法、装置、设备及可读存储介质 |
CN110324253A (zh) * | 2019-06-29 | 2019-10-11 | 江苏满运软件科技有限公司 | 流量控制方法、装置、存储介质及电子设备 |
CN110753131A (zh) * | 2019-11-04 | 2020-02-04 | 网易(杭州)网络有限公司 | 微服务分布式限流方法及装置、存储介质和电子设备 |
CN111858677A (zh) * | 2020-07-27 | 2020-10-30 | 中国平安财产保险股份有限公司 | 本地缓存数据访问方法、装置、设备及存储介质 |
US11159625B1 (en) * | 2020-09-04 | 2021-10-26 | Salesforce.Com, Inc. | Efficiently distributing connections to service instances that stream multi-tenant data |
-
2022
- 2022-01-12 CN CN202210030142.7A patent/CN114338535B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015101260A1 (zh) * | 2013-12-30 | 2015-07-09 | 广州华多网络科技有限公司 | 对即时通讯业务进行处理的方法及系统 |
CN106980678A (zh) * | 2017-03-30 | 2017-07-25 | 温馨港网络信息科技(苏州)有限公司 | 基于zookeeper技术的数据分析方法及系统 |
CN109995669A (zh) * | 2019-04-09 | 2019-07-09 | 深圳前海微众银行股份有限公司 | 分布式限流方法、装置、设备及可读存储介质 |
CN110324253A (zh) * | 2019-06-29 | 2019-10-11 | 江苏满运软件科技有限公司 | 流量控制方法、装置、存储介质及电子设备 |
CN110753131A (zh) * | 2019-11-04 | 2020-02-04 | 网易(杭州)网络有限公司 | 微服务分布式限流方法及装置、存储介质和电子设备 |
CN111858677A (zh) * | 2020-07-27 | 2020-10-30 | 中国平安财产保险股份有限公司 | 本地缓存数据访问方法、装置、设备及存储介质 |
US11159625B1 (en) * | 2020-09-04 | 2021-10-26 | Salesforce.Com, Inc. | Efficiently distributing connections to service instances that stream multi-tenant data |
Also Published As
Publication number | Publication date |
---|---|
CN114338535A (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108717379B (zh) | 电子装置、分布式任务调度方法及存储介质 | |
CN108881512B (zh) | Ctdb的虚拟ip均衡分配方法、装置、设备及介质 | |
CN111756674B (zh) | 网络通信方法、系统、设备及计算机可读存储介质 | |
CN105701099B (zh) | 用于在分布式环境中执行任务的方法、装置及系统 | |
CN112418794B (zh) | 一种业务流转的方法及装置 | |
CN110222535B (zh) | 区块链配置文件的处理装置、方法及存储介质 | |
CN112416888B (zh) | 用于分布式文件系统的动态负载均衡方法及系统 | |
CN111885184A (zh) | 高并发场景下热点访问关键字处理方法和装置 | |
EP3306858B1 (en) | Network management system deployment method and device, and network management system | |
CN110708177B (zh) | 分布式系统中的异常处理方法、系统和装置 | |
CN107645396B (zh) | 一种集群扩容方法及装置 | |
CN112751926A (zh) | 一种集群中工作节点的管理方法、系统及相关装置 | |
CN114338535B (zh) | 基于zookeeper的集群限流方法、系统、设备及存储介质 | |
CN112527669A (zh) | 本地服务的自测方法及系统 | |
CN110198221A (zh) | 一种负载均衡的实现方法、装置及系统 | |
CN109614242B (zh) | 一种计算能力共享方法、装置、设备及介质 | |
CN109324914B (zh) | 服务调用方法、服务调用装置及中心服务器 | |
CN111444074A (zh) | 一种数据监控方法、装置、电子设备及可读存储介质 | |
CN114173396B (zh) | 终端联网时间的确定方法和装置、电子设备和存储介质 | |
CN105338058A (zh) | 一种应用更新的方法及装置 | |
CN113504981A (zh) | 任务调度方法和装置、存储介质及电子设备 | |
CN112653753B (zh) | 基于rpc的多机房独立多活方法、系统及电子设备 | |
CN113746918A (zh) | 超文本传输协议代理方法及系统 | |
CN114490196A (zh) | 数据库切换方法、系统、设备及介质 | |
CN111064636B (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 |