黑名单规则表
引用文件
本文档引用的文件
- docs/develop/01-系统设计/03-详细设计/规则引擎/02-数据库设计.md
- docs/blacklist/app-blacklisted.md
- docs/develop/01-系统设计/03-详细设计/规则引擎/06-业务系统交互指南.md
- sql/mysql/rule/rule_mac_item.sql
- sql/mysql/rule/rule_mac_resource_item.sql
- sql/tdengine/blacklisted.sql
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/util/RuleRunUtil.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/framework/core/editor/parser/base/AbstractAndOrNotExpressParser.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/framework/core/editor/enums/ExpressParserEnum.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/framework/core/constant/LocalCacheConstants.java
- yudao-module-blacklist/yudao-module-blacklist-biz/src/main/java/cn/iocoder/yudao/module/blacklist/listener/RuleBlacklistStatusListener.java
- yudao-module-blacklist/yudao-module-blacklist-biz/src/main/java/cn/iocoder/yudao/module/blacklist/framework/config/BlacklistConfig.java
目录
简介
黑名单规则表是规则引擎系统中的核心组件,负责管理黑名单相关的业务规则配置。本文档深入解析黑名单规则表的详细结构,包括规则引擎相关的字段定义、规则表达式的语法格式和计算逻辑、优先级机制和冲突处理策略,以及规则与业务系统的绑定关系。
项目结构
黑名单规则表位于规则引擎模块中,与黑名单业务系统紧密集成。整个系统采用分层架构设计,包含规则引擎核心、黑名单业务逻辑、缓存层和数据库层。
图表来源
核心组件
规则引擎核心表结构
规则引擎系统包含多个核心表,其中黑名单规则表为主要组成部分:
| 表名 | 描述 | 主要字段 |
|---|---|---|
| rule_liteflow_chain | 规则定义表 | id, name, el_data, enable, valid |
| rule_business | 规则关联业务表 | id, liteflow_chain_id, business_id, business_type, valid |
| rule_mac_item | 规则关联MAC表 | id, liteflow_chain_id, mac, partition_index, valid |
| rule_channel_item | 规则关联渠道表 | id, liteflow_chain_id, channel_id, valid |
| rule_region_item | 规则关联地区表 | id, liteflow_chain_id, region_id, valid |
黑名单专用表结构
黑名单系统还包含专门的数据表:
| 表名 | 描述 | 主要字段 |
|---|---|---|
| app_kill_record | APP杀死记录表 | ts, data_key, mac, cpu_id, frequency, create_time, black_list_id |
章节来源
- docs/develop/01-系统设计/03-详细设计/规则引擎/02-数据库设计.md
- docs/develop/01-系统设计/03-详细设计/规则引擎/02-数据库设计.md
- docs/develop/01-系统设计/03-详细设计/规则引擎/02-数据库设计.md
- docs/develop/01-系统设计/03-详细设计/规则引擎/02-数据库设计.md
- docs/develop/01-系统设计/03-详细设计/规则引擎/02-数据库设计.md
- sql/tdengine/blacklisted.sql
架构概览
黑名单规则系统采用事件驱动架构,通过规则引擎实现灵活的黑名单配置管理。
图表来源
- docs/develop/01-系统设计/03-详细设计/规则引擎/06-业务系统交互指南.md
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/util/RuleRunUtil.java
详细组件分析
规则表达式引擎
规则表达式引擎基于LiteFlow框架,支持复杂的条件组合和逻辑运算。
图表来源
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/framework/core/editor/parser/base/AbstractAndOrNotExpressParser.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/framework/core/editor/enums/ExpressParserEnum.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/util/RuleRunUtil.java
规则匹配算法
规则匹配采用三级缓存机制,确保高性能的规则查询。
图表来源
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/util/RuleRunUtil.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/util/RuleRunUtil.java
黑名单规则字段定义
黑名单规则表包含以下核心字段:
| 字段名 | 类型 | 说明 | 约束 |
|---|---|---|---|
| id | bigint | 主键ID | 自增, 主键 |
| name | varchar | 规则名称 | 非空 |
| el_data | text | EL表达式数据 | 非空 |
| enable | tinyint | 是否启用 | 默认1 |
| valid | tinyint | 数据有效性 | 默认1 |
| business_type | tinyint | 业务类型 | 固定值2(黑名单) |
| business_id | bigint | 业务ID | 非空 |
| created_time | datetime | 创建时间 | 默认当前时间 |
| updated_time | datetime | 更新时间 | 默认当前时间 |
规则表达式语法规范
规则表达式支持以下逻辑运算符:
- AND: 逻辑与运算
- OR: 逻辑或运算
- NOT: 逻辑非运算
- THEN: 顺序执行节点
- WHEN: 条件判断节点
- SWITCH: 分支切换节点
表达式示例格式:
AND(
OR(
THEN(node1, node2),
NOT(node3)
),
WHEN(condition, node4)
)
章节来源
- docs/develop/01-系统设计/03-详细设计/规则引擎/02-数据库设计.md
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/framework/core/editor/enums/ExpressParserEnum.java
规则优先级机制
规则优先级通过以下机制实现:
- 业务类型优先级: 不同业务类型具有不同的优先级权重
- 规则启用状态: 仅启用的规则参与匹配计算
- 规则有效性: 仅有效的规则参与匹配
- 规则匹配度: 基于规则表达式的匹配程度排序
冲突处理策略
当多个规则同时匹配时,系统采用以下冲突处理策略:
- 规则合并: 将多个匹配规则的结果进行合并
- 去重处理: 对重复的业务ID进行去重
- 优先级排序: 按规则优先级进行排序
- 冲突仲裁: 当存在冲突时,采用预设的仲裁规则
章节来源
依赖分析
黑名单规则系统与其他模块存在以下依赖关系:
图表来源
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/util/RuleRunUtil.java
- yudao-module-blacklist/yudao-module-blacklist-biz/src/main/java/cn/iocoder/yudao/module/blacklist/listener/RuleBlacklistStatusListener.java
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/framework/core/constant/LocalCacheConstants.java
章节来源
性能考虑
缓存策略
系统实现了三级缓存机制来提升性能:
- 本地缓存: 使用LocalCacheConstants定义的缓存键
- Redis缓存: 存储热点数据,支持分布式共享
- 数据库缓存: 最终一致性保证
查询优化
针对黑名单规则表的查询进行了以下优化:
- 分区表设计: rule_mac_item表按partition_index分区
- 索引优化: 为常用查询字段建立索引
- 批量查询: 支持批量规则匹配查询
并发控制
系统采用以下并发控制机制:
- 分布式锁: 使用Redis分布式锁防止缓存击穿
- 读写分离: 数据库层面的读写分离
- 异步处理: Kafka消息异步处理规则变更
章节来源
- yudao-module-rule/yudao-module-rule-biz/src/main/java/cn/iocoder/yudao/module/rule/framework/core/constant/LocalCacheConstants.java
- sql/mysql/rule/rule_mac_item.sql
- docs/develop/01-系统设计/03-详细设计/规则引擎/06-业务系统交互指南.md
故障排除指南
常见问题及解决方案
-
规则匹配失败
- 检查规则表达式语法
- 验证设备信息完整性
- 确认规则启用状态
-
性能问题
- 检查缓存命中率
- 监控数据库查询性能
- 优化规则表达式复杂度
-
数据不一致
- 检查Redis缓存同步
- 验证数据库事务完整性
- 监控Kafka消息处理
监控指标
关键监控指标包括:
- 规则匹配成功率
- 缓存命中率
- 数据库查询延迟
- Kafka消息处理延迟
章节来源
结论
黑名单规则表作为规则引擎系统的核心组件,通过灵活的表达式语法、完善的缓存机制和高效的匹配算法,为黑名单业务提供了强大的技术支持。系统的设计充分考虑了性能、可扩展性和可靠性,在实际应用中表现出了优秀的稳定性和效率。
附录
规则配置最佳实践
- 表达式设计: 简化表达式结构,避免过度复杂的嵌套
- 性能优化: 合理使用索引,避免全表扫描
- 监控告警: 建立完善的监控体系,及时发现和解决问题
- 版本管理: 建立规则版本管理机制,确保规则变更的可追溯性
复杂规则表达式示例
以下是一些复杂规则表达式的示例格式:
AND(
OR(
WHEN(device_status == "active", kill_app),
WHEN(device_region == "beijing", uninstall_app)
),
NOT(has_exception_flag)
)
这些示例展示了如何结合多种逻辑运算符和条件判断来构建复杂的黑名单规则表达式。