跳至主要內容
分布式事务实战:Saga、TCC、AT 模式对比与选型

前言

单体应用时代,@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());
        // 要么都成功,要么都失败
    }
}

郑天祺大约 10 分钟分布式分布式事务SagaTCCAT模式Seata
系统设计实战:担保业务核心系统架构设计

前言

担保业务系统是典型的金融核心系统,对数据一致性、高可用、风控合规有极高要求。本文将分享一套经过实践验证的担保核心系统架构方案,从业务流程到技术选型,帮助你理解"金融级"系统是如何设计的。


第一部分:担保业务核心流程

1.1 业务流程全景

担保业务全生命周期:

申请阶段          审批阶段          签约阶段          保后管理
  │                │                │                │
  ▼                ▼                ▼                ▼
┌──────┐  ┌────────────┐  ┌────────────┐  ┌─────────────┐
│客户  │  │风控审核     │  │电子签约     │  │还款跟踪      │
│提交  │→│·反欺诈检查  │→│·合同生成   │→│·还款提醒    │
│担保  │  │·信用评估    │  │·客户签署   │  │·逾期监控    │
│申请  │  │·额度审核    │  │·担保生效   │  │·代偿处置    │
└──────┘  │·人工复核    │  └────────────┘  │·追偿管理    │
          └────────────┘                   └─────────────┘

放款环节:
┌──────┐    ┌──────────┐    ┌─────────┐
│银行  │←──→│ 担保公司  │──→│ 客户    │
│放款  │    │ 收取保费  │    │ 获得贷款│
└──────┘    └──────────┘    └─────────┘

郑天祺大约 13 分钟架构设计架构设计担保业务微服务高可用分布式事务