构建高性能风控指标系统

article/2025/7/1 1:21:56

一、引言

在金融风控领域,指标是风险识别的核心依据。风控平台核心系统之一--规则引擎的运行依赖规则、变量和指标,一个高性能的指标系统非常重要,本文将深入探讨风控平台指标系统的全链路技术实现,涵盖从指标配置到查询优化的完整闭环。

一个高效的指标系统需支持:
1)灵活配置;

2)多源采集;

3)  低延迟计算;

4)  毫秒级查询。

基于金融交易所的业务特性,指标计算所依赖的业务数据既有短周期(比如一个月内的业务数据),也有时间较为久远的数据(比如一年内的业务数据),所以根据依赖业务数据的时间特性,需要设计实时与离线双引擎驱动的指标计算系统。  

 二、系统架构概览  


风控指标系统采用分层架构设计:  

 三、核心模块技术实现  


 1. 指标配置:灵活定义与动态解析  
**技术栈:Spring Boot + Groovy DSL + 关系数据库**  
- **动态DSL引擎**  
  通过Groovy脚本实现指标逻辑的灵活配置,支持动态加载:  
  ```groovy
  // 示例:计算用户近1小时交易次数
  def calculate(Event event) {
    return event.where("event_time > NOW()-3600")
                .groupBy("user_id")
                .count("txn_id");
  }
  ```
- **元数据管理**  
  指标基础属性(名称、类型、数据源)存储于MySQL,计算逻辑以脚本形式存储。

 2. 数据采集:多源异构数据统一接入  
 (1) 业务系统实时数据  
- **采集方式**:通过`Logstash`或`Filebeat`抓取业务日志,写入Kafka  
- **Kafka Topic设计**:  
  ```bash
  # 按业务领域划分Topic
  risk_platform.payment_txn   # 支付交易
  risk_platform.user_behavior # 用户行为
  ```

 (2) 数仓离线数据  
- **采集策略**:  
  - 每日增量:通过Sqoop同步Hive表至Doris  
  - 小时级更新:Flink消费Kafka写入Doris  

 (3) Doris实时接入层  
```sql
-- 创建Doris Kafka导入作业
CREATE ROUTINE LOAD risk_platform.payment_load ON payment_txn
PROPERTIES (
  "format" = "json",
  "kafka_broker_list" = "broker1:9092",
  "kafka_topic" = "risk_platform.payment_txn"
);
```

 3. 指标计算:批流一体计算引擎  
 (1) 实时计算:Doris Streaming  
**优势**:  
- 支持秒级数据可见性  
- 内置Rollup预聚合加速查询  

**典型场景实现**:  
```sql
-- 创建实时聚合物化视图(近10分钟交易金额)
CREATE MATERIALIZED VIEW txn_amt_10min AS
SELECT 
  user_id, 
  SUM(amount) AS total_amt,
  NOW() AS calc_time
FROM payment_txn
WHERE event_time > NOW() - 600
GROUP BY user_id;
```

 (2) 离线计算:Spark分布式批处理  
**T+1指标计算流程**:  
```python
# PySpark计算用户历史欺诈率
df = spark.sql("""
  SELECT 
    user_id,
    COUNT_IF(status='fraud') / COUNT(*) AS fraud_rate 
  FROM dwd_risk_txn 
  WHERE dt='${date}'
  GROUP BY user_id
""")
df.write.format("doris").save("risk_user_stats")
```

 4. 指标存储:分级存储策略  
| 存储类型    | 适用场景          | 性能指标       |
|-------------|-------------------|----------------|
| **Doris**   | 复杂聚合查询      | 99% < 200ms   |
| **Redis**   | 高频单点查询      | 99% < 5ms     |
| **HBase**   | 历史明细存储      | 范围查询优化   |

**Redis缓存设计**:  


```java
// 伪代码:查询优先走缓存
public MetricResult getMetric(String key) {
    // 1. 布隆过滤器预判
    if(!bloomFilter.mightContain(key)) return null; 
    
    // 2. 分布式锁防击穿
    RLock lock = redisson.getLock(key);
    try {
        lock.lock(3, TimeUnit.SECONDS);
        ValueWrapper value = redisTemplate.opsForValue().get(key);
        if(value != null) return (MetricResult)value;
        
        // 3. 回源查询
        MetricResult result = queryFromDoris(key);
        redisTemplate.opsForValue().set(key, result, 5, TimeUnit.MINUTES);
        return result;
    } finally {
        lock.unlock();
    }
}
```

 5. 查询服务:统一网关与优化  
**技术实现要点**:  
- **查询路由引擎**:  
  - 简单KV查询 → Redis  
  - 复杂OLAP → Doris  
- **Doris查询优化**:  
  ```sql
  -- 启用分桶裁剪和物化视图匹配
  SET enable_bucket_shuffle_join=true;
  SET enable_materialized_view_rewrite=true;
  ```
- **API网关**:基于Spring Cloud Gateway封装RESTful接口,支持QPS限流。、

 四、关键技术挑战与解决方案  


 挑战1:实时与离线数据一致性  
**解决方案**:  
- 使用`Doris Unique Key模型`实现Upsert  
- 离线计算结果覆盖实时数据时采用`版本号比对`

 挑战2:高并发查询压力  
**应对策略**:  
- **Redis分片集群**:Codis架构支持横向扩展  
- **Doris查询分流**:  
  ```mermaid
  graph LR
    A[查询请求] --> B{查询类型}
    B -->|简单聚合| C[Doris FE]
    B -->|复杂SQL| D[Doris BE集群]
  ```

 挑战3:指标回溯计算  
**实现方案**:  
- 基于`Apache Iceberg`构建数仓历史快照  
- Spark批量重算时指定时间戳:
  ```scala
  spark.read.format("iceberg")
       .option("snapshot-id", "123456789")
       .load("risk_db.txn_table")
  ```

 五、总结  

> **技术栈全景图**:  
> Kafka → Flink/Logstash → Doris/Spark → Redis  

案例示意图:


> 通过分层解耦与组件优化,实现毫秒级延迟与TB级数据支撑能力。


http://www.hkcw.cn/article/wIMVfrtLjr.shtml

相关文章

【LLM】Agent综述《Advances And Challenges In Foundation Agents》

note 拥有完善的认知架构仅仅只是第一步。Foundation Agent 的核心特征之一在于其自进化 (Self-Evolution) 的能力&#xff0c;即 Agent 能够通过与环境的交互和自我反思&#xff0c;不断学习、适应和提升自身能力&#xff0c;而无需持续的人工干预。自进化机制&#xff1a;优…

《Pytorch深度学习实践》ch3-反向传播

------B站《刘二大人》 1.Introduction 在神经网络中&#xff0c;可以看到权重非常多&#xff0c;计算 loss 对 w 的偏导非常困难&#xff0c;于是引入了反向传播方法&#xff1b; 2.Backward 这里模型为 y x * w&#xff0c;所以要计算的偏导数为 loss 对 w&#xff1b; …

房产销售系统 Java+Vue.js+SpringBoot,包括房源信息、房屋户型、房源类型、预约看房、房屋评价、房屋收藏模块

房产销售系统 JavaVue.jsSpringBoot&#xff0c;包括房源信息、房屋户型、房源类型、预约看房、房屋评价、房屋收藏模块 百度云盘链接&#xff1a;https://pan.baidu.com/s/1Ku27fPWwc47z2aSO_dow6w 密码&#xff1a;da1g 房产销售系统 摘 要 随着科学技术的飞速发展&#xf…

从0开始学vue:vue3和vue2的关系

一、版本演进关系1. 继承关系2. 版本生命周期 二、核心差异对比三、关键演进方向1. Composition API2. 性能优化 四、迁移策略1. 兼容构建模式2. 关键破坏性变更 五、生态演进1. 官方库升级2. 构建工具链 六、选型建议1. 新项目2. 现有项目 七、未来展望 一、版本演进关系 1. …

python 如何写4或5的表达式

python写4或5的表达式的方法&#xff1a; python中和是用“and”语句&#xff0c;或是用“or”语句。那么4或5的表达式为“4 or 5” 具体示例如下&#xff1a; 执行结果&#xff1a;

电子电气架构 --- 如何应对未来区域式电子电气(E/E)架构的挑战?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

绿盟 IPS 设备分析操作手册

一、操作手册说明 本手册面向安全监控分析人员&#xff0c;聚焦绿盟 IPS 设备的基础功能操作与典型攻击场景分析&#xff0c;提供安全事件监控、告警详情查看、白名单配置等功能指引&#xff0c;以及 Shiro 反序列化漏洞的检测与应急方法&#xff0c;助力及时发现并处置安全威…

Arch安装megaton

安装devkitPro https://blog.csdn.net/qq_39942341/article/details/148387077?spm1001.2014.3001.5501 安装cargo https://blog.csdn.net/qq_39942341/article/details/148387783?spm1001.2014.3001.5501 确认一下bashrc sudo pacman -S git cmake ninjagit clone https:/…

【Qt开发】对话框

目录 1&#xff0c;对话框的介绍 2&#xff0c;Qt内置对话框 2-1&#xff0c;消息对话框QMessageBox 2-2&#xff0c;颜色对话框QColorDialog 2-3&#xff0c;文件对话框QFileDialog 2-4&#xff0c;字体对话框QFontDialog 2-5&#xff0c;输入对话框QInputDialog 1&…

