金融科技工程全景:从支付到交易所的系统分类与读图
你大概率在某个瞬间动过这样的念头:
- “不就是一张 accounts 表 + 一张 transactions 表吗,余额加加减减?”
- “支付宝微信都有 SDK,接一下回调就行吧?”
- “风控不就是 if-else 几条规则?”
- “交易所?Matching Engine 在 GitHub 上随便一搜一把。”
这些想法都没错,它们都能在周末跑出一个 demo。问题是,这个 demo 离可以真的碰钱的系统,距离比你想象得远得多。真正难的不是写一个能加能减的余额,而是当同一笔钱在网络分区、上下游超时、队列重放、人工补单、监管查询、跨币种汇兑、跨时区对账这些事同时发生时,它还能是正确的一笔钱。
这篇文章是【金融科技工程】系列的第 1 篇,承担两件事:
- 把”金融科技为什么比普通后端难”这个问题讲清楚,让后续 24 篇的每一条约束都有来处;
- 给出一张系统分类骨架与完整阅读地图,读者可以按图索骥,按需跳读。
这个系列的读者画像是:写过几年后端、读过一些分布式系统资料、对钱有敬畏但没做过核心账务/支付/交易所的工程师。不会从零讲 TCP 和 SQL,但会从零讲复式记账和 ISO 8583。
更具体地说,下面四类读者最能从本系列受益:
- 互联网后端转金融:在电商/社交/内容公司做过三五年 Java/Go,准备加入支付、数字银行、券商、交易所或金融中台团队。你最需要的是”把已有的分布式知识映射到金融语境”的翻译层。
- 小型支付/资金业务线的独立负责人:公司不大,你一个人既要设计又要写又要推。你最需要的是”最小可用的工程蓝图”与”踩过的坑清单”。
- 做交易所撮合/券商 OMS 的性能工程师:你对低延迟熟,但清算、结算、托管这一段陌生。本系列第 11、18 篇的工程要点正是给你准备的。
- 风控/合规工程师:你熟悉规则引擎与模型,但账务与支付链路像个黑盒。第 3、9、11 篇会把这个黑盒拆开。
如果你已经是某个细分领域十年以上的专家(例如资深核心银行工程师),本系列在你的主场可能偏浅,但邻域章节对你依然是有效的补课材料——很多金融事故恰恰发生在”我熟悉的部分边界之外”。
一、为什么金融科技比普通后端更难
用一句话概括:普通后端追求”大部分时候对”,金融系统追求”任何时候都对,且对得起审计”。下面拆成五层来看。
1.1 钱的原子性:不是技术名词,是法律名词
在一般的业务系统里,“原子性”一般指数据库事务的 ACID。订单创建失败了,回滚就好。但在金融系统里,原子性有一层更硬的含义:
- 用户 A 的余额 -100 与用户 B 的余额 +100,必须同生共死。要么都发生,要么都不发生,不允许”我这边扣了,对方没收到”。这不只是技术要求,是《民法典》《支付结算办法》与各国央行结算规则共同画出的红线。
- 更严苛的是”已入账”的不可撤销性。在央行大额支付系统(如 CNAPS HVPS、Fedwire)里,一笔报文一旦完成清算确认,法律上就是最终的;任何”撤回”都只能通过反向再发一笔达成,原记录不得删除、不得覆盖。
工程含义:
- 数据库事务的边界不等于业务原子性的边界,跨库/跨系统/跨机构的原子性要用 SAGA、TCC、对账补偿、两阶段提交、外部一致性时钟等工具拼出来(见第 5 篇)。
- “软删除”和”直接 UPDATE 余额”在账务系统里是禁忌。账务库应是只追加(append-only)的事件流 + 物化视图,改错只能靠冲正(reversal)分录(见第 3、4 篇)。
1.2 监管边界:这是一条硬约束,不是可配置项
普通业务的”合规”往往是产品经理口中的一句”我们要 GDPR 合规”,实际落地靠打码加协议弹窗。金融系统的监管边界是:
- 准入:支付牌照、清算会员资格、交易所撮合牌照、银行分行牌照。没牌照连接口都拿不到。
- 数据驻留:中国境内用户的支付数据不得出境(《个人信息保护法》《数据安全法》《网络安全法》),欧盟 GDPR 对跨境传输有 SCC / 充分性认定。系统架构不是”全球一个单元”就能了事。
- 交易监测与报文:反洗钱 STR/SAR 报告(第 21 篇)、大额和可疑交易上报、FATF Travel Rule、SWIFT CBPR+ 的 ISO 20022 迁移(第 7、12 篇)。
- 审计轨迹:监管随时有权调阅任意一笔交易的完整还原,保留期通常 5–10 年,且不得篡改。这直接塑造了账务系统的存储与索引设计(第 4 篇)。
这意味着一个合格的金融后端工程师,读过的不是只有《Designing Data-Intensive Applications》,还有至少三四份监管文件:以中国为例,《非银行支付机构条例》《支付业务许可证》《反洗钱法》《征信业管理条例》。后续每一篇都会在合适的地方指出它所踩的监管边界,但不会罗列条文,只讲这条边界怎么变成了代码里的一行约束。
1.3 一个小数点的代价:浮点数是禁区
普通系统里 double
可能够用。金融系统里,double
是工程事故的入口。
- 0.1 + 0.2 != 0.3
这件事在展示层可能无所谓,在账务里会直接让分录不平(
SUM(debits) - SUM(credits) != 0)。 - 不同币种精度不同:日元 0 位,港币/美元 2 位,人民币 2
位(业务展示)但某些清算口径 4 位,比特币 8 位,以太坊 18
位。用一个全局
scale=2的 decimal 一把梭,会在接入稳定币那天炸掉(第 2 篇)。 - 利率、汇率、手续费的中间计算常带超出展示精度的多位小数,舍入方向(ROUND_HALF_EVEN / ROUND_HALF_UP / ROUND_DOWN)在不同国家不同产品下规则不同。
工程含义:金额字段一律用定点数(decimal / 大整数 + scale),中间计算保留”全精度”,只在向外展示/入账那一刻做明确的舍入策略,且舍入产生的尾差(rounding residual)要有专门的科目兜底(第 2、3 篇)。
1.4 时间也是钱:T+0、T+1、截止时间与窗口
在一般的 Web 系统里,“时间”是个日志字段,谁不是毫秒精度呢。在金融系统里,时间是:
- 清算日:T+0 / T+1 / T+2 意味着现金流实际到账的日期。错一天就是资金占用成本、利息、甚至违约。
- 业务截止时间(cutoff):CNAPS 大额在 17:00 关闭当日清算,过了就是下一工作日。跨境汇款涉及多个时区的 cutoff 串联,一个晚了全链路往后一天。
- 会计期间:日终切换、月结、年结,切换过程中到账的交易归属哪一天,必须有明确规则,否则对账日日不平。
- 延迟本身就是风险:高频交易里,几十微秒的撮合延迟差距决定盈亏(第 16 篇)。
1.5 错一个小数点的代价:公开事件清单
抽象讲再多不如看真实事件:
- 2014,瑞穗证券乌龙指:某交易员把”61 万日元 1 股”下成了”1 日元 61 万股”的卖单,几秒钟内损失超 400 亿日元,东京证交所当时无法撤单,事件直接推动了日本交易所前端风控强化。
- 2015,德意志银行 60 亿美元误付:操作员把净额当成毛额付给了对冲基金客户,次日追回,但事件成为金融操作风险教材。
- 2012,Knight Capital 45 分钟破产:老旧代码模块被部署重启,触发了本应废弃的路由规则,45 分钟亏掉 4.4 亿美元,公司濒临破产。灰度发布与单元化(第 24 篇)的现代实践很大程度上源自此类事件。
- 2013,光大证券 816 乌龙指:策略交易系统缺陷,瞬时生成 234 亿元错单,A 股指数当日异动剧烈,证监会认定构成内幕交易(事后处置)。
- 2020,花旗 9 亿美元误转:软件确认界面设计问题,员工勾选错误,9 亿美元本息误付给化妆品公司 Revlon 的债权人,法院一度判决不得追回(后经上诉改判)。
- 2022,某国内银行”假币转账”:报文字段解析 bug 导致转账金额小数位错位,几千笔交易被放大/缩小 100 倍,事后靠对账与冲正修复。
这些事件的共性:不是算法不够先进,而是在某个”一般工程师不会想到”的角落,一个本该被守住的不变量(invariant)失守了。
我们可以把这些失守点归到几类:
- 输入校验缺失(瑞穗、光大):订单金额/数量的上下界、对象合理性校验没有做到位;
- 发布治理不足(Knight Capital):新旧代码共存、开关遗留,灰度和回滚预案失效;
- 操作风险 UI 设计(花旗 Revlon 案):界面未做”反直觉二次确认”,默认项带有危险含义;
- 报文/协议解析缺陷(某行小数位事件):字段长度、小数位、符号处理不严谨;
- 对账滞后(很多事故):事故发生到被发现之间隔了数小时到数日,损失放大。
本系列会在每类失守点上给出具体的”守不变量”的工程手法。整个【金融科技工程】系列,本质上是在给读者一张清单:金融系统里有哪些不变量,如何在代码层面守住它们。
1.6 一段最小代码,展示一个最常见的不变量
为了让”不变量”这个词落到代码层面,看下面这张最小分录表。它是后续第 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.7 一笔 100 元充值的完整旅程
抽象归抽象,用一个最常见的业务流程把 1.1–1.6 串起来,你会对”为什么这么多环节”有直观认识。假设用户 Alice 用工行储蓄卡给某持牌支付平台 P 充值 100 元,最终进入她在 P 内的钱包余额。
阶段 A:用户侧
- Alice 在 App 点击”充值 100 元”,客户端生成
client_request_id = uuid(),向平台 P 发起 HTTP 请求。 - 平台 P 的支付网关(第 9 篇)收到请求,按
client_request_id查询幂等表:首次出现则新建,非首次则直接返回上次结果。 - 网关把请求交给风控(第 19 篇):检查限额(单日、单月)、设备指纹、命中黑名单与制裁名单(第 21 篇)。返回”放行”。
阶段 B:账务记账(在途)
- 平台 P 的账务核心(第 3 篇)创建一笔分录:
- 借:
客户备付金-在途(资产)100.00 CNY - 贷:
Alice 钱包-可用(负债)100.00 CNY
state = PENDING标签,余额物化暂不反映到 Alice 的可用余额。 - 借:
- 账务核心通过事务消息把”待发起支付”事件投递到支付渠道网关。
阶段 C:支付通道
- 支付渠道网关按路由规则(第 9 篇)选中一家合作的银行通道(例如快捷支付),发起 ISO 8583 报文或自有协议报文(第 7 篇)。
- 工行端做发卡行风控、账户校验、密码/短信验证,扣 Alice 卡 100 元,返回”成功”响应。
- 渠道网关收到同步响应后,不直接入账。金融系统里同步响应只作为”引导客户端前端展示”的依据,真正的入账以异步清算回单为准。
阶段 D:清算与结算
- 当日日切前,银联/网联(第 12 篇)对所有交易做轧差清算,生成净额结算指令。
- 央行 CNAPS 或网联 IBPS 完成资金实际划拨:工行扣 100 元 → 平台 P 的备付金银行账户 +100 元(通常是 T+0 或 T+1,依通道而定)。
- 平台 P 收到清算回单(电子对账单 + 明细),由对账系统(第
23 篇)与步骤 4 的
PENDING分录匹配。匹配成功后:- 冲销原
PENDING分录的在途标记,物化到 Alice 的可用余额; - 把”客户备付金-在途”科目的金额转到”客户备付金-已结算”。
- 冲销原
- 如果匹配失败(金额不符、订单号对不上、超时未到),进入差错处理流程(第 23 篇):短期挂账 + 人工介入 + SLA 内回写或冲正。
阶段 E:监管与审计
- 交易进入反洗钱监测(第 21 篇),命中规则则生成 STR 草稿等待人工复核。
- T+1 汇总到监管报送批次,按《非银行支付机构条例》相关要求报送人行与外管。
- 审计日志永久保留,保留期至少 5 年。
一笔简单的 100 元充值,完整旅程涉及五个阶段、约 15 个关键动作、至少 4 套不同的不变量(幂等、借贷、清算、监管)。每个阶段都可能失败,每种失败都要有对应的补偿路径。这就是”金融工程比普通后端难”的直观证据。
本系列每一篇都会围绕这张旅程图上的某一段展开:第 9 篇讲网关、第 3 篇讲分录、第 11 篇讲清算、第 23 篇讲对账、第 21 篇讲监管报送。读完 25 篇,你会对这张图上每一个小方格都了如指掌。
二、分类学:把金融科技系统拆成四体
25 篇内容多,若不分层,读者会被”账务、支付、清算、撮合、风控、反洗钱、征信”这些词砸晕。我们把整个领域拆成四体:
2.1 对账体(Ledger / Accounting Core)
把”钱的状态”固化为不可篡改事实的系统。它是整个金融公司的真相源(source of truth),一切对外报表、对监管报送、对用户展示的余额,都出自它。
关键词:复式记账、科目体系、分录(journal entry)、试算平衡、日终结账、余额物化、对账差错处理。
典型系统:银行核心(core banking)、支付公司总账、交易所账务引擎、记账中台。
这个体的特征:写多读重、强一致、单点账户热点、日切窗口敏感。工程难点集中在”如何让每日万亿级分录仍然满足借贷相等”,以及”热点账户(平台手续费账户、大商户收款账户)如何不成为单点瓶颈”。本系列会在第 4 篇给出分片与热点治理的具体方案。
本系列覆盖:第 2、3、4、5、23 篇。
2.2 支付体(Payment / Clearing / Settlement)
把”钱在机构之间移动”这件事做成一张网的系统。它在对账体之上,负责路由、报文、清算、结算与跨境。
关键词:收单、发卡、聚合支付、支付网关、卡组织、ISO 8583、ISO 20022、清算、结算、CNAPS、CIPS、Fedwire、TARGET2、SWIFT、CBDC、代理行。
典型系统:支付宝收银台、微信支付商户平台、银联 CUPS、第三方支付网关、跨境汇款、央行大小额系统、稳定币发行与赎回。
这个体的特征:长链路、多机构协同、报文标准繁多、对账周期天级。工程难点集中在”链路中任一节点失败后,如何把钱不丢不重地还原到一致状态”,以及”如何用有限的幂等键和补单机制覆盖无限种失败组合”。
本系列覆盖:第 6、7、8、9、10、11、12、13、14 篇。
2.3 交易体(Exchange / Matching / Market Data)
把”价格发现 + 头寸变更”做成一个低延迟、高并发、强一致的系统。与支付体的不同在于:一笔报单进入撮合引擎,不是为了改变一个余额,而是为了发现一个价格;但成交之后,依然要通过对账体落账。
关键词:订单簿、撮合算法、价格优先时间优先、行情分发、做市、FIX、ITCH/OUCH、证券登记结算、DvP、PvP。
典型系统:证券交易所、期货交易所、加密货币交易所、做市系统、订单管理系统(OMS)、执行管理系统(EMS)。
这个体的特征:极低延迟、极高并发、确定性回放、风险实时计算。工程难点在于”用单线程撮合核心 + 外围并行化”的取舍,以及”如何在微秒级延迟下仍然完成盘前/盘中风控(自成交防护、熔断、涨跌停、前端额度)“。
本系列覆盖:第 15、16、17、18 篇。
2.4 风控合规体(Risk / Compliance)
横跨对账、支付、交易三体,负责”这笔交易/客户能不能做”这个判断。分实时风控(交易毫秒级拦截)、批量风控(离线画像、评分卡)、合规监测(反洗钱、反欺诈、制裁筛查)、信用风险(评级、违约)。
关键词:规则引擎、特征平台、决策流、黑产对抗、设备指纹、关系图谱、KYC、AML、STR/SAR、评分卡、巴塞尔协议。
这个体的特征:跨时序(实时拦截 + 离线画像)、跨数据源(交易流 + 行为流 + 第三方征信 + 名单库)、强审计(拒绝必须可解释)。工程难点在”特征一致性(实时链路与离线训练特征口径一致)“、”规则/模型组合决策的可解释性”以及”监管要求的可审计日志”。
本系列覆盖:第 19、20、21、22 篇。
2.5 横切关注点:可靠性与未来
金融级可靠性(两地三中心、单元化、RPO/RTO、灰度发布)是所有四体的共同约束,单独成篇;行业未来趋势(AI 风控、稳定币、开放银行、Web3 合规)作为展望。
本系列覆盖:第 24、25 篇。
2.6 四体之间的接口:事件、报文、指令
四体之间并不是 REST API 式的松耦合调用,而是以事件和报文串起来:
- 支付体 → 对账体:事件(“收款成功”/“扣款成功”),通过事务消息入账;
- 对账体 → 对账体(机构间):清算报文(净额/全额轧差结果);
- 交易体 → 对账体:成交回报(含成交价、成交量、费用),对账体把它拆成分录;
- 风控合规体 → 支付体/交易体:决策(放行/拒绝/加审),走同步 RPC;
- 风控合规体 → 监管:监管报文(STR/SAR、每日头寸),走离线批处理。
下面这张表汇总”四体之间谁找谁、走什么接口、有没有同步要求”,贯穿本系列所有后续章节:
| 发起方 | 接收方 | 载体 | 同步性 | 失败处理 | 相关章节 |
|---|---|---|---|---|---|
| 支付体 | 对账体 | 记账事件 | 异步(事务消息) | 重试+幂等+对账差错 | 5、23 |
| 对账体 | 监管 | 报送文件 | 批处理(T+1) | 人工复核 | 21 |
| 对账体A | 对账体B(跨机构) | 清算报文 | 半同步 | 冲正再发 | 11、12 |
| 交易体 | 对账体 | 成交回报 | 近实时 | 重放 | 15、16 |
| 风控体 | 支付体 | 决策 RPC | 同步 | 超时降级 | 19 |
| 风控体 | 监管 | 可疑报告 | 批处理 | 人工复核 | 21 |
| 合规体 | 支付体 | 名单/限额 | 订阅推送 | 安全默认(拒绝) | 21 |
设计要点:同步调用越少越好,资金相关的调用几乎都应异步化 + 事件溯源;越靠近用户的链路(风控决策)才允许同步。这是金融系统与一般互联网业务在架构取舍上的一个显著差异。
三、一张大图:25 篇与数据流
先说数据流方向。一笔普通支付从用户到监管走过的路是:
用户 → 商户/前端 → 支付网关 → 风控决策 → 账务记账
→ 清算(机构间轧差)→ 结算(资金实际划拨)
→ 总账(对账体终局状态)→ 监管报送
一笔证券交易走过的路是:
客户 → 券商 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>两张图传达同一件事:四体之间不是并列,而是栈式。上层的支付和交易引擎,最后都要落到对账体这一层真相;风控合规体横切每一层;可靠性、对账、计费是横跨整个栈的基础设施。
四、中国 vs 国际基础设施速览
如果你在一家只服务国内用户的公司工作,可能从未碰过 SWIFT 报文;如果你在跨境公司,会发现国内清算与国际清算的术语几乎是两个世界。下表给出一份最小对照,后续专题会在第 7、11、12、13 篇展开。
4.1 大额/跨行清算
| 功能 | 中国 | 美国 | 欧元区 | 跨境 |
|---|---|---|---|---|
| 本币大额实时 | 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 |
读图要点:
- CNAPS 是中国人民银行运营的跨行清算骨干,分大额(HVPS,RTGS)与小额(BEPS,DNS);CIPS 是 2015 年起上线、专门服务于人民币跨境的清算系统。
- SWIFT 本身不是清算系统,只是全球最大的金融报文网络。两家银行用 SWIFT 达成指令传递,真正的资金转移要落到上面各清算系统。
- ISO 20022 是新一代金融报文标准,SWIFT 的 CBPR+、欧央行 TARGET2、美国 Fedwire、国内 CNAPS 都在 2022–2025 这个窗口迁移到 ISO 20022(见第 7、12 篇)。
4.2 卡组织与零售支付
| 维度 | 中国典型 | 国际典型 |
|---|---|---|
| 卡组织 | 银联(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 最大的不同是:
- Visa / Mastercard 是四方模式(持卡人–发卡行–收单行–商户 + 卡组织清算);
- 支付宝 / 微信支付在其生态内更接近三方模式或封闭环路(walled-garden):账户余额内流转不走卡组织,只有充值/提现触及银行清算。
这种差异直接决定了接入复杂度和成本结构。第 7 篇会拆卡组织链路,第 8 篇会拆支付宝微信接入。
4.3 资本市场基础设施
| 功能 | 中国 | 美国 | 欧元区 |
|---|---|---|---|
| 证券登记结算 | 中证登(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 篇会把交易体系从撮合、行情到结算讲透。
4.4 一张快速查询表:术语翻译
跨境工作最痛的不是英文,是术语不对齐。下表是本系列后续会频繁出现的中英文术语速查:
| 中文 | 英文 | 一句话解释 |
|---|---|---|
| 清算 | 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 个月内拿下牌照并接入央行清算。你应该按什么顺序建系统?下面是一个务实的最小可用版本,刻意不先讲牌照问题,只讲工程顺序。
5.1 第 0 阶段:确定”真相的形状”
在写第一行业务代码之前,必须先回答四个问题:
- 记账单位是什么?——人民币到分,还是到厘?未来要不要接入美元、数字人民币?精度如何统一?(第 2 篇)
- 科目体系是什么?——用户余额、商户待结算、平台手续费、备付金(央行专户)、中间过渡户、汇差科目、冲正科目。草图至少 20 个科目起。(第 3 篇)
- 不变量有哪些?——任一时刻
SUM(debits) = SUM(credits);任一账户balance = opening_balance + SUM(journal_lines);备付金账户余额 = 客户待结算合计。 - 事件模型是什么?——业务事件(下单、支付、退款)→ 记账事件(借贷分录)→ 清算事件(机构间轧差)→ 结算事件(资金实际划拨)。
5.2 第 1 阶段:对账体先行(月 0–3)
先把账务引擎和对账系统建起来,哪怕先不接外部支付:
- 账务库(ledger):append-only 分录表 + 物化余额表,先用 PostgreSQL,预留分片位点;
- 幂等层:每一笔业务请求一个
client_request_id,进入统一的幂等网关(第 5 篇); - 日切与对账:每日跑一次试算平衡,资金流水与账务分录交叉比对;
- 模拟数据:自造一个”假银行”的回调服务,跑通完整的下单→支付→记账→对账链路。
没有对账的支付系统不配碰钱。第 23 篇会展开对账工程的全部细节。
5.3 第 2 阶段:支付接入(月 3–9)
拿到初步牌照或以持牌支付公司作为上游后:
- 接入 1–2 家三方支付(支付宝、微信)或 1 家银行直连作为 MVP;
- 支付网关(第 9 篇):路由、签名、防重放、异步通知处理、补单机制;
- 把”记账时点”与”清算时点”分开:下单时先记”在途”,收到清算回单时再落”入账”。这是账务设计里最常被搞错的一件事。
5.4 第 3 阶段:风控与合规(与第 2 阶段并行)
- 实时风控(第 19 篇):至少有设备指纹、限额、黑名单、规则引擎四件套;
- KYC/AML(第 21 篇):企业 KYB + 法人 KYC,制裁名单(UN/OFAC/国内名单)筛查;
- 审计日志:任何涉及资金与身份的操作,全部进入不可篡改的审计轨迹(建议走 append-only 表 + 定时 hash 归档)。
风控不是上线前一周加的”拦截层”,它必须从第 1 行交易代码开始就设计好决策点。
5.5 第 4 阶段:清结算与跨境(月 9–18)
- 自有备付金账户接入央行清算(CNAPS/IBPS)或与持牌机构合作;
- 清算与结算分离(第 11 篇):清算引擎做轧差,结算引擎发起央行报文;
- 跨境需求出现时再接入 CIPS/SWIFT(第 12、13 篇),不要为了”看起来国际化”过早接入,运维成本非常高。
5.6 第 5 阶段:横切基础设施(贯穿全程)
- 金融级可靠性(第 24 篇):两地三中心、单元化、灰度发布。不要等出事再补;
- 可观测性(../observability/):金融系统的黄金指标是”分录失衡次数、补单次数、清算延迟、资金路径断点数”,而不是 QPS;
- 变更管理:任何涉及资金路径的发布必须走”灰度 + 影子账 + 双跑对比”。
5.7 一句话总结
先建对账体,再建支付体,风控合规贯穿,交易体视业务需要再加。如果你的公司不做证券、不做自营撮合,第 15–18 篇可以完全跳过。
5.8 一个典型的 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、标题、一句话摘要与推荐阅读顺序。推荐顺序有三种:
- L(Linear):按 01 → 25 顺序读,适合系统学习者;
- P(Payment):只关心支付收单业务的工程师;
- E(Exchange):只关心交易所/撮合的工程师;
- R(Risk):风控/合规方向。
| # | 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 |
6.1 针对支付工程师的最短路径
如果你就是做支付网关/聚合支付的,时间有限,建议顺序:
01 → 02 → 03 → 05 → 06 → 09 → 07 或 08 → 11 → 23 → 24
其中第 23 篇(对账)不要跳,它是支付工程师被问得最多的面试题,也是上线后出事最多的系统。
6.2 针对交易所工程师的最短路径
01 → 02 → 03 → 15 → 16 → 17 → 18 → 11 → 24
撮合工程师经常低估清算结算复杂度,第 11、18 篇请认真读。
6.3 针对风控工程师的最短路径
01 → 02 → 05 → 09 → 19 → 20 → 21 → 22 → 23
风控工程师对账务和支付链路的理解深度,决定了规则的质量。
6.4 针对数据库/基础设施工程师的最短路径
如果你是 DBA、SRE、数据库内核或存储工程师,想理解”金融业务对数据库的特殊要求”:
01 → 02 → 03 → 04 → 05 → 11 → 23 → 24
这条路径会让你看到金融场景如何把”一致性、持久化、审计、窗口批处理”这几件事推向工程极限。相比典型的互联网业务,金融业务会逼出一些在普通 OLTP 场景不必考虑的需求——比如”日切窗口内的读写隔离”、“单账户热点写”、“强一致的跨分片借贷分录”。
6.5 针对架构师/技术 Leader 的最短路径
如果你负责一个金融科技中台,需要做跨团队协同的架构决策:
01 → 02 → 03 → 06 → 11 → 19 → 23 → 24 → 25
这条路径偏重”取舍”与”组织边界”,而非具体的代码实现。第 25 篇展望部分会讨论未来 3–5 年可能改变架构假设的几项变化(稳定币主流化、开放银行 API、AI 风控、量子安全迁移),请在做长期规划时纳入考量。
七、与仓库既有系列的交叉引用
本系列不会重复造轮子,涉及底层基础设施时会直接指向仓库中的相关系列:
7.1 数据库与分布式数据库
- ../db/ —— 数据库基础系列:事务、隔离级别、索引、WAL 等共性知识。第 4 篇账务库设计会假设读者已理解这些概念。
- ../db-frontier/ —— 数据库前沿系列:HTAP、列存、向量索引、分布式 KV。第 4 篇选型讨论会引用其中 TiDB、OceanBase 相关内容。
7.2 分布式系统
- ../distributed/ —— 分布式系统百科:FLP、CAP、Raft、线性一致性等。第 5 篇(幂等事务)与第 24 篇(两地三中心)会频繁指回此系列的共识与复制相关文章。
7.3 身份与访问管理
- ../iam/ —— IAM 系列:OAuth、OIDC、SAML、权限模型。第 21 篇 KYC 会与 IAM 在”身份 vs 账户 vs 凭证”这条边界上重叠;商户端管理、员工操作审计依赖 IAM 的最小权限、职责分离原则。
7.4 可观测性
- ../observability/ —— 可观测性系列:Metrics、Tracing、Logging。第 24 篇会讨论金融系统特有的”资金黄金指标”,但通用的三支柱(三大支柱)基础建设请参考该系列。
7.5 开源与供应链
- ../opensource/ —— 开源工程系列:许可证、SBOM、闭源依赖管理。金融系统对闭源依赖(HSM 驱动、核心银行厂商 SDK、卡组织认证库)的管理极其敏感,第 9、12 篇会回到这个话题。
阅读建议:把本系列当成一部”金融视角的索引”,底层技术细节请循引用深入各专题系列。这样既避免重复,也保证了本系列的篇幅聚焦在”金融业务如何塑造系统设计”这个主线上。
7.6 一张跨系列依赖矩阵
便于你对照阅读,下表给出本系列各篇与仓库其他系列的主要依赖关系:
| 本系列章节 | 强依赖 | 弱依赖 |
|---|---|---|
| 第 3 篇 复式记账 | — | ../db/(事务基础) |
| 第 4 篇 账务数据库 | ../db/, ../db-frontier/ |
../distributed/ |
| 第 5 篇 幂等事务 | ../distributed/ |
../db/ |
| 第 9 篇 支付网关 | ../observability/ |
../iam/(商户身份) |
| 第 12 篇 央行系统 | — | ../opensource/(闭源 SDK) |
| 第 16 篇 撮合引擎 | ../distributed/ |
../os/(若已建立)低延迟调优 |
| 第 19 篇 实时风控 | ../distributed/(流处理) |
../db-frontier/(向量特征) |
| 第 21 篇 KYC/AML | ../iam/ |
— |
| 第 24 篇 可靠性 | ../distributed/,
../observability/ |
../iam/(双人复核权限) |
“强依赖”意味着若完全没读过相应系列,可能会错过细节;“弱依赖”意味着相关章节只是点到即止,读过更佳。
八、本系列的写作原则
在进入正文之前,有几条本系列共同遵循的写作原则,交代给读者,也作为自我约束:
- 以不变量为纲:每一篇围绕”这个系统要守住哪些业务不变量”组织,而非围绕”这个技术栈有什么新特性”。技术栈是工具,不变量才是第一位。
- 真实胜过理论:每一篇至少引用一个真实公司或真实事件(中国/国际至少各一个),避免只讲抽象模型。
- 合规作为约束出现:不堆砌法条,而是指出”这一行代码是为了满足某条监管”。
- 工程坑点不回避:每一篇的”工程坑点”小节写的是作者或同行踩过的真实坑,不是从教科书里抄的”常见问题”。
- 选型给建议但不绝对:每个选型小节只表达”在某类约束下推荐什么”,不声称”某某是银弹”。金融系统没有银弹。
- 数据不伪造:金额、账号、监管编号要么来自公开资料,要么明确标注为”示例”。
- 时间锚点:文本以 2026 年 Q2 为写作时点;若某项基础设施在此前后发生过明确变更(例如 ISO 20022 迁移节奏、A 股 T+1 改革),会标注时间。
- 交叉引用不重复造轮子:涉及分布式共识、数据库事务、IAM、观测性等底层内容时,直接指向仓库中的相关系列,本系列只保留”金融特有”的那一层。
如果你发现某一篇偏离上述原则,欢迎在仓库里开 issue 指正。
九、工程坑点(总览级别)
每篇正文都会有自己的”工程坑点”小节;这里先列出任何金融系统都会踩的 10 个总览级坑点,后续会被逐一展开。
- 用浮点数存金额:上线半年后爆发,尾差难以追溯。第 2 篇。
- 直接 UPDATE balance:没有审计轨迹,监管一查全盘崩塌。第 3、4 篇。
- 业务主键 = 数据库自增 ID:跨机房同步、分库分表、冲正再插入都会出事。第 4 篇。
- 幂等 key 依赖时间窗:重试晚一点就穿透。第 5 篇。
- 异步通知不重放、不幂等:对账必定有差错。第 9、23 篇。
- 清算时点 = 记账时点:在途资金被当成实际到账,风险敞口巨大。第 11 篇。
- 把所有币种装进一列 decimal(18,2):接日元、比特币、稳定币时全部重构。第 2 篇。
- 风控规则硬编码:任何一次业务规则调整都要发版,事故率高。第 19 篇。
- KYC 数据与业务库同库:违反最小权限与数据驻留,出海直接卡审。第 21 篇。
- 两地三中心未做资金路径演练:切换时资金路径不闭合,差错积压。第 24 篇。
下面给出一份”金融系统新人最容易违反的 20 条单句守则”,可以直接当 code review checklist:
- 任何金额字段必须是 decimal 或整数 + scale,不允许 float/double;
- 任何资金相关的表必须 append-only,错账用冲正;
- 任何外部调用必须带幂等键(idempotency key),且键的有效期覆盖业务 SLA;
- 任何异步通知必须按”收到即 ACK,处理走本地事件”的两段式,保证重放安全;
- 任何跨系统流程必须有补偿分支(SAGA 反向动作),不能只写正向;
- 任何签名接口必须防重放(时间戳 + nonce + 服务端去重);
- 任何客户数据落盘必须考虑数据驻留区域,不能”默认全球复制”;
- 任何涉及资金的发布必须灰度,且可回滚(真正回滚过一次);
- 任何金额展示必须标币种,不允许”裸数字 100”;
- 任何定时任务必须考虑跨日、跨月、跨时区;
- 任何余额查询必须区分”可用余额/冻结余额/在途余额”,不允许合一展示;
- 任何汇率应用点必须记录使用汇率与时间戳,不允许”现查现用”不留痕;
- 任何手续费计算必须有”谁付、从哪扣、走哪个科目”的三要素记录;
- 任何批量文件处理必须校验文件完整性(行数、金额合计、哈希);
- 任何对外接口必须有压测报告和降级预案,不能”先上线再说”;
- 任何风控规则必须能在不发版的情况下热更新;
- 任何账户冻结必须有”由谁发起、依据是什么、何时解冻”的审计字段;
- 任何 KYC 数据的访问必须有”按字段最小可见”的权限切分;
- 任何对账差异必须有负责人、有 SLA、有结单流程;
- 任何”仅此一次的人工运维脚本”必须留档,并进入下一次常规能力规划。
这些守则看起来啰嗦,但正是”一般工程师不会想到”的那几条里,藏着下一次事故。
十、选型与落地建议(总览级别)
以下建议是后续各篇讨论的前置共识,放在这里以免后面每篇重复:
- 语言:对账核心建议 Java / Go / Rust 三选一,避免动态语言(精度 bug 难排查)。低延迟撮合建议 C++/Rust。风控规则层可用 Groovy/Kotlin/Lua 脚本化。
- 数据库:账务核心首选强一致分布式数据库(TiDB、OceanBase、Spanner 系)或单机 PG + 严格分片。避免 MySQL 主从异步作为唯一真相源。
- 消息队列:金融事件总线建议 Kafka + exactly-once 语义或 Pulsar 事务消息;不要用”at-most-once”的队列作为资金事件通道。
- 时钟:系统内部统一使用 UTC,业务展示按时区转换。关键路径用 NTP + PTP 做到毫秒内对齐;撮合核心在微秒级场景用 PTP + 硬件时钟。
- 密钥与签名:HSM(硬件安全模块)是硬要求,不要把私钥放在配置文件里。金融级签名 + 防重放必须到每一个外部接口。
- 人员与流程:生产资金系统的发布必须有”双人复核 + 灰度 + 可回滚”。这是监管要求,不是最佳实践。
- 环境隔离:生产、灰度、准生产(影子)、测试、开发五级环境,生产数据不得下放;支付通道的生产沙箱与真实生产密钥必须物理隔离。
- 密钥轮换:对外签名密钥与对内数据加密密钥都要有明确的轮换周期(通常 1–2 年),且轮换过程要做到”新旧并存的重叠窗口 + 平滑切换”。
- 时间同步:所有核心机房对齐同一 NTP 层级,撮合场景再叠加 PTP;对账系统对时间戳来源(客户端时间 vs 服务端时间 vs 上游回单时间)必须有统一规范。
- 容灾演练频率:同城双活每月一次切换演练、异地灾备每季度一次全流程拉起。没演练过的灾备 = 不存在的灾备。
再往前一步,组织结构上也存在几条”金融特有”的共识:
- 前中后台隔离:前台(业务)、中台(风控/合规)、后台(清算/会计)在权责上必须分工清晰,且禁止同一人同时拥有前后台关键操作权限(职责分离,Segregation of Duties)。
- 双人复核(Four-Eyes Principle):任何涉及生产资金路径、风控规则、科目表、备付金账户配置的变更,必须由至少两位具备相应权限的人员独立复核通过。
- 运维权限最小化:DBA 不得随意 SELECT 资金表、SRE 不得修改分录、运营不得直连数据库。所有对资金表的访问都经过统一的数据网关,并全量留痕。
这些实践在非金融公司可能被视为”官僚”,但它们是金融监管对任一家持牌机构的最低要求,且统计上确实降低了内部欺诈与误操作概率。本系列会在第 24 篇把”组织工程(organizational engineering)“与”技术工程”一起讨论。
十一、阅读本系列的小建议
- 不要跳过第 2 篇:金额模型是整个系列的 ABC。第 3、4、5、7、8、11、13、14 篇全部依赖第 2 篇的精度与币种约定。
- 先读骨架,再读分支:第 3、6、11、15、19 篇是五条主干;读懂这五篇,再去看各自下面的细节文章,会清晰得多。
- 动手写一张分录表:学复式记账的最快方式是拿一张 Excel,自己把一笔”用户充值 100 元”的事件拆成至少 3 行分录。第 3 篇会给模板。
- 合规是约束,不是主角:本系列刻意不把监管条文堆成长篇,而是在每处设计决策旁注明”这一行是为了满足 X”。如果你在做具体项目,仍需找合规同事对齐本地法规。
- 跨引用请点链接:凡是出现
../db/../distributed/这样的链接,都是”这里的细节在那边系列讲过”的信号。一次深入,下次跳过。 - 带着真实业务问题阅读:每读完一章,试着问自己”如果是我们公司的 X 场景,这里的约束落到哪些代码上?“——不动手做一次翻译,读过的东西留存率极低。
- 动手写一条冲正:学”为什么不能 UPDATE balance”的最快方法,是故意写一段 UPDATE 代码,让它在分片/幂等/审计三方面同时出事,再用冲正分录把它修回来。这一次体验会胜过十篇论文。
- 关注日期与版本:本系列以 2026 年 Q2 为时点,部分基础设施(如 ISO 20022 迁移截止日、A 股结算周期改革)处于过渡期,阅读时请核对你当下的最新状态。
希望 25 篇读完之后,你对”金融科技工程”不再是一张模糊的词云,而是一张可以在脑子里索引的地图:看到”清算延迟”你知道去第 11 篇,看到”分录不平”你知道去第 3 篇,看到”央行报文”你知道去第 12 篇,看到”乌龙指”你知道去第 24 篇。
下一篇(第 2 篇)我们从”钱到底是什么数”这个最朴素的问题讲起。
十二、常见误解与快速澄清
系列开篇之际,把几个在面试、团队讨论里反复出现的误解集中澄清一下。这些话题在后续章节会被充分展开,这里先给一个足以防坑的最短回答。
11.1 “有了数据库事务,就不用复式记账了吧?”
不对。数据库事务解决的是单机/单库内多行数据的原子性,复式记账解决的是会计等式恒成立这个业务不变量。两者是正交维度:即使你用最强的事务隔离级别,如果分录本身只记了一边,余额依然错。复式记账是一套”结构性约束”,在它之上才谈得上事务。详见第 3 篇。
11.2 “用区块链就不用对账了吧?”
区块链在”节点之间的账本复制一致性”这一小段上确实可以免对账,但这和金融公司语境下的”对账”不是一回事。真实业务里,对账的对象是:
- 上游通道(支付宝/银联/银行)回单 vs 内部账务;
- 清算所轧差结果 vs 双方对账表;
- 商户端账单 vs 平台端账单;
- 备付金银行流水 vs 监管要求的客户资金专户。
这几条线只要公司外部还有其他系统存在,对账就永远跑不掉。第 23 篇会专门讲”即使全链路上链,仍然要对账”这一现实。
11.3 “直接用 Redis INCR/DECR 做余额不就够了?”
Redis 的 INCR/DECR
是原子的,但它不是账务。它缺:
- 不可篡改的分录轨迹(谁在什么时候动了账);
- 借贷两边的对称性(没有对手方账户);
- 与时序相关的业务约束(日切、月结);
- 持久化保证与审计留痕能力。
Redis 可以做热余额的只读缓存(第 4 篇会讨论),但不能当账务核心。
11.4 “不就是下单扣款两步吗,两阶段提交上就好了?”
2PC 在跨系统协同时的可用性代价和阻塞问题(第三方支付通道 ≠ 你的数据库,无法参与 2PC)使其在金融跨域场景几乎不可用。工业界实际做法是 SAGA + 幂等 + 对账补偿,把原子性从”技术原子”降级为”最终一致 + 可审计 + 可补偿”。第 5 篇会给完整的状态机。
11.5 “风控就是规则引擎 + 黑名单”
规则和黑名单只是风控的”即时拦截层”。完整的风控体系包含特征平台(实时/离线)、模型层(评分卡/XGBoost/图神经网络)、决策流(多规则冲突时如何裁决)、策略回放(新规则上线前的影响评估)、案件中心(人工复核与反馈闭环)。第 19–22 篇会逐层展开。
11.6 “监管文件看不懂,留给合规同学就好”
绝大多数监管条文并不深奥,但它们决定了你字段设计的取舍。举个例子:《个人信息保护法》要求”撤回同意”后可继续进行”履行法定义务所必需”的处理——这意味着你的用户删除功能不能真的把
KYC 记录从库里扫掉,需要”逻辑删除 +
法定保留期”。这一条就能直接改变你的 user 表与
kyc_record
表的隔离策略。工程师不必精读全部法条,但必须理解”这一类约束为什么以这种方式落到代码里”。第
21 篇会给出一份最小法规速查。
11.7 “金融系统不就是慢一点但稳一点的后端吗?”
“慢一点”在零售支付和交易所里是反过来的:
- 零售支付追求端到端秒级确认(第 9 篇);
- 交易所撮合追求亚毫秒级,头部交易所已做到个位数微秒内完成一笔订单的接收、匹配、回报(第 16、17 篇);
- 清算所追求的是”在 17:00 截止前完成今天所有净额计算”,批处理窗口极短。
金融系统不是”慢而稳”,而是”在约束条件下追求极致稳,并且该快的地方快到变态”。
十三、本篇要点回顾
- 金融科技比普通后端难,不是因为流量大,而是因为不变量多:钱的原子性、监管边界、精度、时间、审计追溯,全部在一条产线上同时生效。
- 系统可分为四体:对账体、支付体、交易体、风控合规体,外加可靠性与展望两条横切。25 篇文章逐一展开。
- 中国与国际基础设施在清算、报文、卡组织三条链路上结构类似但细节迥异,跨境工作要建立双语速查。
- 绿地项目顺序是:先对账体,再支付体,风控合规贯穿,交易体按需。18 个月可以拿下 B2B 聚合支付级别的 MVP。
- 本系列的每一篇,都是围绕”识别并守住某一类不变量”展开的。请把每篇的”工程坑点”与”选型建议”当作清单使用。
- 金融工程不是”慢而稳的后端”,而是”约束极多的后端”。约束来自业务(钱的守恒)、监管(审计追溯)、技术(低延迟/高一致)的三重交叠。
- 真正决定系统质量的往往不是某个”高大上”的技术选型,而是一群”看似琐碎”的工程守则:幂等键、append-only 分录、双人复核、灰度可回滚、备付金隔离、日切对账。这些守则构成了金融系统工程品味的底色。
如果你在阅读过程中发现某一章与你所在公司的实际做法有出入,大概率是场景差异而非对错——金融细分领域多,同一个问题在零售支付、B2B 清结算、证券登记、衍生品结算里可能有截然不同的最佳解。请把本系列当作”方法论脚手架”,而非”标准答案”。
参考资料
中国监管与基础设施
- 中国人民银行. 《中国支付体系发展报告(2023)》. https://www.pbc.gov.cn/
- 中国人民银行. 《非银行支付机构条例》. 国务院令第 768 号, 2023.
- 中国人民银行. 《金融基础设施监督管理办法(征求意见稿)》. 2020.
- 跨境银行间支付清算(上海)有限责任公司(CIPS). 《人民币跨境支付系统业务手册》. https://www.cips.com.cn/
- 中国银联. 《银联卡受理业务规范》. https://cn.unionpay.com/
- 中国证券登记结算有限责任公司. 《结算业务规则》. http://www.chinaclear.cn/
国际基础设施
- SWIFT. “ISO 20022 Migration for Cross-Border Payments and Reporting Plus (CBPR+).” https://www.swift.com/standards/iso-20022
- Bank for International Settlements (BIS), Committee on Payments and Market Infrastructures. “Principles for Financial Market Infrastructures (PFMI).” 2012. https://www.bis.org/cpmi/publ/d101.htm
- Federal Reserve. “Fedwire Funds Service.” https://www.frbservices.org/financial-services/wires
- European Central Bank. “TARGET2 / T2 and TIPS.” https://www.ecb.europa.eu/paym/target/
- DTCC. “A Comprehensive Guide to the US Securities Settlement System.” https://www.dtcc.com/
标准与协议
- ISO 20022 Universal Financial Industry Message Scheme. https://www.iso20022.org/
- ISO 8583: Financial Transaction Card Originated Messages — Interchange Message Specifications.
- FIX Trading Community. “Financial Information eXchange Protocol Specification.” https://www.fixtrading.org/
- Nasdaq. “ITCH / OUCH Protocol Specifications.” https://www.nasdaqtrader.com/
权威教材与报告
- 清华大学五道口金融学院 主编. 《中国金融科技运行报告(2023)》.
- Rishi Narang. Inside the Black Box: A Simple Guide to Quantitative and High-Frequency Trading. 2nd ed., Wiley, 2013.
- Martin Kleppmann. Designing Data-Intensive Applications. O’Reilly, 2017. (账务系统事件溯源的工程参考)
- FATF. “International Standards on Combating Money Laundering and the Financing of Terrorism & Proliferation.” https://www.fatf-gafi.org/
- Basel Committee on Banking Supervision. “Basel III: Finalising post-crisis reforms.” BIS, 2017. https://www.bis.org/bcbs/publ/d424.htm
公开事件参考
- U.S. Securities and Exchange Commission. “In the Matter of Knight Capital Americas LLC.” Release No. 70694, Oct 16, 2013.
- 中国证券监督管理委员会. “关于光大证券 8·16 异常交易事件的行政处罚决定.” 2013.
- Tokyo Stock Exchange. “みずほ証券誤発注事件調査報告.” 2005.
- U.S. District Court, Southern District of New York. “In re Citibank August 11, 2020 Wire Transfers.” 520 F. Supp. 3d 390 (2021).
延伸阅读(书目)
- 黄世忠.《财务报表分析》(第 4 版). 中国人民大学出版社, 2018.(会计基础与分录思维)
- 陈元《中国开发性金融论纲》系列.(中国金融基础设施演进视角)
- Glenn Hubbard, Anthony Patrick O’Brien. Money, Banking, and the Financial System. 4th ed., Pearson, 2020.
- Jack Bennett. The Essential Guide to Payments. Global Payments Innovation Jury, 2015.(支付行业鸟瞰)
- Robert Kissell. The Science of Algorithmic Trading and Portfolio Management. Academic Press, 2013.
- Larry Harris. Trading and Exchanges: Market Microstructure for Practitioners. Oxford University Press, 2002.(交易所微观结构经典)
- 吴军.《数学之美》第 2 版之”搜索与排序”章.(撮合引擎的工程直觉参考)
技术与行业博客
- Stripe Engineering Blog. https://stripe.com/blog/engineering(幂等、货币、API 设计)
- Square / Block Engineering. https://developer.squareup.com/blog
- PayPal Engineering. https://medium.com/paypal-tech
- 蚂蚁技术(AntTech)公众号与官方博客.(分布式事务、OceanBase、SOFAStack 等金融基础设施)
- 美团技术团队.(分布式系统与支付相关实战)
- 币安工程博客(Binance Engineering).(加密撮合引擎视角)
- LMAX Disruptor 论文与博客.(低延迟撮合内核的经典案例)
标准文档检索入口
- 人民银行官网:支付系统、金融市场基础设施、清算相关制度. http://www.pbc.gov.cn/
- 外汇管理局官网:跨境收支、结售汇、资本项目规范. http://www.safe.gov.cn/
- 证监会官网:证券、期货、基金相关监管规则. http://www.csrc.gov.cn/
- 银保监会(国家金融监督管理总局)官网:银行、保险、非银支付监管. https://www.nfra.gov.cn/
- BIS(国际清算银行):CPMI、IOSCO、FSB 的联合报告入口. https://www.bis.org/
- FATF:反洗钱与反恐融资标准. https://www.fatf-gafi.org/
- IOSCO:证券监管国际标准. https://www.iosco.org/
把这些链接收藏进浏览器书签栏,后续 24 篇中涉及监管原文的引用几乎全部来自这些入口。
上一篇:《金融科技工程》系列首页
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
金融科技工程
面向中国工程团队的金融科技系列。从账务底盘、支付、清结算、交易所、风控合规到可靠性与灾备,中国与全球视角并举,讲清楚金融系统在工程落地中的真实挑战。
【金融科技工程】支付系统全景:收单、发卡、聚合、跨境、B2B、C2C
把模糊的"支付"一词拆成可工程化的系统分类——四方参与者、收单发卡双边、卡组织与钱包通道、中国与国际的费率结构、实时支付浪潮、以及一张完整的资金流图。
【金融科技工程】11 清算 vs 结算 vs 资金归集:T+0/T+1、Netting、PvP/DvP
一文讲清 Clearing、Settlement、Cash Pooling 三个最易混淆的金融词汇的工程区分;从 RTGS/DNS 的选型、PvP/DvP 的风险消除机制,到商户清分引擎、T+1 批处理、二清合规边界,再到网联 IBPS、FedNow、PIX 的实时化浪潮。
【金融科技工程】交易所核心系统架构:撮合、行情、做市、风控、清算
从订单网关到撮合引擎、从 L1/L2/L3 行情到清算与结算,系统梳理证券、期货、加密货币交易所的五大核心子系统;给出低延迟工程技术栈(Disruptor、Kernel Bypass、FPGA)、订单生命周期状态机、主流交易所(NYSE Pillar、Nasdaq INET、上交所新一代、CME Globex、Binance、dYdX v4)对比、以及 Flash Crash 与 Knight Capital 的工程教训。