可以借鉴的干货

1,统一存储服务,包含:多种存储库连接封装和服务封装   在统一存储服务
2.获取配置的环境    类:EnvVariable

一、风控项目介绍

对一个复杂支付系统提供统一、全面、高效的风险控制服务特定:1、数据全2、响应快

二、风控项目系统架构与技术

系统架构:实时风控:  规则前处理、统一规则引擎、规则后处理非实时风控: 数据收集入库、流式计算引擎、批量计算引擎统一存储服务:数据存储BFF:非核心模块,一些基础配置信息,比如设置日交易额最大为500系统环境需要安装的组件;mysql + hbase + redis kafka + flinkmaven私服Nexus(主要存储.drl文件,供Drools读取加载规则)用到的技术:实时风控模块:SpringBoot + Netty + Drools规则引擎非实时风控模块:Flink


三、规则设计与规则引擎

1、规则设计

5种典型规则

1、简单型规则:直接读取请求报文进行规则判断规则示例:AQ001:对于交易渠道为XXX的所有交易,如果交易手机号和银行签约的手机号一致,则不做任何规则限制2、数据画像型规则:需要在请求报文基础上添加一些风控因子进行补充判断规则示例:LG001:外部导入一批黑名单数据,黑名单用户禁止登录3、累计型数据规则:需要对用户以往的交易进行进行累计计算的规则规则示例:LJ001:设定用户的日交易额为500,超过日交易额的用户,禁止当日所有的交易4、批量计算型规则:需要对用户以往的交易行为进行批量统计的规则规则示例:LJ002:同一个手机号,三日内支付次数超过10次,支付总金额不超过100元,禁止支付12小时5、复杂事件型规则:需要对用户以往行为组合甄别的规则规则示例:LG002:同一个用户,在一天内,连续登录失败5次,则锁定账号,3天内禁止登录

2、规则引擎

a、什么是规则引擎?为什么要用规则引擎?

简单来看,规则引擎就是将一段字符串当作一段逻辑运行使用规则引擎,能够将数据的准备和处理过程分离解耦简单的规则引擎:Aviator表达式引擎

b、Drools规则引擎?

官网
中文网

