.NET Core 不支持分布式事务
事实问题计划影响扩展阅读 .NET Core 不支持分布式事务 事实
.NET framework支持分布式事务(Distributed Transactions),但是很遗憾(尴尬)的是.NET Core(包括.NET 5和.NET 6)都还不支持分布式事务。
问题这个问题从.NET Core发布后就一直存在,可见在跨平台的分布式事务支持是一件非常复杂的事情。参见:
https://github.com/dotnet/runtime/issues/19318https://github.com/dotnet/runtime/issues/715 计划
现在有一个好消息是在未来的.NET 7版本中,已经计划优先在Windows平台上支持分布式事务,然后再在跨平台上支持分布式事务。
参见:
https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-7.0/plan#distributed-transactions 影响
在微服务中,可以通过良好的微服务划分和事务边界(transaction boundary)来避免处理跨微服务的分布式事务的问题。
如果不得不处理,也可以采用Saga模式。
事实上,2PC (two-phase commit) 并不是微服务事务问题的好方案。
扩展阅读在Data Consistency in Microservices Architecture (Grygoriy Gonchar) 中提出了按以下优先级处理分布式事务问题:
Consistency by design
a、Accept inconsistency when possible
b、Make operations reversible and idempotent
Change single datasource at the time
a、Change-first (Change Data Capture, CDC)
b、Event-first (Event-drive Architecture, EDA or CQRS)
Sagas - compensate & reconcile
a、Orchestration
b、Choreography