前面有聊过规则引擎以及RETE算法,今天就产品化方案给大家介绍下URule。带大家了解一下他是如何担当得起国产规则引擎大哥大的。

目录

  • 第一章节:Urule
    • 1、Urule简介
    • 2、系统架构图
    • 3、技术架构图
    • 4、运行模式
      • 4.1、嵌入式模式
      • 4.2、本地模式
      • 4.3、分布式计算模式
      • 4.4、独立服务模式
    • 5、对科学计算的支持
    • 6、规则设计器
  • 第二章节:urule知识包编译过程
    • 1、关键流程解析
    • 2、RETE编译模型
    • 3、手动绘制rete树
  • 第三章节:urule知识包匹配过程
    • 1、关键流程解析
    • 2、RETE执行模型

第一章节:Urule

1、Urule简介

URule是一款国产公司(上海锐道信息技术有限公司)的纯Java规则引擎。该规则引擎提供了规则集、决策表、交叉决策表(决策矩阵)、决策树、评分卡、复杂评分卡、规则流等八种类型的业务规则设计工具,从各个角度满足复杂业务规则设计的需要。该引擎提供了可视化平台,可以让用户简单快速的基于浏览器做规则设计,以及仿真测试。该规则引擎核心采用Rete算法,在此基础上做了相关优化,对整个引擎的处理性能做了很大的提高。

2、系统架构图


用户通过浏览器打开URule规则设计器来定义业务规则,完成后的业务规则文件会被存储在规则存储仓库中。规则文件调用时引擎会从规则存储仓库里把指定的规则文件取出,再通过规则构建引擎对规则进行解析、编译,最后由规则执行引擎执行并返回结果。

3、技术架构图

4、运行模式

4.1、嵌入式模式

所谓的嵌入式,是指将URule Pro直接嵌入到我们的Java Web应用当中,作为应用的一部分运行。这种模式的好处是配置起来比较简单;
       而不好的地方在于因为将URule Pro直接嵌入到我们的应用当中,如果我们有多个涉及到规则引擎的应用, 那么每个应用都需要嵌入一个URule Pro模块,
所以更多的时候我们使用的是独立服务模式。

4.2、本地模式

本地模式类似于嵌入式模式,所不同的是嵌入到我们客户端应用中的URule Pro模块仅仅为其规则计算部分(core部分),不含设计器部分(console部分);
       之后将测试好的知识包导出为一个.data格式文件,然后把文件放在客户端应用的一个指定目录下或数据库中,这样客户端应用在调用知识包时就直接到这个指定目录下或数据库中查找目标.data文件并加载。
       这种模式非常适用于规则运行环境封闭,且需要对外部屏蔽规则设计细节的应用需要,其部署模式简单、快捷,一旦有新的知识包放入指定目录中,客户端应用会自动检测并加载新的版本。

4.3、分布式计算模式

分布式计算模式是指将URule Pro部署为一个独立的Java Web应用,在这个应用里定义各个业务系统所需要业务规则,定义好后统一存储到一个规则存储仓库当中。
       业务系统要使用规则时只需要指定URule Pro Server的地址即可通过HTTP协议取到目标规则包,然后解析并运行。

       在分布式计算模式下, 一个URule Pro Server可以下挂多个需要用到规则引擎的业务系统,但实际的业务规则在运行时还是发生在各个业务系统中,而不是URule Pro Server上,所以称之为分布式计算模式。
       各个业务系统在运行业务规则时,会首先检查要运行规则对应的规则包在本地缓存中是否存在,如果存在则直接使用,不存在则通过配置的URule Pro Server地址向Server发出使用对应规则包的请求,
URule Pro Server收到请求后会将指定的规则包序列化成JSON,通过HTTP协议传递给请求的业务系统。业务系统收到传递过来的规则包后,会首先对其进行反序列化,将JSON格式的规则包反序列化为Java对象并在本地缓存下来,然后再使用这个规则包进行业务规则的计算。
       可以看到,在这个过程当中,URule Pro Server只负责业务规则的定义、编译与发布,不负责具体的业务规则执行,具体的规则执行还是发生在各个业务系统当中,可以大大减轻URule Server的压力,使得规则的计算可以分布到各个业务系统所在的服务器上, 从而可以根据需要对计算规则的服务器进行灵活的扩充。

分布式计算模式下的规则包更新
       在分布式计算模式下规则包的更新有两种方式:一种是主动推送方式;一种为定时更新的方式。
       主动推送方式是指URule Pro Server在规则包更新后,会主动将更新后的规则包通过HTTP协议推送到配置好的各种业务系统应用的缓存当中,这样各个业务系统中的规则包就可以与Server中的规则包时刻保持一致, 但这种推送方式要求对应的各个业务系统应用必须是一个标准Java Web应用,否则这种推送无法实现,如果您的业务系统应用是一个Java应用,而非一个标准的Java Web应用,那么要更新规则包就不能采用这种推送方式,而需要使用定时更新的方式。
       定时更新方式是指具体调用规则的业务系统,可以通过相应的参数配置,周期性的检查URule Pro Server上当前业务系统用到的规则包是否有更新,如果有则主动从Server上取下来并序列化成Java对应缓存到当前业务系统中备用,如果没有更新则不做任何操作。
