分布式事务如何控制?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Java EE规范里,明确支持了分布式事务。数据库,或者消息中间件等,在Java EE里,都是事务的资源管理(Resource Manager),他们自己支持本地事务,本地事务都有最好的性能。然而,如果使用分布式事务或者JavaEE称为全局事务,通过俩阶段提交协议来管理多个数据库,其他资源管理等,则性能会很差。记得以前做电信行业项目,全局事务管理器是由weblogic来提供,在性能测试中确实较差。
Spring和SpringBoot本身不支持俩阶段提交协议,但可以使用JavaEE应用服务器提供的事务服务来完成,或者第三方的事务管理器。比如Spring Boot推荐了开源的Atomikos,Bitronix,我认为这个跟商业服务器一样,提供类似的全局事务管理。
Java EE的分布式事务优点是对于开发人员来说是透明的,不需要考虑太多。它针对的事务管理都是数据库,消息中间件这样的系统,而并非分布式业务系统
然而,对于分布式业务系统,有时候并不是简单的数据库等资源管理需要实现分布式事务就可以了,而是分布在各个系统上的业务需要实现“分布式事务”,这就需要业务系统进行改造,类似数据库那样的支持(业务上的)提交,回滚。