动手撸一个规则引擎

前言

相信很多人都听说过规则引擎,有些人或多或少都会在项目中使用过规则引擎。

最开始听说过规则引擎可能是一个类似于OA的系统中,通过规则配置,让一个审批流程得到配置化和规则化。

后来做过一个类似于规则引擎的项目是在推荐系统还不那么热的时候,当时系统中希望增加一个功能【猜你喜欢】,因为这个是易变的规则,运营同学在规则系统配置:如果用户买了a,b,c产品则推荐产品e,f,g。

这个还是一个比较简单的规则场景,随着系统越来越大,运营,产品同学期望对系统能有更系统的把控,规则引擎有了新的生命力。

规则引擎的作用

后续接触的一些规则引擎长出现在一个大数据体系的系统中,我们的规则引擎出现在风控平台,大数据审计系统,优惠策略等系统中。

规则主要起到两个作用:流程控制,数据验证。

规则引擎在系统中根据事前,事中,事后可以的实现方式:

  • 事中:验证系统流程产生的入参和返回值是否符合规则要求;
  • 事后:通过大数据技术栈,对多个数据源进行比对,进行数据审计;

如何实现一个规则引擎

技术上可选的方案很多,将整个系统进行进一步抽离可以理解为两部分:

  • 规则可配置;
  • 规则执行;

我们希望做到这样的效果,在规则平台进行规则配置,规则即可生效,之后规则下发,在系统执行到对应的业务场景时触发规则验证。

事中规则实现

所以我们首先需要一个规则配置系统,实现方式可以采用开源的库,对一些表达式进行解析。或者采用之前写过的服务化配置的另一种可能,总之是将规则封装成一个便于解析的表达式,将表达式交给规则解析程序/库。

规则建立好了之后实现规则下发,规则下发的方案有很多,可以根据自己系统要求进行实现,比如:

  • 数据库+缓存;
  • 缓存;
  • Mq订阅;
  • Zookeeper的Watcher;

规则属于非核心业务规则,为了避免因规则验证造成的时延,不建议放到缓存或者数据库中,比较会存在跨进程调用问题,可以放到本地内存进行提速。

内存中应用程序触发规则可以借助自定义注解,AOP,反射,字节码技术等进行实现,今天推送的文章涵盖了基本的技术。

事后规则实现

事后的规则实现就比较简单了,主要通过大数据技术栈对多数据源数据在Hive中进行聚合,既然是事后的离线方式,对于执行实现可以接收一定的延迟,或者采用流式处理降低时延,总之在产生即时数据之后的处理措施都属于事后规则,常见于审计系统,风控系统等。

后记

相信通过简单的介绍你对一个规则引擎的1.0版本的实现已经有了一定的认识,希望在以后的工作中你需要建立一个规则引擎的时候给你带来帮助。

原文发布于微信公众号 - 服务端技术杂谈(ITIBB2014)

原文发表时间:2018-05-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏在线教育技术团队专栏

对于服务端bug处理的一些建议

清楚bug所在业务的逻辑,了解正常的流程应该是什么,业务的入口在哪里,重现的步骤

1602
来自专栏编程坑太多

『高级篇』docker之微服务间如何通讯(六)

在 Web 应用中处理来自客户端的请求时,通常只考虑 GET 和 POST 这两种 HTTP 请求方法。实际上,HTTP 还有 HEAD、PUT、DELETE ...

3263
来自专栏ImportSource

微服务应具备的12个属性

该文翻译自Pivotal公司的 Matt Stine大牛的书籍《Migrating to Cloud Native Application Architectu...

2789
来自专栏叁金大数据

存储是怎样炼成的?

什么FAT,NTFS,NFS,DAS,SAN,NAS,OSD这些名词我一个都不认识。

1553
来自专栏程序员互动联盟

【专业技术】Node.js 究竟是什么?

简介 如果您听说过 Node,或者阅读过一些文章,宣称 Node 是多么多么的棒,那么您可能会想:“Node 究竟是什么东西?” 即便是在参阅 Node 的主页...

3297
来自专栏java工会

15个顶级Java多线程面试题及答案,快来看看吧

1575
来自专栏子勰随笔

SDK设计心得之架构和资源

4734
来自专栏CSDN技术头条

微博宕机背后,高并发有哪些常见问题?

上周,赵丽颖、冯绍峰结婚官宣造成微博宕机,那么回归技术,面对如此大的高并发流量和屡次崩溃的系统,作为程序员是否有较好的方法来应对及解决?在此,技术专家丁浪为我们...

3171
来自专栏take time, save time

python 爬虫 入门 commit by commit -- commit8

代码你可以在https://github.com/rogerzhu/relwarcDJ 上得到,并且带有我完整的commit记录。

600
来自专栏鸿的学习笔记

简单聊聊分布式系统的一致性问题

记得有人说过,分布式系统的所有问题归根结底都是一致性问题。前面文章提到的数据复制,分区以及事务面临的问题都是如何保证数据一致。而分布式系统不同于单机,它不...

741

扫码关注云+社区