风控系统实践之感: drools 和 redis

需求:

开发一个风控系统,系统包括, 规则引擎和计算引擎, 主要的内容如下:

1. 规则的增删改和实时生效, 规则的分类执行

2. 按照一定的纬度计算累计值,比如按照 IP, 用户 id, 账户 等纬度。

3. 需要支持滑动窗口,滚动窗口,长度窗口等

遇到的问题主要有以下几点:

1. redis 做流计算太过勉强,一是根据业务上的需求,需要统计的key 至少有几亿个,最多也有几十亿个,另外redis 中需要存储少量的交易的信息。估算下来量也是非常可观

2. redis 中 hot key 特别明显,比如按照商户的纬度去统计,如果不对商户的key 进行拆封,像盒马那种流量的商户,对redis 的压力是非常大的。

我们采用的是redis 的cluster 模式,这样的话redis hot key 对redis 影响会更大。对其进行拆分是非常必要的,比如 按照小时拆分。 

3. 流式计算中,一个是乱序导致累加的计算不准确(有负值),另外一个是消息延迟. 当时我们尝试使用flink 中的水印的概念去解决问题,发现并不适合。这个坑也是我们实践过后才发现的。

最痛苦的经历是乱序和延迟消息的解决,现在是采取纠正的方式解决。

规则引擎

规则引擎我们选用了drools,简单的探索了drools core, drools DRL, drools CEP 等,但是回头看看,针对drools的使用缺点还是很多, 而且很明显,暂时还没有替换的打算. 

1. 使用 drools CEP 如何做分布式? 我们发现drools CEP中的几种窗口都是内存计算的,应用到分布式中就没有很好的办法,几乎做不到,除非drools 也去集成redis等这种分布式缓存。

2. 使用drools 觉得很笨重,因为依赖比较多,二是我们只用到了 drools 中的 if else 等判断,许多其它的功能基本就用不到,因为 1 中解决不了分布式的问题。所以从这点来说drools 已经废了,根本不用在创建kiesession 这种 重量级的东西。

3. drools中支持的运算符不是特别充分,比如像 log 运算,sum, max, avg 这种的运算等都是不支持的. DRL 语言对业务人员来说不是非常的友好。

4. 另外drools 中的 连续,非连续的规则,没有看出来如何配置,至少flink cep 是有这样API的。

综上所描述,不得不吐槽下 drools真是无语,也许了解的很简单,还有别的方式,另外drools workbench 也是很无语,很复杂,估计drools 厂商想通过这种方式挣钱。

总体感觉,如果有别的选择,最好不要选用drools,分布式的问题没有解决,就等于废了,因为各种分布式窗口都需要我们自己去实现。怎么办呢? 

规则引擎最后还是采用了drools,根据具体的业务含义创建不同的kiesession,  drools 起到了if else 判断的作用,至于滚动窗口,长度窗口和滑动窗口都通过redis来做计算。遇到头疼的问题,是

1. 根据不同的统计纬度,大概计算了下,需要几十亿个key,在redis 中做计算

2. 滑动窗口暂时靠 redis的zsort 的数据结构,性能不是非常好

3. 热点key 的问题,特别对于大商户的热点key 的问题,需要做拆分,拆分起来是比较复杂的

4. 消息延迟和消息乱序问题。

所以计算引擎的需求一般是

1. 计算很快,大几百个规则,能够很快的计算出准确的结果来

2. 计算准确率,当面对乱序和延迟消息的时候,如何计算的更加准确

3. 计算的量的问题,正如前面提到的,几十亿个key,另外还需要存储一些信息,计算的中间状态等,如何在redis 中丢失,就会造成计算不准确。

基于以上的问题,关键是如何做的更好,优化的更好,说实话,我没有找到答案,可以做的就是不断的优化redis 计算(暂时不能上大数据,比如flink, spark 等),减少redis 的操作带来的网络开销。

其实最后还要提一下,如果能采用内存计算,不用分布式计算,会不会速度更快点,比如根据业务来做分片,这样在各个实例统计的中间值就不用汇总,那么每个实例只需要内存计算就好,不需要访问redis而带来的网络开销。但是这样做也会带来架构层面的调整,比如 如何做 fault tolerance, 如何做 状态持久化, 等一系列的问题。 

从使用redis结果来看,效果也不是那么差,不考虑非常热点key 的情况下,最高tps 也达到6000多(2 台机器,16core,32G 内存), 一般公司的业务其实是可以满足的,对于非常热点的key,后续的优化是继续拆分.

一个好的风控系统是非常难的,做以笔记,以希望不断成长

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354