一种优化决策引擎吞吐率及响应时间的方法与流程

文档序号:21407665发布日期:2020-07-07 14:41阅读:680来源:国知局
一种优化决策引擎吞吐率及响应时间的方法与流程

本发明主要涉及决策引擎领域,尤其涉及一种优化决策引擎吞吐率及响应时间的方法。



背景技术:

决策引擎起源于基于规则的专家系统,由推理引擎发展而来,是一种在互联网行业广泛使用的独立模块或组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策,接受数据输入,解释业务规则,并根据业务规则做出业务决策。决策引擎主要包括三部分,规则库,事实库(工作内存)以及推理引擎。决策引擎中间件的功能定位决定了决策引擎肩负着重要的任务,这些工作决策引擎框架大部分已经实现,但具体业务场景实施的时候,框架本身固有的问题越来越明显,就是它在高吞吐场景下的的处理效率问题。

实际业务场景中,高并发会频繁的将实对象放入任务,并通过api销毁事实对象的,这样的操作会带来频繁的jvmgc垃圾回收,从而降低系统响应效率,系统tps及responsetime会频繁波动,这是由于,jvmgc的场合会使用cpu资源,导致系统的毫秒级短时间中断,从而影响服务的tps及响应时间。

已公开中国发明专利,申请号cn201480065605.7,专利名称:使用基于策略的决策引擎的体验质量优化,申请日:20141124,本发明描述了用于管理网络应用(例如,网络多人游戏)的配置的系统和方法。优化服务器确定网络应用的配置,例如关于用户与应用服务器之间的映射的信息。优化服务器接收多个状态参数,例如加载参数和延迟参数。优化服务器应用体验质量策略来决定是否改变网络的配置。优化服务器操作以发送实施改变网络应用的配置的指令。



技术实现要素:

本发明提供一种优化决策引擎吞吐率及响应时间的方法,针对现有技术的上述缺陷,提供一种优化决策引擎吞吐率及响应时间的方法,包括以下处理流程:

第一步:使用阻塞列队创建任务的任务缓冲池,对任务进行初始化并放入列队中,将位于首位的任务取出并赋值与当前任务,初始化完毕;

第二步:当请求到来的时候,使用当前任务处理请求,当请求计数器与阈值取模为0的场合,注销当前任务;

第三步:生成一个新的任务放入队列中,从此时任务缓冲池中获取位于首位的任务取出并赋值与当前任务,继续处理规则执行请求;

第四步:将注销的任务和生成的任务并入队列。

优选的,第一步中任务缓冲池的数量为3。

优选的,第二步中注销当前任务的同时一并注销了当前任务中关联的所有事实对象。

优选的,第二步中阈值根据机器性能、业务场景及任务选取。

优选的,第四步中任务的注销和生成采用异步线程方式实现。

优选的,任务处理器缓冲池中的处理流程中包括以下步骤:

第一步:创建任务处理器缓冲池,位于池中首位的任务处理器赋予当前任务;

第二步:当前任务处理器处理任务请求,计数器增加1;

第三步:当前请求的计数器取阀值的模数=0的场合,注销当前任务处理器,异步通过线程生成任务处理器放入队列尾部列队;

第四步:指定下一个当前任务处理器:从队列新取一个任务处理器。

优选的,第三步中注销当前任务:是指当前任务已经积累足够多的内存需要进行回收。

本发明的有益效果:构建任务缓冲池,避免请求每次执行任务删除,产生大量的垃圾,引起jvm的垃圾回收操作,而是通过取模的方式,批量集中销毁,从而避免了系统在高并发下因垃圾回收引起的规则引擎响应时间不稳定。

附图说明

图1为本发明的使用效果图;

具体实施方式

如图1所示可知,本发明包括以下处理流程:

第一步:使用阻塞列队创建任务的任务缓冲池,对任务进行初始化并放入列队中,将位于首位的任务取出并赋值与当前任务,初始化完毕;

