具体实施方式
为了使本技术领域的人员更好地理解本公开中的技术方案,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。
在进行逻辑机房划分的分布式集群中,为了进行流量控制,现有技术可以将控制目标的总并发数按照逻辑机房进行拆分,并分别在每个逻辑机房设置作为计数器的分布式缓存进行拆分后的流量控制。但是这种流量控制方式无法实现灵活的适应不同业务并发情况,比如,当高并发(例如,每秒1000笔请求以上)时,全部的业务请求都需要远程访问逻辑机房,存在严重的性能开销,而当低并发(例如,每秒100笔请求以下)时,又可能遇到由于到达各个逻辑机房的业务请求数分布不均导致控制精准度出现问题。即要么性能开销严重,要么流量控制不精准,使得流量控制在性能和准确度方面难以兼顾。
本公开提供了一种流量控制方法,该方法改变了现有技术中只在逻辑机房侧设置计数器的方式,而是采用多级流量控制,以兼顾在性能和准确度方面的控制平衡。如下示例一种控制方式:例如,可以构建一个流量控制系统,该控制系统至少包括两个控制层,即该方法不再是类似于现有技术那样只在逻辑机房设置计数器进行流量控制(全部流量控制都在逻辑机房属于一个控制层),在该至少两个控制层都进行流量控制,并且,不同的控制层之间的差异包括访问性能开销不同,比如,其中一个控制层的访问性能开销高于另一个控制层。
图1示例一种流量控制系统,该系统以三个控制层为例来进行描述。
控制层A:设置于接收业务请求的客户端设备,在客户端设备设置并发控制器,例如,可以利用客户端设备的本机缓存执行流量的计数器控制。
控制层B:设置于逻辑机房,在每个逻辑机房设置并发控制器,例如可以设置分布式缓存进行流量计数器控制,并且如图1所示,每个逻辑机房下可以对应多个客户端设备,即某个客户端设备接收到的业务请求在处理时是要到对应的逻辑机房进行业务处理。
控制层C:是一个设置于所有逻辑机房上层的并发控制器,例如以全局分布式缓存作为流量并发控制的计数器,所有逻辑机房的请求都由该控制层控制。
在构建了图1所示的三级流量控制层的基础上,下面将该流量控制系统应用于不同并发类型的业务,对业务流量进行控制,所述的并发类型可以包括:高并发类型(例如,同时1000笔请求以上)、低并发类型(例如,同时100笔请求以下)和超低并发类型(例如,同时1笔或2笔请求)。
高并发类型:
在该类型下,可以启用图1的流量控制系统中的控制层A和控制层B。在高并发业务时,可以优先考虑性能问题,降低高并发业务请求的资源开销,因此可以将大部分的并发控制数量部署在控制层A,即由接收业务请求的本机缓存进行流量的计数器控制。同时,考虑到本地控制可能存在流量不均导致控制精准度问题,再将一部分并发控制数量部署在控制层B,这样就同时兼顾了流量控制中的性能提升以及控制精准度的保持。
例如,图2示例了高并发类型业务时启用的两个控制层,控制层A作为第一控制层,控制层B作为第二控制层,由于第二控制层设置在远程逻辑机房,而第一控制层在本机缓存,所以第二控制层的访问性能开销高于第一控制层。假设控制目标的总并发数是1000笔,那么可以由第一控制层负责70%的并发数即700笔,由第二控制层负责30%的并发数即300笔。
示例性的,实际实施中可以将总并发数按照如下方式在各个控制层间进行分配:假设第二控制层的逻辑机房数量总共有三个,那么将控制目标的总并发数1000笔可以先拆分为三份,其中两份分别300笔,一份是400笔,每一份都是一个逻辑机房及其下对应的客户端设备总共要控制的并发数目。以其中一份300笔为例,参见图2所示,可以将30%的并发数由逻辑机房自己负责控制,即逻辑机房的“计数器1”可以确定为数值是90(300*30%),另外70%分配到对应的客户端设备,即图2的本机缓存的计数器数值总共可以是210(300*70%),当客户端设备有十个时,可以将该210平均分配到十个设备处,每个设备负责控制21个并发数目,即图2中的“计数器1.1,计数器1.2……计数器1.n”。
当然,需要说明的是,图2中的70%和30%的比例分配,只是一种示例,实际实施中可以根据业务情况进行变更,当更加注重性能的提升时,可以将较高比例的并发控制数设置在第一控制层,即第一控制层的并发控制数量占并发控制总数量的比例,高于所述第二控制层的对应比例。在图2中将并发控制的数量在各个控制层进行分配之后,结合图3说明流量控制的过程,在该图3中,业务请求到达时,可以先由接收业务请求的第一控制层按照上述分配的计数器数目进行并发控制,如果抢并发失败时,才继续由对应的第二控制层进行并发控制。详见图3所示的流程,可以包括:
在步骤301中,第一控制层接收业务请求。
例如,可以是图2中的第一控制层的某个设备接收到了业务请求。
在步骤302中,第一控制层判断本地并发控制的计数器是否大于零。
如果大于零,则表示抢并发成功,相当于抢到了允许进行业务处理的令牌,继续执行步骤303;
如果不大于零,比如已经是零,表示现在第一控制层处接收到的同时进行的业务请求已经达到了目标并发数目(比如,21),则继续执行步骤305。
在步骤303中,根据业务请求进行业务处理,并将本地计数器减1。
在步骤304中,当服务端返回响应或超时,将本地计数器加1。
在步骤305中,第二控制层判断并发计数器是否大于零。
例如,本步骤中的第二控制层,可以是步骤301中的接收业务请求的本地设备对应的逻辑机房。
如果大于零,则表示抢并发成功,继续执行步骤306;
如果不大于零,比如已经是零,则执行步骤308。
在步骤306中,根据业务请求进行业务处理,并将第二控制层的计数器减1。
在步骤307中,当服务端返回响应或超时,将第二控制层的计数器加1。
在步骤308中,返回业务请求失败,即此时图2中的本机缓存和逻辑机房缓存都已经达到了最大的并发控制数目,业务抢并发失败。
本例子的流量控制方法,对于高并发类型的业务,采取了两个控制层的流量控制方式,将大部分的并发控制数目设置在本地缓存,将另一部分并发控制数目设置在远程逻辑机房,这样既保证了访问性能,又可以解决本地流量不均导致的控制精准度问题,兼顾了性能和精准度的提升。
低并发类型:
在该类型下,可以启用图1的流量控制系统中的控制层B和控制层C。在低并发业务时,可以将大部分的并发控制在控制层B即逻辑机房侧进行,并考虑到逻辑机房也可能存在业务请求数分布不均导致的并发控制不精准,将一部分的并发控制在控制层C即全局分布式缓存进行。
例如,图4示例了低并发类型业务时启用的两个控制层,控制层B作为第一控制层,控制层C作为第二控制层。假设控制目标的总并发数是100笔,那么可以由第一控制层负责70%的并发数即70笔,由第二控制层负责30%的并发数即30笔。示例性的,实际实施中可以将总并发数按照如下方式在各个控制层间进行分配:首先可以由全局分布式缓存负责30笔并发控制数目,另外70笔的并发控制数目假设可以由三个逻辑机房控制,各个逻辑机房拆分该70笔即可。
在图4中将并发控制的数量在各个控制层进行分配之后,结合图5说明流量控制的过程,在该图5中,业务请求可以先由第一控制层按照上述分配的计数器数目进行并发控制,如果抢并发失败时,才继续由对应的第二控制层进行并发控制。详见图5所示的流程,可以包括:
在步骤501中,逻辑机房接收业务请求。
例如,可以是图4中的某个逻辑机房接收到了业务请求。
在步骤502中,逻辑机房判断本地并发控制的计数器是否大于零。
如果大于零,则表示抢并发成功,继续执行步骤503;
如果不大于零,比如已经是零,则继续执行步骤505。
在步骤503中,根据业务请求进行业务处理,并将本地计数器减1。
在步骤504中,当服务端返回响应或超时,将本地计数器加1。
在步骤505中,全局并发计数器是否大于零。
如果大于零,则表示抢并发成功,继续执行步骤506;
如果不大于零,比如已经是零,则执行步骤508。
在步骤506中,根据业务请求进行业务处理,并将全局计数器减1。
在步骤507中,当服务端返回响应或超时,将全局计数器加1。
在步骤508中,返回业务请求失败,即此时图4中的逻辑机房分布式缓存和全局分布式缓存都已经达到了最大的并发控制数目,业务抢并发失败。
本例子的流量控制方法,对于低并发类型的业务,同样可以采取两个控制层的流量控制方式,将大部分的并发控制数目设置在逻辑机房,将另一部分并发控制数目设置在全局控制层,这样既保证了访问性能,又可以解决低并发时逻辑机房的请求不均导致的控制精准度问题,兼顾了性能和精准度的提升。
超低并发类型:
由于该类型的业务不大可能存在大并发,并发控制本身的性能不是关键,所以可以将所有的业务请求都交由图1的流量控制系统中的控制层C即全局缓存进行并发控制,以达到精准控制。例如,可以当所述业务请求的请求数量低于阈值时,比如,若请求数量小于5笔(如,只有1笔或2笔),则可以都由全局缓存进行并发控制。图6示例了该类型业务的并发控制数目分配,将全部并发控制都由全局分布式缓存计数控制。
图7示例了在图6所示状况下的流量控制方式,可以包括:
在步骤701中,全局并发计数器是否大于零。
若大于零,则抢并发成功,继续执行步骤702;
若不大于零,表示抢并发失败,执行步骤704。
在步骤702中,根据业务请求进行业务处理,并将全局并发计数器减1。
在步骤703中,当服务端响应或者超时,将全局并发计数器加1。
在步骤704中,返回业务抢并发失败。
需要说明的是,上述图1的流量系统架构只是以三个控制层为例进行描述,实际实施中并不限制于三个控制层。例如,可以在设置时直接根据业务类型,设置为两层,比如对于高并发类型业务只设置控制层A和控制层B,或者在低并发业务时只设置控制层B和控制层C,不论何种控制,都能通过多个控制层的配合,实现流量控制在性能和精准度上的平衡,达到较好的流量控制效果。此外,还可以设置多于三个控制层,具体根据实际情况而定。
本公开还提供了一种流量控制系统,所述系统至少包括:用于实现流量控制的的第一控制层和第二控制层;
所述第一控制层,用于当接收到业务请求时,通过本地并发控制器确定是否抢并发成功,在成功时执行所述业务请求对应的业务处理;
所述第二控制层,用于当第一控制模块确定抢并发失败时,由所述第二控制模块执行抢并发控制,若成功则执行所述业务请求对应的业务处理,否则,返回业务请求失败。
该流量控制系统的各种应用可以参见图1~图7所示,不再赘述。
上述各附图中所示流程中的各个步骤,其执行顺序不限制于流程图中的顺序。此外,各个步骤的描述,可以实现为软件、硬件或者其结合的形式,例如,本领域技术人员可以将其实现为软件代码的形式,可以为能够实现所述步骤对应的逻辑功能的计算机可执行指令。当其以软件的方式实现时,所述的可执行指令可以存储在存储器中,并被设备中的处理器执行。
例如,对应于上述方法,本公开同时提供一种流量控制设备,该设备可以包括处理器、存储器、以及存储在存储器上并可在处理器上运行的计算机指令,所述处理器通过执行所述指令,用于实现流量控制系统中的至少一个控制层;所述流量控制系统至少包括用于流量控制的第一控制层和第二控制层,所述第二控制层的访问性能开销高于第一控制层;所述流量控制系统实现如下步骤:
所述第一控制层在接收到业务请求时,若通过本地并发控制器确定抢并发成功,则执行所述业务请求对应的业务处理;否则,若抢并发失败,则继续通过所述第二控制层的并发控制器进行抢并发;
若所述第二控制层确定抢并发成功,则执行所述业务请求对应的业务处理,否则,返回业务请求失败。
上述实施例阐明的系统,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本领域内的技术人员应明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本公开是参照根据本公开实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例和流量控制设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上所述仅为本公开的较佳实施例而已,并不用以限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开保护的范围之内。