1、drools基础使用
1.pom引入四个依赖
2.resources下写test.drl规则文件
3.java类调用规则文件启动规则引擎
//1、pom依赖
<dependencies><!--drools--><dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>6.5.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>6.5.0.Final</version></dependency><!--kie knowledge is everything--><dependency><groupId>org.kie</groupId><artifactId>kie-api</artifactId><version>6.5.0.Final</version></dependency><dependency><groupId>org.kie</groupId><artifactId>kie-ci</artifactId><version>6.5.0.Final</version></dependency><dependency><!--lombok--><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version></dependency></dependencies>
//2、test.drl规则文件/**package xxx.xxx.xxx        所在包名,需要与主运行类一致KnowledgeBaseimport xxx.xxx.xxx         跟java类似,规则中引入的类 Studentglobals xxx.xxx.xxx        全局对象,用于处理多个配置文件中都需要定义的相同对象function                  定义一些处理函数,基本跟java类似queries                    定义一些查询方法rule                       规则rule就是三大块中得规则体,以rule开头,以end结尾,每个规则文件可以包含多个rule。规则体分为三个部分,LHS RHS 属性三大部分LHS, LeftHand Side, 指的是条件部分 RHS, RightHnad Size,指的是then后面的部分
*///包名
package com.test
import com.test.Studentrule "rule1"salience 1   //优先级  越大越早执行(2比1早执行)when$student:Student(age>10)     //这里叫 LHSthenSystem.out.println("age>10岁的人:" + $student.getName());  //这里叫 RHSendrule "rule2"salience 2   //优先级when$student:Student(gender=="男",age>10)  //这里就是 LHSthenSystem.out.println("性别为男,age>10岁的人:" + $student.getName());end
//3、主运行类调用规则文件启动规则引擎import org.drools.core.io.impl.ClassPathResource;
import org.kie.api.io.ResourceType;
import org.kie.internal.KnowledgeBase;
import org.kie.internal.KnowledgeBaseFactory;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.definition.KnowledgePackage;
import org.kie.internal.runtime.StatefulKnowledgeSession;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;public class TestDrools2 {public static void main(String[] args) {//1、获取规则配置文件KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();knowledgeBuilder.add(new ClassPathResource("test.drl"), ResourceType.DRL);Collection<KnowledgePackage> collection = knowledgeBuilder.getKnowledgePackages();KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();knowledgeBase.addKnowledgePackages(collection);//2、获取引擎StatefulKnowledgeSession statefulKnowledgeSession = knowledgeBase.newStatefulKnowledgeSession();//3、引擎根据规则运行List<Student> students = getStudent();for (Student student : students) {statefulKnowledgeSession.insert(student);}statefulKnowledgeSession.fireAllRules();statefulKnowledgeSession.dispose();System.out.println("结束...");}private static List<Student> getStudent() {List<Student> students = new ArrayList<Student>();students.add(new Student("张三", 13, "男", new BigDecimal(13)));students.add(new Student("李四", 14, "男", new BigDecimal(14)));students.add(new Student("王五", 15, "男", new BigDecimal(15)));students.add(new Student("赵六", 16, "女", new BigDecimal(16)));return students;}
}
2、drools高级使用 (规则文件test.drl从maven私服读取)
从maven私服加载规则文件
StatefulSession与StatelessfulSession的使用以及区别。
基于Kie组件动态更新Maven仓库中的规则文件。

四、统一存储服务

数据量小,访问也不会太频繁的元数据                   mysql:事务控制比较好
数据量小,业务价值比较高的数据(计算出来的数据)         redis
数据量大,业务价值相对比较低的数据,大而全             hbase、clickHouse、es1、数据层封装(对各种连接的封装):drisk-common-service项目———connector包与各种数据源的交互如:DataBase、Redis、Kafka、Hbase、HTTP2、统一服务封装drisk-common-service项目——services包

五、网络协议层封装(netty)

drisk-realtime-server启动类也顺带启动netty服务

六、实时风控引擎整体流程

drisk-realtime-server在这里插入代码片

最后、看完这个项目,延伸思考

1、如果不想用netty,如何构建微服务体系?构建message对象,直接丢给engine调用engine的方法,在网络协议层封装里面2、如果不想用Drools,如何引入新的规则引擎
3、如何保证规则与数据是同步的

大数据风控项目实战 Drools规则引擎相关推荐

  1. 《Python金融大数据风控建模实战》 第6章 变量分箱方法

    <Python金融大数据风控建模实战> 第6章 变量分箱方法 本章引言 Python代码实现及注释 本章引言 变量分箱是一种特征工程方法,意在增强变量的可解释性与预测能力.变量分箱方法主要 ...

  2. 【尚硅谷】电商数仓V4.0丨大数据数据仓库项目实战【学习记录】第二节

    这里写目录标题 注意 电商数据仓库系统 第6章 数仓搭建-DWD层 6.1.5 动作日志表装载中定义UDTF函数 6.2.6 优惠券领用事实表(累积型快照事实表) 6.2.9 订单事实表(累积型快照事 ...

  3. 学习笔记(01):大数据金融信贷项目实战(Spark2.3.x Streaming)-Spark SQL架构原理

    立即学习:https://edu.csdn.net/course/play/19569/272049?utm_source=blogtoedu 哈哈哈哈

  4. drools规则引擎的在项目中的使用手记

    需求 按照登录用户的会员等级 和签到周期 根据一定的计算规则送积分.由于之前都是通过if else去做的控制.规则变更的时候可能需要重新调整代码甚至发布服务. 由于不想再每次规则变更后需要调整代码,于 ...

  5. 个推一键认证反欺诈,基于大数据风控引擎助力APP防薅羊毛

    ​​"君不见,羊毛党如蜂拥来,掳走福利就溜哉:君不见,黑产刷量强注水,白白消耗推广费". 近年来,羊毛党薅羊毛.机器刷量等黑产行为花样百出,层出不穷,如何防薅羊毛,成为很多APP运 ...

  6. 视频教程-大数据电视收视率实战项目教程(企业级案例)-Spark

    大数据电视收视率实战项目教程(企业级案例) 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业.拥 ...

  7. 网易微专业python数据分析统计服_40套大数据云计算高级实战精品,数据分析,数据仓库,数据爬虫,项目实战,用户画像, ......

    40套大数据云计算高级实战精品,数据分析,数据仓库,数据爬虫,项目实战,用户画像,日志分析,Hadoop,Flink,Spark,Kafka,Storm,Docker,ElaticStack等视频教程 ...

  8. 反洗钱检验java_从Drools规则引擎到风控反洗钱系统V0.2.3.pdf

    本文档持续更新中,QQ 技术交流群:593177274,作者邮箱:secbro2@ 从Drools 规则引擎到风控反洗钱 -- <Drools7.0.0.Final 规则引擎教程> 修订日 ...

  9. 《黑马程序员2023新版黑马程序员大数据入门到实战教程,大数据开发必会的Hadoop、Hive,云平台实战项目》学习笔记总目录

    本文是对<黑马程序员新版大数据入门到实战教程>所有知识点的笔记进行总结分类. 学习视频:黑马程序员新版大数据 学习时总结的学习笔记以及思维导图会在后续更新,请敬请期待. 前言:配置三台虚拟 ...

最新文章

  1. 在TensorFlow2.0发布前,帮你掌握TensorFlow的必备内容
  2. TechEd 2010-如何构建企业级ETL 后续补充
  3. Java之基础(1) - 编程中“为了性能”尽量要做到的一些地方
  4. c语言二元运算符大全,C语言运算符大全
  5. pat天梯赛L1-050. 倒数第N个字符串
  6. measureChildren作品
  7. php ci 处理图片 裁剪,Codeigniter实现智能裁剪图片的方法
  8. DVWA设置mysql_解决DVWA配置报错
  9. snmp 获取设备类型_SNMP开发系列(三)SNMP Agent的实现
  10. html选择器 并列,CSS 中的选择器 (二)- 组合选择器
  11. 架构篇:什么是微服务架构 Spring Cloud?
  12. 视觉SLAM十四讲 第9讲 卡尔曼滤波
  13. HICE-SSH使用RSA认证方式进行登陆
  14. 系列:关于TXT的文件格式
  15. JAVA学习笔记——对象(一)
  16. JZOJ 4250. 【五校联考7day1附加题】路径(折半搜索)
  17. 同时投掷两个不同面的骰子
  18. unity3d api 中文文档_unity3D游戏开发工程师完整简历范文
  19. -128的补码及原码、反码、补码
  20. CUDA----.cpp文件和.cu文件应用区别

热门文章

  1. java web分层和层间数据传递 vo bo po (转载)
  2. 素材网站需要多大的服务器,网站图片一般多大尺寸
  3. 在几年后,程序员的薪资会一直这么高么?
  4. arg是什么函数_JavaScript 函数式编程 - 基本范式简介
  5. ios-bug.html黑屏重启,iOS12曝重大BUG:iPhone黑屏无法充电!你中招没?
  6. 2022.10.10 英语背诵
  7. Qt使用QCustomPlot画坐标图教程
  8. 有没有讲python模块的书_python - 模块,包
  9. React Firebase 计账软件 Serverless 项目实战视频教程
  10. drop、delete、truncate比较