4. 直连架构总体设计

Host-to-Host(H2H)银行直连架构不是简单的“接口对接”,而是一套需要长期演进的企业级集成基础设施。它同时承载资金指令、对账文件、状态回执与安全凭证,任何一处设计缺陷都可能在日终批量时被放大为资金风险。本节围绕分层架构、模块划分、高可用、安全边界、可扩展性与技术选型原则六个维度,给出可落地的总体设计方法。

一、核心原理:五层分离与职责边界

直连架构的第一原则是“分层解耦”。将系统按职责切分为五层,每层只依赖下一层的抽象接口,避免业务逻辑与通信协议、报文格式相互渗透。

  • 接入层:负责与企业客户系统、银行前置的物理与逻辑连接,处理连接池、限流、IP 白名单与 TLS 卸载。
  • 协议适配层:将 SFTP、MQ、HTTPS、WebService 等异构通道统一为内部消息模型,屏蔽协议差异。
  • 报文处理层:完成报文解析、字段校验、格式转换(如 XML↔JSON↔定长)、签名验签与加解密。
  • 业务编排层:实现指令路由、幂等控制、状态机流转、重试与补偿,是直连架构的“大脑”。
  • 数据与监控层:持久化交易流水、文件索引与审计日志,并提供指标采集与告警。

分层的价值在于变更隔离:当银行将通道从 SFTP 升级为 API 时,只需替换协议适配层实现,业务编排与报文处理保持稳定。

H2H 直连架构五层模型与安全边界 接入层 连接池 · 限流 · IP白名单 · TLS卸载 协议适配层 SFTP · MQ · HTTPS · WebService 统一消息模型 报文处理层 解析 · 校验 · 格式转换 · 签名验签 · 加解密 业务编排层 路由 · 幂等 · 状态机 · 重试补偿 数据与监控层 流水 · 文件索引 · 审计日志 · 指标告警 安全边界(DMZ)

二、模块划分与高可用设计

在分层基础上,按“可独立部署、可独立扩容”原则划分模块。典型模块清单如下:

模块核心职责高可用策略
连接网关通道接入与协议转换多实例 + 负载均衡,会话粘性
报文引擎解析、校验、转换无状态水平扩展
编排服务路由、幂等、状态机集群选主 + 分布式锁
文件服务对账文件收发与索引共享存储 + 双活节点
调度中心日终批量与重试触发Quartz 集群或分布式调度

高可用设计需覆盖三个层面:无状态服务通过多副本与健康检查实现故障秒级切换;有状态组件(数据库、MQ)采用主备或集群模式,并明确 RPO/RTO 目标;通道层对同一银行配置主备两条链路,主链路连续失败 N 次后自动降级切换。需注意,重试必须与幂等键配合,否则会造成重复扣款。

常见误区:只做应用层双活,却忽略文件存储单点。日终对账文件一旦丢失,恢复成本远高于交易重试。

三、安全边界与可扩展性

安全边界应遵循“最小暴露面”原则。接入层部署于 DMZ,仅开放必要端口;报文处理与业务编排位于内网,禁止直接访问外网。关键控制点包括:双向 TLS 认证、报文级签名验签、敏感字段加密存储、密钥定期轮换,以及全链路审计日志。任何跨边界的调用都必须经过网关,禁止内网服务直连银行前置。

可扩展性体现在两个方向:横向扩展要求服务无状态、配置外置、会话不落地;纵向扩展要求新增银行或新报文类型时,只需增加适配器与配置,而非修改核心编排逻辑。推荐采用插件化设计,将银行差异封装为独立适配包。

# 新增一家银行直连的配置示例(适配器插件)
bank:
  code: ICBC
  channel: SFTP
  host: 10.20.30.40
  port: 22
  auth: key
  keyPath: /etc/h2h/keys/icbc_id_rsa
  inboundDir: /recv/icbc
  outboundDir: /send/icbc
  retry: { max: 3, interval: 60s }
  idempotentKey: msgId + bankCode

四、技术选型原则与复盘

技术选型应服务于稳定性与可维护性,而非追求新技术。建议遵循以下原则:

  1. 成熟优先:通道与报文组件优先选择经过生产验证的框架,降低未知风险。
  2. 协议中立:内部消息模型不绑定具体银行协议,便于替换。
  3. 可观测性内建:选型时必须评估日志、指标、链路追踪的接入成本。
  4. 运维友好:配置热更新、灰度发布、一键回滚应作为硬性要求。
复盘经验:某项目初期将编排逻辑写入网关,导致新增银行时需重启全部通道。重构为独立编排服务后,新银行上线时间从 3 天缩短至 4 小时。

总体设计完成后,应输出架构决策记录(ADR),明确每层边界、模块接口、高可用指标与安全基线,作为后续开发与验收的依据。只有边界清晰、职责单一,直连架构才能在多银行、多协议、多批次的长期演进中保持稳定。