一卡通核心交易平台国产数据库实践:架构、迁移与高可用落地
城市级'一卡通'系统通常要求金融级一致性、交通级高并发及 7×24 小时运行。交易链路短但高峰期集中,对账清算口径多导致链路长,数据留存久且需符合监管合规。本文基于某核心交易平台采用国产数据库后的实践,回顾架构选型、数据模型设计、高可用容灾、性能优化及迁移上线的关键技术点。
1. 业务与技术挑战拆解
此类平台常见形态为'交易域在线处理 + 清结算批处理 + 对外渠道接入'。站在数据库一侧,关键动作有两个:把写热点和读热点分开,以及把强一致的边界收紧到最小闭环。
数据库在这里承担三类负载:
- OLTP 核心交易闭环:写入为主,延迟敏感。
- 对账与清算:读写混合,偏批处理与汇总计算。
- 查询与报表:读为主,跨度大、访问模式多样。
工程落地时,一般会把'核心交易库'当作强一致主库来运营,把查询与报表尽可能引到只读副本或分析系统上;对账清算这类波动明显、资源消耗大的任务,则用消息队列与批处理做削峰填谷,尽量别让主库背上不可控的大查询压力。
2. 总体架构(从数据库边界看)
渠道与终端通过接入网关/鉴权限流进入交易服务,再经过查询服务和消息队列,最终落盘至核心关系型数据库。只读副本用于分析/报表/数仓。
3. 数据模型:以'不可变流水'为中心
落到数据模型上,有三句话原则:流水尽量不可变、状态可以派生、对账必须可复算。这么做的直接收益是:并发场景下锁冲突更少、一致性风险更可控,后期审计与追溯也更从容。
3.1 流水表(交易事实表)建议
- 主键选取:首选全局唯一 ID,可采用时间/序列/节点关联的方法,这样能令写入更为分散,最好不要将瓶颈集中在单点序列之上。
- 分区策略:按照交易发生的时间执行范围分区,天或者月这样的粒度较为常见,这样做既能关注写入操作,又便于实施历史归档,当业务量极为庞大时,还会加上业务维度的拆分,线路或者渠道之类的。
- 索引策略:应环绕'对账及高频查询的最短路径'创建索引,不可因'可能会查'而盲目创建大量索引,这样做很可能事与愿违。
示例(仅演示结构与思路,字段需按实际口径调整):
CREATE TABLE txn_ledger (
txn_id VARCHAR(32) NOT NULL,
occur_time TIMESTAMP NOT NULL,
card_no VARCHAR(32) NOT NULL,
account_id VARCHAR(32) NOT NULL,
amount_cent BIGINT NOT NULL,
txn_type VARCHAR(16) NOT NULL,
channel_code VARCHAR(16) NOT NULL,
merchant_id VARCHAR(32) ,
trace_no () ,
status () ,
create_time ,
(txn_id)
);


