分布式事务

随着我们系统变大,我们进行了微服务架构的改造,因为每个微服务独占了一个数据库实例,从 user_id = 1 发起的转帐动作,跨越了两个微服务:pay 和 balance 服务。
我们需要保证,跨多个服务的步骤数据一致性:
微服务 pay 的支付宝表扣除1万;
微服务 balance 的余额宝表增加1万
每个系统都对应一个独立的数据源,且可能位于不同机房,同时调用多个系统的服务很难保证同时成功,这就是跨服务分布式事务问题。
我们系统应该能保证每个服务自身的 ACID,基于这个假设,我们事务消息解决分布式事务问题。

 

如何可靠的保存消息凭证?
要解决消息可靠存储,我们实际上需要解决的问题是,本地的 mysql 存储和 message 存储的一致性问题。
Transactional outbox
Polling publisher
Transaction log tailing
2PC Message Queue
事务消息一旦被可靠的持久化,我们整个分布式事务,变为了最终一致性,消息的消费才能保障最终业务数据的完整性,所以我们要尽最大努力,把消息送达到下游的业务消费方,称为:Best Effort。只有消息被消费,整个交易才能算是完整完结。

 

原文地址:https://www.cnblogs.com/MasterLin/p/15343328.html