返回金融系统设计
系统集成与跨切面 · 总结

金融系统集成全景图

summary/system-integration.md

金融系统集成全景图

设计日期: 2026-04-14 定位: Week 6 综合演练 — 5个金融系统如何协作 关联: 支付网关 / 记账引擎 / 风控引擎 / 信贷系统 / 清算结算


一、系统全景

1.1 五大系统定位

┌─────────────────────────────────────────────────────────────────┐
│                    金融核心系统全景                                │
│                                                                  │
│  ┌──────────┐   ┌──────────┐   ┌──────────┐                    │
│  │  信贷系统  │   │  支付网关  │   │  清算结算  │                    │
│  │ (贷前/中/后)│   │ (收付退查) │   │ (轧差划拨) │                    │
│  └─────┬────┘   └─────┬────┘   └─────┬────┘                    │
│        │              │              │                           │
│        └──────────────┼──────────────┘                           │
│                       │                                          │
│              ┌────────┴────────┐                                 │
│              │                 │                                  │
│        ┌─────┴─────┐   ┌──────┴─────┐                           │
│        │  风控引擎   │   │  记账引擎   │                           │
│        │ (实时决策)  │   │ (复式记账)  │                           │
│        └───────────┘   └────────────┘                           │
│                                                                  │
│  ── 业务系统层 ──    ── 基础能力层 ──                             │
└─────────────────────────────────────────────────────────────────┘

1.2 系统间依赖矩阵

调用方 ↓ / 被调用方 →支付网关记账引擎风控引擎信贷系统清算结算
支付网关-同步记账同步风控-提供交易
记账引擎----提供账务
风控引擎-----
信贷系统放款/扣款同步记账授信风控--
清算结算-清算记账---

1.3 系统间通信模式

场景通信方式原因
支付→风控同步RPC风控决策必须在支付前完成
支付→记账同步RPC+异步补偿记账必须成功,但不能阻塞太久
信贷→支付同步RPC放款/还款依赖支付结果
信贷→风控同步RPC授信决策需要风控
支付→清算异步消息清算非实时,T+1批量处理
清算→记账同步RPC清算结果必须入账

二、核心业务链路

2.1 链路一:在线支付

用户下单 → 商户调用支付网关
                │
                ├─① 风控检查(同步,<50ms)
                │   └→ 风控引擎: 特征提取→规则+模型→决策
                │      ├─ PASS → 继续
                │      ├─ REJECT → 拒绝支付
                │      └─ REVIEW → 人工审核队列
                │
                ├─② 通道路由(同步,<10ms)
                │   └→ 路由引擎: 成本+成功率+限额→选通道
                │
                ├─③ 通道调用(同步,<3s)
                │   └→ Channel Adapter → PSP/银行
                │
                ├─④ 记账(同步,<100ms)
                │   └→ 记账引擎: 
                │      借: 备付金账户(资产+)
                │      贷: 商户待结算(负债+)
                │
                ├─⑤ 通知(异步)
                │   └→ 商户回调 + 用户通知
                │
                └─⑥ 清算(T+1异步)
                    └→ 交易数据→清算系统→轧差→结算

2.2 链路二:信贷放款

用户申请借款
    │
    ├─① 授信决策(首次)
    │   ├─ 征信查询(外部)
    │   ├─ 风控引擎: 反欺诈+信用评估
    │   └─ 审批: 自动/人工 → 额度
    │
    ├─② 用信申请
    │   ├─ 额度检查(信贷系统)
    │   ├─ 风控引擎: 交易风控
    │   └─ 合同生成
    │
    ├─③ 放款
    │   ├─ 信贷系统 → 支付网关: 代付指令
    │   ├─ 支付网关 → PSP/银行: 实际划款
    │   └─ 记账引擎:
    │      借: 贷款(资产+)
    │      贷: 备付金(资产-)
    │
    ├─④ 还款(每期)
    │   ├─ 信贷系统 → 支付网关: 代扣指令
    │   ├─ 支付网关 → PSP/银行: 实际扣款
    │   └─ 记账引擎:
    │      借: 备付金(资产+)
    │      贷: 贷款本金(资产-)
    │      贷: 利息收入(收入+)
    │
    └─⑤ 逾期处理
        ├─ 信贷系统: 逾期标记+催收
        ├─ 记账引擎: 逾期利息计提
        └─ 风控引擎: 更新用户风险标签

2.3 链路三:T+1 清算结算

T日(交易日)
    │
    └─ 支付网关: 交易数据→Kafka→清算系统

