3. 核心银行系统架构

要谈多活容灾与故障切换,必须先看清被保护的对象本身。核心银行系统并非一个单体应用,而是由渠道接入、联机交易、批量处理、账务核心、总账、客户信息、产品工厂、参数中心、数据服务等多层组件构成的复合体。它的架构决定了容灾的粒度:哪些单元可以独立切换,哪些必须整体迁移,哪些只能做数据级保护。理解这一层,后续的双活流量调度、单元化路由、数据库主备切换才有落脚点。

一、典型核心银行系统的组成分层

从纵向看,核心银行系统通常划分为五层。最上层是渠道接入层,包括柜面、手机银行、网上银行、ATM、开放银行API、银联/网联前置等,负责协议转换、报文校验与限流。第二层是集成与路由层,由ESB或API网关承担服务编排、渠道路由、灰度分流。第三层是业务服务层,承载存款、贷款、支付、结算、卡业务等联机交易逻辑。第四层是账务核心层,负责记账、余额更新、利息计提、总分核对,是数据一致性的关键。第五层是数据与基础设施层,包括核心数据库、批量调度、消息中间件、缓存、文件传输与数据仓库。

这种分层不是简单的技术堆叠,而是故障隔离的设计基础。渠道层可多活部署,业务服务层可按客户维度单元化,账务核心层往往受限于数据库一致性而采用主备或一主多读,数据层则决定RPO与RTO的物理下限。

核心银行系统分层架构与容灾粒度 渠道接入层 柜面 · 手机银行 · 网银 · ATM · 开放API · 银联/网联前置 多活部署 集成与路由层 ESB · API网关 · 服务编排 · 渠道路由 · 灰度分流 双活路由 业务服务层 存款 · 贷款 · 支付 · 结算 · 卡业务 · 客户信息 · 产品工厂 单元化 账务核心层 记账 · 余额更新 · 利息计提 · 总分核对 · 总账 主备/一主多读 数据与基础设施层 核心数据库 · 批量调度 · 消息中间件 · 缓存 · 文件传输 · 数仓 RPO/RTO决定 容灾设计原则: 上层可多活、中层可单元化、底层受数据库一致性约束 → 切换粒度自顶向下逐层收敛

二、联机交易链路与关键路径

一笔典型的转账交易,从渠道发起至返回结果,通常经过以下链路:渠道前置接收报文并完成格式校验,API网关进行鉴权与路由,业务服务层调用客户信息与账户服务校验状态,账务核心执行借贷记账并更新余额,同时写入交易流水,最后通过消息中间件异步通知渠道与外围系统。这条链路中,账务核心的数据库写入是强一致点,也是故障切换时最敏感的环节。

在双活架构下,交易链路被拆分为接入段、路由段、执行段与数据段。接入段可跨站点负载均衡,路由段依据客户号或账号进行单元化寻址,执行段在本地单元内闭环,数据段则通过数据库复制或分布式事务保证一致性。切换时,接入段与路由段可秒级调整,执行段需等待数据段确认,因此RTO往往由数据层决定。

关键路径识别方法:沿交易链路逐跳标注同步调用与异步调用,同步调用构成RTO关键路径,异步调用影响最终一致性窗口。核心银行中,账务记账、余额更新、流水写入通常为同步强一致,通知、积分、报表为异步最终一致。

三、数据库与中间件架构

核心银行数据库多采用集中式关系型数据库,如DB2、Oracle或国产分布式数据库。典型部署为“一主一备”或“一主多备”,通过日志复制实现数据同步。同城双活场景下,常采用数据库复制技术将主库日志实时传输至同城备库,备库可读或热备。异地灾备则通过异步复制或存储级复制实现,RPO通常在秒级至分钟级。

中间件层面,消息中间件承担交易异步解耦与最终一致性保障,常见有IBM MQ、Kafka、RocketMQ等。缓存中间件用于热点账户与参数缓存,需考虑双活下的缓存一致性。批量调度中间件负责日终批处理,其切换需与数据库切换协同,避免批量任务重复执行或漏执行。

组件 典型产品 容灾角色 切换关注点
核心数据库 DB2 / Oracle / 分布式数据库 主备复制、同城双活 RPO、脑裂、序列号冲突
消息中间件 IBM MQ / Kafka / RocketMQ 异步解耦、最终一致 消息重复、顺序性、积压
缓存 Redis / 分布式缓存 热点加速、参数缓存 双活一致性、失效策略
批量调度 Control-M / 自研调度 日终批处理 重复执行、断点续跑
文件传输 SFTP / 文件网关 对账文件、报表分发 文件完整性、去重

四、关键业务模块与切换影响

核心银行的关键业务模块包括:客户信息模块(CIF)、存款模块、贷款模块、支付结算模块、卡模块、总账模块、利息模块、参数模块。各模块对容灾的敏感度不同。客户信息与参数模块读多写少,适合多活只读加主写;存款与贷款模块涉及余额与合同,强一致要求高;支付结算模块涉及跨行清算,需与外部网络协同;总账模块日终批量依赖强,切换窗口需避开批量时段。

常见误区:将“应用双活”等同于“业务双活”。若数据库仍为主备,应用双活仅能实现读流量分担,写交易在切换时仍会中断。另一个误区是忽略批量窗口,在日终批处理期间执行切换,导致总分不平或重复入账。

五、场景复盘:某行同城双活切换中的链路断点

某银行在演练中将渠道层与业务服务层切换至同城双活中心,但账务核心数据库仍指向原主库。切换后,查询类交易正常,转账类交易在记账环节超时。排查发现,业务服务层已切换,但数据库连接池仍配置原主库地址,且DNS缓存未刷新。最终通过统一配置中心推送新数据库地址并刷新连接池解决。该案例说明:切换必须覆盖全链路配置,任何一跳的地址、证书、序列号未同步,都会成为断点。

# 切换检查清单示例
1. 渠道接入VIP是否已漂移
2. API网关路由规则是否指向新单元
3. 业务服务数据库连接串是否更新
4. 消息中间件队列是否已切换或重连
5. 缓存节点是否已加入新集群
6. 批量调度是否已暂停并确认断点
7. 对账文件传输目录是否可写
8. 监控告警是否已切换至新中心

综上,核心银行系统架构的容灾设计,本质是在分层结构中寻找可切换边界,在交易链路中识别强一致断点,在数据库与中间件中确认复制状态,在业务模块中评估切换影响。只有把架构看清,后续的多活流量调度、单元化路由与故障切换演练才能有的放矢。