目前,互联网行业的发展,使得系统由单体系统演变分布式系统,传统的集中式蜕变为分布式的。而在分布式系统架构的到来,好处特别多【自行网上搜集资料】,但也带来一个世界性的难题,即分布式事务问题。
何为分布式事务?
在此,举一个例子【本人开发过程中的经历】:
一个电商系统,采取spring+springMVC+mybatis做基础的技术架构,采用RPC框架做服务的远程调用【Dubbo+zookeeper】。
在订单服务中order-service,生成订单:1、先清空购物车【远程调用完成】;2、写order,ordergoods,orderAction【没有经过远程调用】。
这时,有一个问题,这两步无论操作的先后顺序,比如,第一步先操作,当第一步完成后,第二步操作失败。一般人都认为,这时数据库中的数据会回滚。回滚吗?答案不是的,操作两个服务,代表的是两个事物。
这就是一个分布式事务问题,分布式事务的本质在于:不在一个事务管理器里面。
事务控制原理
个人观点:事务控制原理,TxManager:全局事务管理器,一套完整的请求,需要经过controller--->service----->dao
在service业务模块与dao持久层之间,添加一个TxClient事务的客户端。这个TxClient有什么作用?基于什么原理制作的呢?
很简单的想到,他就是一个控制事务的拦截器,将一个请求中的所有事务都放到全局事务管理器中,一起开始和结束。可以结合springAop面向切面编程+拦截器的原理完成这种分布式事务处理的架构思想。
详情参考一下:LCN