前言
单体应用时代,@Transactional 一行注解就能搞定事务。但拆成微服务后,一个业务可能横跨多个数据库、多个服务,分布式事务就成了绕不过去的坎。
网上讲分布式事务的文章铺天盖地,但大多数只讲理论。本文将结合担保业务系统的实际场景,深度对比 Saga、TCC、AT 三种主流分布式事务模式,给出选型决策树和落地方案。
一、为什么分布式事务这么难?
1.1 单机事务的局限性
在单体应用中,事务管理依赖数据库的 ACID 特性:
@Service
public class CreditService {
@Autowired
private CustomerMapper customerMapper;
@Autowired
private ContractMapper contractMapper;
@Transactional
public void applyCredit(CreditApplyRequest request) {
customerMapper.insert(request.getCustomer());
contractMapper.insert(request.getContract());
// 要么都成功,要么都失败
}
}