KIE DROOLS 架构简析

本文侧重对官方文档的解读及扩展。同时结合自身的实践分享一些自己的见解。
请结合官方文档阅读
https://docs.jboss.org/drools/release/7.10.0.Final/drools-docs/html_single/index.html

1. 背景故事

规则引擎起源于基于规则的专家系统(专家系统CLIPS:源于1984年NASA的人工智能项目。基于规则的专家系统是专家系统的一个分支)。
基于规则的专家系统(RBES)包括三部分:Rule Base(knowledge base)、Working Memory(fact base)和Inference Engine(推理引擎)。它们的结构如下系统所示:

rbes.jpg

推理引擎(Inference Engine)包括三部分:模式匹配器(Pattern Matcher)、议程(Agenda)和执行引擎(Execution Engine)。这里不详述。

1.1. 规则引擎的作用

  1. 将繁杂的业务逻辑从代码中抽取出来(整合成规则文件或者规则包)。有利于规则知识的复用及维护。
  • 规则文件或规则包,与程序代码相对独立。易于提供给其它项目或本项目的其它模块调用
  • 能够实时响应业务规则的更新。可避免由业务规则变更带来的代码变更、程序更新操作。
  • 积累下来的规则可为新规则的制定提供依据和参考。
  1. 能够极大地提升业务逻辑的执行效率。详见下文。

说到DROOLS不得不提到RETE算法。RETE算法是目前效率较高的一个演绎法推理算法。包含DROOLS在内的许多规则引擎都是基于RETE算法进行推理计算的。

1.2. 关于RETE算法

这个可以点:
https://www.jianshu.com/p/3e9afe9e0617

2. KIE DROOLS

Drools是一套规则管理、执行解决方案。它主要包含几个部分:一个业务规则引擎(Bussiness Rule Engine)Drools Expert ,一个规则管理网站(Drools Workbench),一个Eclipse IDE的插件(用于开发),一个执行服务器(KIE EXCUTION SERVER)。
比较有趣的是:Drools Workbench 具备KIE Excution Server 注册和发现的功能;KIE Excution Server 自带Container概念。不知是否可以让你想起 SpringBoot、docker中的相关概念。

2.1. 经典架构

在实际项目中应用Drools的方式大概可分为两种类型:
1.项目嵌入drools expert(drools-core),加载规则,执行规则。

  1. kie excution server 加载规则、执行规则;项目通过远程调用得到执行结果。
    为便于辨识,将两种经典的架构分别命名为:嵌入模式、分离模式。

2.1.1. 嵌入模式:应用本地加载规则、执行规则。

项目引入drools-core、kie-api相关等依赖项。自行创建规则文件或规则工程。工程内部基于kie-api提供的方法加载规则、编译规则、插入事实、执行规则。

规则工程可单独创建。基于maven 进行发布管理。调用方基于k-jar的GAV信息在pom中加入依赖项实现对规则工程的引用。如调用方设置了kie-scanner可实现规则版本动态更新.
demo: https://blog.csdn.net/gongxsh00/article/details/79529924

这种结构虽然简单,却也体现了引入规则引擎的初衷。我们可以将业务规则从繁杂的逻辑代码中提取出来,沉淀下来。提高执行效率,降低维护成本。
一些变化不频繁的业务规则同样可以提取成规则文件。

2.1.2. 分离模式

kie excution server 加载规则、执行规则、扫描规则更新。应用通过远程调用得到规则执行结果。

2.1.2.1.基于kie workbench维护规则工程

下图展示了基于drools workbench维护规则工程,基于kie excution server加载、执行规则的经典架构。


RE原生.png
  • 规则工程创建及部署步骤:
  1. drools workbench创建规则工程(或从远程git仓库拉取规则工程)编辑并保存到本地内置的Git仓库。
  2. drools workbench指定project执行maven命令:compile、test、install、depLoy 等。将规则包(k-jar)发布到本地的maven仓库。
  3. drools workbench调用kie excution server的api通知其创建特定的container用于部署指定GAV的k-Jar。
  4. kie excution server从maven repo获取指定GAV的k-jar,创建container加载k-jar。
    可针对container设定 kie scanner。当容器部署的k-jar(如 com.ecip.demo:1.0.0)有更新时。kie scanner 将新的k-jar拉取下来并更新对应的Container。
  • kie workbench支持从远程git仓库拉取规则工程,进行编辑后保存到本地git repo
  • kie excution server可从多个源加载 k-jar。不限于kie workbench内置的maven仓库。

2.1.2.2.自建后台集成 kie workbench

这种架构与2.1.2.1 展示架构相似,主要解决“workbench界面过于专业化,业务人员无发维护”的痛点。同时可以使用到kie-wb丰富的功能。但实施成本较高。


