交易风控系统架构演变

2020 年 3 月 22 日

交易风控系统架构演变

背景介绍


金融系统网络,从业务层到交易层,需要若干系统间协同处理,相互支持,相互依赖,共同完成一笔看似简单的业务处理。风控在这其中是被若干系统同步调用的叶子节点,并发量高而且要同步实时完成逻辑复杂的风险判断,给出风险决策。


老交易风控完全依赖关系型数据库,响应速度慢,抗高并发能力差;内部系统间数据耦合严重,不易扩展改造;


不断增加的业务量,持续增长的规则数,越来越慢的响应速度……亟待系统升级改造,一年前我们开始了系统优化之路……


具体优化措施


一、数据层


1、内部系统流水数据解耦和


风控系统用到的数据大体分 3 类:实时业务流水数据;离线风险特征数据;配置类数据。其中实时业务流水数据是无边界且数据量极大的数据,也是我们优化的重点,这类数据从使用者的角度,主要分:


  • 实时决策系统(从现在往前n段时间即可)

  • 风控运行系统,供案件分析,人工审核用(需要历史全量数据)

  • 分析师风险分析用(虽然不需要历史全量数据,但是比实时系统需要更长的有效数据)

  • 其他非实时系统。


老系统数据架构:



如上图所示,线上实时库数据与各类内部系统存在耦合关系:


  • Sars系统每天凌晨抽数抽到实时系统性能下降;

  • Mysql从库当大数据用了,定时炸弹随时引爆;

  • 实时决策强依赖Mysql,性能差待优化。


所以首先要做的就是:各内部系统数据解耦合。


解耦整体思路:对实时系统接入的所有流水数据做完数据清洗、预处理后,MQ 异步方式发出来,其他内部系统来订阅,根据自己系统的特点选择不同的存储方案。


优化后数据架构:



数据解耦后,就可以放心大胆的进行实时系统的优化改造。目前改造的效果:新接入场景所有数据基本不需要再写入关系型数据库。


2、风控实时系统:去关系型数据库,全面缓存化


  • 流水数据


流水数据聚合统计指标是对 mysql 影响最大的,也是我们去关系型数据,全面缓存化最有难度的改造。


目前系统用到的方案有两种,二者相互补充,基本做到大场景所有聚合类统计全部缓存化。


方案一:清洗流水数据,缓存明细,解析聚合 SQL 转化为代码逻辑结合缓存数据实现聚合统计。



方案二:接入流式实时数据计算系统。



方案对比



  • 离线风险数据


这类数据的使用特点:查询相对简单,没有复杂聚合统计。整体思路:最底层(无需业务层感知)实现关系型数据库与缓存的数据同步。



3、写库优化


Mysql 目前架构是通过 cds 实现的主从读写分离,老业务接入的数据还是要写 MySQL, 单点主库在高并发情况下出现写库瓶颈。


优化方案:


  • MQ异步降级(大部分聚合统计都已经切缓存,入库延迟对整体系统业务影响不大)。

  • 业务层合并、批量入库,减少IO。



优化后,618 大促峰值,比去年双 11 量大的情况下,异步写库无任何积压,无任何入库延迟!


二、引擎 Drools 版本升级、JVM 调优


引擎采用支持热部署的 Drools,随着规则及业务量的增加,引擎 java fullGc 频繁,yongGc 耗时过长,尝试调整各类参数都无法解决问题。


如下优化项完成后,java 虚拟机各类 GC 表现正常,TP999 优化效果非常明显:


  • Drools升级到最新7.0版本,session采用无状态替代原有有状态session。

  • Jvm升级到1.8,采用java8默认垃圾收集机制。


三、交易风控 3.0– 风控引擎业务模型升级优化


2.0 到 3.0 演进


**



1、引入规则包的概念


通过规则包前置条件,可以将规则划分到更小的规则包,使每条规则能够更精确的处理自己应该处理的业务请求,提高系统性能。


2、引入指标模板的概念(通过 Rhythm 模板引擎实现)



解决问题:


  • 多规则间,指标重复配置,复用性差。

  • 相同指标重复收集,浪费系统资源,影响系统效率。

  • 分析师可直接通过界面灵活配置规则。研发负责开发指标模板即可,一劳永逸,节约研发成本。


