MCPcopy Index your code
hub / github.com/changmingxie/tcc-transaction

github.com/changmingxie/tcc-transaction @2.1.0 sqlite

repository ↗ · DeepWiki ↗ · release 2.1.0 ↗
3,694 symbols 10,465 edges 464 files 460 documented · 12%
README

TCC-TRANSACTION

TCC-TRANSACTION是什么

TCC-TRANSACTION是一款开源的微服务架构下的TCC型分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。

  • Try: 尝试执行业务,完成所有业务检查(一致性),预留必须业务资源(准隔离性)
  • Confirm: 确认执行业务,不作任何业务检查,只使用Try阶段预留的业务资源,满足幂等性
  • Cancel: 取消执行业务,释放Try阶段预留的业务资源,满足幂等性

微服务架构中分布式事务问题

随着传统的单体架的构微服务化,原本单体架构中不同模块,被拆分为若干个功能简单、松耦合的服务。
系统微服务化后,内部可能需要调用多个服务并操作多个数据库实现,服务调用的分布式事务问题变的非常突出。

比如支付退款场景需要从各分账方退回平台收益户(退分账),再退还给付款方。其中退分账阶段, 涉及从多个分账方(商家1收益户,商家2收益户,商家3收益户,平台手续费账户)扣款,这些账户分布在不同数据库, 比如商家3收益户扣款失败,其他成功扣款需要回滚,这里需要分布式事务保证一致性。 支付退款流程

如何解决

如何解决上面退分账中分布式事务问题呢? 选择使用tcc-transaction框架,执行流程如下:

  • Try:
    商家1收益户->冻结分账金额
    商家2收益户->冻结分账金额
    商家3收益户->冻结分账金额
    平台手续费->冻结手续费
  • Try成功 => Confirm:
    商家1收益户->扣除分账金额
    商家2收益户->扣除分账金额
    商家3收益户->扣除分账金额
    平台手续费->扣除手续费
    平台收益户-> 增加金额(总分账金额+手续费)
  • Try失败 => Cancel:
    商家1收益户->解冻分账金额
    商家2收益户->解冻分账金额
    商家3收益户->解冻分账金额
    平台手续费->解冻手续费

工作原理

TCC原理

第一阶段:主业务服务分别调用所有从业务的 try 操作,并在活动管理器中登记所有从业务服务。当所有从业务服务的 try 操作都调用成功或者某个从业务服务的 try 操作失败,进入第二阶段。
第二阶段:活动管理器根据第一阶段的执行结果来执行 confirm 或 cancel 操作。
如果第一阶段所有 try 操作都成功,则活动管理器调用所有从业务活动的 confirm操作。否则调用所有从业务服务的 cancel 操作。
需要注意的是第二阶段 confirm 或 cancel 操作本身也是满足最终一致性的过程,在调用 confirm 或 cancel 的时候也可能因为某种原因(比如网络)导致调用失败,所以需要活动管理支持重试的能力,同时这也就要求 confirm 和 cancel 操作具有幂等性。

快速开始

官网
快速开始
最新可用版本2.x

常见问题

常见问题

讨论群

钉钉扫码入群

钉钉扫码入群

Extension points exported contracts — how you extend this code

ObjectSerializer (Interface)
Created by changming.xie on 7/22/16. [8 implementers]
tcc-transaction-core/src/main/java/org/mengyun/tcctransaction/serializer/ObjectSerializer.java
CapitalTradeOrderService (Interface)
Created by changming.xie on 4/1/16. [21 implementers]
tcc-transaction-tutorial-sample/tcc-transaction-dubbo-sample/tcc-transaction-dubbo-capital-api/src/main/java/org/mengyun/tcctransaction/sample/dubbo/capital/api/CapitalTradeOrderService.java
RedPacketFeignClient (Interface)
@author Nervose.Wu @date 2022/6/9 11:40 [6 implementers]
tcc-transaction-tutorial-sample/tcc-transaction-http-sample/tcc-transaction-http-order/src/main/java/org/mengyun/tcctransaction/sample/feign/order/feign/RedPacketFeignClient.java
AccountService (Interface)
Created by changmingxie on 10/25/15. [5 implementers]
tcc-transaction-unit-test/src/main/java/org/mengyun/tcctransaction/unittest/service/AccountService.java
CapitalAccountRequestOrBuilder (Interface)
(no doc) [7 implementers]
tcc-transaction-tutorial-sample/tcc-transaction-grpc-sample/tcc-transaction-grpc-capital-api/src/main/java/org/mengyun/tcctransaction/sample/grpc/capital/api/CapitalServiceOuterClass.java
ShopDao (Interface)
Created by changming.xie on 4/1/16. [3 implementers]
tcc-transaction-tutorial-sample/tcc-transaction-sample-domain/tcc-transaction-sample-order/src/main/java/org/mengyun/tcctransaction/sample/order/infrastructure/dao/ShopDao.java
PayAccountService (Interface)
(no doc) [5 implementers]
tcc-transaction-tutorial-sample/tcc-transaction-multiple-tier-sample/tcc-transaction-multiple-tier-pay-account-api/src/main/java/org/tcctransaction/sample/multiple/tier/pay/account/api/PayAccountService.java
TccServerFeignClient (Interface)
@Author huabao.fang @Date 2022/5/30 10:10
tcc-transaction-dashboard/src/main/java/org/mengyun/tcctransaction/dashboard/service/impl/tccserver/TccServerFeignClient.java

Core symbols most depended-on inside this repo

n
called by 1451
tcc-transaction-dashboard/src/main/resources/templates/static/js/2.e83ac6a1.chunk.js
a
called by 278
tcc-transaction-dashboard/src/main/resources/templates/static/js/2.e83ac6a1.chunk.js
get
called by 276
tcc-transaction-core/src/main/java/org/mengyun/tcctransaction/context/TransactionContextEditor.java
call
called by 269
tcc-transaction-core/src/main/java/org/mengyun/tcctransaction/recovery/TransactionStoreRecovery.java
r
called by 227
tcc-transaction-dashboard/src/main/resources/templates/static/js/2.e83ac6a1.chunk.js
i
called by 215
tcc-transaction-dashboard/src/main/resources/templates/static/js/2.e83ac6a1.chunk.js
o
called by 158
tcc-transaction-dashboard/src/main/resources/templates/static/js/2.e83ac6a1.chunk.js
apply
called by 156
tcc-transaction-http/src/main/java/org/mengyun/tcctransaction/http/feign/interceptor/FeignInterceptor.java

Shape

Method 2,737
Function 481
Class 379
Interface 78
Enum 19

Languages

Java87%
TypeScript13%

Modules by API surface

tcc-transaction-dashboard/src/main/resources/templates/static/js/2.e83ac6a1.chunk.js363 symbols
tcc-transaction-tutorial-sample/tcc-transaction-grpc-sample/tcc-transaction-grpc-redpacket-api/src/main/java/org/mengyun/tcctransaction/sample/grpc/redpacket/api/RedPacketServiceOuterClass.java229 symbols
tcc-transaction-tutorial-sample/tcc-transaction-grpc-sample/tcc-transaction-grpc-capital-api/src/main/java/org/mengyun/tcctransaction/sample/grpc/capital/api/CapitalServiceOuterClass.java229 symbols
tcc-transaction-core/src/main/java/org/mengyun/tcctransaction/AbstractConfig.java59 symbols
tcc-transaction-core/src/main/java/org/mengyun/tcctransaction/properties/RecoveryProperties.java47 symbols
tcc-transaction-tutorial-sample/tcc-transaction-grpc-sample/tcc-transaction-grpc-redpacket-api/src/main/java/org/mengyun/tcctransaction/sample/grpc/redpacket/api/RedPacketServiceGrpc.java39 symbols
tcc-transaction-tutorial-sample/tcc-transaction-grpc-sample/tcc-transaction-grpc-capital-api/src/main/java/org/mengyun/tcctransaction/sample/grpc/capital/api/CapitalServiceGrpc.java39 symbols
tcc-transaction-core/src/main/java/org/mengyun/tcctransaction/properties/store/StoreProperties.java39 symbols
tcc-transaction-core/src/main/java/org/mengyun/tcctransaction/storage/JdbcTransactionStorage.java37 symbols
tcc-transaction-core/src/main/java/org/mengyun/tcctransaction/transaction/Transaction.java29 symbols
tcc-transaction-core/src/main/java/org/mengyun/tcctransaction/storage/domain/DomainStore.java28 symbols
tcc-transaction-core/src/main/java/org/mengyun/tcctransaction/storage/TransactionStore.java28 symbols

Dependencies from manifests, versioned

com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery2.2.5.RELEASE · 1×
com.alibaba.nacos:nacos-client1.4.1 · 1×
com.alibaba:druid1.1.20 · 1×
com.esotericsoftware:kryo5.2.0 · 1×
com.h2database:h21.4.197 · 1×
com.lmax:disruptor3.4.2 · 1×
com.mchange:c3p00.9.5.4 · 1×
com.netflix.hystrix:hystrix-core1.5.18 · 1×

Datastores touched

(mysql)Database · 1 repos
TCC_SERVERDatabase · 1 repos
TCCDatabase · 1 repos
TCC_SERVER2Database · 1 repos

For agents

$ claude mcp add tcc-transaction \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact