构建高性能风控指标系统
一、引言
在金融风控领域,指标是风险识别的核心依据。风控平台核心系统之一--规则引擎的运行依赖规则、变量和指标,一个高性能的指标系统非常重要,本文将深入探讨风控平台指标系统的全链路技术实现,涵盖从指标配置到查询优化的完整闭环。
一个高效的指标系统需支持:
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级数据支撑能力。
相关文章:

构建高性能风控指标系统
一、引言 在金融风控领域,指标是风险识别的核心依据。风控平台核心系统之一--规则引擎的运行依赖规则、变量和指标,一个高性能的指标系统非常重要,本文将深入探讨风控平台指标系统的全链路技术实现,涵盖从指标配置到查询优化的完…...
openfeignFeign 客户端禁用 SSL
要针对特定的 Feign 客户端禁用 SSL 验证,可以通过自定义配置类实现。以下是完整解决方案: 1. 创建自定义配置类(禁用 SSL 验证) import feign.Client; import feign.httpclient.ApacheHttpClient; import org.apache.http.conn…...
DeepSeek 赋能自动驾驶仿真测试:解锁高效精准新范式
目录 一、自动驾驶仿真测试概述1.1 自动驾驶发展现状1.2 自动驾驶仿真测试流程 二、DeepSeek 技术剖析2.1 DeepSeek 简介2.2 DeepSeek 核心技术原理 三、DeepSeek 在自动驾驶仿真测试中的应用原理3.1 与自动驾驶仿真测试流程的结合点3.2 如何提升仿真测试效果 四、DeepSeek 在自…...

晨控CK-UR12与西门子PLC配置Modbus TCP通讯连接操作手册
晨控CK-UR12与西门子PLC配置Modbus TCP通讯连接操作手册 晨控CK-UR12系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题:围绕…...

实验一:PyTorch基本操作实验
import torch # PyTorch中初始化矩阵常见有以下几种方法 # 1. 直接使用固定值初始化 # M torch.tensor([[1.0, 2.0, 3.0]]) # 1x3矩阵 # 2. 随机初始化 # M torch.rand(1, 3) # 1x3矩阵,元素在0-1之间均匀分布 # M torch.randn(1, 3) # 1x3矩阵,元…...

可视化大屏通用模板Axure原型设计案例
本文将介绍一款基于Axure设计的可视化大屏通用模板,适用于城市、网络安全、园区、交通、社区、工业、医疗、能源等多个领域。 模板概述 这款Axure可视化大屏通用模板集成了多种数据展示模块和组件,旨在为用户提供一个灵活、可定制的数据展示平台。无论…...
通配符(Wildcard)与正则表达式(Regular Expression)的关系及区别
通配符(Wildcard)与正则表达式(Regular Expression)的关系及区别 1. 通配符(Wildcard) 定义:通配符是用于简单模式匹配的特殊符号,主要用于文件名匹配(如命令行操作&…...

历年山东大学计算机保研上机真题
历年山东大学计算机保研上机真题 2025山东大学计算机保研上机真题 2024山东大学计算机保研上机真题 2023山东大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school 从1到100找质数 题目描述 从 1 1 1 到 100 100 100 中找出所有的质数。 输入格式 …...

Java处理动态的属性:字段不固定、需要动态扩展的 JSON 数据结构
文章目录 引言I `JSONObject` 接收和返回JSONObject 接收和返回数据存储II 签名测试接口dto的定义签名计算III JsonAnySetter 和JsonAnyGetter 注解@JsonAnySetter 的用法@JsonAnyGetter 的用法综合示例引言 应用场景: 签名测试接口、表单配置项、参数列表、插件信息等。技术实…...

MAC电脑怎么通过触摸屏打开右键
在Mac电脑上,通过触摸屏打开右键菜单的方法如下: 法1:双指轻点:在触控板上同时用两根手指轻点,即可触发右键菜单。这是Mac上常用的右键操作方法。 法2:自定义触控板角落:可以设置触控板的右下角或左下角作为右键区域…...

用 Whisper 打破沉默:AI 语音技术如何重塑无障碍沟通方式?
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

【东枫科技】KrakenSDR 天线阵列设置
标准测向需要五根相同的全向天线。您可以折衷使用更少的天线,但为了获得最佳性能,我们建议使用全部五根天线。这些天线通常是磁铁安装的鞭状天线,或偶极子天线。我们建议始终使用均匀圆形阵列 (UCA) 天线,因为它可以确定来自各个方…...
Spring Boot中的事件与JMS消息集成
Spring Boot事件机制 Spring框架的事件处理是其核心特性之一,通过ApplicationEvent类和ApplicationListener接口实现。在Spring Boot应用中,事件机制是实现模块间消息传递的重要方式,通常用于业务逻辑内部通信。 内置事件类型 Spring应用上下文在启动时会触发多种内置事件…...
ubuntu/windows系统下如何让.desktop/.exe文件 在开机的时候自动运行
目录 1,让 .desktop 文件在 Ubuntu 开机时自动启动 1.1 创建 autostart 目录(如果不存在) 1.2 将 .desktop 文件复制到 autostart 目录 1.3 确保 .desktop 文件有可执行权限 2,windows 2.1 打开「启动」文件夹: 2.2 将 .exe 或快捷方…...

云计算数据治理
知识星球:数据书局。打算通过知识星球将这些年积累的知识、经验分享出来,让各位在数据治理、数据分析的路上少走弯路,另外星球也方便动态更新最近的资料,提供各位一起讨论数据的小圈子 1.摘要 云计算可以推动创新和各行业应用的…...
【Net】TCP粘包与半包
文章目录 TCP粘包与半包1 背景2 粘包(packet stick)3 半包(packet split)4 为什么会出现粘包/半包?5 如何解决?6 示例7 总结 TCP粘包与半包 在网络编程中,粘包和半包问题是常见的 TCP 协议特有…...

【Android】如何抓取 Android 设备的 UDP/TCP 数据包?
目录 前言理解抓包tcpdump 实时抓包Wireshark 解包抓包后的一些思考 前言 在真正接触 UDP/TCP 抓包之前,我一直以为这是一项高深莫测的技术。可当我们真正了解之后才发现,其实并没有那么复杂——不过如此。 所谓的大佬,往往只是掌握了你尚未…...
深度解析 Nginx 配置:从性能优化到 HTTPS 安全实践
引言 Nginx 作为高性能的 Web 服务器和反向代理,其配置灵活性和强大功能备受开发者青睐。本文基于一份生产环境的 Nginx 配置文件,详细拆解其核心配置逻辑,涵盖性能优化、HTTPS 安全配置、反向代理及静态资源处理等关键环节,帮助…...
触发器与存储过程详解
触发器与存储过程详解 1. 触发器(Trigger)基础概念 1.1 定义与特性 go专栏:https://duoke360.com/tutorial/path/golang 触发器是数据库中的一种特殊存储程序,它在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行。触发器具有以下核心特性: 事件驱动:与表事件绑…...
游戏盾与高防CDN的协同防御策略分析
游戏盾与高防CDN的协同防御策略可以从技术互补性、分层防护机制、动态流量调度等角度展开分析,以下为核心要点: 1. 分层防御架构:流量分层过滤 高防CDN边缘层:利用全球分布的边缘节点作为“第一道防线”…...

Scratch节日 | 六一儿童节射击游戏
六一儿童节快乐!这款超有趣的 六一儿童节射击游戏,让你变身小猫弓箭手,守护节日的快乐时光! 🎮 游戏玩法 上下方向键:控制小猫的位置,自由移动,瞄准目标! 空格键&#…...

GPU层次结构(Nvidia和Apple M芯片,从硬件到pytorch)
这里写目录标题 0、驱动pytorch环境安装验证1.window环境2.Mac Apple M芯片环境 1、Nvidia显卡驱动、CUDA、cuDNN关系汇总1**1. Nvidia显卡驱动(Graphics Driver)****2. CUDA(Compute Unified Device Architecture)****3. cuDNN&a…...

一次借助ChatGPT抵御恶意攻击的经历,为个人服务器添加自动防御系统Fail2ban
title: 一次借助ChatGPT抵御恶意攻击的经历,为个人服务器添加自动防御系统Fail2ban tags: 个人成长 categories:杂谈 我有一台个人服务器,托管着自己的WordPress网站,也放了RustDesk这种私有化的远程桌面工具,最近我发现RustDesk…...

(九)深度学习---自然语言处理基础
分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机场贝叶斯层次聚类隐马尔可夫模型支持向量机高斯混合聚类LDA主题模型 一.文本数据的表示方法 二.神经网络文本情感分析案例 三…...

【Java Web】速通Tomcat
参考笔记:JavaWeb 速通Tomcat_tomcat部署java项目-CSDN博客 目录 一、Tomcat服务 1. 下载和安装 2. 启动Tomcat服务 3. 启动Tomcat服务的注意事项 4. 关闭Tomcat服务 二、Tomcat的目录结构 1. bin 🌟 2. conf 🌟 3. lib 4. logs 5. temp 6. webapps 7. work 三、Web项目…...

Docker快速部署数据同步工具DataX-Web
笔者最近有需求需要进行数据同步,目前确认DataX-Web适合快速搭建使用,满足基本需求。以此记录搭建Datax-Web过程和解决的坑。 一、启动MySQL容器 (1)首先,我们运行一个支撑DataX-Web运行的MySQL容器。 docker run --…...

从零开始的云计算生活——第十四天,困难重重,安全管理。
一故事背景 在前面的基本无操作内容后,来到了大头内容,安全管理!其中的防火墙相关的内容更是重中之重,要好好掌握,熟练运用。 二SELinux安全上下文 1SELinux 简介 a. SELinux(Security-Enhanced Linux&…...
迁移学习模型构建指南(Python实现)
迁移学习模型构建指南(Python实现) 一、迁移学习概述 迁移学习是一种机器学习方法,通过将预训练模型的知识迁移到新任务中,显著提升模型性能和训练效率。其核心思想是:模型在大型数据集上学习到的通用特征(如边缘、纹理、形状)可被复用至相关任务。 迁移学习类型: 特…...

【设计模式-4.6】行为型——状态模式
说明:本文介绍行为型设计模式之一的状态模式 定义 状态模式(State Pattern)也叫作状态机模式(State Machine Pattern),允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类…...
【LeetCode 热题100】动态规划实战:打家劫舍、完全平方数与零钱兑换(LeetCode 198 / 279 / 322)(Go语言版)
💰 动态规划实战:打家劫舍、完全平方数与零钱兑换(LeetCode 198 / 279 / 322) 本篇博客一次性带你掌握三道 LeetCode 中经典的动态规划(DP)题目: 🏠 198. 打家劫舍(Hou…...