RE集成wb.png

2.1.2.3.不使用kie workbench

自建后台网站集成kie excution server 的rest api。实现规则的加载、更新及服务器健康状态监控。后台网站或工程师PC负责发布规则包。
这种架构相对简单,但同样存在痛点。后台网站编辑规则、发布规则包的方式实施成本较高(相当于自行实现了workbench的部分功能);工程师PC发布更新规则包的方式,不能实时响应业务规则变化,开发人员负担较重。


RE不用wb.png
  • 总结
    架构无优劣之分。评判架构的唯一标准是与项目是否匹配。
    自认为原生架构2.1.2.1适用的场景更多。
    项目自行实现规则、模型的维护、发布等功能的成本很高。
    应用规则引擎,无论采用何种技术架构,业务规则建模工作都是重中之重。

2.2 DROOLS WORKBENCH

drools workbench基于uber fire开源框架创建,是规则维护管理的后台网站。
通过drools workbench可实现对规则、模型、流程等的编辑管理工作。同时,workbench提供对kie excution server操作的界面。

drools workbench 默认基于内置的Git Repo进行规则文件/工程源码版本管理。
drools workbench 使用maven指令进行规则工程的构建。默认将打包好的k-jar发布到本地仓库。

workbench提供类似服务注册发现的接口,用于kie excution server的注册发现。

REST接口

drools workbench 提供了一套REST API。为其它应用集成drools workbench提供便利。
本章节提供接口能力的总览/概述。如有其它需求,建议阅读drools.org的原生文档。这里不详述。

REST API calls to Knowledge Store allow you to manage the Knowledge Store content and manipulate the static data in the repositories of the Knowledge Store. The calls are asynchronous, that is, they continue their execution as a job after a call was performed. The job ID is returned by every call to allow (after the REST API call was performed) to request the job status and verify whether the job finished successfully. Parameters of these calls are provided in the form of JSON entities.
When using Java code to interface with the REST API, the classes used in POST operations or otherwise returned by various operations can be found in the (org.uberfire:)uberfire-rest-client JAR. All of the classes mentioned below can be found in the org.guvnor.rest.client package in that JAR.

基于workbench rest api 可实现对job,project(规则工程),space(类似一个文件夹,保存同一类别或者相关联的规则工程)的操作。

Embedded Kie Server Controller calls

When running the Workbench with the embedded Kie Server Controller mode, a series of endpoints related to managing all aspects of Kie Server Templates, Kie Server instances and Containers are also available. See Controller REST API for more details. A Java client API is also available for interacting with these endpoints.

controller rest api 提供了对注册到workbench的kie excution server进行操作的能力。

2.3. KIE EXCUTION SERVER

KIE EXCUTION SERVER是规则加载、执行的组件。官方介绍如下:

The KIE Execution Server is a standalone, out-of-the-box component that can be used to instantiate and execute rules via interfaces available for REST, JMS or a Java client side application. Created as a web deployable WAR file, this engine can be deployed on any web container.
This server has a low footprint, with minimal memory consumption, and therefore, can be deployed easily on a cloud instance. Each instance of this server can open and instantiate multiple Kie Containers which allows you to execute multiple rule services in parallel.
You can provision execution server instances via KIE Workbench.

2.3.1 REST API

Excution Server 的API主要提供:1. 状态监控 2. container 操作 3. 规则执行 等能力。
可通过[POST] /config(操作container、scanner) 和 [POST] /containers/instances/{id}(规则执行相关)方法在Excution Sever上执行各种各样的命令(command)。

3. 其它

3.1. Drools中的关键概念

https://www.jianshu.com/p/067e94b1ffb9

3.2. Drools Jar 包介绍:

knowledge-api.jar - 提供接口和工厂。它清楚地描述用户 API 的职责,还有什么引擎 API。
knowledge-internal-api.jar - 提供内部接口和工厂。
drools-core.jar - 核心引擎,运行时组件。包含 RETE 引擎和 LEAPS 引擎。
drools-compiler.jar - 包含编译器/构建器组件,以获取规则源,并构建可执行规则库。
drools-decisiontables.jar - 决策表编译器组件,在 drools-compiler 组件中使用。支持 Excel 和 CSV 输入格式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,563评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,713评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,263评论 25 707
  • 1.引入 对于很多app,使用UITableView控件时都会对图形进行圆角处理,这样显得app美观不少,常用的圆...
    zmj27404阅读 1,311评论 3 5
  • 不患得 也不患失 得之不喜 失之不忧 不患名 不患利 名若云烟 利似粪土 不患无位 而患有位 何以立 不能独占空位...
    秋AldrichB果阅读 269评论 1 8