T+1日(清算日)
    │
    ├─ 01:00 数据采集
    │   └─ 清算系统: 从消息队列采集T日全部交易
    │
    ├─ 02:00 数据校验
    │   └─ 与PSP/银行的对账文件比对
    │
    ├─ 03:00 轧差计算
    │   └─ 多边轧差: 计算各参与方净额
    │      商户A: 应收 ¥50,000
    │      商户B: 应收 ¥30,000
    │      PSP手续费: 应收 ¥800
    │      平台: 应收 ¥1,200
    │
    ├─ 04:00 结算指令生成
    │   └─ 生成资金划拨指令 → 记账引擎入账
    │      借: 待清算(负债-)
    │      贷: 商户结算款(负债+)
    │
    ├─ 05:00 资金划拨
    │   └─ 通过CNAPS/银行划拨到商户银行账户
    │
    └─ 06:00 确认+报表
        ├─ 清算完成确认
        ├─ 头寸更新
        └─ 清算报表生成

三、数据流全景

3.1 资金流

                    用户银行账户
                         │
                    ┌────┴────┐
                    │  PSP/银行 │
                    └────┬────┘
                         │
              ┌──────────┴──────────┐
              │      支付网关        │
              │  (通道路由+收付)     │
              └──────────┬──────────┘
                         │
           ┌─────────────┼─────────────┐
           │             │             │
    ┌──────┴──────┐ ┌────┴────┐ ┌─────┴─────┐
    │  备付金账户   │ │ 手续费  │ │ 商户待结算 │
    │  (记账引擎)  │ │ (收入)  │ │  (负债)    │
    └──────┬──────┘ └─────────┘ └─────┬─────┘
           │                          │
           │        T+1 清算结算       │
           │    ┌────────────────┐    │
           └───→│  轧差 → 划拨   │←───┘
                └───────┬────────┘
                        │
                  商户银行账户

3.2 信息流

┌─────────┐  交易数据   ┌─────────┐  风控事件   ┌─────────┐
│  支付网关 │──────────→│  清算结算 │            │  风控引擎 │
│         │           │         │            │         │
│         │──风控请求──────────────────────────→│         │
│         │←─风控结果──────────────────────────│         │
│         │           │         │            │         │
│         │──记账请求─→│         │            │         │
└─────────┘  ↓        └─────────┘            └─────────┘
          ┌─────────┐                    
          │  记账引擎 │← 清算记账
          │         │← 信贷记账
          └─────────┘
               ↑
          ┌─────────┐
          │  信贷系统 │──放款/还款──→支付网关
          │         │──风控请求───→风控引擎
          └─────────┘

3.3 关键数据一致性保障

链路一致性策略失败处理
支付→记账本地事务+同步调用支付成功但记账失败→补记账Job
支付→风控同步调用风控超时→降级策略(放行/拒绝)
信贷→支付同步调用+状态机放款失败→重试/人工介入
清算→记账批量事务+对账清算记账失败→暂停清算+告警
支付→清算异步消息+对账消息丢失→T+1对账补偿

四、统一概念模型

4.1 跨系统共享概念

概念支付网关记账引擎风控引擎信贷系统清算结算
用户付款人账户持有人风控对象借款人-
商户收款方商户账户--结算对象
交易支付订单记账凭证风控事件借据清算指令
金额支付金额借贷金额交易金额本金/利息轧差净额
状态支付状态凭证状态决策结果借据状态清算状态

4.2 ID关联关系

payment_order.order_no ←→ risk_event.biz_id
payment_order.pay_no   ←→ journal_entry.biz_ref
loan_contract.id       ←→ payment_order.biz_order_id(放款/还款)
payment_order.pay_no   ←→ clearing_instruction.trade_ref
clearing_batch.id      ←→ journal_entry.biz_ref(清算记账)

五、技术架构统一视角

5.1 技术栈矩阵

组件支付网关记账引擎风控引擎信贷系统清算结算
语言Java/GoJavaJava/PythonJavaJava
框架Spring CloudSpring BootSpring Boot + FlinkSpring CloudSpring Batch
主库MySQL(分库)PostgreSQL-MySQL(分库)PostgreSQL
缓存RedisRedisRedis(特征)RedisRedis
消息KafkaKafkaKafkaKafkaKafka
搜索--ES(日志)ES(案件)-
调度XXL-JobXXL-JobFlinkXXL-JobXXL-Job

5.2 部署架构

                    ┌─────────────────────────┐
                    │        负载均衡           │
                    │    (Nginx / ALB)         │
                    └────────────┬────────────┘
                                 │
              ┌──────────────────┼──────────────────┐
              │                  │                  │
        ┌─────┴─────┐    ┌──────┴──────┐    ┌─────┴─────┐
        │  支付网关   │    │  信贷系统    │    │  管理后台  │
        │  (3+ 节点)  │    │  (3+ 节点)  │    │  (2 节点)  │
        └─────┬─────┘    └──────┬──────┘    └───────────┘
              │                  │
    ┌─────────┼──────────────────┼─────────┐
    │         │                  │         │
