跳到主要内容

黑名单规则表

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论
  10. 附录

简介

黑名单规则表是规则引擎系统中的核心组件,负责管理黑名单相关的业务规则配置。本文档深入解析黑名单规则表的详细结构,包括规则引擎相关的字段定义、规则表达式的语法格式和计算逻辑、优先级机制和冲突处理策略,以及规则与业务系统的绑定关系。

项目结构

黑名单规则表位于规则引擎模块中,与黑名单业务系统紧密集成。整个系统采用分层架构设计,包含规则引擎核心、黑名单业务逻辑、缓存层和数据库层。

Mermaid Diagram Code:

graph TB
subgraph "黑名单规则系统"
A[规则引擎核心] --> B[黑名单业务模块]
A --> C[缓存层]
A --> D[数据库层]
E[规则定义表] --> F[规则关联业务表]
E --> G[规则关联MAC表]
E --> H[规则关联渠道表]
E --> I[规则关联地区表]
J[黑名单配置] --> K[设备认证]
J --> L[应用安装]
J --> M[应用卸载]
end
subgraph "外部系统"
N[设备端] --> O[规则匹配]
P[Kafka消息] --> Q[规则变更通知]
end
O --> A
Q --> A

图表来源

核心组件

规则引擎核心表结构

规则引擎系统包含多个核心表,其中黑名单规则表为主要组成部分:

表名描述主要字段
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_recordAPP杀死记录表ts, data_key, mac, cpu_id, frequency, create_time, black_list_id

章节来源

架构概览

黑名单规则系统采用事件驱动架构,通过规则引擎实现灵活的黑名单配置管理。

Mermaid Diagram Code:

sequenceDiagram
participant Device as 设备端
participant Blacklist as 黑名单模块
participant RuleEngine as 规则引擎
participant Cache as 缓存层
participant DB as 数据库
Device->>Blacklist : 请求黑名单配置
Blacklist->>RuleEngine : 规则匹配请求
RuleEngine->>Cache : 检查缓存
alt 缓存命中
Cache-->>RuleEngine : 返回匹配结果
else 缓存未命中
RuleEngine->>DB : 查询规则定义
DB-->>RuleEngine : 返回规则数据
RuleEngine->>Cache : 更新缓存
end
RuleEngine-->>Blacklist : 返回业务ID集合
Blacklist->>DB : 查询黑名单配置
DB-->>Blacklist : 返回配置详情
Blacklist-->>Device : 返回黑名单配置

图表来源

详细组件分析

规则表达式引擎

规则表达式引擎基于LiteFlow框架,支持复杂的条件组合和逻辑运算。

Mermaid Diagram Code:

classDiagram
class AbstractAndOrNotExpressParser {
<<abstract>>
+parseExpression(condition) String
+getExpressType(condition) ExpressParserEnum
}
class ExpressParserEnum {
<<enumeration>>
THEN
WHEN
AND
OR
NOT
SWITCH
FOR
CATCH
DO
WHILE
IF
CHAIN
}
class RuleRunUtil {
+matchBusinessIds(businessType, deviceRespDTO) Set~Long~
-executeRuleMatching(candidateRuleIds, deviceRespDTO) Set~Long~
-getBusinessIdsByRules(matchedRuleIds, businessType) Set~Long~
}
AbstractAndOrNotExpressParser --> ExpressParserEnum : uses
RuleRunUtil --> AbstractAndOrNotExpressParser : utilizes

图表来源

规则匹配算法

规则匹配采用三级缓存机制,确保高性能的规则查询。

Mermaid Diagram Code:

flowchart TD
Start([开始规则匹配]) --> GetCache["检查本地缓存"]
GetCache --> CacheHit{"缓存命中?"}
CacheHit --> |是| ReturnCache["返回缓存结果"]
CacheHit --> |否| GetRedis["检查Redis缓存"]
GetRedis --> RedisHit{"Redis命中?"}
RedisHit --> |是| UpdateLocal["更新本地缓存"]
UpdateLocal --> ReturnRedis["返回Redis结果"]
RedisHit --> |否| QueryDB["查询数据库"]
QueryDB --> DBResult{"查询成功?"}
DBResult --> |否| ReturnEmpty["返回空集合"]
DBResult --> |是| UpdateRedis["更新Redis缓存"]
UpdateRedis --> UpdateLocal2["更新本地缓存"]
UpdateLocal2 --> ReturnDB["返回数据库结果"]
ReturnCache --> End([结束])
ReturnRedis --> End
ReturnEmpty --> End
ReturnDB --> End

图表来源

黑名单规则字段定义

黑名单规则表包含以下核心字段:

字段名类型说明约束
idbigint主键ID自增, 主键
namevarchar规则名称非空
el_datatextEL表达式数据非空
enabletinyint是否启用默认1
validtinyint数据有效性默认1
business_typetinyint业务类型固定值2(黑名单)
business_idbigint业务ID非空
created_timedatetime创建时间默认当前时间
updated_timedatetime更新时间默认当前时间

规则表达式语法规范

规则表达式支持以下逻辑运算符:

  • AND: 逻辑与运算
  • OR: 逻辑或运算
  • NOT: 逻辑非运算
  • THEN: 顺序执行节点
  • WHEN: 条件判断节点
  • SWITCH: 分支切换节点

表达式示例格式:

AND(
OR(
THEN(node1, node2),
NOT(node3)
),
WHEN(condition, node4)
)

章节来源

规则优先级机制

规则优先级通过以下机制实现:

  1. 业务类型优先级: 不同业务类型具有不同的优先级权重
  2. 规则启用状态: 仅启用的规则参与匹配计算
  3. 规则有效性: 仅有效的规则参与匹配
  4. 规则匹配度: 基于规则表达式的匹配程度排序

冲突处理策略

当多个规则同时匹配时,系统采用以下冲突处理策略:

  1. 规则合并: 将多个匹配规则的结果进行合并
  2. 去重处理: 对重复的业务ID进行去重
  3. 优先级排序: 按规则优先级进行排序
  4. 冲突仲裁: 当存在冲突时,采用预设的仲裁规则

章节来源

依赖分析

黑名单规则系统与其他模块存在以下依赖关系:

Mermaid Diagram Code:

graph LR
subgraph "规则引擎模块"
A[RuleRunUtil] --> B[AbstractAndOrNotExpressParser]
B --> C[ExpressParserEnum]
end
subgraph "黑名单模块"
D[RuleBlacklistStatusListener] --> E[BlacklistUtil]
F[BlacklistConfig] --> G[规则引擎配置]
end
subgraph "缓存层"
H[LocalCacheConstants] --> I[Redis缓存]
end
subgraph "数据库层"
J[rule_liteflow_chain] --> K[rule_business]
J --> L[rule_mac_item]
J --> M[rule_channel_item]
J --> N[rule_region_item]
end
A --> H
D --> A
E --> A

图表来源

章节来源

性能考虑

缓存策略

系统实现了三级缓存机制来提升性能:

  1. 本地缓存: 使用LocalCacheConstants定义的缓存键
  2. Redis缓存: 存储热点数据,支持分布式共享
  3. 数据库缓存: 最终一致性保证

查询优化

针对黑名单规则表的查询进行了以下优化:

  1. 分区表设计: rule_mac_item表按partition_index分区
  2. 索引优化: 为常用查询字段建立索引
  3. 批量查询: 支持批量规则匹配查询

并发控制

系统采用以下并发控制机制:

  1. 分布式锁: 使用Redis分布式锁防止缓存击穿
  2. 读写分离: 数据库层面的读写分离
  3. 异步处理: Kafka消息异步处理规则变更

章节来源

故障排除指南

常见问题及解决方案

  1. 规则匹配失败

    • 检查规则表达式语法
    • 验证设备信息完整性
    • 确认规则启用状态
  2. 性能问题

    • 检查缓存命中率
    • 监控数据库查询性能
    • 优化规则表达式复杂度
  3. 数据不一致

    • 检查Redis缓存同步
    • 验证数据库事务完整性
    • 监控Kafka消息处理

监控指标

关键监控指标包括:

  • 规则匹配成功率
  • 缓存命中率
  • 数据库查询延迟
  • Kafka消息处理延迟

章节来源

结论

黑名单规则表作为规则引擎系统的核心组件,通过灵活的表达式语法、完善的缓存机制和高效的匹配算法,为黑名单业务提供了强大的技术支持。系统的设计充分考虑了性能、可扩展性和可靠性,在实际应用中表现出了优秀的稳定性和效率。

附录

规则配置最佳实践

  1. 表达式设计: 简化表达式结构,避免过度复杂的嵌套
  2. 性能优化: 合理使用索引,避免全表扫描
  3. 监控告警: 建立完善的监控体系,及时发现和解决问题
  4. 版本管理: 建立规则版本管理机制,确保规则变更的可追溯性

复杂规则表达式示例

以下是一些复杂规则表达式的示例格式:

AND(
OR(
WHEN(device_status == "active", kill_app),
WHEN(device_region == "beijing", uninstall_app)
),
NOT(has_exception_flag)
)

这些示例展示了如何结合多种逻辑运算符和条件判断来构建复杂的黑名单规则表达式。

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答