所以如果您的业务系统是一个非Java Web应用,那么更新规则包可以采用定时更新的方式实现;相反如果您的业务系统是一个标准的Java Web应用,那么主动推送和定时更新两种方式都可以,当然主动推送的方式更为合适。

4.4、独立服务模式

独立服务模式也是规则引擎的传统运行模式,那就是把规则的调用以一个Restful服务的形式对外提供,客户端可以是Java、C#、C++或Javascript,

客户端只需要把标准的JSON格式的输入数据提交给规则服务器,服务器调用规则计算完成后会以JSON格式作为响应返回。Restful服务支持安全验证,

提供完善的调用测试页面,同时对于输入数据,还支持复杂的JSON数据嵌套,以最大限度满足复杂业务需求;对于大批量并发调用,URule Pro提供完整的集群支持。

5、对科学计算的支持

在URule Pro当中提供了平方根、方根、乘方、分数、指数、对数、自然对数、绝对值、圆周率、向上取整、向下取整、极值、三角函数、反三角函数等15大类,
       近40个小类的常用数学符号,这些数学符号可以在规则的动作定义部分当中, 可进行几乎所有类型的可视化的科学计算, URule Pro应该是目前市面上唯一一款能进行可视化科学计算的规则引擎。
这些数学符号在规则动作中使用效果如下图所示:

6、规则设计器

向导式规则集(决策集)
通过全向导方式,鼠标点点就可以完成

脚本式规则集
编写脚本实现规则定义

决策表
通过二维表方式定义规则

决策树
将业务规则以一棵树形展开定义

评分卡
针对简单评分设置的一种业务规则工具

规则流
对已有规则的可视化编排

第二章节:urule知识包编译过程

1、关键流程解析

urule知识包是规则执行的唯一入口,规则执行分为知识包的编译构建rete网络和规则匹配运行两部分
以下是近期阅读urule源码大概画了个编译流程

2、RETE编译模型


RETE网络编译构建过程
1、解析构建知识包中的所有规则对象Rule,每个规则对象Rule包含【条件部分LHS】和【结论部分RHS】
2、创建虚拟节点root
3、循环处理每个规则Rule的LHS
       3.1、获取当前规则的LHS Criterion0 (将整个LHS和每个模式以及连接的and和or统一抽象成一个公共接口对象)
       3.2、判断上述Criterion0类型 AND OR Criteria(模式节点) 一般LHS的Criterion要么AND类型要么OR类型
       3.3、假设LHS的Criterion是AND类型 则获取其子节点分别处理
       3.4、获取一个子节点Criterion1,取得该模式中左部内容的类型T1
       3.5、从缓存中取得上述类型的节点,如果不存在则创建一个并放入缓存
       3.6、从上述类型节点的子节点中获取与当前处理节点共同conditionId的节点(“[变量]会员.等级【大于】[字符]18”)
       3.7、上述操作如果获取不到,则新创建一个条件节点C1挂在上一步的类型节点下,获取到则直接返回,并将新创建或返回节点置为preNode,等待下一节点的构建
       3.8、重复3.4操作处理另一个AND下子节点,并挂在上一子节点下
       3.9、如果子节点也是一个大的连接节点,则重复3.2操作,处理完所有子子节点后构建一个连接节点返回,并和上一个子节点一起连上连接节点
4、LHS多层处理后会返回一个底层节点,可能是条件节点Criteria 也可能是连接节点 然后创建一个终端节点何其相连接
5、网络构建完成

3、手动绘制rete树

知识包:ExecutionSequence 测试执行顺序
规则文件:
jcr:/demo/ExecutionSequence.rs.xml

jcr:/demo/test.rs.xml

手动绘制rete树

程序生成rete树

第三章节:urule知识包匹配过程

普通规则集匹配过程跟rete算法匹配过程基本一致,特殊规则如循环规则和规则流,则是构建多个知识包即多个rete网络进行匹配。这也是之前应用中使用规则流效率低的原因!慎用!!!

1、关键流程解析

2、RETE执行模型


RETE执行匹配过程
1、循环每个事实数据进行匹配
2、匹配网络中是否存在和事实数据相同类型的类型节点,如果类型匹配成功,通过网络联线找到该类型下所有子节点循环匹配
3、循环一个节点上,可能是条件节点,也可能是连接节点,嵌套循环还可能是终端节点即匹配成功
       3.1、如果是条件节点,先查缓存中是否有匹配结果,有直接取出,没有则进行匹配并将匹配结果放入缓存,匹配成功后记录到追踪器FactTracker中并继续寻找下一节点匹配
       3.2、如果是连接节点,则判断其所有上游节点是否都匹配成功,都匹配成功后继续寻找下一节点匹配
       3.3、匹配到终端节点后,将终端节点上的规则放如追踪器FactTracker中
       3.4、该事实数据匹配完成后将追踪器FactTracker放入议程中去
       3.5、议程中存在三种议程池类型,互斥组、执行组、默认组(即不指定规则分组),议程循环处理每个池子中的激活规则
