
1) 【一句话结论】银行核心系统灾备主要采用同城双活和异地灾备两种模式,同城双活通过实时数据同步实现业务连续,异地灾备通过异地数据中心容灾切换保障业务恢复,两者结合提升系统可靠性。
2) 【原理/概念讲解】老师口吻,解释关键概念:
“首先讲同城双活(Active-Active),简单说就是两个数据中心同时对外提供服务,数据通过实时同步技术(比如数据库双写、金融级分布式事务)保持一致,适用于对实时性要求高的核心业务(比如支付、存取款)。可以类比成‘两个人同时处理同一份文件’,实时同步修改,确保两个中心数据同步。
然后是异地灾备(Active-Passive),主数据中心运行生产业务,备数据中心作为备份,通过定时同步或实时同步(比如异步复制)保持数据一致性,当主中心故障时,备中心接管。比如‘主仓库出问题,备用仓库发货’,适用于对容灾距离和恢复时间要求高的场景(比如跨城市业务)。两者结合,同城双活保障实时性,异地灾备保障容灾能力。”
3) 【对比与适用场景】
| 模式 | 定义 | 关键特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 同城双活 | 两个数据中心同时对外提供服务,数据实时同步 | 双中心实时运行,无单点故障,数据一致性高 | 对实时性要求高的核心业务(如支付、存取款) | 需要高带宽网络,数据一致性保证复杂 |
| 异地灾备 | 主数据中心运行生产业务,备数据中心作为备份,故障时切换 | 主备分离,数据异步/定时同步,切换时可能数据延迟 | 对容灾距离和恢复时间要求高的场景(如跨城市、跨区域) | 切换时可能存在数据不一致,需业务容错 |
4) 【示例】
# 主中心应用
def process_transaction(transaction):
main_db.insert(transaction) # 写入主库
standby_db.insert(transaction) # 写入备库(通过数据库复制)
return "success"
# 备中心应用
def process_transaction(transaction):
transaction = main_db.select(transaction_id) # 从主库读取(实时同步)
process(transaction) # 处理业务
standby_db.insert(transaction) # 写入备库
return "success"
5) 【面试口播版答案】
“面试官您好,关于银行核心系统的灾备方案,主要分为同城双活和异地灾备两种模式。首先,同城双活是指两个数据中心同时对外提供服务,数据通过实时同步技术(比如数据库双写、分布式事务)保持一致,适用于对实时性要求高的核心业务,比如支付系统。而异地灾备则是主数据中心运行生产业务,备数据中心作为备份,故障时切换,适用于对容灾距离和恢复时间要求高的场景,比如跨城市业务。两者结合,同城双活保障实时性,异地灾备保障容灾能力。具体来说,同城双活的技术实现是通过数据库的实时同步(比如MySQL的主从复制),或者应用层的双写事务,确保两个中心的数据一致。切换流程方面,同城双活因为两个中心同时运行,所以切换时需要通过负载均衡器快速切换到备中心,比如当主中心故障时,负载均衡器将请求转发到备中心,业务不受影响。而异地灾备的切换流程是,主中心通过心跳检测发现故障,备中心启动接管,然后通过负载均衡器切换到备中心,可能存在数据延迟,但通过业务容错机制(比如事务回滚)保证数据一致性。总结来说,同城双活和异地灾备是银行核心系统灾备的核心方案,分别针对实时性和容灾需求,结合使用能提升系统可靠性。”
6) 【追问清单】
7) 【常见坑/雷区】