先看一张图,一个电商平台的架构图。
对于用户来说的一个创建订单的过程,背后很可能跨越了多个应用服务。涉及诸如:订单、库存、积分、优惠券等多个微服务模块,而每个模块的数据库可能存在不同节点上,但是其中的任何一个环节都有可能程序运行错误,导致数据的不一致。
例如这个支付操作里涉及到的多个数据库。
单一数据库可以简单的使用事务来保证一致性,但是分布式的问题则需要分布式的事务来控制数据的一致性。
分布式事务本质也是一个事务,则需要满足ACID特性。
DB在prepare返回OK后,如果没有收到来自事务管理模块的commit/rollback请求则会一直保留该分支事务的数据。
借助消息队列,在处理业务逻辑的地方,发送消息,业务逻辑处理成功后,提交消息,确保消息是发送成功的。成功后的消息去通知下一步操作的B系统服务,直到全部执行完毕。