SpringCloud分布式事务详解及LCN解决⽅案,⽬前最全的《Java⾯试题及解
析》
4. 在系统负载增加时,难以进⾏⽔平扩展;
5. 当系统中⼀处出现问题,会影响整个系统;
为了克服以上缺点,微服务架构应运⽽⽣。微服务,⼜叫微服务架构。微服务就是⼀些协同⼯作的⼩⽽⾃治的服务.
微服务架构
=====
优点:
1. 技术异构性
在不同的服务中,可以使⽤不同的技术来各⾃开发,只要保证服务间能相互协作即可
2. 弹性
当微服务中的某⼀个服务不可⽤时,不会影响整个系统,只会影响相关功能不可⽤
3. 扩展
易于扩展,使⽤⼩的多个服务,更加易于扩展新的功能
4. 简化部署
某个服务的更新部署,不需要重新部署整个应⽤
5. 可组合
通过组合多个服务,可以提供⼀些新的功能
6. 可替代电影源代码镜头分析
因为每个微服务都⽐较⼩,重新实现某⼀个服务或者直接删除该服务都是可操作的
缺点:
1. 复杂度⾼服务器数据迁移
微服务间通过REST、RPC等形式交互,相对于单体模式,需要考虑被调⽤⽅故障、过载、消息丢失等各种异常情况,代码逻辑更加复杂。
对于微服务间的事务性操作,因为不同的微服务采⽤了不同的数据库,将⽆法利⽤数据库本⾝的事务机制保证⼀致性,需要引⼊⼆阶段提交等技术。
kettle和datax哪个快同时,在微服务间存在少部分共⽤功能但⼜⽆法提取成微服务时,各个微服务对于这部分功能通常需要重复开发,或⾄少要做代码复制,以避免微服务间的耦合,增加了开发成本。
2. 运维复杂
在采⽤微服务架构时,系统由多个独⽴运⾏的微服务构成,需要⼀个设计良好的监控系统对各个微服务的运⾏状态进⾏监控。运维⼈员需要对系统有细致的了解才对够更好的运维系统。
3. 影响性能
相对于单体架构,微服务的间通过REST、RPC等形式进⾏交互,通信的时延会受到较⼤的影响。
分布式事务的引⼊
========
正如上⾯所说
对于微服务间的事务性操作,因为不同的微服务采⽤了不同的数据库,将⽆法利⽤数据库本⾝的事务机制保证⼀致性,需要引⼊⼆阶段提交等技术。
在单体项⽬中,很容易做到事务控制,⽽在多个服务之间很难实现
假设服务调⽤如下:
A B C D 的事务均在各个服务控制,如何做到,统⼀协调,保证数据的⼀致性?
分布式事务解决⽅案
=========
基于XA协议的两阶段提交
XA是⼀个分布式事务协议,由提出。XA中⼤致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,⽐如Oracle、DB2这些商业数据库都实现了XA接⼝,⽽事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。XA实现分布式事务的原理如下:
第⼀阶段:
第⼆阶段:
总的来说,XA协议⽐较简单,⽽且⼀旦商业数据库实现了XA协议,使⽤分布式事务的成本也⽐较低。但是,XA也有致命的缺点,那就是性能不理想,特别是在交易下单链路,往往并发量很⾼,XA⽆法满⾜⾼并发场景。XA⽬前在商业数据库⽀持的⽐较理想,在mysql数据库中⽀持的不太理想,mysql的XA实现,没有记录prepare阶段⽇志,主备切换回导致主库与备库数据不⼀致。许多nosql也没有⽀持XA,这让XA的应⽤场景变得⾮常狭隘。
消息事务+最终⼀致性
所谓的消息事务就是基于消息中间件的两阶段提交,本质上是对消息中间件的⼀种特殊利⽤,它是将本地事务和发消息放在了⼀个分布式事务⾥,保证要么本地操作成功成功并且对外发消息成功,要么两者都失败,开源的RocketMQ就⽀持这⼀特性.
该⽅案采⽤最终⼀致的,牺牲了⼀致性,换来了性能的⼤幅度提升。存在造成数据不⼀致的风险
TCC编程模式
所谓的TCC编程模式,也是两阶段提交的⼀个变种。TCC提供了⼀个编程框架,将整个业务逻辑分为三块:Try、Confirm和Cancel三个操作。以在线下单为例,Try阶段会去扣库存,Confirm阶段则是去更新订单状态,如果更新订单失败,则进⼊Cancel阶段,会去恢复库存。总之,TCC就是通过代码⼈为实现了两阶段提交,不同的业务场景所写的代码都不⼀样,复杂度也不⼀样,因此,这种模式并不能很好地被复⽤。
具体实现
====重学java设计模式pdf
LCN
LCN分布式事务框架的核⼼功能是对本地事务的协调控制,框架本⾝并不创建事务,只是对本地事务做协调控制。因此该框架与其他第三⽅的框架兼容性强,⽀持所有的关系型数据库事务,⽀持多数据源,⽀持与第三⽅数据库框架⼀块使⽤(例如 sharding-jdbc),在使⽤框架的时候只需要添加分布式事务的注解即可,对业务的侵⼊性低。LCN框架主要是为微服务框架提供分布式事务的⽀持,在微服务框架上做了进⼀步的事务机制优化,在⼀些负载场景上LCN事务机制要⽐本地事务机制的性能更好,4.0以后框架开⽅了插件机制可以让更多的第三⽅框架⽀持进来。
mysql面试题及讲解
⽬前 LCN为 4.1 版本
主要特点:不小心把数据库删了还能到吗
⽀持各种基于spring的db框架
兼容SpringCloud、Dubbo、motan
使⽤简单,低依赖,代码完全开源
基于切⾯的强⼀致性
《⼀线⼤⼚Java⾯试题解析+后端开发学习笔记+最新架构讲解视频+实战项⽬源码讲义》
【docs.qq/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
事务框架

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。