系统架构设计:整体架构分层
做风控系统,我最怕什么?
怕的是业务方突然跑过来说:「刚才那笔交易有问题,帮我查查为什么没拦截?」然后你打开日志,发现数据链路断了,规则没跑起来,决策结果根本没生效。这种场景,我经历过不止一次。
所以,架构设计这件事,说白了就是给系统搭骨架。骨架稳了,后面怎么加肉都行。今天我们就来聊聊风控Agent实时监控与预警系统的整体架构分层。
为什么需要分层?
你想想看,一个实时风控系统,每天要处理几百万甚至上千万的事件。如果所有逻辑都揉在一起,改一个规则要重启整个服务,加一个数据源要改核心代码——那运维同学估计得天天加班。
我个人习惯,把系统拆成四个层次:
- 数据采集层:负责把各种来源的数据「拽」进来
- 规则引擎层:核心判断逻辑,决定「拦不拦」
- 决策执行层:执行拦截、放行、人工审核等动作
- 可视化层:让运营和风控人员看得见、摸得着
每一层各司其职,互不干扰。改规则不用动数据采集,加数据源不用动决策逻辑。嗯,这就是分层的价值。
核心原则:层与层之间通过标准接口通信,不要跨层调用。数据采集层不能直接调用决策执行层的API,必须经过规则引擎层。
整体架构图
我画了一张架构分层图,你可以直观感受一下各层之间的关系:
这张图我画得比较简洁,但每一层背后的细节,咱们得一个一个拆开讲。
数据采集层:一切风控的起点
数据采集层,说白了就是系统的「耳朵」和「眼睛」。没有数据,规则引擎就是个空壳子。
我在项目中遇到过一个问题:业务方说「我们数据都推了,为什么规则没触发?」结果一查,数据格式不对,字段名大小写不一致,采集层直接丢弃了。嗯,这种坑踩过一次就记住了。
数据采集层要做什么?
- 多源接入:HTTP API、消息队列(Kafka/RocketMQ)、日志文件、数据库变更捕获(CDC)
- 数据清洗:去重、格式校验、字段映射、异常值处理
- 数据标准化:把不同来源的数据转成统一的事件模型
- 流量控制:限流、降级、背压处理,防止突发流量冲垮系统
我的经验:数据采集层一定要做「数据质量监控」。我曾经因为上游一个字段突然变成null,导致规则引擎空指针异常,整整半小时没拦截任何风险交易。从那以后,我强制要求采集层必须记录每条数据的质量评分。
数据采集层的核心组件
| 组件 | 职责 | 常用技术 |
|---|---|---|
| 接入网关 | 接收外部数据,做协议转换 | Nginx、Spring Cloud Gateway |
| 消息队列 | 缓冲、削峰、异步解耦 | Kafka、RocketMQ |
| 数据清洗管道 | 过滤脏数据,标准化字段 | Flink、Spark Streaming |
| 数据质量监控 | 检测数据完整性、时效性 | 自定义监控 + Prometheus |
规则引擎层:风控的大脑
规则引擎层,是整个系统的核心。数据采集层把原料准备好了,规则引擎就要开始「思考」了。
我个人习惯把规则引擎拆成三个部分:
- 规则仓库:存储所有规则定义,支持热加载
- 规则匹配器:根据事件特征,快速命中匹配的规则
- 评分计算器:执行规则逻辑,输出风险分数和决策建议
规则引擎的设计要点
这里有几个坑,我踩过,你注意一下:
避坑指南:我曾经把规则引擎的匹配逻辑写成了线性遍历,结果规则数量到了500条时,单次匹配耗时从2ms飙升到200ms。后来改成了Rete算法,才把性能拉回来。所以,规则引擎一定要用高效的匹配算法,别偷懒。
规则引擎的常见实现方式:
- 表达式引擎:适合简单规则,如Aviator、MVEL
- 规则引擎框架:适合复杂策略,如Drools、EasyRules
- 自研规则引擎:适合高度定制化场景,我见过不少大厂走这条路
// 一个简单的规则示例(伪代码)
rule "高风险交易拦截"
when
$event.transactionAmount > 10000
and $event.userRiskLevel == "HIGH"
then
$event.setDecision("REJECT")
$event.setReason("单笔交易金额超限且用户风险等级高")
end
决策执行层:说到做到
规则引擎给出了决策建议,决策执行层就要「动手」了。
这一层其实很容易被忽视。很多人觉得「不就是调个接口嘛」,但实际没那么简单。
决策执行层要处理的事情
- 动作执行:拦截交易、发送告警、触发二次验证、记录日志
- 幂等处理:同一个事件不能被重复执行,尤其是拦截操作
- 降级策略:如果下游系统挂了,怎么办?是放行还是拒绝?
- 异步回调:有些动作需要等待外部系统确认,比如银行扣款结果
关键设计:决策执行层必须支持「补偿机制」。我记得有一次,我们拦截了一笔交易,但下游银行系统没收到通知,结果钱还是扣了。后来我们加了「执行确认+定时补偿」的机制,才彻底解决这个问题。
可视化层:让数据说话
可视化层,是给业务方和运营人员看的。你架构再牛,规则再准,如果别人看不懂,那也没用。
我见过太多风控系统,后台全是表格和数字,运营同学根本不知道怎么看。所以,可视化层一定要做到「一眼看懂」。
可视化层包含什么?
- 实时监控大屏:展示当前系统吞吐量、拦截率、告警数量
- 预警看板:展示高风险事件、异常趋势、需要人工介入的列表
- 规则配置界面:让运营人员可以可视化地调整规则,不用写代码
- 日志查询:支持按事件ID、用户ID、时间范围快速检索
我的建议:可视化层不要只展示「结果」,还要展示「过程」。比如一个交易被拦截了,要能展示它经过了哪些规则、每个规则的得分是多少。这样运营人员才能知道「为什么拦」,而不是「被拦了」。我吃过这个亏,被业务方追着问了一下午。
各层之间的协作关系
最后,我简单总结一下各层是怎么配合的:
- 数据采集层收到一笔交易事件,清洗后发给规则引擎
- 规则引擎层根据规则和模型,计算出风险分数和决策建议
- 决策执行层根据决策建议,执行拦截、放行或人工审核
- 可视化层把整个过程的数据和结果展示出来
每一层都独立部署,通过消息队列或RPC通信。这样即使某一层挂了,其他层还能继续工作。嗯,这就是高可用的基础。
好了,架构分层就聊到这里。下一节我们会深入规则引擎的细节,讲讲规则是怎么匹配的、评分卡是怎么设计的。到时候再细聊。