规则引擎调研报告

2023-10-28

背景

我们公司由于业务的极具扩大,每天经过系统的金额也达到了20亿美金左右,这个时候对资金的管控就不能像以前那样分散在不同的系统,由不同的部门负责了。所以说,我们成立了风控部门,必须成立了专门的研发团队负责风控需求,要开始做风控了。我受命去调研如何做风控。发现风控平台一般都需要一个叫规则引擎的东西,那么我就去调研了规则引擎的一些现状。

目前公司内部规则执行现状

if(f1){
	if(a||b||c||d)
}
if(f2){
}
if(a&b&d){
}
  • 优点
    当规则较少、变动不频繁时,开发效率非常高。
    稳定性较佳:语法级别错误不会出现,由编译系统保证。
    没有外部依赖,执行速度很快
  • 缺点
    规则迭代成本高:对规则的少量改动就需要走全流程(排期,开发、测试、部署)。
    当存量规则较多时,可维护性差。
    规则开发和维护门槛高:规则对业务分析人员不可见
    没有规则效果分析,很难感知规则的效果

规则引擎简介

规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。–来自百度百科

这个定义我感觉比较清晰了,但是我们做的不一定要有推理模块。如果只是互联网化的简单规则执行,其实不需要推理,也能做到非常高的性能。

为啥要用规则引擎

  • 规则的变更非常方便,从而实现业务规则的随需应便。
  • 业务规则与系统代码分离,实现业务规则的集中管理。
  • 在不重启服务的情况下可随时对业务规则进行扩展和维护。
  • 可以动态修改业务规则,从而快速响应需求变更,大大提高了对复杂逻辑代码的可维护性。
  • 规则引擎是相对独立的,只关心业务规则,使得业务分析人员也可以参与编辑、维护系统的业务规则。
  • 减少了硬编码业务规则的成本和风险。
  • 使用规则引擎提供的规则编辑工具,使复杂的业务规则实现变得简单。

规则引擎的作用

  • 流程控制
  • 数据校验

规则引擎的分类实现

规则引擎在系统中根据事中,事后可以的实现方式

  • 事中:验证系统流程产生的入参和返回值是否符合规则要求;
  • 事后:通过大数据技术栈,对多个数据源进行比对,进行数据审计;

事中规则实现

  1. 规则配置,规则配置系统,主要是对一些表达式进行封装。然后将表达式交给规则解析程序/库
  2. 规则下发,规则建立好了之后实现规则下发,规则下发的方案有很多,可以根据自己系统要求进行实现,比如:
    1. 数据库+缓存;
	2. 缓存;
	3. Mq订阅;
	4. Zookeeper的Watcher;
  1. 规则执行
  • 规则引擎关注的是时延,不能进行跨进程调用问题,尽量不访问数据库和外部内存,直接使用机器内存
  • 规则较多,尽量使用并行执行,不如有依赖,可以分析依赖树,然后并行执行

事后规则实现

  1. 主要通过大数据技术栈对多数据源数据在Hive中进行聚合,对于执行实现可以接收一定的延迟,或者采用流式处理降低时延
  2. 对于一些时间窗口的处理,使用flink进行聚合

规则引擎有哪些功能

  • 规则配置-可视化
  • 脚本语言编写规则
  • 规则优先级执行
  • 可视化规则流
  • 版本发布,回滚
  • 灰度发布
  • 评分卡
  • 决策表
  • 决策树
  • 黑白灰名单
  • 标签管理
  • 可视化决策流编辑
  • 规则监控
  • 用户权限管理
  • AB测试
  • 冠军挑战
  • 规则效果分析
  • 本地化(和业务系统在一个进程中)和服务化(单独部署)

核心挑战

  • 规则的易变性 规则频繁变动,硬编码死板问题和动态加载的性能问题,如何快速的下发规则
  • 规则的定制化 因为用户画像不同导致千人千面的策略,有一定的定制特点
  • 时延要求低 几乎每个核心业务动作都会调用风控接口,如何保证业务的无感

未来趋势

  • 更高阶的风控决策引擎,在现有的风控决策引擎上融入了自言语言处理平台、流计算平台、实时预警、深度学习、可视化科学计算等,提升了现有决策引擎的算力和处理时效。
  • 随着技术的革新,未来的决策引擎,会向着功能更加丰富,性能更加优良,决策更加智能的风控智能实时规则系统演进

应用场景

对于一些存在比较复杂得业务规则并且业务规则会频繁变动的系统比较适合使用规则引擎

  • 风险控制系统----风险贷款、风险评估
  • 反欺诈项目----银行贷款、征信验证
  • 决策平台系统----财务计算
  • 促销平台系统----满减、打折、加价购 等等

典型场景-信用卡授信
在这里插入图片描述

规则引擎调研

  1. 开源规则引擎
  • JBoss Drools
  • Mandarax
  • OpenRules
  • JEOPS
  • InfoSapient
  • Roolie
  • Apache Camel
  1. 商业规则引擎
  • ODM(ILOG)
  • Oracle Business Rules
  • 旗正规则引擎
  • Jess(可研究,商用收费)
  • TopRules
  • 明策智能决策
  • Blaze
  • 益博睿决策引擎

ILOG调研

ilog是一套功能完备的规则引擎,支持普通规则、决策表、决策树、评分卡、规则流,可以以自然语言的方式编写规则,同时在版本管理上提供基线、规则集管理的功能,核心引擎采用智能专家推理算法,能够高效的执行规则匹配。

在这里插入图片描述

ILOG流程演示

  • 定义规则
    在这里插入图片描述
  • 定义决策表
    在这里插入图片描述
  • 定义规则流
    在这里插入图片描述
  • 部署多版本支持
    在这里插入图片描述
  • 测试执行结果
    在这里插入图片描述
  • 统计执行结果
    在这里插入图片描述

ILOG优势和劣势

优点

  • 有规则的自然语言
  • 快速的执行速度
  • 支持普通规则、决策表、决策树、评分卡、规则流
  • 具有版本管理功能
  • 具有规则集管理功能
  • 比较成熟,产品周期较长,客户较多

缺点

  • 网上资料很少,出了问题很难独立维护
  • 需要支付大量的安装和部署费用,而且有长期的维护费用
  • 比较成熟的方案都是商业软件,例如F5,webspere,Oracle等
  • 安装包非常大,几G数据,只支持windows安装,windows开发部署规则等
  • 不支持聚合类策略,一般是在外面服务处理好,ODM支持,但是没有用过
  • 规则没有扩容方案,只能单库
  • ILOG是商业版本,没有支持开源框架,也没有微服务化,很难和公司现有的spring-cloud相融合
  • 由于不能和公司现有的spring-cloud相融合,就不能调用公司体系的服务作为判断因子
  • 黑白灰名单,这些数据的访问必须前置一个规则系统

Drools

Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则,从而便于学习和理解。并且,还可以将 Java 代码直接嵌入到规则文件中,这令 Drools 的学习更加吸引人。

优点

  • 非常活跃的社区支持
  • 易用
  • 快速的执行速度
  • 在 Java 开发人员中流行
  • 与 Java Rule Engine API(JSR 94)兼容

缺点

  • 业务分析师无法独立完成规则配置:由于规则主体DSL是编程语言(支持Java, Groovy, Python),因此仍然需要开发工程师维护
  • 规则规模变大以后也会变得不好维护,相对硬编码的优势便不复存在
  • 规则的语法仅适合扁平的规则,对于嵌套条件语义(then里嵌套when…then子句)的规则只能将条件进行笛卡尔积组合以后进行配置,不利于维护

整体设计
在这里插入图片描述
代码示例
在这里插入图片描述

URule

URule是一款纯Java规则引擎,它以RETE算法为基础,提供了向导式规则集、脚本式规则集、决策表、交叉决策表(PRO版提供)、决策树、评分卡及决策流共六种类型的规则定义方式,配合基于WEB的设计器,可快速实现规则的定义、维护与发布。
URule提供了两个版本:一个是基于Apache-2.0协议开源免费版本,URule开源版本第一款基于Apache-2.0协议开源的中式规则引擎;另一个是商用PRO版本。

整体设计
在这里插入图片描述
功能设计
在这里插入图片描述
开源和商业版本比较
在这里插入图片描述

基于Aviator的表达式

Aviator 的基本过程是将表达式直接翻译成对应的 java 字节码执行,整个过程最多扫两趟(开启执行优先模式,如果是编译优先模式下就一趟),这样就保证了它的性能超越绝大部分解释性的表达式引擎,测试也证明如此;其次,除了依赖 commons-beanutils 这个库之外(用于做反射)不依赖任何第三方库,因此整体非常轻量级,整个 jar 包大小哪怕发展到现在 5.0 这个大版本,也才 430K。同时, Aviator 内置的函数库非常“节制”,除了必须的字符串处理、数学函数和集合处理之外,类似文件 IO、网络等等你都是没法使用的,这样能保证运行期的安全,如果你需要这些高阶能力,可以通过开放的自定义函数来接入

