具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书中的一部分实施例,而不是全部的实施例。基于本说明书中的一个或多个实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书实施例保护的范围。
在业务***的处理逻辑中,常常会存在大量的类似if…then…的逻辑判断规则。在一般的业务***中,如果这样的规则判断不多,作业人员可以用hard code写死来做这样的逻辑判断。但这样的逻辑过于死板,如果逻辑发生稍微的变更,则需要对代码逻辑进行改动并且需要重新发布上线,这对一个业务***来说,十分的不灵活,且不好维护。
一个示例中有这样一种应用场景:需要改变部分订单的结算方式,这个改动点对交易结算影响很大,需要逐步切流以减少风险。订单业务中有buyerId(买家id)、sellerId(卖家id)、tkBizTag(订单打标)……几十个字段,如果采用现有常规方式的针对该场景下的多个切流字段采用一段硬编码来限定切流的场景来做,就很不灵活,单纯这个切流就要上多次线。如果切流字段增减或变更,则可能影响整个订单结算业务的线上运行。
因此有这样的技术需求:使用一种灵活多变的切流方式,即可支持对按照订单对象任何一个参数满足某种条件时进行切流,如按照订单类型字段、某些买家id符合要求。针对以上情况,本说明书实施例一种通用的规则处理引擎,能够灵活的执行规则匹配计算,而使得能够支持各种多样化的业务规则匹配。同时可以支持多类型的规则配置以及多变的规则元素。
本说明书实施例的一些实施方式可以采用Aviator进行规制适配的一些支持和处理。
Aviator是一个表达式引擎,他相当于对一个表达式进行预编译,然后再通过接口调用传递真正的参数进去代替表达式的变量,然后返回表达式的求值结果。Aviator目前支持大部分运算操作符,包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(=~)、三元表达式(?:),并且支持操作符的优先级和括号强制优先级,甚至可以自定义函数,所以,Aviator在规则编译上能够基本覆盖所有的表达式类型。
Aviator是基于java实现的。一个示例中,如果用java实现一个a+b>c的计算,那就要写一个函数,入参是a,b,c,然后函数内部做判断a+b是否大于c。比方说函数如下:
public boolean compare(int a,int b,int c){
return a+b>c
}
然后调用函数compare(100,200,150)判断100+200>150是否成立。
然而,如果此时不是判断100,200,150,而是1.5,2.5,3.5那就要再写一个java函数类似如下:
public boolean compare(double a,double b,double c){
return a+b>c
}
Aviator的实现思路与其他轻量级的求值器很不相同,其他求值器一般都是通过解释的方式运行,而Aviator则是直接将表达式编译成Java字节码,交给JVMJava VirtualMachine(Java虚拟机)去执行。Avaitor可以屏蔽掉这些参数类型信息,比方说a+b>c既可以用于数学表达,也可以用于字符串比较。
同时,如果不是用Aviator,那对于不同的表达式,则需要编写不同的表达式判断函数。
简而言之,Aviator是一个表达式引擎,本说明书的一些实施例中采用Aviator表达引起,可以封装了表达式判断的逻辑,能够适配多种参数类型和多样的表达式。当然,需要说明的是,本说明书的并不排除其他的一些实施例中也可以采用其他表达式引擎或设计语言来实现规则的编译、适配等,如Ognl、MVEL、JSEL、Fel等。
下面以一个具体由Aviator支持的应用场景为例对本说明书实施方案进行说明。具体的,图1是本说明书提供的所述一种业务规则匹配的处理引擎(或简称通用规则引擎、)实施例的***结构示意图。虽然本说明书提供了如下述实施例或附图所示的方法操作步骤或装置、***结构,但基于常规或者无需创造性的劳动在所述方法或装置或***中可以包括更多或者部分合并后更少的操作步骤或模块单元。在逻辑性上不存在必要因果关系的步骤或结构中,这些步骤的执行顺序或装置的模块结构不限于本说明书实施例或附图所示的执行顺序或模块结构。所述的方法或模块结构的在实际中的装置、服务器或终端产品应用时,可以按照实施例或者附图所示的方法或模块结构进行顺序执行或者并行执行(例如并行处理器或者多线程处理的环境、甚至包括分布式处理、服务器集群的实施环境)。
如图1***架构所示,本实施例方案可以对于所有不同的业务模块,由一个规则中心支持,而规则中心可以内含了多种处理器。此处的处理器可以指某一类型规则的处理器,包括从逻辑上划分的针对不同规则类型的逻辑处理单元,一般可使用通用处理器,但也可由业务定义具体类型的处理器。当然,本说明书实施例不排除针对不同类型规则采用不同的实体硬件上的处理器分别处理,具体的可以包括一个处理器处理一个类型的规则匹配,或者一个处理器集群进行适配处理。一个实施方式中,所述处理器可以被配置成一个逻辑上划分的针对单个类型规则的处理器响应一个类型的业务规则适配处理,即采用一个处理器响应一个类型的业务规则适配处理。一个类型的规则匹配处理器可以对输入的参数进行规则匹配,并返回匹配的规则逻辑以及对应的操作逻辑。
对于所有类型的规则,通用规则引擎都可将不同类型的规则存放在一个数据表中。而类型、操作符以及连接符由于数量不多且较为固定,所以可以配置成可以支持存储文件。当然具体的存储方式可以自定义。其中类型指的是规则类型,一般通用类型即可,但对于一些固定的业务规则,可定义成具体的类型方便***实现使用。所述的通用规则在一个示例中,如可以是输入时Map<String,Object>,输出是Map<String,String>,这个通用规则没有具体的类定义,就是一个map对象,具体内容可以被设计在对象内部逻辑里面,处理器可以不做特殊的类处理或者是特殊的业务操作。
本说明书的一个些实施例中,一个处理器可以对应一类规则。比方说,一个模型引擎,可以有分流规则,分流规则的输入是模型编码、用户id,输出是模型版本。例如对于模型编码A,如果用户id尾号是9,则使用版本1的模型。
又比方说一个问答引擎,它可以有模型挂载规则。模型挂载规则的输入是问答场景,输出是模型编码列表。例如对于问答场景a,则允许同时使用A、B、C 3个问答模型。
本说明书提供的通用规则引擎在业务编码实现时可以感知当前类型的业务需要什么类型的规则,可以不需要感知其他业务有什么类型规则。比方说,负责模型分流的,则可以只需要去感知模型分流类的规则,但可以不需要去感知问答模型挂载类的规则。
在实际执行时,处理器可以在初始化时把对应类别的所有规则导进内存,并对每一条规则的执行条件进行编译并缓存起来。每一个类型的业务规则可以视为一个业务规则集合,其中包括了多个针对不同业务参数的不同处理方式。这样,每个业务都可以单独的统一向一个通用规则引擎发送规则匹配请求,通用规则引擎可以根据业务模块的业务类型找到对应的,目标规则类型的处理器,然后在该处理器缓存的业务规则集合中根据传入的业务参数查找适配的业务规则。如果查找到,则可以返回规则逻辑和/或对应的操作逻辑。
本说明书基于上述通用规则引擎的***结构实现,还提供一种业务规则匹配的处理方法。具体的,图2是本说明书提供的所述方法一种实施例的方法流程示意图,具体的可以包括:
S0:接收规则匹配请求,所述规则匹配请求包括业务参数和业务类型;
S2:根据所述业务类型确定对应于规则中心的目标规则类型,所述规则中心包括预先编译并缓存的不同规则类型的业务规则集合;
S4:根据所述业务参数在所述目标规则类型的业务规则集合中查找适配的业务规则;
S6:返回查找到的适配的业务规则的执行逻辑。
所述的规则匹配请求可以包括业务方发来的请求信息,所述的业务方可以根据实际应用场景进行确定和划分,如不同的业务模块,或不同的用户接入方等。所述的规则匹配请求中可以包括业务方传入的业务参数和所述业务方所属的业务类型(也可以为业务方请求匹配的业务类型)。
本说明书实施例提供的所述方法以及通用规则引擎的方案能够实现,把不同类型规则都归一成一个统一的模型,可以避免了针对不同类型、维护不同数据的麻烦。更加支持灵活的修改规则逻辑,规则涉及变量以及规则对应的执行逻辑,能够做到实时修改以及实时生效,避免了***的重新发布上线。同时可以将规则匹配逻辑抽象化,业务***可以只需要关心输入输出,可以不需要了解适配过程,这样能够很好地避免硬编码逻辑,灵活的支持业务规则匹配以及执行后续操作。
下面以一个具体的应用示例来描述本说明书通用规则引擎的实现和方法的应用。本方案可以将所有的表达式规则信息都放在一个表来维护和更新。
规则:关于本说明书实施例中提到的规则,本示例仅针对常量值比较规则进行介绍,如A>150或A>150&&B<100||A in(1,3,5,7,9)。在这些规则里,每个规则都可以拆成多个子表达式,如:
A>150可以拆成子表达式A>150;
A>150&&B<100||A in(1,3,5,7,9)可以拆成子表达式A>150、B<100、A in(1,3,5,7,9)。
如果一个表达式中存在多个子表达式,则他们之间使用符号进行连接,此处称之为连接符。
而上面的子表达式中,可以有一个变量值,一个常量值,如A>150,变量值为A,常量值为150,又或者如A in(1,3,5,7,9),变量值为A,常量值为(1,3,5,7,9)。每个变量值与常量值之间,也有符号连接,此处称之为操作符。
需要说明的是,本示例中拿常量值比较规则进行介绍,仅是举一个较易理解的场景,也是业务场景用的最多的场景进行本说明书实施例方案的创新介绍。类似的组合变量常量值比较,如A+B>150,在通用规则引擎上也能够进行实现,仅是***实现上需要作必要的升级而已,与本示例相比不过是实现上的差异。所以本说明书不在对出常量值比较规则以外的其他规则例如执行表达式、三元操作符、数组操作、位预算,正则匹配进行介绍,本领域技术人员基于本说明实施例方案的内容介绍可以无需创造性劳动的进行扩展、结合、变形和变换处理。
操作符:操作符用于连接规则中的变量值与常量值,比方规则A>150,操作符大于号(>)则连接了变量A和常量150。通用规则引擎的操作符分两种类型,一类是简单类型,包含:=、!=、≥、≤、>、<,另一类是离散操作符,包含:IN,NOTIN。这两类操作符基本能够涵盖所有的规则判断组合。
连接符:连接符可以用于连接一个规则中的多个子表达式,使它们组合起来能够表达某个规则。比方规则A>150&&B<100||A in(1,3,5,7,9),其中连接符&&与||连接了子表达式A>150、B<100与A in(1,3,5,7,9)。本实施例中通用规则引擎使用的连接符包含了以下几种:(、)、&&、||。
规则表达式:在规则表达式中,可以使用json字符串来表达一个规则。通常在一个规则json串中,包含两个元素,分别是formulaFactors与formulaFormat,formulaFactors是一个json数组,表示子表达式,formulaFormat则表示表达式格式,用连接符以及占位符来表达。每个子表达式又是一个json串,其中可以包含4要素,factorCode、factorType、factorValue、operatorCode分别表示字符串中的变量、变量类型(java类型)、常量值以及操作符。举一个例子说明如下:
{
"formulaFactors":[
{"factorCode":"type",factorType":"STRING","factorValue":"STANDARD","operatorCode":"="},
{"factorCode":"tag_id_list","factorType":"STRING","factorValue":"[253,232,290]","operatorCode":"IN"},
{"factorCode":"tag_id_list","factorType":"STRING","factorValue":"[227,184]","operatorCode":"NOTIN"},
{"factorCode":"type","factorType":"STRING","factorValue":"KBASECORE","operatorCode":"="},
{"factorCode":"cat_id","factorType":"STRING","factorValue":"[213487,0]","operatorCode":"NOTIN"}
],
"formulaFormat":["(","%s","&&","%s","&&","%s",")","||","(","%","s",")"]
在上述formulaFormat中,每个占位符%s表示formulaFactors中的一个子表达式,按顺序表示。所以,如果将上面的json字符串翻译成一个表达式,则表达式如下:
(type=STANDARD&&tag_id_list IN[253,232,290]&&tag_id_list NOTIN[227,184])||(type=KBASECORE&&cat_id NOTIN[213487,0])。
规则类型:在通用规则引擎中,支持通用类型以及自定义类型、通用类型。例如可以直接用Map<String,Object>做引擎的输入输出,而自定义业务类型则会可以规则的输入输出绑定到某个自定义的业务对象上去。
规则表:
通用规则引擎的实现目的,除了为了支持多样的规则适配,还可以支持返回适配后的操作指导。这可以应用并结合到业务***做规则判断的处理结果返回。本实施例在通用规则引擎中,规则表存储的信息可以如下表格1所示:
表1
其中,规则类型表达了当前规则之后在处理时返回的具体对象,而触发条件与执行逻辑都用规则表达式来表达,分别表示判断规则以及适配后要执行的相应逻辑。例如一个示例中,如下是一个机器人与算法模型关联的配置规则,其中,触发条件如下:
上面的规则表达的是,如果模型码为MODE00000001且机器人码为ALIR00003082或者ALIR00003078,则模型版本使用20170306151518_90。因此,本说明书的一些实施例中,所述业务规则集合中的业务规则可以包括预先编译的触发条件和对应的执行逻辑;
相应的,所述适配的业务规则包括传入的所述业务参数满足的触发条件所对应的业务规则。
处理器:处理器可以用于维护一类规则的编译、适配以及返回处理逻辑。除非有特殊要求,否则本说明一些实施例中的处理器的内部逻辑都是一样的,区别只是在于用于维护不同类别的规则,从而方便当某类规则发生变化时,只对相应的处理器进行规则重新编译。因此,本说明书的一些实施例中,可以采用不同的规则类型使用不同的处理器响应业务规则的适配处理方式,所述的处理器包括逻辑上划分的针对不同规则类型的逻辑处理单元。当然,采用其他的方式如所有类型的规则都使用一个处理器或处理器集群进行处理也可以实现本说明书方案,本说明书不排除使用功能强大的处理器进行同时针对多个类型的规则进行匹配处理的方式。
处理器在初始化时,可以把对应类别的所有规则导进内存,并对每一条规则的执行条件进行编译并缓存起来。例如一个实施例中,所述规则中心预先编译并缓存的不同规则类型的业务规则集合可以包括:
在所述处理器初始化时将对应类型的业务规则导入内存,利用Aviator能对所述业务规则使用的JSON串格式的触发条件进行编译并缓存起来。
本实施中如果要使Aviator能够对存储的触发条件json串进行编译,处理器还可以对json串进行翻译,翻译成Aviator可理解的表达式。编译过后,可以将对应的编译字节码,以及同个规则下的执行逻辑一同存放在一个编译器对象里。当处理器完成初始化后,可以得到一个编译器列表,列表中的每个编译器含有一个触发条件编译字节码以及对应的执行逻辑。这样一个规则类型的处理器可以根据所述业务参数在所述目标规则类型的业务规则集合中查找适配的编译器。
因此,本说明书提供的所述方法的另一个实施例中,所述规则中心包括预先编译并缓存的不同规则类型的业务规则集合可以包括:
S20:使用Aviator对所述触发条件进行编译;
S22:分别将编译过后触发条件对应的编译字节码、以及触发条件对应的属于同一个规则下的执行逻辑存放在一个编译器对象中,得到编译器列表;
相应的,所述根据所述业务参数在所述目标规则类型的业务规则集合中查找适配的业务规则包括根据所述业务参数在所述目标规则类型的业务规则集合中查找适配的编译器。
其他的实施例中,如果只是一个通用类型的规则,那么处理器的输入的输入输出是一个Map对象,变量参数以及对应的处理逻辑参数可以放在Map里。对于一些固定的业务类型,本说明书实施例可以把入参和出参都改成一个Java对象,然后通过Java反射机制,获取一个入参的所有参数值,然后转成Map对象给Aviator做适配,同时也可以通过Java反射机制,将输出的处理逻辑信息都填到Java对象里输出。这里只需要要求对象里的属性名字以及类型要和规则表达式中的变量名以及类型保持一致即可完成上述步骤。
规则中心:规则中心可以负责与各个业务模块进行交互。业务模块根据自己所需要的规则类型,传入规则匹配请求。该规则匹配请求可以包括传入的业务参数(入参),也可以包括业务模块(或其他业务方)的业务类型。规则中心会根据具体的类型寻找合适的处理器并让处理器执行真正的逻辑。具体实施时,本说明书实施例不限于所述规则匹配请求中一定包括业务类型的字段信息,所述的规则匹配请求中本身可以包括请求的规则类型,该请求的规则类型通常与业务方当前的业务类型(包含场景类型)对应,因此本说明书实施例中规则匹配请求包含了请求的规则类型的实施方式,此时规则中心可以直接确定执行规则适配的处理器(目标规则类型)。其他的方式如规则匹配请求的消息源标记、时间戳等可以表征业务方身份或类型的信息均可以理解为本实施例中所述的规则匹配请求中包含了业务类型。
本说明书提供的一种实施方案可以应用到包括一个或多个服务器的通用规则引擎的***构架中。所述的***可以包括单台计算机设备,也可以包括多个服务器组成的服务器集群,或者分布式***的服务器结构。在通用规则引擎中,规则中心在启动时,可以把所有的规则都加载到内存中去,并且让不同的处理器都把他们进行预编译。然后业务在运行时,会根据自身需要,请求规则中心进行规则匹配,并且传入当前业务参数。规则中心可以根据业务类型,选择对应的处理器,然后将当前业务信息传递给处理器,处理器在自己的规则库里寻找适配的规则,然后往上返回规则。图3是本说明书提供的一个规则中心的规则匹配设计结构示意图,在如图3中,规则中心中,会有多个规则处理器(即上述逻辑上划分的处理器),不同类型的规则,在不同的处理器里面。而每条规则会被预先转成编译器。编译器里会有对应具体业务规则的触发条件和执行逻辑,触发条件会被编译成字节码。一个编译器包含编译好的触发条件以及对应的执行逻辑。编译器的用途之一在于,做条件匹配,匹配上了,则把这个编译器对应的执行逻辑作为他的结果输出。业务规则中的执行逻辑,不需要被编译,执行逻辑可以用在条件匹配上以后做业务逻辑。
比方说一个机器人平台,会有机器人场景分流规则、场景模型挂载规则、模型分流规则、机器人转人工规则等多样的业务规则信息。这些信息在***启动时会加载到内存中,然后不同类型的业务规则由不同处理器来执行编译以及适配。
当一个机器人场景初始化的时候,就需要判断模型是否要执行分流。此时会请求规则中心返回分流信息,并且告知规则中心当前的场景信息(传入的业务参数),包括场景、时间、用户等当前业务信息。然后规则中心根据请求的场景分类规则会将这个适配交给机器人场景分流规则处理器来做适配,该处理器会基于当前规则寻找是否有适配的信息,如果有,则返回场景分流的具体规则信息。
在本说明书的一个或多个实施例中所述的特规则中心的各个类型的业务规则、规则表,可以采用离线预先构建、设计。本说明书不排除所述规则中心、规则表采用在线构建/更新/维护的方式,在计算机能力足够的情况下,可以在线构建出规则中心或规则表,可以同步在线使用,使通用规则引擎可以能够做到实时修改以及实时生效。
本说明书中上述方法的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。相关之处参见方法实施例的部分说明即可。
本申请实施例所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在服务器上为例,图4是本发明实施例的一种业务规则匹配处理的服务器的硬件结构框图。如图4所示,服务器10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。本领域普通技术人员可以理解,图4所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,服务器10还可包括比图4中所示更多或者更少的组件,例如还可以包括其他的处理硬件,如关系型或非关系型书库,或者具有与图4所示不同的配置。
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的搜索方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述导航交互界面内容展示的处理方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输模块106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输模块106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输模块106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
基于上述各个实施例所述的一种业务规则匹配的处理方法,本说明书还提供一种业务规则匹配的处理装置。所述的装置可以包括使用了本说明书实施例所述方法的***(包括分布式***)、软件(应用)、模块、组件、服务器、客户端等并结合必要的实施硬件的设备装置。基于同一创新构思,本说明书提供的一种实施例中的处理装置如下面的实施例所述。由于装置解决问题的实现方案与方法相似,因此本说明书实施例具体的处理装置的实施可以参见前述方法的实施,重复之处不再赘述。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。具体的,如图5所示,图5是本说明书提供的可以用于服务器一侧的一种业务规则匹配的处理装置实施例的模块结构示意图,具体的可以包括:
规则中心模块101,可以用于接收规则匹配请求,所述规则匹配请求包括业务参数和业务类型;还用于根据所述业务类型确定对应于规则中心的目标规则类型;所述规则中心存储预先编译并缓存的不同规则类型的业务规则集合;
分类适配模块102,可以用于触发所述目标规则类型对应的处理器在所述目标规则类型对应的业务规则集合中查找适配的业务规则;
规则返回模块103,可以用于返回查找到的适配的业务规则的执行逻辑。
当然,所述的处理器可以如前述所述的规则处理器,可以包括实体硬件上分开的处理器,也可以包括逻辑上划分的处理单元,处理一个类型的规则处理器可以是一个硬件处理器,也可以是多个硬件处理器共同实现。
本说明书实施例提供的业务规则匹配的处理方法可以在计算机中由处理器执行相应的程序指令来实现,如使用windows操作***的c++语言在PC端实现,或其他例如Linux、android、iOS***相对应的应用设计语言集合必要的硬件实现,或者基于量子计算机的处理逻辑实现等。具体的,本说明书提供的业务规则匹配的处理设备实现上述方法的实施例中,所述处理设备可以包括处理器以及用于存储处理器可执行指令的存储器,所述处理器执行所述指令时实现:
接收规则匹配请求,所述规则匹配请求包括业务参数和业务类型;
根据所述业务类型确定对应于规则中心的目标规则类型,所述规则中心包括预先编译并缓存的不同规则类型的业务规则集合;
根据所述业务参数在所述目标规则类型的业务规则集合中查找适配的业务规则;
返回查找到的适配的业务规则的执行逻辑。
所述处理设备的另一个实施例中,所述业务规则集合中的业务规则包括预先编译的触发条件和对应的执行逻辑;
相应的,所述适配的业务规则包括传入的所述业务参数满足的触发条件所对应的业务规则。
图6是本说明书提供的所述业务规则匹配处理设备的一个实施例结构示意图。
所述处理设备的另一个实施例中,所述规则中心包括预先编译并缓存的不同规则类型的业务规则集合包括:
使用Aviator对所述触发条件进行编译;
分别将编译过后触发条件对应的编译字节码、以及触发条件对应的属于同一个规则下的执行逻辑存放在一个编译器对象中,得到编译器列表;
相应的,所述根据所述业务参数在所述目标规则类型的业务规则集合中查找适配的业务规则包括根据所述业务参数在所述目标规则类型的业务规则集合中查找适配的编译器。
所述处理设备的另一个实施例中,采用不同的规则类型使用不同的处理器响应业务规则的适配处理方式,所述的处理器包括逻辑上划分的针对不同规则类型的逻辑处理单元。
所述处理设备的另一个实施例中,采用一个处理器响应一个类型的业务规则适配处理。
所述处理设备的另一个实施例中,所述规则中心预先编译并缓存的不同规则类型的业务规则集合包括:
在所述处理器初始化时将对应类型的业务规则导入内存,利用Aviator能对所述业务规则使用的JSON串格式的触发条件进行编译并缓存起来。
上述实现处理设备的程序指令可以存储在多种计算机可读存储介质中。所述计算机可读存储介质可以包括用于存储信息的物理装置,可以将信息数字化后再以利用电、磁或者光学等方式的媒体加以存储。本实施例所述的计算机可读存储介质有可以包括:利用电能方式存储信息的装置如,各式存储器,如RAM、ROM等;利用磁能方式存储信息的装置如,硬盘、软盘、磁带、磁芯存储器、磁泡存储器、U盘;利用光学方式存储信息的装置如,CD或DVD。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。本说明书中涉及到装置或服务器或客户端或***中的指令同上描述。
本说明书提供的处理设备的实施方案,可以提供一种通用的规则处理引擎,能够灵活的执行规则匹配计算,同时支持多类型的规则配置以及多变的规则元素。可以不同类型规则都归一成一个统一的模型,大大降低了针对不同类型、维护不同数据的复杂性,大大提高业务规则匹配和维护效。支持灵活的修改规则逻辑,规则涉及变量以及规则对应的执行逻辑,能够做到实时修改以及实时生效,避免了***的重新发布上线。同时将规则匹配逻辑抽象化,业务***可以只需要关心输入输出,可以不需要了解适配过程,这能够很好地避免硬编码逻辑,灵活的支持业务规则匹配以及执行后续操作,大大提高业务规则匹配效率。
需要说明的是,本说明书实施例上述所述的装置、处理设备,根据相关方法实施例的描述还可以包括其他的实施方式。具体的实现方式可以参照方法实施例的描述,在此不作一一赘述。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于硬件+程序类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
虽然本申请提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
尽管本说明书实施例以及内容中提到Aviator表达式引擎编译、规则表的格式类型、通用规则引擎***构架等之类的数据获取、判断、交互、计算、判断等操作和数据描述,但是,本说明书实施例并不局限于必须是符合行业通信标准、标准Aviator语法、通信协议和标准数据模型/模板或本说明书实施例所描述的情况。某些行业标准或者使用自定义方式或实施例描述的实施基础上略加修改后的实施方案也可以实现上述实施例相同、等同或相近、或变形后可预料的实施效果。应用这些修改或变形后的数据获取、存储、判断、处理方式等获取的实施例,仍然可以属于本说明书的可选实施方案范围之内。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字***“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
虽然本说明书实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书的实施例可提供为方法、***或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书实施例的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书实施例的实施例而已,并不用于限制本说明书实施例。对于本领域技术人员来说,本说明书实施例可以有各种更改和变化。凡在本说明书实施例的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书实施例的权利要求范围之内。