其他改造方案


1、网关代码重构:通过模板模式、工厂模式,将不同场景间的定制处理解耦和;拆分场景也便于系统性能监控。


2、自降级方案:系统一旦出现问题,系统可以自降级,及时给上游返回结果,流水数据会存下来,后面异步再跑引擎。


……


优化改造效果


1、从系统性能角度


在规则数量翻 2 倍,业务请求量翻 3 倍的情况下,全场景系统响应 TP99 降低到原来的 1/5,性能提升显著。过去两个大促,全部顺利经受住考验……


2、从研发人力角度


随着交易风控 3.0 及洞察系统的上线及稳定运行,之前专门设立的都需要 1 个研发人力支持的:规则开发接口人、线上值班接口人,都已经取消。


后续…


目前系统还有优化空间,优化改造之路,我们将持续不断走下去……


2020 年 3 月 22 日 21:06574

评论

发布
暂无评论
发现更多内容

附PPT丨AI和云原生时代的数据库进化之路

dbaplus社群

数据库 云原生

内存问题探微

AI乔治

Java 架构 编程语言 内存 多线程与高并发

信任的传递——为什么我们需要第三方授权?

ThoughtWorks洞见

证书 身份认证

记一次MapReduce的内存溢出

AI乔治

Java mapreduce 架构 内存溢出

互联网应用系统常见问题与方案

raox

极客大学架构师训练营

牵头成立“现代计算联盟”,强大如谷歌也需要组团打怪吗?

脑极体

架构师训练营 Week9 - 课后作业

极客大学架构师训练营

Shell脚本命令常用技巧

MySQL从删库到跑路

shell脚本编写

Apache顶级项目ShardingSphere — SQL Parser的设计与实现

京东数科风险算法与技术

数据库 开源 中间件

住建部等六部门:广泛运用区块链等技术,建设智慧物业管理服务平台

CECBC区块链专委会

物业生活

如何构建彼此信任相托的团队?

Alan

团队管理 个人成长 团队协作

浅谈JDK并发包下面的分治思想及分治思想在高并发场景的运用

AI乔治

Java 架构 jdk 分布式 多线程与高并发

建信金科大咖访谈:金融衍生品定价与建行实践

金科优源汇

金融科技 金融创新

AWS 助力贝壳VR看房走出国门,升级全球居住服务新体验

亚马逊AWS官方博客

AWS

这才是你需要的C/C++Linux学习路线!

赖猫

c++ Linux 后台开发 服务器开发

JAVA基础 -- java8新特性一之 Stream流以及基本操作

起个名字很难

传统巨头抢占区块链场景高地 医疗、汽车、金融成为热门赛道

CECBC区块链专委会

区块链 金融

Elasticsearch 新机型发布,性能提升30%

小小的一朵云

大数据 elasticsearch Elastic Stack

静态代码分析工具评估指标及方法

maijun

自建本地电话告警系统

周楠

运维 物联网 监控告警

JAVA基础 -- java8新特性一之 方法引用

起个名字很难

java基础

图文回顾丨北京「解构云原生:企业数字化转型新支点」沙龙

RancherLabs

k8s rancher

大咖直播 | Elasticsearch 应用监控管理平台搭建实战

小小的一朵云

大数据 elasticsearch Elastic Stack 监控管理平台

云南区块链电子发票全面推广啦!

CECBC区块链专委会

区块链 纳税人

EMAS远程日志 - 移动端问题排查利器

应用研发平台EMAS

阿里云 运维 日志 监控告警 应用

JAVA基础 -- java8新特性一之 lambda表达式

起个名字很难

java基础

云原生架构-可观测性之 Prometheus 服务自动发现

云原生实验室

几种常见的研发管理体系,哪种更适合你?

菜根老谭

敏捷开发 研发管理 CMMI IPD

告别消费主义的双12,是华为云12.12会员节真正的意义

脑极体

Python进阶——为什么GIL让多线程变得如此鸡肋?

Kaito

Python

生产环境全链路压测建设历程之十一:生产压测给淘宝网带来的价值

数列科技杨德华

全链路压测

交易风控系统架构演变-InfoQ