┌───┴───┐ ┌──┴───┐ ┌────────┐ ┌┴────────┐
│风控引擎│ │记账引擎│ │清算结算 │ │消息队列  │
│(5+节点)│ │(3+节点)│ │(2+节点) │ │(Kafka)  │
└───┬───┘ └──┬───┘ └───┬────┘ └─────────┘
    │        │         │
    │   ┌────┴────┐    │
    │   │ 数据库集群│    │
    │   │ (主从+分片)│   │
    │   └─────────┘    │
    │                   │
    └───────────────────┘
         Redis 集群

5.3 可观测性统一方案

层次工具关注指标
链路追踪Jaeger/SkyWalking跨系统调用链路、延迟分布
指标监控Prometheus + Grafana各系统QPS/延迟/成功率/资源使用
日志聚合ELK Stack统一日志格式、错误追踪
业务监控自研Dashboard支付成功率/风控拦截率/清算进度/资金对账率
告警AlertManager分级告警:P0短信→P1企微→P2邮件

六、全局性架构决策

6.1 分布式事务策略

决策: 不使用全局分布式事务(如2PC/XA),采用本地事务+异步补偿+最终一致性

理由:

  • 金融系统对可用性要求极高(99.99%),2PC的协调器是单点风险
  • 各系统独立演进,强耦合的分布式事务限制了迭代速度
  • 通过对账机制(T+1)兜底,保证最终一致

补偿机制:

  1. 同步调用失败 → 本地记录+异步重试Job
  2. 异步消息丢失 → 定时对账发现差异 → 补偿
  3. 长时间不一致 → 告警+人工介入

6.2 幂等设计统一规范

所有跨系统调用必须幂等:

  • 支付网关: 商户订单号+支付方式 作为幂等键
  • 记账引擎: 业务方+业务流水号 作为幂等键
  • 信贷系统: 借据号+操作类型 作为幂等键
  • 清算结算: 清算日期+批次号 作为幂等键

6.3 统一错误码体系

错误码格式: [系统码][模块码][错误序号]
  PAY-ROUTE-001: 无可用支付通道
  LED-POST-001: 借贷不平衡
  RSK-RULE-001: 命中黑名单
  CRD-LINE-001: 额度不足
  CLR-NETT-001: 轧差计算异常

七、演进路线

7.1 阶段演进

Phase 1: 单体 (0→日均10万笔)
  └─ 所有系统在一个应用中,单库
  
Phase 2: 服务化 (10万→100万笔)
  └─ 拆分为5个独立服务,引入消息队列
  
Phase 3: 分布式 (100万→1000万笔)
  └─ 数据库分库分表,引入缓存,异步化
  
Phase 4: 多机房 (1000万→1亿笔)
  └─ 同城双活,异地灾备,读写分离
  
Phase 5: 全球化 (1亿→10亿笔)
  └─ 多地域部署,就近接入,跨境合规

7.2 与 DeFi 的架构对比

维度CeFi(本设计)DeFi
信任模型中心化机构背书代码即法律(智能合约)
清算T+1批量清算实时原子结算
记账复式记账+数据库区块链账本(不可篡改)
风控集中式实时决策链上参数+预言机
监管央行/银保监链上治理(DAO)
可用性99.99%(运维保障)区块链共识保障
扩展性水平扩展(加机器)L2 Rollup

7.3 CeFi→DeFi 桥接机会

  1. RWA(真实资产代币化): 信贷资产→链上Token→全球流动性
  2. PayFi: 支付网关对接链上结算,T+1→T+0
  3. 链上清算: 智能合约实现DVP原子结算
  4. DeFi风控: 链上行为分析+预言机价格监控
  5. 混合记账: 链下高频记账+链上定期锚定(Proof of Reserve)

八、面试综合问题

Q1: 如果让你从零搭建一个互联网金融平台的技术架构,你会怎么设计?

答案要点:

  1. 先确定业务范围(支付/信贷/理财?)
  2. 按领域拆分服务(支付/记账/风控/信贷/清算)
  3. 基础能力先行(记账引擎+风控引擎是地基)
  4. 数据一致性策略(本地事务+异步补偿+对账)
  5. 安全合规先行(PCI-DSS/等保三级/监管报送)
  6. 渐进式演进(单体→微服务→分布式→多机房)

Q2: 这5个系统之间最关键的集成点在哪里?

答案要点:

  1. 支付→记账:资金操作必须入账,一致性要求最高
  2. 支付→风控:延迟敏感,风控不能成为瓶颈
  3. 信贷→支付:放款/还款的资金流转
  4. 支付→清算:交易数据准确完整
  5. 清算→记账:清算结果准确入账

Q3: 如果其中一个系统出了故障,对其他系统有什么影响?如何做故障隔离?

答案要点:

  • 风控故障:支付降级(配置化:高风险场景拒绝/低风险场景放行)
  • 记账故障:支付可继续,记账异步补偿(先记本地日志,恢复后补账)
  • 支付故障:信贷无法放款/还款,需人工处理
  • 清算故障:延迟结算,不影响实时交易
  • 故障隔离:熔断器/限流/超时/降级/异步解耦