4、匹配执行完成

认真生活,用心分享

国产规则引擎urule,产品化方案的扛把子相关推荐

  1. 规则引擎和流程引擎我该怎么理解

    流程引擎 什么是流程引擎 流程引擎就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程 ...

  2. URULE规则引擎——决策树

    简介 决策树又称为规则树,是URule Pro规则引擎中提供的另外一种构建规则的方式,它以一棵躺倒的树形结构来表现规则(之所以将其躺倒是为了节省空间,否则一棵稍微大点的树将会占用很大的页面空间),决策 ...

  3. URULE规则引擎部署

    简介 urule规则引擎是纯java开发,运行时借鉴Rete了算法的优势,独创了一套自己的规则模式匹配算法,这套算法可以从根本上保证规则运行的效率,实现大量复杂业务规则计算时的毫秒级响应. urule ...

  4. 流程/规则引擎-ice介绍

    0.代码地址 https://github.com/zjn-zjn/ice 1.产生背景 想到"通过什么->得到什么"类问题,第一个想到的恐怕就是活动类项目的开发,用户通过一 ...

  5. 开源规则引擎——ice:致力于解决灵活繁复的硬编码问题

    背景介绍 业务中是否写了大量的 if-else?是否受够了这些 if-else 还要经常变动? 业务中是否做了大量抽象,发现新的业务场景还是用不上? 是否各种调研规则引擎,发现不是太重就是接入或维护太 ...

  6. 调研规则引擎用于八字命理

    熟悉命理书的朋友都知道,书上计划都是一些条文组成的断语,从下表可以看到,命理大师们习惯描述什么条件,会出现什么样的情况,这样看起来是不是很像规则引擎的职能呢?于是我就想调研一下java相关的规则引擎, ...

  7. groovy 规则引擎 java_Java内嵌Groovy脚本引擎进行业务规则剥离(一)

    一些常见商业应用程序或企业应用,大多都会遇上业务规则在一定的条件下,允许进行一些灵活的配置,以满足业务变化的需要. 解决的方式大致有以下几个方面: 最为传统的方式是java程序直接写死提供几个可调节的 ...

  8. 从0到1:构建强大且易用的规则引擎

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 张宁 来源 | 公众号「zhisheng」 2 ...

  9. 【采用】规则引擎Pyke与PyClips对比研究报告(高大上啊,第一次听说pyke和pyclips这俩词~)

    1. 背景综述 规则引擎主要实现的功能是存储.分类和管理规则,执行规则.推断其它事实的应用程序.其中的规则主要是指企业或商务业务逻辑.法律条款等.在规则引擎发展的过程中,Rete算法和Prolog语言 ...

  10. 规则引擎:大厂营销系统资格设计全解

    业务进行营销活动目的是用最少的钱实现更好的营销效果,此时就需要针对营销活动的资格进行控制,其中就包括了用户身份.用户所处的环境等等一系列因素的考虑,且为了防止恶意套取营销费用和做到营销效果的持续性,会 ...

最新文章

  1. 猫狗收养所问题(指针模拟)
  2. lvm-snapshot:基于LVM快照的备份
  3. tf.summary.FileWriter
  4. js的navigator对象的使用(浏览器信息)
  5. IBM Machine Learning学习笔记(二)——Supervised Learning: Regression
  6. python中装饰器的作用_Python中装饰器的用法
  7. SQL Server 数据库文件和文件组
  8. 关于Latex学习网站推荐
  9. Android主题色设为透明
  10. 低功耗SD\SPI NAND Flash芯片
  11. 2020年史上最全移动端Web整理从开发基础到实战(三)
  12. Linux FTDI
  13. Micropython——九轴MPU9250模块的使用
  14. 视频教程-Javascript DOM操作-JavaScript
  15. AV-TEST给出Android平台最佳防毒软件排名
  16. 设计模式-责任型模式(责任链模式)
  17. java进行抽奖_简单实现java抽奖系统
  18. mini2440的pwm驱动程序和测试程序详解
  19. 最好用的Python爬虫推荐
  20. Ext表单之loadRecord用法详解

热门文章

  1. 下载DirectX 9 SDK开发包
  2. 第四代计算机cpu采用的超大规模集成电路,计算机一级试题a.doc
  3. Web API 之 — Fullscreen API
  4. 服务器lsass占用内存_记一次服务器病毒查杀过程:lsass.exe占用内存高
  5. Linux虚拟机安装VMware Tools
  6. qq在计算机上丢失怎么办,我把电脑界面上的我的电脑 QQ等东西全部弄消失了 怎么才能恢复...
  7. 富士施乐Fuji Xerox DocuPrint M225 dw 驱动
  8. 能上QQ但是打不开网页
  9. 卡巴斯基最新激活码,卡巴斯基免费下载
  10. 卡巴斯基互联网安全套装V6.0个人版激活码