表达式求值引擎Aviator的使用学习

=Start=

缘由:

Aviator是一个高性能、轻量级的 java 语言实现的表达式求值引擎, 主要用于各种表达式的动态求值。现在已经有很多开源可用的 java 表达式求值引擎,为什么还需要 Avaitor 呢?

Aviator的设计目标是轻量级和高性能,相比于Groovy、JRuby的笨重, Aviator非常小, 加上依赖包也才 537K,不算依赖包的话只有 70K; 当然, Aviator的语法是受限的, 它不是一门完整的语言, 而只是语言的一小部分集合。

其次, Aviator的实现思路与其他轻量级的求值器很不相同, 其他求值器一般都是通过解释的方式运行, 而Aviator则是直接将表达式编译成 JVM 字节码, 交给 JVM 去执行。简单来说, Aviator的定位是介于 Groovy 这样的重量级脚本语言和 IKExpression 这样的轻量级表达式引擎之间。

正文:

参考解答:
  • Drools是一个高性能的规则引擎,但是设计的使用场景和在本次测试中的场景并不太一样,Drools的目标解决如何快速匹配复杂对象(如有上百上千的属性),而不是简单对象重复匹配规则,因此在这次测试中结果垫底。
  • IKExpression是依靠解释执行来完成表达式的执行,因此性能上来说也差强人意,和Aviator,Groovy编译执行相比,还是性能差距还是明显;
  • Aviator会把表达式编译成字节码,然后代入变量再执行,整体上性能做得很好;
  • Groovy是动态语言,依靠反射方式动态执行表达式的求值,并且依靠JIT编译器,在执行次数够多以后,编译成本地字节码,因此性能非常的高,适应于反复执行的表达式
参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3851.html

《表达式求值引擎Aviator的使用学习》上有3条评论

  1. 高并发风控技术解密(上)
    http://www.importnew.com/28700.html

    风控系统建设的难点:
    灵活高效的接入:通常只有1周甚至更短时间,业务复杂多样;如何减少发版失误和事故
    极短的响应时间:业务通常只给100ms,最多200ms的超时
    并发吞吐要求高:接入业务较多,调用量大;有的业务用风控抵挡攻击
    大量数据处理:数据量相对较大,如何有效利用;数据查询回溯要求较高
    对抗升级:攻击者不停猜测内部规则;数据如何为对抗服务
    大促稳定性:如何保证调用量增加后不宕机;如何在出问题情况下依然服务

    高并发风控技术解密(下)
    http://www.importnew.com/28710.html

    如何灵活高效的接入?
    平台化
    · 搭建平台而不是搭建项目——做一个“淘宝”而不是做只针对某几项业务的网站
    · 从业务中抽象及通用——如果一种业务有可能在今后重复出现,那就将其模块化,系统化(如批处理系统),发展成为平台能力

    动态化
    · 流程动态化——不同的业务类型对应的流程可以随意调整,无须调整代码
    · 代码动态化——采用groovy脚本动态调整线上代码,无须发版;规则配置除了使用各种灵活预配置外,还可以使用groovy脚本代码化规则;指标函数groovy化,不需要每次发版。
    · 配置动态化——配置动态化可以考虑虚拟表的形式,通过虚拟表将任意表的结构存储到一个统一的表结构中去,从而完成配置的动态化,有些类似NoSQL的文档化思想。

发表评论

电子邮件地址不会被公开。 必填项已用*标注