2026-04-22 · architecture / fintech
金融科技工程
面向中国工程团队的金融科技系列。从账务底盘、支付、清结算、交易所、风控合规到可靠性与灾备,中国与全球视角并举,讲清楚金融系统在工程落地中的真实挑战。























你大概率在某个瞬间动过这样的念头:
这些想法都没错,它们都能在周末跑出一个 demo。问题是,这个 demo 离可以真的碰钱的系统,距离比你想象得远得多。真正难的不是写一个能加能减的余额,而是当同一笔钱在网络分区、上下游超时、队列重放、人工补单、监管查询、跨币种汇兑、跨时区对账这些事同时发生时,它还能是正确的一笔钱。
这篇文章是【金融科技工程】系列的第 1 篇,承担两件事:
这个系列的读者画像是:写过几年后端、读过一些分布式系统资料、对钱有敬畏但没做过核心账务/支付/交易所的工程师。不会从零讲 TCP 和 SQL,但会从零讲复式记账和 ISO 8583。
更具体地说,下面四类读者最能从本系列受益:
如果你已经是某个细分领域十年以上的专家(例如资深核心银行工程师),本系列在你的主场可能偏浅,但邻域章节对你依然是有效的补课材料——很多金融事故恰恰发生在”我熟悉的部分边界之外”。
用一句话概括:普通后端追求”大部分时候对”,金融系统追求”任何时候都对,且对得起审计”。下面拆成五层来看。
在一般的业务系统里,“原子性”一般指数据库事务的 ACID。订单创建失败了,回滚就好。但在金融系统里,原子性有一层更硬的含义:
工程含义:
普通业务的”合规”往往是产品经理口中的一句”我们要 GDPR 合规”,实际落地靠打码加协议弹窗。金融系统的监管边界是:
这意味着一个合格的金融后端工程师,读过的不是只有《Designing Data-Intensive Applications》,还有至少三四份监管文件:以中国为例,《非银行支付机构条例》《支付业务许可证》《反洗钱法》《征信业管理条例》。后续每一篇都会在合适的地方指出它所踩的监管边界,但不会罗列条文,只讲这条边界怎么变成了代码里的一行约束。
普通系统里 double
可能够用。金融系统里,double
是工程事故的入口。
SUM(debits) - SUM(credits) != 0)。scale=2 的 decimal
一把梭,会在接入稳定币那天炸掉(第 2 篇)。工程含义:金额字段一律用定点数(decimal / 大整数 + scale),中间计算保留”全精度”,只在向外展示/入账那一刻做明确的舍入策略,且舍入产生的尾差(rounding residual)要有专门的科目兜底(第 2、3 篇)。
在一般的 Web 系统里,“时间”是个日志字段,谁不是毫秒精度呢。在金融系统里,时间是:
抽象讲再多不如看真实事件:
这些事件的共性:不是算法不够先进,而是在某个”一般工程师不会想到”的角落,一个本该被守住的不变量(invariant)失守了。
我们可以把这些失守点归到几类:
本系列会在每类失守点上给出具体的”守不变量”的工程手法。整个【金融科技工程】系列,本质上是在给读者一张清单:金融系统里有哪些不变量,如何在代码层面守住它们。
为了让”不变量”这个词落到代码层面,看下面这张最小分录表。它是后续第 3、4 篇的主角,也是整个对账体的原子单位:
-- 仅作示意。真实系统字段会更多,且分片键、时间列、审计列需要额外考虑。
CREATE TABLE journal_entry (
id BIGINT PRIMARY KEY,
txn_id VARCHAR(64) NOT NULL, -- 业务事务号
booking_date DATE NOT NULL, -- 记账日
currency CHAR(3) NOT NULL, -- ISO 4217 币种
created_at TIMESTAMP(6) NOT NULL,
description VARCHAR(256) NOT NULL
);
CREATE TABLE journal_line (
id BIGINT PRIMARY KEY,
entry_id BIGINT NOT NULL REFERENCES journal_entry(id),
account_id BIGINT NOT NULL,
direction CHAR(1) NOT NULL CHECK (direction IN ('D','C')),
amount NUMERIC(32,0) NOT NULL, -- 最小单位整数(fen/satoshi...)
scale SMALLINT NOT NULL, -- 该币种小数位
currency CHAR(3) NOT NULL,
CONSTRAINT amount_positive CHECK (amount > 0)
);不变量:
entry_id
下,SUM(amount) WHERE direction='D' 必须等于
SUM(amount) WHERE direction='C'(借贷相等);journal_line.currency 必须与
journal_entry.currency
相同(不跨币种混记);balance(account_id) = SUM(amount * sign(direction, account_type)),其中
sign
依赖科目类型(资产/负债/损益)的借贷方向规则(第 3
篇详解);INSERT,不允许 UPDATE
/ DELETE。错账用冲正分录处理。只要上面四条在代码里被机制化地守住,90% 的资金事故可以被堵在产线之前。本系列的每一篇都会围绕”如何守住某一类不变量”展开。
抽象归抽象,用一个最常见的业务流程把 1.1–1.6 串起来,你会对”为什么这么多环节”有直观认识。假设用户 Alice 用工行储蓄卡给某持牌支付平台 P 充值 100 元,最终进入她在 P 内的钱包余额。
阶段 A:用户侧
client_request_id = uuid(),向平台 P 发起 HTTP
请求。client_request_id
查询幂等表:首次出现则新建,非首次则直接返回上次结果。阶段 B:账务记账(在途)
客户备付金-在途(资产)100.00 CNYAlice 钱包-可用(负债)100.00 CNYstate = PENDING 标签,余额物化暂不反映到 Alice
的可用余额。阶段 C:支付通道
阶段 D:清算与结算
PENDING
分录匹配。匹配成功后:
PENDING 分录的在途标记,物化到 Alice
的可用余额;阶段 E:监管与审计
一笔简单的 100 元充值,完整旅程涉及五个阶段、约 15 个关键动作、至少 4 套不同的不变量(幂等、借贷、清算、监管)。每个阶段都可能失败,每种失败都要有对应的补偿路径。这就是”金融工程比普通后端难”的直观证据。
本系列每一篇都会围绕这张旅程图上的某一段展开:第 9 篇讲网关、第 3 篇讲分录、第 11 篇讲清算、第 23 篇讲对账、第 21 篇讲监管报送。读完 25 篇,你会对这张图上每一个小方格都了如指掌。
25 篇内容多,若不分层,读者会被”账务、支付、清算、撮合、风控、反洗钱、征信”这些词砸晕。我们把整个领域拆成四体:
把”钱的状态”固化为不可篡改事实的系统。它是整个金融公司的真相源(source of truth),一切对外报表、对监管报送、对用户展示的余额,都出自它。
关键词:复式记账、科目体系、分录(journal entry)、试算平衡、日终结账、余额物化、对账差错处理。
典型系统:银行核心(core banking)、支付公司总账、交易所账务引擎、记账中台。
这个体的特征:写多读重、强一致、单点账户热点、日切窗口敏感。工程难点集中在”如何让每日万亿级分录仍然满足借贷相等”,以及”热点账户(平台手续费账户、大商户收款账户)如何不成为单点瓶颈”。本系列会在第 4 篇给出分片与热点治理的具体方案。
本系列覆盖:第 2、3、4、5、23 篇。
把”钱在机构之间移动”这件事做成一张网的系统。它在对账体之上,负责路由、报文、清算、结算与跨境。
关键词:收单、发卡、聚合支付、支付网关、卡组织、ISO 8583、ISO 20022、清算、结算、CNAPS、CIPS、Fedwire、TARGET2、SWIFT、CBDC、代理行。
典型系统:支付宝收银台、微信支付商户平台、银联 CUPS、第三方支付网关、跨境汇款、央行大小额系统、稳定币发行与赎回。
这个体的特征:长链路、多机构协同、报文标准繁多、对账周期天级。工程难点集中在”链路中任一节点失败后,如何把钱不丢不重地还原到一致状态”,以及”如何用有限的幂等键和补单机制覆盖无限种失败组合”。
本系列覆盖:第 6、7、8、9、10、11、12、13、14 篇。
把”价格发现 + 头寸变更”做成一个低延迟、高并发、强一致的系统。与支付体的不同在于:一笔报单进入撮合引擎,不是为了改变一个余额,而是为了发现一个价格;但成交之后,依然要通过对账体落账。
关键词:订单簿、撮合算法、价格优先时间优先、行情分发、做市、FIX、ITCH/OUCH、证券登记结算、DvP、PvP。
典型系统:证券交易所、期货交易所、加密货币交易所、做市系统、订单管理系统(OMS)、执行管理系统(EMS)。
这个体的特征:极低延迟、极高并发、确定性回放、风险实时计算。工程难点在于”用单线程撮合核心 + 外围并行化”的取舍,以及”如何在微秒级延迟下仍然完成盘前/盘中风控(自成交防护、熔断、涨跌停、前端额度)“。
本系列覆盖:第 15、16、17、18 篇。
横跨对账、支付、交易三体,负责”这笔交易/客户能不能做”这个判断。分实时风控(交易毫秒级拦截)、批量风控(离线画像、评分卡)、合规监测(反洗钱、反欺诈、制裁筛查)、信用风险(评级、违约)。
关键词:规则引擎、特征平台、决策流、黑产对抗、设备指纹、关系图谱、KYC、AML、STR/SAR、评分卡、巴塞尔协议。
这个体的特征:跨时序(实时拦截 + 离线画像)、跨数据源(交易流 + 行为流 + 第三方征信 + 名单库)、强审计(拒绝必须可解释)。工程难点在”特征一致性(实时链路与离线训练特征口径一致)“、”规则/模型组合决策的可解释性”以及”监管要求的可审计日志”。
本系列覆盖:第 19、20、21、22 篇。
金融级可靠性(两地三中心、单元化、RPO/RTO、灰度发布)是所有四体的共同约束,单独成篇;行业未来趋势(AI 风控、稳定币、开放银行、Web3 合规)作为展望。
本系列覆盖:第 24、25 篇。
四体之间并不是 REST API 式的松耦合调用,而是以事件和报文串起来:
下面这张表汇总”四体之间谁找谁、走什么接口、有没有同步要求”,贯穿本系列所有后续章节:
| 发起方 | 接收方 | 载体 | 同步性 | 失败处理 | 相关章节 |
|---|---|---|---|---|---|
| 支付体 | 对账体 | 记账事件 | 异步(事务消息) | 重试+幂等+对账差错 | 5、23 |
| 对账体 | 监管 | 报送文件 | 批处理(T+1) | 人工复核 | 21 |
| 对账体A | 对账体B(跨机构) | 清算报文 | 半同步 | 冲正再发 | 11、12 |
| 交易体 | 对账体 | 成交回报 | 近实时 | 重放 | 15、16 |
| 风控体 | 支付体 | 决策 RPC | 同步 | 超时降级 | 19 |
| 风控体 | 监管 | 可疑报告 | 批处理 | 人工复核 | 21 |
| 合规体 | 支付体 | 名单/限额 | 订阅推送 | 安全默认(拒绝) | 21 |
设计要点:同步调用越少越好,资金相关的调用几乎都应异步化 + 事件溯源;越靠近用户的链路(风控决策)才允许同步。这是金融系统与一般互联网业务在架构取舍上的一个显著差异。
先说数据流方向。一笔普通支付从用户到监管走过的路是:
用户 → 商户/前端 → 支付网关 → 风控决策 → 账务记账
→ 清算(机构间轧差)→ 结算(资金实际划拨)
→ 总账(对账体终局状态)→ 监管报送
一笔证券交易走过的路是:
客户 → 券商 OMS → 交易所撮合 → 行情发布
→ 清算所(净额/全额)→ 登记结算(DvP)
→ 券商账务 → 托管银行 → 监管报送
两条链路在”账务 + 清算 + 监管”三段上形状相似,差别在中段的”路由 vs 撮合”。把它画成分层图,每一层注明对应的本系列文章:
flowchart TB
subgraph 用户接入层
U1[用户/商户 APP]
U2[券商客户端]
end
subgraph 接入网关层
G1[支付网关<br/>第 9 篇]
G2[OMS/FIX 网关<br/>第 17 篇]
end
subgraph 核心引擎层
P1[收单/路由<br/>第 7、8 篇]
E1[撮合引擎<br/>第 16 篇]
R1[实时风控<br/>第 19、20 篇]
end
subgraph 账务层
L1[复式记账<br/>第 3 篇]
L2[账务数据库<br/>第 4 篇]
L3[金额/币种模型<br/>第 2 篇]
L4[幂等与事务<br/>第 5 篇]
end
subgraph 清结算层
C1[清算与结算<br/>第 11 篇]
C2[央行支付系统<br/>第 12 篇]
C3[跨境代理行<br/>第 13 篇]
C4[证券登记结算<br/>第 18 篇]
C5[CBDC/稳定币<br/>第 14 篇]
end
subgraph 合规与监管
K1[KYC/AML<br/>第 21 篇]
K2[信用风险<br/>第 22 篇]
K3[监管报送]
end
subgraph 基础设施
B1[可靠性<br/>第 24 篇]
B2[对账系统<br/>第 23 篇]
B3[订阅计费<br/>第 10 篇]
end
U1 --> G1
U2 --> G2
G1 --> R1
G2 --> R1
R1 --> P1
R1 --> E1
P1 --> L1
E1 --> L1
L1 --> L2
L2 --> C1
C1 --> C2
C1 --> C3
C1 --> C4
C1 --> C5
L2 --> B2
L2 --> K1
K1 --> K3
K2 --> K3
C2 --> K3
L3 -.支撑.-> L1
L4 -.支撑.-> L1
B1 -.横切.-> L2
B1 -.横切.-> E1
B1 -.横切.-> C2
B3 -.商业化.-> L1
如果你更习惯阅读静态图,下面这张 SVG 用仓库深色主题重画了同一套分层:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1100 720" font-family="ui-monospace, SFMono-Regular, Menlo, monospace" font-size="13">
<rect width="1100" height="720" fill="#2d333b"/>
<style>
.box{stroke-width:1.5;fill:#22272e}
.lbl{fill:#adbac7}
.hdr{fill:#adbac7;font-weight:bold;font-size:14px}
.arrow{stroke:#768390;stroke-width:1.4;fill:none;marker-end:url(#a)}
.ghost{stroke:#539bf5;stroke-dasharray:4 3;stroke-width:1.2;fill:none;marker-end:url(#a)}
</style>
<defs>
<marker id="a" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto">
<path d="M0,0 L10,5 L0,10 z" fill="#768390"/>
</marker>
</defs>
<text x="20" y="30" class="hdr">用户接入层</text>
<rect class="box" x="20" y="40" width="200" height="50" stroke="#388bfd"/>
<text class="lbl" x="30" y="62">用户 / 商户 APP</text>
<text class="lbl" x="30" y="80" font-size="11">Web / 小程序 / SDK</text>
<rect class="box" x="240" y="40" width="200" height="50" stroke="#388bfd"/>
<text class="lbl" x="250" y="62">券商 / 机构客户端</text>
<text class="lbl" x="250" y="80" font-size="11">OMS / EMS</text>
<text x="20" y="120" class="hdr">接入网关层</text>
<rect class="box" x="20" y="130" width="200" height="50" stroke="#a371f7"/>
<text class="lbl" x="30" y="152">支付网关(第 9 篇)</text>
<text class="lbl" x="30" y="170" font-size="11">路由 / 限流 / 签名</text>
<rect class="box" x="240" y="130" width="200" height="50" stroke="#a371f7"/>
<text class="lbl" x="250" y="152">FIX / 行情网关(第 17 篇)</text>
<text class="lbl" x="250" y="170" font-size="11">订单 / 回报</text>
<text x="20" y="210" class="hdr">核心引擎层</text>
<rect class="box" x="20" y="220" width="200" height="55" stroke="#3fb950"/>
<text class="lbl" x="30" y="244">收单 / 路由(第 7、8 篇)</text>
<text class="lbl" x="30" y="262" font-size="11">卡组织 / 三方支付</text>
<rect class="box" x="240" y="220" width="200" height="55" stroke="#3fb950"/>
<text class="lbl" x="250" y="244">撮合引擎(第 16 篇)</text>
<text class="lbl" x="250" y="262" font-size="11">价格优先 时间优先</text>
<rect class="box" x="460" y="220" width="220" height="55" stroke="#f0883e"/>
<text class="lbl" x="470" y="244">实时风控(第 19、20 篇)</text>
<text class="lbl" x="470" y="262" font-size="11">规则 / 模型 / 决策流</text>
<text x="20" y="305" class="hdr">账务层</text>
<rect class="box" x="20" y="315" width="160" height="60" stroke="#f0883e"/>
<text class="lbl" x="30" y="340">复式记账(第 3 篇)</text>
<text class="lbl" x="30" y="358" font-size="11">分录 / 试算平衡</text>
<rect class="box" x="200" y="315" width="160" height="60" stroke="#f0883e"/>
<text class="lbl" x="210" y="340">账务数据库(第 4 篇)</text>
<text class="lbl" x="210" y="358" font-size="11">分片 / 热点账户</text>
<rect class="box" x="380" y="315" width="160" height="60" stroke="#f0883e"/>
<text class="lbl" x="390" y="340">金额模型(第 2 篇)</text>
<text class="lbl" x="390" y="358" font-size="11">精度 / 币种 / 舍入</text>
<rect class="box" x="560" y="315" width="160" height="60" stroke="#f0883e"/>
<text class="lbl" x="570" y="340">幂等事务(第 5 篇)</text>
<text class="lbl" x="570" y="358" font-size="11">SAGA / TCC / 对账</text>
<text x="20" y="405" class="hdr">清结算层</text>
<rect class="box" x="20" y="415" width="170" height="60" stroke="#539bf5"/>
<text class="lbl" x="30" y="440">清算 结算(第 11 篇)</text>
<text class="lbl" x="30" y="458" font-size="11">净额 / 全额 / T+N</text>
<rect class="box" x="210" y="415" width="180" height="60" stroke="#539bf5"/>
<text class="lbl" x="220" y="440">央行系统(第 12 篇)</text>
<text class="lbl" x="220" y="458" font-size="11">CNAPS CIPS Fedwire</text>
<rect class="box" x="410" y="415" width="170" height="60" stroke="#539bf5"/>
<text class="lbl" x="420" y="440">跨境(第 13 篇)</text>
<text class="lbl" x="420" y="458" font-size="11">代理行 nostro/vostro</text>
<rect class="box" x="600" y="415" width="180" height="60" stroke="#539bf5"/>
<text class="lbl" x="610" y="440">证券结算(第 18 篇)</text>
<text class="lbl" x="610" y="458" font-size="11">DvP / 中证登 / DTCC</text>
<rect class="box" x="800" y="415" width="180" height="60" stroke="#539bf5"/>
<text class="lbl" x="810" y="440">CBDC 稳定币(第 14 篇)</text>
<text class="lbl" x="810" y="458" font-size="11">双层运营 / 链上清算</text>
<text x="20" y="505" class="hdr">合规 / 监管</text>
<rect class="box" x="20" y="515" width="200" height="55" stroke="#f85149"/>
<text class="lbl" x="30" y="540">KYC / AML(第 21 篇)</text>
<text class="lbl" x="30" y="558" font-size="11">STR / SAR / FATF</text>
<rect class="box" x="240" y="515" width="200" height="55" stroke="#f85149"/>
<text class="lbl" x="250" y="540">信用风险(第 22 篇)</text>
<text class="lbl" x="250" y="558" font-size="11">评分卡 / 巴塞尔 III</text>
<rect class="box" x="460" y="515" width="220" height="55" stroke="#f85149"/>
<text class="lbl" x="470" y="540">监管报送</text>
<text class="lbl" x="470" y="558" font-size="11">数据驻留 / 审计留痕</text>
<text x="20" y="600" class="hdr">基础设施与横切</text>
<rect class="box" x="20" y="610" width="220" height="55" stroke="#adbac7"/>
<text class="lbl" x="30" y="635">金融级可靠性(第 24 篇)</text>
<text class="lbl" x="30" y="653" font-size="11">两地三中心 / 单元化</text>
<rect class="box" x="260" y="610" width="220" height="55" stroke="#adbac7"/>
<text class="lbl" x="270" y="635">对账系统(第 23 篇)</text>
<text class="lbl" x="270" y="653" font-size="11">日切 / 差错 / 资金对账</text>
<rect class="box" x="500" y="610" width="220" height="55" stroke="#adbac7"/>
<text class="lbl" x="510" y="635">订阅计费(第 10 篇)</text>
<text class="lbl" x="510" y="653" font-size="11">计量 / 账单 / 多国税务</text>
<rect class="box" x="740" y="610" width="240" height="55" stroke="#adbac7"/>
<text class="lbl" x="750" y="635">总览与展望(第 1、25 篇)</text>
<text class="lbl" x="750" y="653" font-size="11">本文 / AI / Web3</text>
<path class="arrow" d="M120,90 L120,130"/>
<path class="arrow" d="M340,90 L340,130"/>
<path class="arrow" d="M120,180 L570,220"/>
<path class="arrow" d="M340,180 L570,220"/>
<path class="arrow" d="M570,275 L120,315"/>
<path class="arrow" d="M570,275 L280,315"/>
<path class="arrow" d="M280,375 L105,415"/>
<path class="arrow" d="M280,375 L300,415"/>
<path class="arrow" d="M105,475 L105,515"/>
<path class="ghost" d="M460,355 L570,355"/>
<path class="ghost" d="M640,355 L700,355"/>
</svg>两张图传达同一件事:四体之间不是并列,而是栈式。上层的支付和交易引擎,最后都要落到对账体这一层真相;风控合规体横切每一层;可靠性、对账、计费是横跨整个栈的基础设施。
如果你在一家只服务国内用户的公司工作,可能从未碰过 SWIFT 报文;如果你在跨境公司,会发现国内清算与国际清算的术语几乎是两个世界。下表给出一份最小对照,后续专题会在第 7、11、12、13 篇展开。
| 功能 | 中国 | 美国 | 欧元区 | 跨境 |
|---|---|---|---|---|
| 本币大额实时 | CNAPS HVPS(大额) | Fedwire、CHIPS | TARGET2、EURO1 | — |
| 本币小额批量 | CNAPS BEPS(小额) | ACH(NACHA) | STEP2 | — |
| 本币即时零售 | 网联、IBPS 超级网银 | FedNow、RTP(TCH) | TIPS、SCT Inst | — |
| 跨境本币 | CIPS(人民币跨境) | — | — | — |
| 跨境报文通道 | — | — | — | SWIFT / SWIFT gpi |
| 外汇清算 | CFETS(人民币对外汇) | CLS | CLS | CLS |
读图要点:
| 维度 | 中国典型 | 国际典型 |
|---|---|---|
| 卡组织 | 银联(UnionPay),Visa/Master 外卡收单 | Visa、Mastercard、American Express、JCB、Discover |
| 移动支付入口 | 支付宝、微信支付 | Apple Pay、Google Pay(套皮卡);Venmo、Cash App(账户);欧洲 iDEAL、SEPA Instant |
| 监管 | 中国人民银行 + 国家外汇管理局 + 银联清算 | 各国央行 + 卡组织规则 + PCI DSS |
| 费率典型 | 借记卡封顶、贷记卡分档,三方支付普遍 0.6% 左右 | 美国 Interchange 1.5%–3%,欧盟 IFR 上限 0.2%/0.3% |
支付宝 / 微信支付与 Visa / Mastercard 最大的不同是:
这种差异直接决定了接入复杂度和成本结构。第 7 篇会拆卡组织链路,第 8 篇会拆支付宝微信接入。
| 功能 | 中国 | 美国 | 欧元区 |
|---|---|---|---|
| 证券登记结算 | 中证登(CSDC) | DTCC(DTC/NSCC/FICC) | Euroclear、Clearstream |
| 主要交易所 | 上交所、深交所、北交所、港交所 | NYSE、Nasdaq | Euronext、Deutsche Börse、LSE |
| 衍生品 | 中金所、上期所、郑商所、大商所 | CME、ICE | Eurex |
| 典型结算周期 | A 股 T+1(2025 起部分 T+0 探讨) | 美股 T+1(2024 年起) | 欧股 T+2 过渡 T+1 |
| 跨境通道 | 沪深港通、债券通、基金互认 | ADR、QFI | UCITS |
第 15–18 篇会把交易体系从撮合、行情到结算讲透。
跨境工作最痛的不是英文,是术语不对齐。下表是本系列后续会频繁出现的中英文术语速查:
| 中文 | 英文 | 一句话解释 |
|---|---|---|
| 清算 | clearing | 确认双方债权债务净额的过程 |
| 结算 | settlement | 资金实际划拨完成 |
| 全额结算 | RTGS(Real-Time Gross Settlement) | 每笔逐笔实时全额划拨 |
| 净额结算 | DNS(Deferred Net Settlement) | 日终轧差后净额划拨 |
| 券款对付 | DvP(Delivery versus Payment) | 证券与资金同步交付 |
| 款款对付 | PvP(Payment versus Payment) | 两种货币同步交付 |
| 发卡行 | issuer | 持卡人账户所在银行 |
| 收单行 | acquirer | 商户账户所在银行 |
| 代理行 | correspondent bank | 跨境清算中的对手方银行 |
| 同业往来账 | nostro/vostro | “我们的账/你们的账” |
| 备付金 | reserve / client funds | 支付机构存放客户资金的专户 |
| 对账 | reconciliation | 两方或多方账目一致性核对 |
| 冲正 | reversal | 用反向分录抵消错账 |
| 分录 | journal entry | 一笔会计记录,含至少一借一贷 |
| 试算平衡 | trial balance | 借贷合计相等的验证 |
| 报文 | message | 金融指令的结构化表示(ISO 8583/20022) |
| 头寸 | position | 某时点的持仓或余额 |
| 敞口 | exposure | 面对某对手方或市场的风险额 |
| 净敞口 | net exposure | 相互抵扣后的剩余风险 |
| 保证金 | margin | 衍生品交易占用的资金 |
| 穿透 | look-through | 监管要求披露最终实际受益人 |
把这张表收藏起来。后续章节里,“清算”与”结算”这对术语最容易搞混,请特别留意。
假设你现在要创建一家小型金融科技公司,做国内企业收付款(B2B 聚合支付 + 资金服务),目标 18 个月内拿下牌照并接入央行清算。你应该按什么顺序建系统?下面是一个务实的最小可用版本,刻意不先讲牌照问题,只讲工程顺序。
在写第一行业务代码之前,必须先回答四个问题:
SUM(debits) = SUM(credits);任一账户
balance = opening_balance + SUM(journal_lines);备付金账户余额
= 客户待结算合计。先把账务引擎和对账系统建起来,哪怕先不接外部支付:
client_request_id,进入统一的幂等网关(第 5
篇);没有对账的支付系统不配碰钱。第 23 篇会展开对账工程的全部细节。
拿到初步牌照或以持牌支付公司作为上游后:
风控不是上线前一周加的”拦截层”,它必须从第 1 行交易代码开始就设计好决策点。
先建对账体,再建支付体,风控合规贯穿,交易体视业务需要再加。如果你的公司不做证券、不做自营撮合,第 15–18 篇可以完全跳过。
把前述阶段落到月度颗粒度,便于与业务方沟通交付预期:
| 月 | 主线 | 里程碑 | 风险项 |
|---|---|---|---|
| M0–M1 | 团队与合规立项 | 科目表初稿、技术栈选型、牌照路径敲定 | 合规路径不通会推翻技术方案 |
| M2–M3 | 对账体 MVP | 分录表、物化余额、日切对账跑通 | 科目遗漏,后期返工 |
| M4–M5 | 支付接入 MVP | 首家上游支付通道联调通过,回调入账 | 上游沙箱与生产差异大 |
| M6 | 风控 v0 | 限额、黑名单、设备指纹上线 | 规则冷启动无数据 |
| M7–M8 | 对账系统 | 与上游、银行、内部三方对账日常化 | 差错处理没预案 |
| M9 | 牌照与备付金账户 | 央行/监管现场检查通过 | 技术与合规文档缺口 |
| M10–M12 | 多通道 + 结算分离 | 接入第二、三家上游,清结算分离 | 路由热切换演练不足 |
| M13–M15 | 金融级可靠性 | 同城双活演练、异地灾备切换演练 | RTO/RPO 未经真实测试 |
| M16–M18 | 扩展(跨境/分账/计费) | 按业务优先级展开 | 过早跨境导致成本暴涨 |
这张表里最容易被忽略的是 M6–M8 的”冷启动期”:风控模型缺数据、对账差错没人处理、监管报送字段不齐。很多公司在这三个月里出事。提前规划影子账(shadow ledger)与人工干预台账能显著降低风险。
下表给出 25 篇文章的 slug、标题、一句话摘要与推荐阅读顺序。推荐顺序有三种:
| # | slug | 标题 | 一句话摘要 | 推荐顺序 |
|---|---|---|---|---|
| 01 | 01-intro |
金融科技工程全景 | 本文。系统分类与阅读地图。 | L / P / E / R |
| 02 | 02-money-model |
钱的建模 | 金额精度、币种、会计单位、多语言金额的工程建模。 | L / P / E / R |
| 03 | 03-double-entry |
复式记账工程化 | 科目、分录、余额、试算平衡在代码里长什么样。 | L / P / E / R |
| 04 | 04-ledger-db |
账务数据库设计 | TiDB/OceanBase/PG 下的分片、索引、热点账户治理。 | L / P |
| 05 | 05-idempotency-txn |
幂等、事务与一致性 | SAGA、TCC、对账补偿在金融系统的取舍。 | L / P / E |
| 06 | 06-payment-overview |
支付系统全景 | 收单、发卡、聚合、跨境、B2B、C2C 一次看完。 | L / P |
| 07 | 07-card-payment |
卡组织收单链路 | 银联/Visa/Mastercard、ISO 8583、ISO 20022 迁移。 | L / P |
| 08 | 08-alipay-wechatpay |
支付宝、微信支付接入 | 服务商模式、预授权、分账、退款、对账实战。 | L / P |
| 09 | 09-payment-gateway |
支付网关设计 | 路由、限流、补单、异步通知、签名与防重放。 | L / P |
| 10 | 10-billing-subscription |
订阅与计费系统 | 用量计量、账单、发票、出海 VAT/GST。 | L / P |
| 11 | 11-clearing-settlement |
清算、结算与资金归集 | T+0/T+1、NDS、PvP/DvP 的工程含义。 | L / P / E |
| 12 | 12-central-banks |
央行支付系统 | CNAPS、CIPS、Fedwire、TARGET2、SWIFT gpi。 | L / P |
| 13 | 13-cross-border |
跨境支付工程 | 代理行、nostro/vostro、汇率锁定、对手方风险。 | L / P |
| 14 | 14-digital-currency |
数字人民币、稳定币与 CBDC | 双层运营、离线支付、链上/链下清算。 | L / P |
| 15 | 15-exchange-arch |
交易所核心系统架构 | 撮合、行情、做市、风控、清算五大件。 | L / E |
| 16 | 16-matching-engine |
撮合引擎实现 | 价格时间优先、状态机、低延迟工程。 | L / E |
| 17 | 17-market-data |
行情分发 | MBP/MBO、快照+增量、组播/TCP、FIX/ITCH。 | L / E |
| 18 | 18-security-settlement |
证券登记结算 | 中证登、DTCC、Euroclear、T+1、DvP。 | L / E |
| 19 | 19-risk-engine |
实时风控引擎 | 规则、特征、模型、决策流、Flink/Spark。 | L / R |
| 20 | 20-fraud-detection |
反欺诈 | 设备指纹、关系图谱、行为序列、黑产对抗。 | L / R |
| 21 | 21-aml-kyc |
反洗钱与 KYC | 客户尽调、交易监测、STR/SAR、FATF。 | L / R |
| 22 | 22-credit-risk |
信用风险 | 评分卡、违约预测、巴塞尔 III。 | L / R |
| 23 | 23-reconciliation |
对账系统工程 | 账单、总账、资金对账、差错处理全流程。 | L / P / E |
| 24 | 24-reliability-dr |
金融级可靠性 | 两地三中心、单元化、RPO/RTO、灰度。 | L / P / E / R |
| 25 | 25-outlook |
金融科技工程展望 | AI 风控、稳定币、开放银行、Web3 合规。 | L |
如果你就是做支付网关/聚合支付的,时间有限,建议顺序:
01 → 02 → 03 → 05 → 06 → 09 → 07 或 08 → 11 → 23 → 24
其中第 23 篇(对账)不要跳,它是支付工程师被问得最多的面试题,也是上线后出事最多的系统。
01 → 02 → 03 → 15 → 16 → 17 → 18 → 11 → 24
撮合工程师经常低估清算结算复杂度,第 11、18 篇请认真读。
01 → 02 → 05 → 09 → 19 → 20 → 21 → 22 → 23
风控工程师对账务和支付链路的理解深度,决定了规则的质量。
如果你是 DBA、SRE、数据库内核或存储工程师,想理解”金融业务对数据库的特殊要求”:
01 → 02 → 03 → 04 → 05 → 11 → 23 → 24
这条路径会让你看到金融场景如何把”一致性、持久化、审计、窗口批处理”这几件事推向工程极限。相比典型的互联网业务,金融业务会逼出一些在普通 OLTP 场景不必考虑的需求——比如”日切窗口内的读写隔离”、“单账户热点写”、“强一致的跨分片借贷分录”。
如果你负责一个金融科技中台,需要做跨团队协同的架构决策:
01 → 02 → 03 → 06 → 11 → 19 → 23 → 24 → 25
这条路径偏重”取舍”与”组织边界”,而非具体的代码实现。第 25 篇展望部分会讨论未来 3–5 年可能改变架构假设的几项变化(稳定币主流化、开放银行 API、AI 风控、量子安全迁移),请在做长期规划时纳入考量。
本系列不会重复造轮子,涉及底层基础设施时会直接指向仓库中的相关系列:
阅读建议:把本系列当成一部”金融视角的索引”,底层技术细节请循引用深入各专题系列。这样既避免重复,也保证了本系列的篇幅聚焦在”金融业务如何塑造系统设计”这个主线上。
便于你对照阅读,下表给出本系列各篇与仓库其他系列的主要依赖关系:
| 本系列章节 | 强依赖 | 弱依赖 |
|---|---|---|
| 第 3 篇 复式记账 | — | ../../db/index.html(事务基础) |
| 第 4 篇 账务数据库 | ../../db/index.html,
../../db-frontier/index.html |
../../distributed/index.html |
| 第 5 篇 幂等事务 | ../../distributed/index.html |
../../db/index.html |
| 第 9 篇 支付网关 | ../../observability/index.html |
../../iam/index.html(商户身份) |
| 第 12 篇 央行系统 | — | ../../opensource/index.html(闭源
SDK) |
| 第 16 篇 撮合引擎 | ../../distributed/index.html |
../../os/index.html(若已建立)低延迟调优 |
| 第 19 篇 实时风控 | ../../distributed/index.html(流处理) |
../../db-frontier/index.html(向量特征) |
| 第 21 篇 KYC/AML | ../../iam/index.html |
— |
| 第 24 篇 可靠性 | ../../distributed/index.html,
../../observability/index.html |
../../iam/index.html(双人复核权限) |
“强依赖”意味着若完全没读过相应系列,可能会错过细节;“弱依赖”意味着相关章节只是点到即止,读过更佳。
在进入正文之前,有几条本系列共同遵循的写作原则,交代给读者,也作为自我约束:
如果你发现某一篇偏离上述原则,欢迎在仓库里开 issue 指正。
每篇正文都会有自己的”工程坑点”小节;这里先列出任何金融系统都会踩的 10 个总览级坑点,后续会被逐一展开。
下面给出一份”金融系统新人最容易违反的 20 条单句守则”,可以直接当 code review checklist:
这些守则看起来啰嗦,但正是”一般工程师不会想到”的那几条里,藏着下一次事故。
以下建议是后续各篇讨论的前置共识,放在这里以免后面每篇重复:
再往前一步,组织结构上也存在几条”金融特有”的共识:
这些实践在非金融公司可能被视为”官僚”,但它们是金融监管对任一家持牌机构的最低要求,且统计上确实降低了内部欺诈与误操作概率。本系列会在第 24 篇把”组织工程(organizational engineering)“与”技术工程”一起讨论。
../../db/index.html
../../distributed/index.html
这样的链接,都是”这里的细节在那边系列讲过”的信号。一次深入,下次跳过。希望 25 篇读完之后,你对”金融科技工程”不再是一张模糊的词云,而是一张可以在脑子里索引的地图:看到”清算延迟”你知道去第 11 篇,看到”分录不平”你知道去第 3 篇,看到”央行报文”你知道去第 12 篇,看到”乌龙指”你知道去第 24 篇。
下一篇(第 2 篇)我们从”钱到底是什么数”这个最朴素的问题讲起。
系列开篇之际,把几个在面试、团队讨论里反复出现的误解集中澄清一下。这些话题在后续章节会被充分展开,这里先给一个足以防坑的最短回答。
不对。数据库事务解决的是单机/单库内多行数据的原子性,复式记账解决的是会计等式恒成立这个业务不变量。两者是正交维度:即使你用最强的事务隔离级别,如果分录本身只记了一边,余额依然错。复式记账是一套”结构性约束”,在它之上才谈得上事务。详见第 3 篇。
区块链在”节点之间的账本复制一致性”这一小段上确实可以免对账,但这和金融公司语境下的”对账”不是一回事。真实业务里,对账的对象是:
这几条线只要公司外部还有其他系统存在,对账就永远跑不掉。第 23 篇会专门讲”即使全链路上链,仍然要对账”这一现实。
Redis 的 INCR/DECR
是原子的,但它不是账务。它缺:
Redis 可以做热余额的只读缓存(第 4 篇会讨论),但不能当账务核心。
2PC 在跨系统协同时的可用性代价和阻塞问题(第三方支付通道 ≠ 你的数据库,无法参与 2PC)使其在金融跨域场景几乎不可用。工业界实际做法是 SAGA + 幂等 + 对账补偿,把原子性从”技术原子”降级为”最终一致 + 可审计 + 可补偿”。第 5 篇会给完整的状态机。
规则和黑名单只是风控的”即时拦截层”。完整的风控体系包含特征平台(实时/离线)、模型层(评分卡/XGBoost/图神经网络)、决策流(多规则冲突时如何裁决)、策略回放(新规则上线前的影响评估)、案件中心(人工复核与反馈闭环)。第 19–22 篇会逐层展开。
绝大多数监管条文并不深奥,但它们决定了你字段设计的取舍。举个例子:《个人信息保护法》要求”撤回同意”后可继续进行”履行法定义务所必需”的处理——这意味着你的用户删除功能不能真的把
KYC 记录从库里扫掉,需要”逻辑删除 +
法定保留期”。这一条就能直接改变你的 user 表与
kyc_record
表的隔离策略。工程师不必精读全部法条,但必须理解”这一类约束为什么以这种方式落到代码里”。第
21 篇会给出一份最小法规速查。
“慢一点”在零售支付和交易所里是反过来的:
金融系统不是”慢而稳”,而是”在约束条件下追求极致稳,并且该快的地方快到变态”。
如果你在阅读过程中发现某一章与你所在公司的实际做法有出入,大概率是场景差异而非对错——金融细分领域多,同一个问题在零售支付、B2B 清结算、证券登记、衍生品结算里可能有截然不同的最佳解。请把本系列当作”方法论脚手架”,而非”标准答案”。
把这些链接收藏进浏览器书签栏,后续 24 篇中涉及监管原文的引用几乎全部来自这些入口。
上一篇:《金融科技工程》系列首页
把当前热点继续串成多页阅读,而不是停在单篇消费。
2026-04-22 · architecture / fintech
面向中国工程团队的金融科技系列。从账务底盘、支付、清结算、交易所、风控合规到可靠性与灾备,中国与全球视角并举,讲清楚金融系统在工程落地中的真实挑战。
2026-04-22 · architecture / fintech
从订单网关到撮合引擎、从 L1/L2/L3 行情到清算与结算,系统梳理证券、期货、加密货币交易所的五大核心子系统;给出低延迟工程技术栈(Disruptor、Kernel Bypass、FPGA)、订单生命周期状态机、主流交易所(NYSE Pillar、Nasdaq INET、上交所新一代、CME Globex、Binance、dYdX v4)对比、以及 Flash Crash 与 Knight Capital 的工程教训。
2026-04-22 · architecture / fintech
把模糊的"支付"一词拆成可工程化的系统分类——四方参与者、收单发卡双边、卡组织与钱包通道、中国与国际的费率结构、实时支付浪潮、以及一张完整的资金流图。
2026-04-22 · architecture / fintech
一文讲清 Clearing、Settlement、Cash Pooling 三个最易混淆的金融词汇的工程区分;从 RTGS/DNS 的选型、PvP/DvP 的风险消除机制,到商户清分引擎、T+1 批处理、二清合规边界,再到网联 IBPS、FedNow、PIX 的实时化浪潮。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。