服务并发访问控制方法及装置
技术领域
本发明涉及计算机技术领域,特别是涉及一种服务并发访问控制方法及装置。
背景技术
服务作为一种部署灵活,集成方便的应用实现,在如今的系统中应用非常普遍。
通常,对服务的访问数量的控制,有两种方式,一种是对并发的控制,控制的是某个特定时刻的大访问量,另一种是对流量的控制,控制的是时间段内的大访问量。而下述的方案所指的是对某个特定时刻的大访问量的控制。
应用作为服务一旦发布后,一般可供系统内所有其他应用调用;此时,服务质量控制的问题就突出出来,为了保证服务的服务质量,通过并发控制的机制来保证服务请求不会在某个时刻请求过多,影响服务提供方对其他应用系统提供服务以及服务提供方的响应速度;同时随着应用系统的增多,提供的服务也越来越多,对某个服务在特定时刻的访问过多,系统资源消耗过大,从而可能会导致系统提供的其他服务受到影响,而这都是系统设计时不希望遇到的。
另一方面,在一个大的机构里,可能有很多部门(域),每个部门又可能有多个组(节点),对于一个服务发布以后,如果每个组,每个部门都可以平等访问此服务,会导致一些重要组,重要部门对服务的访问在需要的情况下不能得到及时响应,这也是很多情况下,希望避免的。为了避免这些情况的出现,就需要提供一种按照部门(域),组(节点)设定的组(节点)或部门(域)的访问请求的排队等待及处理优先级权重的方式,实时的提供有区别的服务处理(立即响应/排队等待等)。
通常的服务并发控制方法都只是给服务预先设定一个阀值,在服务提供者请求服务时,系统查看服务提供者在此刻是否已经达到了预设阀值,如果已经达到预设阀值则会告知服务消费者服务提供者繁忙。
现有的对并发服务的控制,只控制对服务的总的共享通道数(并发访问数),而在总的共享通道数没有达到的时候,不能根据请求源的不同而对不同的请求做出区别处理,在很多情况下此种简单的并发控制不能满足需求。
发明内容
(一)要解决的技术问题
本发明的目的是提供一种服务并发访问控制方法及装置,解决现有技术中并发控制方式单一,不能对服务请求按域或节点设置处理权重,不能对请求进行排队等待以及不能给请求提供应急处理通道的问题。
(二)技术方案
为了解决上述技术问题,本发明提供一种服务并发访问控制方法,其包括以下步骤:
S401,服务系统接收服务请求;
S402,判断服务请求数量是否达到了服务系统能够响应的最大并发数,如果是,则执行S403,否则执行S404;
S403,给服务请求方返回服务系统忙的信息;
S404,根据服务请求的应急程度以及服务系统的处理通道数量,判断服务请求是否需要排队,如果需要排队,则执行S405;不需排队,则执行S406;处理通道耗完,则执行S407;
S405,服务请求进入排队状态,等待被唤醒执行;
S406,进入服务请求执行处理过程;
S407,给服务请求方返回处理通道耗完的信息。
其中,所述步骤S404具体包括:
S302,判断服务请求是否为应急请求,如果是,则执行S303,否则执行S305;
S303,判断处理通道是否有空闲,如果有,则执行S304,否则执行S308;
S304,不需要排队,直接执行处理该服务请求;
S305,根据该服务请求消息,判断该服务请求申请的处理通道是否消耗完,如果是,则执行S307,否则执行S306;
S306,将与该服务请求相对应的处理通道计数加1;
S307,给服务请求方返回处理通道耗完的信息;
S308,该服务请求需要进入排队状态,等待处理通道空闲后处理。
其中,所述步骤S405具体包括:
S102,查询处理通道是否有空闲,如果有空闲处理通道,则执行S103,否则执行S107;
S103,查询应急服务请求队列中是否有等待处理的服务请求消息,如果有,则执行S104,否则执行S105;
S104,获取服务请求队列中的服务请求消息,根据消息中的信号激活等待处理的服务请求,即该服务请求被唤醒;
S105,查询应急服务请求队列以外的候补队列中是否有服务请求消息,如果有,则执行S106,否则执行S107;
S106,从所述候补队列中取消息,如果成功取得消息,则执行S104,否则,如果取到的是空消息,执行S107;
S107,等待指定周期,执行S102进行新一轮服务请求消息队列处理过程。
其中,所述步骤S105具体包括:
S202,判断服务系统处理域的最大通道数是否达到,如果达到最大通道数,执行S209;否则执行S203;
S203,判断处理节点的权重是否达到,如果达到,则执行S204;否则执行S206;
S204,判断处理域中是否还有节点,如果有,则执行S208;否则执行S205;
S205,更新处理域为下一个域;
S206,判断节点的候补队列是否有服务请求消息,如果有,则执行S207;否则执行S208;
S207,返回节点服务请求消息;
S208,更新处理节点;
S209,返回空消息。
本发明还提供了一种服务并发访问控制装置,其包括:
服务请求接收处理模块,接收服务请求,并判断服务请求数量是否达到服务系统能够响应的最大并发数,经过请求排队逻辑模块进行判断,对服务请求进行排队处理、或直接执行处理、或给服务请求方返回处理通道耗完的信息;
请求排队逻辑模块,与所述服务请求接收处理模块相连,根据服务请求消息,判断消息需要如何处理,包括排队、直接处理、处理通道耗完三种方式;
消息队列处理模块,与所述服务请求接收处理模块相连,定期检测处理通道是否空闲,保证有空闲处理通道的情况下,服务请求消息队列中的服务请求消息能够得到及时处理;
取候补队列消息模块,与所述消息队列处理模块相连,在有空闲处理通道的情况下,按照分配的权重比例从候补队列中取消息。
(三)有益效果
上述技术方案所提供的服务并发访问控制方法及装置,能够按照需要在控制服务请求并发的同时,保证不同节点或节点域的访问请求能够按照需要的权重方式得到服务,并且在提供应急处理通道的同时保证应急服务请求得到及时服务,从而提高服务并发控制的精确度与效率。
附图说明
图1为本发明实施例的消息队列处理流程图;
图2为本发明实施例的从消息队列取消息的流程图;
图3为本发明实施例的请求排队逻辑流程图;
图4为本发明实施例的并发访问控制逻辑流程图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
实施例1
参照图1和图4,本实施例的服务并发访问控制方法包括以下步骤:
首先,进行服务请求的接受及处理,如图4所示,具体过程如下:
S401,服务系统接收服务请求;
S402,判断服务请求数量是否达到了服务系统能够响应的最大并发数,如果是,则执行S403,否则执行S404;
S403,给服务请求方返回服务系统忙的信息;
S404,根据服务请求的应急程度以及服务系统的处理通道数量,即根据图3中所示的请求排队逻辑流程中的逻辑进行,判断服务请求是否需要排队,如果需要排队,则执行S405;不需排队,则执行S406;处理通道耗完,则执行S407;
S405,服务请求进入排队状态,等待被唤醒执行,即被图1中的S104唤醒,唤醒逻辑执行消息队列处理流程;
S406,进入服务请求执行处理过程;
S407,给服务请求方返回处理通道耗完的信息。
其中,参照图3所示,所述步骤S404具体过程如下:
该过程主要执行S301:排队逻辑;
S302,判断服务请求是否为应急请求,如果是,则执行S303,否则执行S305;
S303,判断处理通道是否有空闲,如果有,则执行S304,否则执行S308;
S304,不需要排队,直接执行处理该服务请求;
S305,根据该服务请求消息,判断该服务请求申请的处理通道是否消耗完,如果是,则执行S307,否则执行S306;
S306,将与该服务请求相对应的处理通道计数加1;
S307,给服务请求方返回处理通道耗完的信息;
S308,该服务请求需要进入排队状态,等待处理通道空闲后处理。
其中,参照图1所示,所述步骤S405具体过程如下:
该过程主要执行S101,消息队列处理;
S102,查询处理通道是否有空闲,如果有空闲处理通道,则执行S103,否则执行S107;
S103,查询应急服务请求队列中是否有等待处理的服务请求消息,如果有,则执行S104,否则执行S105;
S104,获取服务请求队列中的服务请求消息,根据消息中的信号激活等待处理的服务请求,即该服务请求被唤醒,对应图4中的S405;
S105,查询应急服务请求队列以外的候补队列中是否有服务请求消息,如果有,则执行S106,否则执行S107;
S106,从所述候补队列中取消息,如果成功取得消息,则执行S104,否则,如果取到的是空消息,执行S107;
S107,等待指定周期(如1秒),执行S102进行新一轮服务请求消息队列处理过程。
参照图2所示,所述步骤S105具体过程如下:
该过程主要执行S201,取候补队列消息;
S202,判断服务系统处理域的最大通道数是否达到,如果达到最大通道数,执行S209;否则执行S203;
S203,判断处理节点的权重是否达到,如果达到,则执行S204;否则执行S206;
S204,判断处理域中是否还有节点,如果有,则执行S208;否则执行S205;
S205,更新处理域为下一个域;
S206,判断节点的候补队列是否有服务请求消息,如果有,则执行S207;否则执行S208;
S207,返回节点服务请求消息;
S208,更新处理节点;
S209,返回空消息。
上述服务并发访问控制方法能够按照服务请求的权重方式进行服务,提供应急处理通道以使应急服务请求及时得到处理。
实施例2
本实施例提供的服务并发访问控制装置包括服务请求接收处理模块、请求排队逻辑模块、消息队列处理模块和取候补队列消息模块;服务请求接收处理模块用于接收服务请求,并判断服务请求数量是否达到服务系统能够响应的最大并发数,经过请求排队逻辑模块进行判断,对服务请求进行排队处理、或直接执行处理、或给服务请求方返回处理通道耗完的信息;请求排队逻辑模块与所述服务请求接收处理模块相连,根据服务请求消息,判断消息需要如何处理,包括排队、直接处理、处理通道耗完三种方式;消息队列处理模块与所述服务请求接收处理模块相连,定期检测处理通道是否空闲,保证有空闲处理通道的情况下,服务请求消息队列中的服务请求消息能够得到及时处理;取候补队列消息模块与所述消息队列处理模块相连,在有空闲处理通道的情况下,按照分配的权重比例从候补队列中取消息。
具体地,服务请求接收处理模块接收到请求消息后,判断是否达到了最大并发数(即最大处理通道数),如果没有达到,则通过排队逻辑模块判断是否需要排队,如果需要排队,则阻塞等待唤醒信号;否则,根据排队结果,返回异常或继续处理请求。请求排队逻辑模块首先判断接收到的请求消息不是应急请求消息,并且处理此类型消息的处理通道没有耗完,则进入候补队列等待处理,如果处理通道耗完,则返回异常;如果是应急请求消息,并且有空闲处理通道,则直接处理,否则,进入应急队列等待处理。消息队列处理模块查询是否存在空闲处理通道,如果存在空闲处理通道,并且应急队列中有消息,则释放应急队列中的消息,否则按照配置的不同节点或节点域的访问请求的候补队列深度及处理优先级权重来释放候补队列中的消息,提供给空闲通道处理,如果空闲通道为零,则等待下一个周期再次查询。取候补队列消息模块首先判断正在处理域的最大通道数是否达到,如果达到,则返回空消息;否则,判断节点分配的权重是否达到,如果是,判断处理的域是否还有节点,如果还有,则取下一个节点,为处理节点;如果没有节点,则更新域,同时更新处理节点;如果节点分配的权重没有达到,则判断是否有本节点的候补消息,如果有,则取消息返回;否则,更新处理节点,再次执行整个步骤,到返回真正消息或空消息。
由以上实施例可以看出,本发明能够按照需要在控制并发的同时,保证不同节点或节点域的访问请求能够按照需要的权重方式得到服务,并且在提供应急通道的同时保证应急请求得到及时服务,从而提高服务并发控制的精确度与效率。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和替换,这些改进和替换也应视为本发明的保护范围。