
1) 【一句话结论】:针对跨境转账等分布式事务,采用两阶段提交(2PC)作为核心流程保证强一致性,结合Saga模式作为容错机制处理网络分区和故障,通过协调者集群、超时阈值、幂等检查等工程手段,确保原子性和一致性。
2) 【原理/概念讲解】:分布式事务需满足ACID四性。
3) 【对比与适用场景】:
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 两阶段提交(2PC) | 集中式协调,强一致性 | 强一致性,协调者故障导致事务阻塞,网络分区可能失败 | 系统强耦合、低延迟、强一致性要求高的核心银行系统(如核心账户扣款) | 协调者故障时事务阻塞,网络分区导致部分参与者超时,需协调者集群优化 |
| Saga模式 | 分布式事务,最终一致性 | 每个步骤独立,补偿处理,异步消息 | 系统解耦、高可用、网络分区频繁的微服务架构(如跨境转账各系统解耦) | 补偿事务需幂等,消息丢失可能导致不一致,需消息队列持久化 |
4) 【示例】:
startTransaction() {
sendPrepare("风控系统", "检查黑名单");
sendPrepare("清算系统", "准备结算");
if (allParticipantsReady()) {
sendCommit("风控系统");
sendCommit("清算系统");
} else {
sendRollback("风控系统");
sendRollback("清算系统");
}
}
handlePrepare() {
checkBlacklist();
if (isBlacklisted) {
return "准备失败";
} else {
return "准备成功";
}
}
handlePrepare() {
prepareSettlement();
return "准备成功";
}
// 补偿事务
if (compensationNotDone()) {
addMoneyToSourceAccount();
cancelSettlement();
}
5) 【面试口播版答案】:面试官您好,针对跨境转账的分布式事务,我会采用两阶段提交(2PC)结合Saga模式。核心系统作为协调者,风控和清算系统作为参与者。正常流程中,协调者发起事务,通知参与者准备,参与者执行本地操作并回复,协调者收到所有成功后提交,否则回滚,保证原子性。对于网络分区,协调者故障时参与者会超时回滚,协调者恢复后重新发起事务。Saga模式作为容错,每个步骤失败后补偿,比如风控失败则核心系统加回资金,清算系统撤销结算,补偿事务通过检查数据库状态(如补偿操作是否已执行)保证幂等,确保系统高可用。
6) 【追问清单】:
7) 【常见坑/雷区】: