Aviator知识点总结

🧠 一、Aviator 是什么?

Aviator 是一个高性能的 Java 表达式引擎(由小米开源)。
它允许在运行时动态执行字符串形式的表达式,而无需重新编译 Java 代码。

换句话说:

你可以在配置中心里写规则字符串,比如 "score > 80 && amount < 5000"
后端运行时直接解析并执行,不用写 if else。


📦 二、Aviator 的典型使用场景

✅ 1. 智能风控 / 反欺诈系统

  • 场景:策略人员频繁调整规则,不希望每次都改代码、发版。

  • 做法:将规则表达式存储在数据库或配置中心(Apollo、Nacos)。

  • 示例:

 
String rule = "age > 18 && region == 'SH' && loanAmount < 50000"; Boolean result = (Boolean) AviatorEvaluator.execute(rule, env);
  • 用途:判断交易、登录、借款请求是否符合风险策略。


✅ 2. 营销推荐 / 动态定价

  • 根据用户属性动态计算优惠策略或折扣。

 
String expr = "if (vipLevel >= 3, price * 0.8, price)"; Double finalPrice = (Double) AviatorEvaluator.execute(expr, env);

✅ 3. 报表规则 / 动态公式计算

  • 运营平台允许配置 KPI、指标、条件。

 
String expr = "(revenue - cost) / revenue > 0.3"; Boolean isHealthy = (Boolean) AviatorEvaluator.execute(expr, env);

✅ 4. 动态权限、配置控制

  • 根据用户角色或系统参数动态控制功能开关。

 
String expr = "role == 'admin' || dept == 'risk'"; Boolean canAccess = (Boolean) AviatorEvaluator.execute(expr, env);

✅ 5. 通用规则引擎中作为核心计算模块

  • 与 Drools、QLExpress 类似,但更轻量;

  • 可嵌入自研规则引擎;

  • 在 DSL(Domain Specific Language)场景中作为计算内核。


⚙️ 三、使用方法详解

🔹 1. 基本用法

 
import com.googlecode.aviator.AviatorEvaluator; import java.util.HashMap; import java.util.Map; Map<String, Object> env = new HashMap<>(); env.put("score", 85); env.put("amount", 2000); Boolean result = (Boolean) AviatorEvaluator.execute("score > 80 && amount < 5000", env); System.out.println(result); // true

🔹 2. 自定义函数

你可以注册 Java 函数供表达式调用:

 
AviatorEvaluator.addFunction(new AbstractFunction() { @Override public String getName() { return "riskScore"; } @Override public AviatorObject call(Map<String, Object> env, AviatorObject amount) { Double val = (Double) amount.getValue(env); return new AviatorDouble(val / 1000.0); } }); Map<String, Object> env = new HashMap<>(); env.put("amount", 3000); Object result = AviatorEvaluator.execute("riskScore(amount) > 2", env); System.out.println(result); // true

🔹 3. 表达式编译优化(提升性能)

 
Expression exp = AviatorEvaluator.compile("score > 80 && amount < 5000", true); for (int i = 0; i < 100000; i++) { exp.execute(env); }

✅ 预编译后可复用表达式对象,大幅减少解析开销。


🔹 4. 复杂结构支持(Map/List/对象)

 
Map<String, Object> user = new HashMap<>(); user.put("age", 20); user.put("region", "SH"); Map<String, Object> env = new HashMap<>(); env.put("user", user); Boolean result = (Boolean) AviatorEvaluator.execute("user.age > 18 && user.region == 'SH'", env);

🔹 5. 支持 Lambda、正则、三元表达式等

 
AviatorEvaluator.execute("string.startsWith(name, 'zhang')", env); AviatorEvaluator.execute("if (score > 80, 'pass', 'fail')", env); AviatorEvaluator.execute("filter(list, seq.gt(10))", env);

🚀 四、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。


🧩 六、在智能风控系统中的典型架构

 
┌────────────────────┐ │ 策略配置中心 │ │ (规则字符串存储) │ └────────┬──────────┘ │ 拉取 ▼ ┌────────────────────────────────────────┐ │ 风控决策引擎服务 │ │────────────────────────────────────────│ │ 1. 规则解析(AviatorEvaluator) │ │ 2. 特征取值(Redis / Kafka / HBase) │ │ 3. 执行结果(通过表达式计算) │ │ 4. 输出决策(拒绝 / 放行 / 人工审核) │ └────────────────────────────────────────┘

🧱 七、总结(面试回答模板)

问题:Aviator 是什么?有什么使用场景?性能如何?

答:
Aviator 是一个高性能 Java 表达式引擎,支持动态执行配置化规则。
在智能风控、反欺诈、营销等系统中,用于将规则从代码中解耦出来,支持在线热更新。

使用场景包括:

  • 动态风控规则执行;

  • 营销推荐计算;

  • 报表/KPI计算;

  • 策略引擎条件判断。

解决问题:

  • 策略变更无需发版;

  • 规则可配置、可热加载;

  • 支持复杂逻辑与自定义函数;

  • 性能高(单次执行<1ms)。

性能表现:

  • JIT编译 + 缓存;

  • 性能优于 Groovy、QLExpress;

  • 可支撑万级 QPS 规则计算。

posted @ 2025-10-14 14:33  郭慕荣  阅读(25)  评论(0)    收藏  举报