实时规则引擎的设计与实现


实时规则引擎设计与实现 @Neeao 2013年12月26日 目录 需求 方案 实现 挑战 目录 需求 方案 实现 挑战 一大波扫号的出现 一般处理流程: 分析日志 制定防御规则 找相关Domain开发防御规则 防御规则 5分钟内IP登陆超过100次,封IP60分钟 如何实现? 硬编码 if time<=5m and count(8.8.8.8)>=100: block ip 60m 硬编码--成本 每天成功登陆:2W UID 账号有钱的UID:10% UID平均账号余额:100元 每天存在威胁资金量: 2W*10%*100 = 20W 硬编码--成本 开发上线时间: 1 sprint(开发+测试+上线)=14天 14*20 = 280w 如何解决? 硬编码--改进版 将参数放入配置项,需要时更新配置数据: db_gap_time=5m db_times=100 db_block_time=60m if time<=db_gap_time and count(8.8.8.8)>=db_times: block ip db_block_time 硬编码--改进版 一键秒刷,立即生效 新的问题: 新的规则怎么添加? 继续重复硬编码的思路? 有没有更好的方法? 终极大招 将规则逻辑从应用中分离 应用提交数据至规则逻辑得到结果 规则引擎 规则引擎 定义: 规则引擎由推理引擎发展而来,是一种嵌入在应用程 序中的组件,实现了将业务决策从应用程序代码中分离出来, 并使用预定义的语义模块编写业务决策。接受数据输入,解 释业务规则,并根据业务规则做出业务决策。 应用背景:  提高效率,解决复杂的业务规则  规则经常变化,IT系统根据规则快速、低成本变化  为了快速、低成本的更新,业务人员应能直接管理IT系统 中的规则,不需要程序开发人员参与。 规则引擎逻辑 规则 引擎 调用 接口 请求1 请求N 规则引擎核心 数据库适配层 IN OUT IN OUT IN OUT 规则文件RUN 目录 需求 方案 实现 挑战 功能 业务逻辑与应用分离 方便调用接口 性能与硬编码差别不大 轻量级,方便开发维护 友好的规则编辑界面 现有硬编码规则的集成 为什么不用开源产品 性能原因 队列特性、实时性无法满足 现有Java规则逻辑的很难复用 学习维护成本高 规则逻辑脚本语言 Groovy 优点: 基于JVM(Java虚拟机) 借鉴Python、Ruby和Smalltalk的许多强大的 特性,支持DSL,语法简洁 直接调用现有Java的类库,Java无缝集成 方便的实例化接口 性能方面 内存加载Groovy规则 脚本 Java Object 规则管理 规则库 Web管理 (规则版本) 规则引擎 规则流程 规则开始 初始化规则对象 已定义方法 是否已加载至 内存 是 已加载 规则库否 加载至内存执行规则对象 调用 执行结果 执行结束 规则管理 版本管理 方法管理 目录 需求 方案 实现 挑战 实现 Groovy脚本加载为Java对象 接口参数支持多参数、任意类型 规则脚本执行流程 Sandbox 规则Web管理及测试 规则调用流程 Groovy脚本加载为Java对象 接口参数支持多参数、任意类型 规则脚本执行流程 格式化groovy脚本 导入类 SpringContextU til 生成类名 定义导入java bean 方法列表 定义run方法处理规则参数 规则参数 捕获异常格式化结束 导入已定义方法 bean用 Groovy--SandBox 默认导入包定义 SecureASTCustomizer 闭包:{} 包导入:import 包定义:package 方法定义:public static void main 方法返回值定义:return Integer/Double/String 运算符定义: PLUS/MINUS/MULTIPLY/ DIVIDE http://groovy.codehaus.org/Advanced+compiler+con figuration http://groovy-sandbox.kohsuke.org/ 规则Web管理及测试 规则Web管理及测试 规则Web管理及测试 规则调用流程 规则名称 存在 规则对象是否 已存在 执行规则 初始化 规则对象 不存在 格式化groovy脚本 初始化groovy对象 初始化状态成功 抛出异常 出错 规则对象本 地缓存 访问规则 执行结束 目录 需求 方案 实现 挑战 挑战 应用接入 规则接口数据定义 更友好的规则编辑界面 Q/A
还剩32页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

thetazhou

贡献于2017-05-13

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf