Aviator知识点总结
🧠 一、Aviator 是什么?
Aviator 是一个高性能的 Java 表达式引擎(由小米开源)。
它允许在运行时动态执行字符串形式的表达式,而无需重新编译 Java 代码。
换句话说:
你可以在配置中心里写规则字符串,比如
"score > 80 && amount < 5000"
,
后端运行时直接解析并执行,不用写 if else。
📦 二、Aviator 的典型使用场景
✅ 1. 智能风控 / 反欺诈系统
-
场景:策略人员频繁调整规则,不希望每次都改代码、发版。
-
做法:将规则表达式存储在数据库或配置中心(Apollo、Nacos)。
-
示例:
-
用途:判断交易、登录、借款请求是否符合风险策略。
✅ 2. 营销推荐 / 动态定价
-
根据用户属性动态计算优惠策略或折扣。
✅ 3. 报表规则 / 动态公式计算
-
运营平台允许配置 KPI、指标、条件。
✅ 4. 动态权限、配置控制
-
根据用户角色或系统参数动态控制功能开关。
✅ 5. 通用规则引擎中作为核心计算模块
-
与 Drools、QLExpress 类似,但更轻量;
-
可嵌入自研规则引擎;
-
在 DSL(Domain Specific Language)场景中作为计算内核。
⚙️ 三、使用方法详解
🔹 1. 基本用法
🔹 2. 自定义函数
你可以注册 Java 函数供表达式调用:
🔹 3. 表达式编译优化(提升性能)
✅ 预编译后可复用表达式对象,大幅减少解析开销。
🔹 4. 复杂结构支持(Map/List/对象)
🔹 5. 支持 Lambda、正则、三元表达式等
🚀 四、Aviator 解决了什么问题?
问题 | 传统做法 | Aviator 的方案 |
---|---|---|
策略频繁变更 | 改代码、发版 | 配置规则表达式 |
规则复杂多样 | if-else 嵌套复杂 | 动态表达式执行 |
模型/规则融合 | Java 硬编码逻辑 | 表达式动态控制权重 |
风控回测/沙箱 | 无法灵活测试规则 | 在线实时修改表达式 |
系统扩展性 | 每种规则都要新代码 | 通用表达式统一解析 |
🔹一句话总结:
Aviator 让规则从“写死在代码里” → “在线可配置可执行”。
⚡ 五、性能表现
Aviator 是目前 性能最强的表达式引擎之一。
-
内部使用 即时编译(JIT)+ 缓存机制;
-
可将表达式编译为 Java 字节码执行;
-
比 QLExpress / Groovy / MVEL 都快。
引擎 | 特点 | 性能对比(相对) |
---|---|---|
Aviator | 轻量高效、线程安全、JIT优化 | 🚀 1x |
QLExpress | 功能多但性能较慢 | ~3x 慢 |
Groovy Script | 强大但启动慢 | ~10x 慢 |
Drools | 规则推理强大,但启动慢 | ~20x 慢 |
✅ 性能最佳实践:
-
使用
Expression
对象编译缓存; -
不要在高频请求中重复
compile()
; -
大量规则时放入 表达式缓存池;
-
规则执行时间通常 < 1ms。
🧩 六、在智能风控系统中的典型架构
🧱 七、总结(面试回答模板)
问题:Aviator 是什么?有什么使用场景?性能如何?
答:
Aviator 是一个高性能 Java 表达式引擎,支持动态执行配置化规则。
在智能风控、反欺诈、营销等系统中,用于将规则从代码中解耦出来,支持在线热更新。
使用场景包括:
-
动态风控规则执行;
-
营销推荐计算;
-
报表/KPI计算;
-
策略引擎条件判断。
解决问题:
-
策略变更无需发版;
-
规则可配置、可热加载;
-
支持复杂逻辑与自定义函数;
-
性能高(单次执行<1ms)。
性能表现:
-
JIT编译 + 缓存;
-
性能优于 Groovy、QLExpress;
-
可支撑万级 QPS 规则计算。