第二步:当请求到来的时候,使用当前任务处理请求,当请求计数器与阈值取模为0的场合,注销当前任务;

第三步:生成一个新的任务放入队列中,从此时任务缓冲池中获取位于首位的任务取出并赋值与当前任务,继续处理规则执行请求;

第四步:将注销的任务和生成的任务并入队列。

在使用中,根据附图1所示,引入上述方法后,规则引擎压力测试的jmeter测试曲线中,tps稳定在8000左右,系统稳定,响应时间稳定。

在本实施中优选的,第一步中任务缓冲池的数量为3。

设置上述数量,缓冲池中,

个数=1一定不行,注销后到新的生成可以处理下一个任务,有无法对外提供服务的间歇;

个数=2,理论上可行,但有一定的风险,即任务较多,且压力较大的场合,有一定的概率,发生1和2都处理一定的任务后取模=0后被销毁,导致服务器无法对外提供的间歇,因为1和2是异步的生成的,无法保证时序。

个数=3,无法对外提供服务的间歇时间窗口的风险大大降低;

个数>3,概率已经降低到可接受的范围,没有必要开更大的缓冲池及浪费内存空间存储更多的处理器对象。

在本实施中优选的,第二步中注销当前任务的同时一并注销了当前任务中关联的所有事实对象。

设置上述步骤,直接清掉关联此项任务的所有信息,避免频繁产生垃圾。

在本实施中优选的,第二步中阈值根据机器性能、业务场景及任务选取。

阈值与以下信息有关:

1、机器的性能,通常cpu的核数越多,主频越高,阈值可以适当增大,让一个缓冲池中的处理器处理更多的任务后再销毁(因为cpu能力强,从时间的维度上考虑,做的任务就可以多很多);

2、业务场景及任务,如果一个任务很轻量(例如,仅仅是比对一个数值常量和一个输入变量是否相等),即没有内存申请/垃圾回收的时间开销,甚至可能没有读取内存数据的开销(直接命中cpu的缓存),那么就可以增大阀值(因为处理任务简单,从处理效率的维度考虑,做的任务就可以多很多)。

在本实施中优选的,第四步中任务的注销和生成采用异步线程方式实现。

采用是同步的处理方式,完成销毁→生成新的处理器→再处理后续请求。

采用异步的处理方式的话,直接利用缓冲池中的新处理器,马上处理后续请求,同时异步的,利用其他的cpu和线程,做销毁/生成新对象的动作,从而让销毁/生成新处理器,这个动作,不影响后续的规则执行请求。

在本实施中优选的,任务处理器缓冲池中的处理流程中包括以下步骤:

第一步:创建任务处理器缓冲池,位于池中首位的任务处理器赋予当前任务;

第二步:当前任务处理器处理任务请求,计数器增加1;

第三步:当前请求的计数器取阀值的模数=0的场合,注销当前任务处理器,异步通过线程生成任务处理器放入队列尾部列队;

第四步:指定下一个当前任务处理器:从队列新取一个任务处理器。

设置上述处理流程,本发明利用基于知识集的会话缓冲池(knowledge-basedsessionpool)的机制,而非每次将事实对象通过任务api的方式进行销毁,从源头上避免了高并发会频繁的将事实对象放入任务并通过api销毁事实对象的使用方式,但是如果一直不对事实对象进行销毁,又会引入严重的oom问题(内存不足导致java虚拟机崩溃的问题)。

在本实施中优选的,第三步中注销当前任务:是指当前任务已经积累足够多的内存需要进行回收。

设置上述结构,回收注销的任务,降低所占内存,避免浪费cpu占比,避免中断,降低响应时间。

上述实施例仅例示性说明本专利申请的原理及其功效,而非用于限制本专利申请。任何熟悉此技术的人士皆可在不违背本专利申请的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本专利申请所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本专利请的权利要求所涵盖。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1