背景
微服务的发展
微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。Hailo有160个不同服务构成,NetFlix有大约600个服务。国内方面,阿里巴巴、腾讯、360、京东、58同城等很多互联网公司都进行了微服务化实践。当前微服务的开发框架也非常多,比较著名的有Dubbo、SpringCloud、thrift 、grpc等。
本文根据诸葛老师【微服务架构之分布式事务详解】视频编辑。
诸葛老师:
工作十余年,曾就职于唯品会、京东电商等多家互联网公司,历任Java架构师、研发经理等职位,参与并主导千万级并发电商网站研发,多次参与电商大促活动技术保障,在分布式与高并发相关技术领域有颇多经验
![db8e5c73cb677b9c794ff487bb9ce993.png](https://i-blog.csdnimg.cn/blog_migrate/981c5061675ca86897fc7c76f5fec5c0.jpeg)
本节视频议题及讲解顺序
![62f154d438291dbb2bb450abdf842d45.png](https://i-blog.csdnimg.cn/blog_migrate/7c1a35147b7f70d378e58608f59f8ce2.jpeg)
微服务架构介绍
- 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。
- 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。
- 每个微服务内聚不同的业务模块。
![be2b42ae366a91d6540dff4d12bb13eb.png](https://i-blog.csdnimg.cn/blog_migrate/2bfd94958fb6e8103f4d4a2b5921d74d.jpeg)
分布式事务详解
- 本地事务
![be92a493af85c082de315e323490b19e.png](https://i-blog.csdnimg.cn/blog_migrate/37c7771058304945d5e7d973632003f9.jpeg)
- 分布式事务-跨库事务
![11d8347e75458f75cda24df76235b19a.png](https://i-blog.csdnimg.cn/blog_migrate/ac2236bd8e018149d46edc0c9ae1b845.jpeg)
- 分布式事务-微服务
![acb1d72bc472ba627337240d48845a67.png](https://i-blog.csdnimg.cn/blog_migrate/fdc0592462c7f6b00fadbacfd58b8973.jpeg)
XA/JTA规范
两阶段提交协议(2PC)
![41df505d15a1e6dee4c95c7e02b9df4d.png](https://i-blog.csdnimg.cn/blog_migrate/62cdd68d8f3b5e5243deda048bd12837.jpeg)
开源框架atomikos
- TransactionEssentials:开源的免费产品
- ExtremeTransactions:商业版,需要收费
柔性事务
CAP理论
- 开发大规模的分布式系统时会遇到三个特性:一致性(Consistency)、可用性(Availability)、分区容错(Partition-tolerance),而一个分布式系统最多只能满足其中的两项。
- 分区容错性是分布式系统必然需要面对和解决的问题,因此系统架构师往往需要把精力花在如何根据业务特点在C(一致性)和A(可用性)之间寻求平衡。而前面我们提到的JTA 两阶段提交协议的分布式事务方案,强调的就是一致性;由于可用性较低,实际应用的并不多。
BASE理论
1.基本可用(Basically Available)
- 指分布式系统在出现不可预知故障的时候,允许损失部分可用性。
2.软状态( Soft State)
- 指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
3. 最终一致( Eventual Consistency)
- 强调的是所有的数据更新操作,在经过一段时间的同步之后,最终都能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。
柔性事务
TCC(Try-Confirm-Cancel)两阶段补偿型方案
![801cfe582c510cade75ff0273a715f3c.png](https://i-blog.csdnimg.cn/blog_migrate/c302abd990cf470bca3320360133dd96.jpeg)
TCC(Try-Confirm-Cancel)两阶段补偿型方案
![33e047121ec5ca3d8551fe4485a12776.png](https://i-blog.csdnimg.cn/blog_migrate/e1883169273b04487789849b9d5eb6bc.jpeg)
TCC(Try-Confirm-Cancel)框架
![bacedb7ecf4100bc797b22fd89005dd4.png](https://i-blog.csdnimg.cn/blog_migrate/cbeb763ee2c7340e46e6d30272219d63.jpeg)
TCC与XA/JTA对比
![799c4856081a83cf80cb5ed38be3697c.png](https://i-blog.csdnimg.cn/blog_migrate/026aa430fbc60ddef035e515ce468157.jpeg)
TCC与XA/JTA对比
- XA是资源层面的分布式事务,强一致性,在两阶段提交的整个过程中,一直会持有资源的锁
- TCC是业务层面的分布式事务,最终一致性,不会一直持有资源的锁
TCC的开源框架实现
- Atomikos,tcc-transaction,ByteTcc,支付宝GTS
最大努力通知方案
- 最简单的一种柔性事务,适用于一些最终一致性时间敏感度低的业务,且被动方处理结果不影响主动方的处理结果。典型的使用场景:如银行通知、商户通知等
![6d476f96edc1e23dd4ed12bc2f4fb0fd.png](https://i-blog.csdnimg.cn/blog_migrate/f13fba26ee86d289d5dafeeee54303dd.jpeg)
可靠消息最终一致性方案
- 基于Rocket MQ
![b38d9dd4a476ec9aab6cb62b83ac33e2.png](https://i-blog.csdnimg.cn/blog_migrate/1b291782bf9e748986a812d9a7c6121e.jpeg)
可靠消息最终一致性方案
- 基于普通的消息队列中间件
![742cdcb768fdfa1e0e22f747703a7638.png](https://i-blog.csdnimg.cn/blog_migrate/3364f528bd5e1329f297b73616e15dc6.jpeg)
架构师技能集合:
![1a86a46d8774aad831c0730db2333809.png](https://i-blog.csdnimg.cn/blog_migrate/02fd3ebd7389e9cc1ecf79797eba4fc7.jpeg)
这篇文章就分享到这里了,需要本节视频,可以直接私信【java】免费获取!
![d730146667c2f8778c22ec4ad085c5ff.png](https://i-blog.csdnimg.cn/blog_migrate/1906f298ef5a07810a2882c2135f43b6.jpeg)
架构师技能七大块的技能树思维导图也会一起分享给大家!还有相关视频,笔记,面试题资料!
![44969319f7485a260a2700a27c1084a7.png](https://i-blog.csdnimg.cn/blog_migrate/4f88537e7cdd6fb8cf0b99bc7b87fe5f.jpeg)
领取的朋友们记得一定要帮作者来个转发+评论!谢谢大家!