7.4-Creating data loaders for an instruction dataset

Chapter 7-Fine-tuning to follow instructions 7.4-Creating data loaders for an instruction dataset 我们只需将InstructionDataset对象和custom_collate_fn函数接入 PyTorch 数据加载器 ​ 使用以下代码来初始化设备信息 device torch.device("cuda" if tor…

android 上位机调试软件-安卓串口 com ttl 调试——仙盟创梦IDE

在 Android 开发中&#xff0c;基于com.ttl库的串口调试 Web 编写意义非凡。它打破了硬件与软件之间的壁垒&#xff0c;让 Android 设备能够与外部串口设备通信。对于智能家居、工业控制等领域&#xff0c;这一功能使得手机或平板能成为控制终端&#xff0c;实现远程监控与操作…

【笔记】解决虚拟环境中找不到 chromedriver 的问题

✅解决虚拟环境中找不到 chromedriver 的问题 &#x1f4cc; 问题描述&#xff1a; 在 Windows 中已将 D:\chromedriver\ 添加到系统环境变量 PATH&#xff0c;在系统终端中运行 chromedriver 没有问题。 但在项目虚拟环境&#xff08;如 .venv&#xff09;中运行项目时&…

Linux 基础指令入门指南:解锁命令行的实用密码

文章目录 引言&#xff1a;Linux 下基本指令常用选项ls 指令pwd 命令cd 指令touch 指令mkdir 指令rmdir 指令 && rm 指令man 指令cp 指令mv 指令cat 指令more 指令less 指令head 指令tail 指令date 指令cal 指令find 指令按文件名搜索按文件大小搜索按修改时间搜索按文…

基于STM32的循迹避障小车的Proteus仿真设计

文章目录 一、基于STM32的循迹避障小车1.题目要求2.思路2.1 主控2.2 显示2.3 电源模块2.4 舵机云台2.5 超声波测距2.6 红外循迹模块2.7 蓝牙模块2.8 按键2.9 电机驱动 3.电路仿真3.1 未仿真3.2 自动模式3.3 手动模式3.4 蓝牙模式 4.仿真程序4.1 程序说明4.2 主程序4.3 红外程序…

周星驰导演电影《女足》今日杀青 历时三月圆满收官

迪丽热巴主演的周星驰执导电影《女足》于2025年6月2日正式杀青。此前有报道称,新电影《女足》的路透拍摄画面曝光,其中包含特效动作场面,看起来与《少林足球》相似。该片由周星驰执导,结合了少林功夫与足球元素,讲述了中国女子足球队“峨嵋队”征战亚冠杯的热血故事。整个…

树欲静而风不止,子欲养而亲不待

2025年6月2日&#xff0c;13~26℃&#xff0c;一般 待办&#xff1a; 物理2 、物理 学生重修 职称材料的最后检查 教学技能大赛PPT 遇见&#xff1a;使用通义创作了一副照片&#xff0c;很好看&#xff01;都有想用来创作自己的头像了&#xff01; 提示词如下&#xff1a; A b…

《Global Securities Markets》中保证金与卖空制度知识点总结

一、保证金制度核心要点 &#xff08;一&#xff09;保证金基础概念 在证券交易语境下&#xff0c;保证金是投资者开展特定交易时向经纪商缴纳的现金或证券抵押品&#xff0c;其目的在于保障经纪商因向投资者提供信贷而面临的风险敞口。从本质上看&#xff0c;保证金构建起投…

【工具】文章生成器|突破人类认知极限:HUST-GenPaper 智能写作工具设计与实践

效果&#xff1a; 以下是介绍&#xff0c;我这篇博客就是用我自己这个项目复制prompt去问问小白写的&#xff0c;耗时二十分钟&#xff0c;比我以前写博客需要的时间少多了…… 总之就是突然有个点子&#xff0c;然后顺手就实现了&#xff0c;然后分享给大家&#xff0c;有用…

【AI论文】Skywork Open Reasoner 1技术报告

摘要&#xff1a;DeepSeek-R1的成功凸显了强化学习&#xff08;RL&#xff09;在提升大型语言模型&#xff08;LLMs&#xff09;推理能力方面的重要作用。在本研究中&#xff0c;我们提出了Skywork-OR1&#xff0c;这是一种针对长思维链&#xff08;Chain-of-Thought&#xff0…

webfuture:如何屏蔽后台发文界面的保存为新文章按钮?

问题描述&#xff1a; 如何屏蔽后台发文界面的保存为新文章按钮&#xff1f; 问题解决&#xff1a;修改这个文件 /Admin/Content/Base/css/base.css 定义这个的id saveAsNewItemSubmit #saveAsNewItemSubmit{display: none;}