微服务架构及分布式事务解决方案微服务架构及分布式事务解决方案
分布式事务
分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事
务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务,将一个大的业务进行拆分,整
个大的业务流程,转化成若干个小的业务流程,然后通过设计补偿流程从而考虑最终一致性。
What’s 事务
事务(Transaction)及其ACID属性
事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性:
原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。
一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的
修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。
隔离性(Isoation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务
处理过程中的中间状态对外部是不可见的,反之亦然。
持久性(Durabe):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。
典型场景:银行转账业务
例如:李雷账户中有500块钱,韩梅梅账户有200块钱,李雷要从自己的账户中转100块钱给韩梅梅,转账(事务)成功执行
完成后应该是李雷账户减100变为400,韩梅梅账户加100变为300,不能出现其他情况,即在事务开始和结束时数据都必须保
持一致状态(一致性),事务结束时所有的数据及结构都必须是正确的。并且同样的转账操作(同一流水,即一次转账操作)
无论执行多少次结果都相同(幂等性)。
电商场景:流量充值业务
再说我们做的一个项目:中国移动-流量充值能力中心,核心业务流程为:
1.用户进入流量充值商品购买页面,选择流量商品;
2.购买流量充值商品,有库存限制则判断库存,生成流量购买订单;
3.选择对应的支付方式(和包、银联、支付宝、微信)进行支付操作;
4.支付成功后,近实时流量到账即可使用流量商品;
此业务流程看似不是很复杂对吧,不涉及到类似电商业务的实物购买,但是我认为其中的区别并不是很大,只是缺少电商中的
物流发货流程,其他流程几乎是一样的,也有库存以及优惠折扣等业务存在。
整个系统交互如下图: