.NET Framework支持分布式事务(Distributed Transactions),但是很遗憾(尴尬)的是.NET Core(包括.NET 5和.NET 6)都还不支持分布式事务。
这个问题从.NET Core发布后就一直存在,可见在跨平台的分布式事务支持是一件非常复杂的事情。参见:
现在有一个好消息是在未来的.NET 7版本中,已经计划优先在Windows平台上支持分布式事务,然后再在跨平台上支持分布式事务。
参见:
在微服务中,可以通过良好的微服务划分和事务边界(transaction boundary)来避免处理跨微服务的分布式事务的问题。
如果不得不处理,也可以采用Saga模式。
事实上,2PC (two-phase commit) 并不是微服务事务问题的好方案。
在Data Consistency in Microservices Architecture (Grygoriy Gonchar) 中提出了按以下优先级处理分布式事务问题:
Consitentency 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. Orcestration
b. Choreography