简介:本资源是一份面向金融IT从业者、银行系统架构师及金融科技学习者的专业级PPT课件,系统讲解银行核心业务系统的整体架构、功能模块与技术实践。内容覆盖存款、贷款、支付结算、外汇、资金、会计总账、银行卡、客户管理、风险管理(含巴塞尔II)等全业务域,并深入剖析eCAS系统发展历程、FIS等主流厂商技术对比、典型客户案例(如浦发银行、光大银行、河南农信等)及SOA架构下的高可用、可扩展、安全性设计原则。资源为单文件PPTX格式,共1个9.82MB演示文稿,结构清晰、图文并茂,含技术指标(如TPS>5000、响应<0.5秒)、部署版本对照表与模块实施清单,便于快速掌握行业标准实践。目前已有294人学习下载,适合用于内部培训、方案预研或高校金融科技课程教学参考。
1. 这不是PPT,而是一份2015年仍在真实投产的银行核心系统架构图谱
你打开的这份《银行核心业务系统介绍.pptx》,表面是2015年May制作的演示文稿,实则承载着中国银行业从“大集中”走向“参数化治理”的关键转折点。它不讲概念,只列模块——存款、贷款、外汇、支付、核算、客户、产品工厂、风险管理,全部以“可配置、可组合、可复用”为设计前提;它不谈技术栈,但每一页都在暗示:当时已落地的eCAS系统,正用SOA解耦业务逻辑与数据模型,用组件化封装“活期/定期/透支/理财”等负债形态,用参数体系替代硬编码实现利率市场化适配。这不是教学幻灯片,而是某家城商行上线前向监管报送的系统能力自证材料。适合两类人:一是正在参与核心系统选型或信创改造的架构师,需看清传统核心如何平衡稳定性与扩展性;二是刚接手老系统维护的开发工程师,要理解为什么一笔贷款展期要横跨资产模块、会计模块、风险模块三套校验逻辑。它不教你怎么写SQL,但告诉你为什么“客户统一视图”必须穿透17张主表+43张关系表才能拼出完整画像。
2. eCAS三层架构拆解:柜面前端、综合前置、核心后台的职责边界与数据流向
eCAS采用C/S/S(Client/Server/Server)分层架构,但其三层并非简单网络分层,而是业务语义隔离层。柜面前端负责交互态操作,综合前置承担渠道适配,核心后台专注交易原子性保障。这种划分直接决定了系统扩展路径和故障定位方式。
2.1 柜面前端:图形化界面背后的事务控制粒度
柜面前端本质是轻量级客户端,运行于Windows终端,通过CORBA或自研协议连接综合前置。其核心约束在于:所有柜面操作必须封装为原子交易码(如DEP001存入、LOA005展期),且每个交易码对应唯一后台服务接口。例如“个人活期开户”流程,在柜面前端表现为6步引导式表单,但实际触发的是ACCT_OPEN_REQ服务调用,携带结构化参数包:
{ "custId": "CUST20230001", "acctType": "01", // 01=活期, 02=定期 "currency": "CNY", "openBranch": "SH001", "initBalance": 100.00, "interestRate": "0.35", "productCode": "PROD_DEP_CURRENT_001" }提示:柜面前端不校验客户额度、不计算利息、不生成会计分录,仅做字段格式验证(如身份证号校验码、手机号正则)和基础权限拦截(如柜员无权操作跨机构账户)。所有业务规则判断均下沉至核心后台。
2.2 综合前置:多渠道接入的协议翻译中枢
综合前置是eCAS的“渠道网关”,需同时处理柜面、ATM、网银、手机银行、银联POS、财税库银等12类渠道请求。其核心能力是协议转换与路由分发:
| 渠道类型 | 接入协议 | 前置处理动作 | 路由目标 |
|---|---|---|---|
| 柜面 | CORBA IIOP | 解析交易码,补全机构/柜员上下文 | 核心后台 |
| ATM | ISO8583 | 拆包取卡号/金额,添加渠道标识CHNL=ATM | 核心后台 |
| 网银 | HTTP/JSON | 验签、会话校验、敏感字段脱敏 | 核心后台 |
| 银联POS | TCP长连接 | 报文分帧、TAC校验、流水号去重 | 核心后台 |
关键参数配置在channel_route.conf中:
# 示例:网银渠道路由规则 WEBBANK.route=core_backend:9001 WEBBANK.timeout=8000 WEBBANK.retry=2 WEBBANK.encrypt=true # 启用AES-256加密注意:综合前置不修改业务逻辑,但强制注入
channel_id、request_time、trace_id三字段,为后续全链路追踪提供基础。若某笔网银转账超时,需先查前置日志确认是否路由失败,而非直接排查核心后台。
2.3 核心后台:状态机驱动的交易执行引擎
核心后台采用“服务总线+状态机”双引擎设计。所有业务模块(存款、贷款、支付)均注册为独立服务,通过ServiceRegistry动态发现。每笔交易执行遵循严格状态流转:
INIT → VALIDATE → PROCESS → POST → COMPLETE ↓ ↓ (失败) (失败) ↓ ↓ ROLLBACK ← ERROR_HANDLING以“贷款展期”为例,其状态机定义在LOAN_EXTEND.sm中:
<state id="VALIDATE"> <transition event="validate_success" target="PROCESS"/> <transition event="cust_credit_fail" target="ERROR_HANDLING"/> <transition event="loan_status_invalid" target="ERROR_HANDLING"/> </state> <state id="PROCESS"> <on-entry> <action class="com.ecas.loan.UpdateLoanTermAction"/> <action class="com.ecas.risk.CheckLTVAction"/> <!-- 贷款价值比校验 --> </on-entry> <transition event="process_success" target="POST"/> </state>提示:核心后台拒绝任何SQL直连,所有数据访问必须通过
DataAccessObject接口,该接口自动注入审计字段(create_user,update_time,version_no)并触发变更通知。这意味着即使DBA直接执行UPDATE语句,也不会触发利息重算或风险敞口更新。
3. 客户统一视图实现机制:从17张主表到实时聚合的工程实践
“以客户为中心”在eCAS中不是口号,而是通过CustomerUnifiedView服务实现的物理聚合。该服务不依赖OLAP预计算,而是基于实时JOIN策略动态组装,其性能保障来自三重设计。
3.1 客户主数据模型:四维实体与关系表族
eCAS将客户信息解构为四个正交实体,各自独立存储与维护:
| 实体类型 | 主表名 | 关键字段 | 更新频率 | 业务约束 |
|---|---|---|---|---|
| 基础信息 | CUST_BASIC | cust_id,name,id_type,id_no | 低频(开户/证件变更) | id_no全局唯一索引 |
| 关系网络 | CUST_RELATION | rel_id,master_cust_id,slave_cust_id,rel_type | 中频(集团开户/担保签约) | (master,slave,type)联合唯一 |
| 账户绑定 | CUST_ACCT_LINK | link_id,cust_id,acct_no,acct_type | 高频(开户/销户) | acct_no外键引用ACCOUNT表 |
| 风险档案 | CUST_RISK_PROFILE | profile_id,cust_id,credit_level,blacklist_flag | 中频(评级调整/黑名单录入) | blacklist_flag带时间戳版本 |
注意:
CUST_RELATION表支持递归查询(如查某客户的所有控股子公司),但eCAS限制最大递归深度为5层,防止笛卡尔爆炸。实际生产中通过rel_depth字段缓存层级,避免实时计算。
3.2 实时聚合引擎:内存索引+物化视图混合策略
CustomerUnifiedView服务采用两级加速:
- 内存索引层:加载
CUST_BASIC和CUST_RISK_PROFILE至Redis Hash结构,key为cust:id:123456,field为name/credit_level等高频字段,TTL=30分钟; - 物化视图层:对
CUST_ACCT_LINK和CUST_RELATION建立MySQL物化视图mv_cust_summary,每日凌晨ETL刷新:
CREATE VIEW mv_cust_summary AS SELECT b.cust_id, b.name, b.id_no, COUNT(DISTINCT l.acct_no) as total_accounts, COUNT(DISTINCT r.slave_cust_id) as related_customers, MAX(r.rel_type) as top_relation_type, rp.credit_level, rp.blacklist_flag FROM CUST_BASIC b LEFT JOIN CUST_ACCT_LINK l ON b.cust_id = l.cust_id LEFT JOIN CUST_RELATION r ON b.cust_id = r.master_cust_id LEFT JOIN CUST_RISK_PROFILE rp ON b.cust_id = rp.cust_id GROUP BY b.cust_id, b.name, b.id_no, rp.credit_level, rp.blacklist_flag;3.3 查询API设计:按场景分级响应
CustomerUnifiedView提供三个等级的查询接口,强制区分使用场景:
| 接口路径 | 响应字段 | SLA | 典型用途 | 数据源 |
|---|---|---|---|---|
/api/v1/customer/{id}/basic | name,id_no,gender,birth_date | <200ms | 柜面身份核查 | Redis Hash |
/api/v1/customer/{id}/summary | 基础信息+账户数+关联客户数+信用等级 | <800ms | 客户经理展业 | MySQL物化视图 |
/api/v1/customer/{id}/full | 全量字段(含明细账户列表、关系树、风险事件) | <3s | 反洗钱尽职调查 | 实时JOIN+缓存穿透防护 |
提示:
/full接口启用熔断机制,当MySQL慢查询超过阈值时,自动降级返回summary结果,并记录fallback_reason=“db_latency_exceeded”。这避免了反洗钱查询拖垮整个客户中心服务。
4. 参数化治理体系:从利率计划到产品工厂的配置驱动实践
eCAS的“参数化”不是简单配置文件管理,而是构建了一套覆盖业务全生命周期的元数据驱动框架。其核心在于将业务规则抽象为可版本化、可灰度、可回滚的参数实体。
4.1 利率参数体系:三层嵌套与生效时间切片
利率管理采用产品维度→客户维度→渠道维度三级参数嵌套:
| 参数层级 | 配置表 | 关键字段 | 生效控制 |
|---|---|---|---|
| 产品层 | RATE_PRODUCT | prod_code,base_rate,rate_type | valid_from,valid_to |
| 客户层 | RATE_CUST_SEGMENT | cust_segment,prod_code,discount_rate | effective_date,expire_date |
| 渠道层 | RATE_CHANNEL | channel_id,prod_code,premium_rate | start_time,end_time |
实际计息时,系统按优先级叠加计算:
实际利率 = base_rate + (discount_rate if cust_segment matches) + (premium_rate if channel_id matches)所有参数变更均生成新版本记录,旧版本保留历史快照。例如2015年10月1日调整活期利率,RATE_PRODUCT新增版本v20151001,原v20150101仍用于历史账务追溯。
4.2 产品工厂:组件装配与生命周期管理
eCAS将“存款产品”拆解为12个可插拔组件,通过PRODUCT_ASSEMBLY表定义装配关系:
| 组件类型 | 示例组件 | 必选性 | 作用 |
|---|---|---|---|
| 计息规则 | INT_CALC_DAY_COUNT | 必选 | 定义30/360或ACT/365 |
| 支取规则 | WITHDRAWAL_POLICY | 必选 | 提前支取罚息算法 |
| 账户形态 | ACCT_STATUS_RULE | 可选 | 不动户/久悬户判定逻辑 |
| 风控策略 | RISK_CONTROL_RULE | 可选 | 大额支取短信强验证 |
产品创建流程:
- 在
PRODUCT_TEMPLATE中选择基础模板(如“单位活期”); - 从组件库勾选所需组件,配置参数(如
WITHDRAWAL_POLICY.rate=0.5%); - 系统自动生成产品代码
PROD_CORP_CURRENT_2015Q4并发布; - 柜面交易码
DEP001自动绑定该产品,无需代码变更。
提示:组件升级采用灰度策略。新版本组件先对
test_branch机构生效,监控7天无异常后,再通过PARAM_VERSION_SYNC任务批量推送至全行。这避免了“一个利率参数改错,全行存款计息错误”的灾难。
4.3 参数发布工作流:从测试环境到生产环境的四阶审批
参数变更走严格审批流,每阶需不同角色确认:
| 阶段 | 角色 | 动作 | 输出物 | 自动化程度 |
|---|---|---|---|---|
| 设计 | 产品经理 | 定义参数值、生效时间、影响范围 | PARAM_CHANGE_REQUEST | 手动填写 |
| 测试 | 测试工程师 | 在UAT环境验证参数效果 | TEST_REPORT | 自动执行回归脚本 |
| 审批 | 风控总监 | 审核业务影响与合规性 | APPROVAL_RECORD | 电子签章 |
| 发布 | 运维工程师 | 执行param-deploy --env=PROD --version=v20151001 | DEPLOY_LOG | 自动化脚本 |
发布命令实际执行:
# 1. 校验参数完整性 param-validator --config ./rate_params_v20151001.json # 2. 生成数据库变更脚本 param-sql-gen --input ./rate_params_v20151001.json --output ./rate_update.sql # 3. 在生产库执行(带事务回滚保护) mysql -h core-db-prod -u deployer -p < ./rate_update.sql注意:所有参数发布操作留痕至
PARAM_AUDIT_LOG表,包含操作人、IP、SQL指纹、执行耗时。某次因运维误操作导致利率参数错发,正是通过该日志5分钟内定位并回滚。
5. 风险管理模块集成:新巴塞尔协议II落地中的数据血缘追踪
eCAS的风险管理模块并非独立系统,而是深度嵌入各业务流程的“风控探针”。其价值体现在能回答:“这笔贷款的信用风险敞口,由哪些原始数据字段逐层计算而来?”
5.1 风险指标计算链:从交易字段到监管报表的映射
以“单一客户贷款集中度”为例,其计算公式为:
集中度 = Σ(该客户所有贷款余额) / 银行一级资本净额eCAS通过RISK_DATA_LINEAGE表记录完整血缘:
| 字段路径 | 数据来源 | 计算逻辑 | 更新触发 |
|---|---|---|---|
loan_balance | LOAN_ACCOUNT.balance | 实时更新 | 每笔还款/放款后 |
cust_total_loan | RISK_AGGREGATE.cust_loan_sum | 按cust_id聚合 | loan_balance变更时异步触发 |
bank_capital | CAPITAL_REPORT.net_capital | 来自财务总账模块 | 每日日终批处理 |
concentration_ratio | RISK_METRIC.concentration | cust_total_loan / bank_capital | 每小时调度计算 |
关键设计:所有中间结果表(如RISK_AGGREGATE)均带data_version字段,与源表LOAN_ACCOUNT.version_no保持一致。当发现集中度异常时,可精确回溯到具体哪笔贷款余额更新导致了指标跃升。
5.2 新巴塞尔II合规检查:自动化校验清单
eCAS内置27项巴塞尔II检查点,每日日终自动执行:
| 检查项 | SQL片段 | 失败处理 |
|---|---|---|
| 资本充足率≥8% | SELECT net_capital / risk_weighted_assets FROM capital_report | 发送告警至risk@bank.com |
| 单一客户风险暴露≤15% | SELECT MAX(cust_loan_sum)/net_capital FROM risk_aggregate, capital_report | 冻结该客户新增授信申请 |
| 流动性覆盖率≥100% | SELECT hqla / net_cash_outflow FROM liquidity_report | 启动流动性应急预案流程 |
这些检查由risk-compliance-job定时任务驱动,其配置存储在ZooKeeper:
{ "job_id": "basel2_daily_check", "schedule": "0 0 2 * * ?", "timeout": 300000, "retry": 3, "alert_channels": ["email", "sms"] }5.3 风险数据质量看板:字段级健康度评分
eCAS为每个风险相关字段定义质量规则,并实时计算健康度:
| 字段名 | 规则类型 | 健康度公式 | 当前得分 |
|---|---|---|---|
LOAN_ACCOUNT.loan_term | 非空率 | COUNT(term IS NOT NULL)/COUNT(*) | 99.98% |
CUST_RISK_PROFILE.credit_level | 合法值率 | COUNT(level IN ('A','B','C','D'))/COUNT(*) | 92.3% |
RISK_AGGREGATE.cust_loan_sum | 时效性 | NOW() - MAX(update_time) < INTERVAL 1 HOUR | 100% |
看板数据来自DATA_QUALITY_MONITOR服务,其采集逻辑:
# 伪代码:字段健康度计算 def calculate_field_health(table, column): total = db.query(f"SELECT COUNT(*) FROM {table}") valid = db.query(f"SELECT COUNT(*) FROM {table} WHERE {column} {rule_condition}") return round(valid/total*100, 2)提示:当
credit_level健康度低于95%时,系统自动触发CUST_RISK_PROFILE表的数据清洗任务,调用risk-data-cleansing微服务修复异常值。这确保了监管报送数据的可信度。
本文还有配套的精品资源,点击获取