特点

  • 高性能
  • 轻量级
  • 一些比较有特色的特点:
  1. 支持运算符重载
  2. 原生支持大整数和 BigDecimal 类型及运算,并且通过运算符重载和一般数字类型保持一致的运算方式。
  3. 原生支持正则表达式类型及匹配运算符 =~
  4. 类 clojure 的 seq 库及 lambda 支持,可以灵活地处理各种集合
  • 开放能力:包括自定义函数接入以及各种定制选项

一期时间人员规划

一期功能-2.5个月 3个后端

  • 规则配置由研发来完成
  • 策略执行根据业务调用动态执行
  • 引入事件,场景,规则,因子概念
  • 规则在场景中按照优先级执行,暂时不支持分支判断
  • 规则支持版本发布
  • 不支持决策表,评分卡等
  • 支持简单聚合规则
  • 支持黑白名单,不支持灰名单

自研规划

在这里插入图片描述

结论

基于Aviator自研,随着业务一起迭代。2个月左右可以上线第一版,设计出整体的模型框架,支持普通的规则和规则集执行,可以满足业务需要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

规则引擎调研报告 的相关文章

  • JSP中三种弹出对话框的用法实例

    对话框有三种 1 只是提醒 不能对脚本产生任何改变 2 一般用于确认 返回 true 或者 false 所以可以轻松用于 if else 判断 3 一个带输入的对话框 可以返回用户填入的字符串 常见于某些留言本或者论坛输入内容那里的 插入U
  • Python + Flask 实现接口接收内存信息

    今日分享主题 通过 requests 工具包向 flask 提供的接收测试环境 linux 的内存信息接口定时推送数据并在页面展示的实验 Step1 flask端设计 1 表结构 2 接收数据接口定义 3 提供页面查询接口 用于页面展示使用
  • jumpserver安装搭建

    全过程只需要用一台机子装 所以尽量给高配 本人是3G 4核 https blog csdn net kadwf123 article details 98971021 https docs jumpserver org zh master
  • python 模拟鼠标键盘_如何用 python 模拟鼠标和键盘的操作

    前言 不论是模拟鼠标操作还是键盘操作 实际上我们都使用了pywinauto这个库里面的内容 模拟鼠标操作 我们直接调用pywinauto mouse这个模块里面的各个方法即可 而模拟键盘输入 我们则需要用到pywinauto keyboar
  • vim 删除所有行:到每行末尾的字符

    s g 删除所有行的指定字符到每行末尾的字符 zipp 3 5 0 zope event 4 5 0 zope interface 5 4 0 linuxfd 1 5 termcolor 1 1 0 删除后 zipp zope event
  • python写的小程序--构造大量测试数据

    1 构造大量数据用于测试 构造从10000个用户 用户名不相同的 以10为例 coding utf 8 x 1 while x lt 11 print js d x 数字强制转换成字符a d x a就是数字X转换成的字符串 print自带一

