1.本技术涉及软件系统技术领域,更具体而言,涉及一种优先级的调度器、网关及调度装置。
背景技术:2.随着公司业务需求的不断发展,承载业务运行的微服务也越来越多。api网关作为客户端与业务微服务集群的中间层,将微服务集群对外暴露的服务聚合起来,所有要调用这些服务的外部系统都需要通过api网关进行访问,基于这种方式我们可以对整个系统的api进行统一的管理控制。
3.传统的api网关都是将客户端的访问请求无差异的转发到后端微服务系统进行处理,这种方式在并发场景或者资源紧张的情况下,非关键性业务的请求有可能会占用系统资源过多,会导致比如订单、支付、进站、出站等关键业务不能得到更多的处理资源,容易造成系统卡顿、加载延迟等,造成用户体验不佳,导致用户流失。
技术实现要素:4.本技术提供一种优先级的调度器、网关及调度装置,以解非关键性业务可能会占用系统资源过多导致关键性业务不能及时处理的问题。
5.具体地,本技术提供一种优先级的调度器,所述调度器包括存储模块、识别模块、投递模块、采集模块和处理模块。所述存储模块用于存储预设的优先级队列,所述识别模块用于识别用户业务请求的优先级,所述投递模块用于将所述用户业务请求根据所述优先级投入到对应所述优先级队列中,所述采集模块用于按照预设比例从所述优先级队列中采集所述用户业务请求形成待处理队列,所述处理模块用于处理所述待处理队列并输出处理结果。
6.在某些实施方式中,所述存储模块还用于存储所述用户业务请求和所述优先级对应映射关系的元数据,所述识别模块根据所述元数据识别所述用户业务请求的优先级。
7.在某些实施方式中,在所述用户业务请求的数据属于所述元数据之外时,将所述用户业务请求放置到默认优先级中。
8.在某些实施方式中,所述优先级队列的数量与所述优先级的数量按照1:n的比例映射,其中n大于或者等于2。
9.在某些实施方式中,所述采集模块还用于获取同一所述优先级队列预设间隔时间内没有被执行的所述用户业务请求,提高没有被采集的所述用户业务请求的权重值,以使得所述用户业务请求能够进入到下一个所述待处理队列中。
10.在某些实施方式中,所述采集模块还用于在所述优先级队列的数量不满足所述预设比例时,重新调整所述预设比例。
11.在某些实施方式中,所述投递模块还用于获取预设时间段内所述用户业务请求的投递次数,根据所述投递次数调整所述用户业务请求的权重值。
12.本技术还提供一种网关,所述网关包括网关组件和上述任意一实施方式所述的调度器,所述网关组件和所述调度器连接。
13.在某些实施方式中,所述网关还包括配置模块,所述配置模块用于更改所述优先级队列。
14.本技术还提供一种业务优先级的调度装置,所述调度装置包括后端服务器和上述任意一实施方式所述的网关,所述后端服务器用于处理所述网关输出的信息。
15.本技术的调度器、网管和调度装置通过将投入到优先级队列中的用户业务请求按照预设的比例提取用户业务请求形成待处理队列,从而能够在着重处理关键性业务的同时兼顾处理非关键性的业务,合理分布系统资源。
附图说明
16.为使本技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下:图1是本发明实施方式的调度装置的应用场景的示意图。
17.图2是本发明实施方式的调度器应用于网关的模块示意图。
18.图3是本发明实施方式的调度器的使用流程示意图。
具体实施方式
19.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。相同或类似的标号自始至终表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
20.请参阅图1,本技术提供一种优先级的调度器100,调度器100包括存储模块11、识别模块12、投递模块13、采集模块14和处理模块15。存储模块11用于存储预设的优先级队列111,识别模块12用于识别用户业务请求的优先级,投递模块13用于将用户业务请求根据优先级投入到对应优先级队列111中,采集模块14用于按照预设比例从优先级队列111中采集用户业务请求形成待处理队列141,处理模块15用于处理待处理队列141并输出处理结果。
21.本技术的调度器100通过将投入到优先级队列111中的用户业务请求按照预设的比例采集用户业务请求形成待处理队列141,从而能够将关键性业务和非关键性业务按照预设的比例提取出来,实现在着重处理关键性业务的同时兼顾处理非关键性的业务,合理分布系统资源,防止业务堆积。
22.具体地,请参阅图1和图2,本技术的调度器100应用于网关200中,存储模块11存储有用户业务请求的优先级队列111。在一些例子中,优先级队列111包括队列1、队列2、队列3、队列4、队列5,其中数值越大代表业务请求权重值的重要性就越大。也就是说,队列5中业务请求的重要性要比队列1-4的业务请求的重要性大,需要优先处理或者需要占用更大的系统资源去处理队列5中的业务请求。需要说明的是,优先级队列111的数量包括但不限于于此,还可以是10个、100个、1000个等等,可以根据业务需求或者系统的处理能力来确定。
23.在一些例子中,优先级队列111的数量与优先级的数量按照1:n的比例映射,其中n大于或者等于2,该比例支持动态调整,可以根据用户业务请求的调用次数或者频率来调整。将n设置为大于或者等于2,可以有效避免因业务请求级别过多而导致对应的优先级队列111数量膨胀,从而占用大量内存资源,也可以防止低优先级队列111请求的积压。优先级队列111采用堆(数组实现的完全二叉树)的方式实现,每个队列中用户业务请求的排列顺序按权重值来确定。在一些例子中,n=2,即优先级队列111的数量与优先级的数量为1:2,一个队列对应两个优先级。在其他一些例子中,n还可以是3、5、8、10等等,可以根据实际需要设置。
24.优先级队列与优先级分布表在一些例子中,将相关度较大的用户业务请求存放在同一个优先级队列中,例如支付进站和闸机开闸、加入购物车和支付。在另一些例子中,还可以是相似度较大的用户业务请求存放在同一个优先级队列中,例如点赞和差评等。将相关度较大或者相似度较大的用户业务请求放入到同一个队列中,便于系统处理。
25.存储模块11还存储有用户业务请求和优先级对应映射关系的元数据,业务请求的优先级代表了业务请求的重要程度。在一些例子中,存储模块11根据相关业务需求划分为1-10个等级,每个等级对应一种业务。需要说明的是,业务优先级的划分包括但不限于此,还可以是20个等级、100个等级、500个等级等等,可以根据实际需要设置。
26.用户业务请求与优先级元数据对应表
业务展示留言
………
默认优先级
……
订单支付进站出站优先级12345678910
识别模块12根据预设的元数据识别用户业务请求的优先级。在一些例子,用户正在进行支付进站业务,在用户业务请求经过网关200时,识别模块12识别出该用户业务请求对应的优先级为10。在另一些例子中,用户在进行留言业务时,在用户业务请求经过网关200时,识别模块12识别出该业务请求对应的优先级为2。
27.投递模块13将识别模块12识别出的用户业务请求务赋予权重值,并按照优先级投入到对应的优先级队列111中,同时根据权重值确认用户业务请求在优先级队列111中的排序。其中,投递模块13会定时从用户业务请求的调用次数、调用频率等这些参数来计算该业务请求的权重值,从而从新调整用户业务请求的权重值。在一些例子中,支付进站业务位于队列5中排序第一的位置,将用户正在进行支付进站业务按照优先级10投入到队列5排序第一的位置中。
28.由于权重值较大,该用户业务请求会被优先提取走,在该用户业务请求被采集走后,若再有相同的用户业务请求进来,下一次还是将该用户业务请求采集走,排列在该用户业务请求后面的将继续等待,直到权重值较高的用户业务请求被采集完,才轮到权重值低
的业务数据被采集。从而,能够使得重要的业务一直被优先处理。
29.在一些例子中,投递模块13还用于获取预设时间段内同一优先级队列的业务投递次数,根据投递次数调整优先级队列111的级别。具体地,在某个时间段内,某个同一优先级队列的投递量突然大量增加,例如在5分钟内留言的业务量突然间大量增加,则将留言的优先级提高到8,并将留言业务请求投入到队列4中,以便于留言业请求务能够及时处理,防止用户业务请求积压。在留言业务请求量恢复到正常水平时,恢复原来的优先级队列1。其中,调整的级别可以根据需要设置。
30.在一些例子中,在用户业务请求的数据属于元数据之外时,将用户业务请求放置到默认优先级中。具体地,用户正在进行浏览业务,而在元数据中没有对应的业务和优先级,则将该浏览业务识别成默认的优先级6,并将该业务投入到队列3中。
31.为了保证高优先级请求尽量大的吞吐以及兼顾执行低优先级请求,采集模块14按照预设比例从优先级队列111中按照权重值的大小采集用户业务请求形成待处理队列141,同一待处理队列141中总是按照优先级队列的高低进行排列,同一优先级队列中请求总是按照权重值的大小排列。从而,既能够保证重要业务能够有足够的系统资源去处理,又能兼顾处理非重要性的业务,充分利用系统资源,防止业务积压。
32.在一些例子中,在5个队列中根据业务的重要程度按照预设的比例5:4:3:2:1提取优先级队列111中的业务,也即是采集模块14从队列1采集1个业务、队列2中采集2个业务、队列3中采集3个业务、队列4中采集4个业务、队列5中采集5个业务形成待处理队列141,队列5中的业务按照权重值的大小排列,其它的同理。在其他一些例子,待处理队列111中的用户业务请求不需要排列,处理模块15可以并发地处理待处理队列111中的业务。
33.在一些例子中,采集模块14还用于获取同一优先级队列预设间隔时间内没有被执行的用户业务请求,提高没有被采集的用户业务请求的权重值,以使得该用户业务请求能够进入到下一个待处理队列141中。具体地,采集模块14获取1秒钟内没有被处理的队列1中的用户业务请求,则提高队列1中没有被处理的用户业务请求的权重值,从而使得队列1中的用户业务请求能够进入到待处理队列141中。预设间隔时间可以是0.2秒、0.5秒、0.8秒、1.5秒等等,可以根据需要设置。
34.在一些例子中,采集模块14还用于在优先级队列111的数量不满足预设比例时,重新调整预设比例。具体地,采集时并不总是可以恰好的比例进行提取,当比例不足时,采集模块14将按照优先级由高到低的顺序重新规划调整每个队列的采集数量,以保证相关业务的正常运行。例如在队列5中的仅存在4个业务时,采集模块14仅能够采集到4个业务,为避免系统资源浪费,则将在队列4中增加一个业务或者增加原先没有进入队列的业务。或者说是,优先将资源配置到业务的重要性程度较高的优先级中。再例如在优先级队列111的队列1中没有业务存在时,对应增加队列5或者队列4的业务数量,以避免系统资源浪费。
35.处理模块15包括工作线程池,工作线程并发处理待处理队列141中的用户业务并输出处理结果,操作完成后,处理模块15将请求传递给api网关200的下一组件继续处理(请参阅图3)。
36.请参阅1和图2,本技术还提供一种网关200,网关200包括网关组件210和上述任意一实施方式的调度器100,网关组件210和调度器100连接,调度器100用于接收并调度用户业务的优先级。
37.网关200还包括配置模块220,配置模块220用于更改优先级队列111和元数据。管理人员可以通过配置模块220调整优先级队列111或者元数据、增加或者减少预设比例等等。例如通过配置模块220将队列5变成队列4,将展示业务的优先级由1变成2等等。在其他一些实施例中,配置模块220也可以设置在调度器100中。
38.配置模块220管理业务网关100中所有网关组件的所有行为配置。网关100会在启动时将组件的配置缓存到本地内存中,并实时监听配置模块220的数据变化。当管理员更改了用户业务请求的优先级(包括新增、删除、修改)时,网关200会立即更新相应的优先级策略,优先级调度器将根据新的配置完成对请求的优先调度。
39.在一个例子中,乘车类app通常聚合了非常多的业务,比如广告、通知、二维码乘车码、乘客留言等等,所有这些业务请求都会统一通过api网关预处理后再转发到后端业务承载服务集群。这些业务的优先级都是不同的,比如二维码乘车码的请求的业务优先级最高,而广告的优先级较低等。当用户打开app请求乘车码时,网关会基于业务优先级总是会保证二维码乘车码的请求优先处理,以减少乘客等待开闸时间,同时其他常规业务请求也能得到执行机会。
40.请参阅图1和图2,本技术还提供一种业务优先级的调度装置300,调度装置300包括后端服务器310和上述任意一实施方式的网关200,后端服务器310用于处理网关200输出的信息。后端服务器310是网关200转发请求的真正业务的执行者。后端服务器310执行完业务请求后,将结果返回给网关200,并最终由网关200响应给客户端。
41.以上内容不能认定本发明具体实施只局限于这些说明, 对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思前提下,还可以做出若干简单推演或替换,都应当视为属于本发明由所提交的权利要求书确定的专利保护范围。