随机推荐

  • Shader基础:5、表面着色器Surface Shader

    表面着色器是通过Unity给我们制定好的一套标准 计算出需要填充输入什么 输出什么等相关信息 并产生真实的顶点 vertex 像素 pixel 着色器 以及把渲染路径传递到正向或延时渲染路径 输出结构 struct SurfaceOutpu
  • 在linux下挂载ISO镜像文件

    挂接命令 mount 首先 介绍一下挂接 mount 命令的使用方法 mount命令参数非常多 这里主要讲一下今天我们要用到的 命令格式 mount t vfstype o options device dir 其中 1 t vfstype
  • 软件版本号的意义

    RC Release Candidate 含义是 发布候选版 它不是最终的版本 而是最终版 RTM Release To Manufacture 之前的最后一个版本 广义上对测试有三个传统的称呼 alpha beta gamma 用来标识测
  • vscode软件设置头文件路径目录

    1 设置头文件路径原因 在使用 vscode 软件进行 C 开发过程中 有些 c 文件引用的头文件 提示会找不到头文件路径 因此 vscode 软件需要设置头文件路径 2 vscode设置头文件路径 在 vscode 软件打开的情况下 默认
  • VS2019+PCL1.11.1+VTK8.2.0+Qt5.14.2配置

    一 编译VTK8 2 0 网上教程一大堆 自己瞎编吧 二 安装Qt5 14 2 网上教程满天飞 自己随便安吧 安装完新建Qt工程 二 QVTK8 2 0配置 1 配置环境变量 配完之后关机重启 2 在Qt工程目录中添加PCL和QVTK8 2
  • 用CMake管理自己的程序(四)

    前言 用CMake管理自己的程序 一 用CMake管理自己的程序 二 用CMake管理自己的程序 三 通过之前的文章 我们已经可以做到最基本的工程管理了 这篇文章 我们将对之前的工作做一个完善 让我们对程序的管理更加的合理 target开头
  • Http调用第三方接口的两种方式实例《超详细!!!》***

    Http调用第三方接口的两种方式 超详细 最近在公司做一些调用第三方接口的工作 查阅了一部分的资料和向前辈以及朋友请教 完成了第三方接口的调用 其实主要是通过第三方提供的文档 完成完成签名档的设计 连接请求 以及响应数据 这里提供两种方式
  • unity3D hw_4

    Unity3D设计 Homework 4 一 基本操作演练 1 下载Fantasy Skybox FREE 构建自己的游戏场景 选window框框下的 Asset Store的选项 在这里插入图片描述 https img blog csdn
  • RuntimeError: Could not infer dtype of NoneType

    RuntimeError Could not infer dtype of NoneType 出错原因 dataloader在dataset中一个一个读取数据的时候遇到了脏数据 空值之类的 导致在网络推理的时候出现了错误 解决方法 方法一
  • (休息几天)读曼昆之微观经济学——税收归宿

    当政府对某商品征税时 谁是税收的真正承担者 是买方还是卖方承担了税收 或者是买卖双方分摊了税收负担 如果是 决定税收分摊比例的因素是什么 政府规定税收在买卖双方中的分摊比例 比如本例中的镇长建议的 是否可行 这些问题的回答需要使用到一个叫作
  • 区块链技术在应用过程中的安全问题主要体现哪些方面?

    区块链技术在快速应用的同时 其安全隐患也不容忽视 中企通宝区块链技术研究负责人认为 区块链在应用过程中的安全问题主要体现在三个方面 一是区块链系统本身的安全问题 包括智能合约的安全漏洞以及区块链平台的安全漏洞问题 二是网络资产的基础安全问题
  • Vijava 学习笔记之 HostSystem(内存总大小、内存已使用容量和CPU个数)

    package com vmware util import com vmware vim25 mo ServiceInstance import java net URL Created by vixuan 008 on 2015 4 1
  • STM32读取RS485传感器数据,但接收到的数据开头总是多一个字节或少一个一字节,有人能告诉我哪里出问题了吗

    STM32读取RS485传感器数据 但接收到的数据开头总是多一个字节或少一个一字节 有人能告诉我哪里出问题了吗
  • windows server 2012 防火墙 安全策略 限制ip远程及访问mysql

    今天在服务器上设置安全策略 有个奇葩的设置试了很多次 仍然不太理解 但按照以下方法是起作用的 目标 开启防火墙 限制服务器A上的MySQL数据库只能通过B访问 实现 1 首先设置A上的入站规则 添加更改后远程端口可访问 然后开启防火墙 如果
  • uniapp表单数据为“多级结构”,如何做校验

    开发项目的时候使用uniapp的表单 表单数据为多级结构 也就是对象里面嵌套对象 如何做校验 其实针对 多级结构数据 可以使用 动态表单校验 给单个uni forms item添加rule 给name绑定数组形式 代码如下
  • 四大坐标系转换和相机标定以及结果评估

    四大坐标系转换和相机标定以及结果评估 四大坐标系 坐标系转换 相机标定 matlab和python 标定结果评估 相机成像过程涉及坐标变换 包含世界坐标系 Xw Yw Zw 相机坐标 Xc Yc Zc 平面坐标 x y 像素坐标 u v 一
  • spring cloud config 中的application.yml 和 bootstrap.yml

    bootstrap yml 在 application yml 之前加载 bootstrap yml可以理解成系统级别的一些参数配置 这些参数一般是不会变动的 一般使用bootstrap yml是由于有远程配置需要load到本地 一般它会包
  • 基于cubemx的stm32f103指纹模块(AS608)

    寒假这段时间自己做了个指纹锁玩 在这里写一下指纹模块的用法 一 测试 新到手的AS608模块 可以在软件中测试一下功能是否正常 在使用这个配套软件的时候 注意要搭配TTL转串口使用 连接电源线和串口线四根就可以了 注意在测试的时候 要找对C
  • OSPF矢量图及不规则区域设计理论

    任何一台路由器勾画出一个区域的连接 都是通过矢量图的方式来表示 在根据树型结构算法 来计算去往非直连网络的路径信息 路由在勾画连接只包含三个参数 两类节点和节点之间的链路 节点 路由器节点 stub节点 pc所在的网络 环回口连接的网络 网
  • 规则引擎调研报告

    背景 我们公司由于业务的极具扩大 每天经过系统的金额也达到了20亿美金左右 这个时候对资金的管控就不能像以前那样分散在不同的系统 由不同的部门负责了 所以说 我们成立了风控部门 必须成立了专门的研发团队负责风控需求 要开始做风控了 我受命去