现如今,大家在工作中最常使用的框架就是微服务了,尤其以spring cloud为主要体现,因此,在微服务的环境中,分布式事务一定是绕不开的内容。下面我们就来剖析一下。
一、为什么要掌握分布式事务
作为中高级开发人员,乃至架构师、技术专家等角色,大家在面试或者日常工作中,分布式事务一定是大家经常被问到或者需要去实际解决的问题。这是一个必备技能。所以作为中高级开发人员,乃至架构师、技术专家等角色一定要掌握分布式事务。
二、分布式事务是怎么产生的?
既然说到分布式事务是如何产生的,我们就一定要讲解下互联网的整体架构发展历程。近几年我们最长看到的架构演进就是:单体架构->垂直应用架构->soa架构->微服务架构。
序号 | 架构 | 特点 | 优点 | 缺点 |
1 | 单体架构 | 1、所有的功能集成在一个项目工程中。 2、所有的功能打一个war包部署到服务器。 3、应用与数据库分开部署。 4、通过部署应用集群和数据库集群来提高系统的性能。 | 1、项目架构简单,前期开发成本低,周期短,小型项目的首选。 | 1、全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。 2、系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。 3、技术栈受限。 |
2 | 垂直应用架构 | 1、以单体结构规模的项目为单位进行垂直划分项目即将一个大项目拆分成一个一个单体结构项目。 2、项目与项目之间的存在数据冗余,耦合性较大,比如上图中三个项目都存在客户信息。 3、项目之间的接口多为数据同步功能,如:数据库之间的数据库,通过网络接口进行数据库同步。 | 1、项目架构简单,前期开发成本低,周期短,小型项目的首选。 2、通过垂直拆分,原来的单体项目不至于无限扩大。 3、不同的项目可采用不同的技术。 | 1、全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。 2、系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。 |
3 | soa架构 | 1、基于SOA的架构思想将重复公用的功能抽取为组件,以服务的方式给各各系统提供服务。 2、各各项目(系统)与服务之间采用webservice、rpc等方式进行通信。 3、ESB企业服务总线作为项目与服务之间通信的桥梁。 | 1、将重复的功能抽取为服务,提高开发效率,提高系统的可重用性、可维护性。 2、可以针对不同服务的特点制定集群及优化方案。 3、采用ESB减少系统中的接口耦合。 | 1、系统与服务的界限模糊,不利于开发及维护。 2、虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。 3、抽取的服务的粒度过大,系统与服务之间耦合性高。 |
4 | 微服务架构 | 1、将系统服务层完全独立出来,并将服务层抽取为一个一个的微服务。 2、微服务遵循单一原则。 3、微服务之间采用RESTful等轻量协议传输。 | 1、服务拆分粒度更细,有利于资源重复利用,提高开发效率。 2、可以更加精准的制定每个服务的优化方案,提高系统可维护性。 3、微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通信,相比ESB更轻量。 4、适用于互联网时代,产品迭代周期更短。 | 1、微服务过多,服务治理成本高,不利于系统维护。 2、分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大。 |
现如今微服务架构越来越成熟,很多企业都在采用微服务的架构方式来支撑内部以及外部的业务,尤其是高并发,大流量的电商业务场景,微服务更是首选的架构模式。
三、微服务架构为什么要采用分布式事务?
在单一的单体架构下,我们很容易实现数据的一致性,因为我们在某个事务里面,可以直接囊括整个业务的数据一致性问题,基于数据库事务的辅助,实现要么全提交,要么全部不提交。这样子实现数据一致性是非常简单的。但是在微服务的架构模式下,原本单一的应用被拆分成了一个个很小的服务,每个服务都有自己独立拥有的业务和数据库,服务与服务之间的交互采用接口或者远程rpc的方式进行调用,那么基于一个完整的业务逻辑就会涉及到很多个服务一起工作,这样子服务与服务之间的数据一致性问题就变得非常的棘手。因为他是多个服务,多个应用,多个数据库共同组成的一组业务逻辑。所以基于这样的问题,业界目前统一的解决方案就是引入分布式事务。
四、分布式事务的理论
分布式事务目前主要的理论模型有两种,一种是CAP理论,一种是Base理论
序号 | 理论 | 描述 | 说明 |
1 | CAP理论 | C(一致性):所有的节点上的数据时刻保持同步 A(可用性):每个请求都能接受到一个响应,无论响应成功或失败 P(分区容错):系统应该能持续提供服务,即使系统内部有消息丢失(分区) | 一个系统不能同时满足C、A、P三种,要么是CP,要么是AP |
2 | Base理论 | 基本可用(Basically Available) 软状态(Soft State) 最终一致性(Eventually Consistent) | BASE提出通过牺牲强一致性来获得可用性,并允许数据段时间内的不一致,但是最终达到一致状态。 |
五、强一致性分布式事务模型
基于分布式事务,早期的时候,大多互联网公司大多使用的都是强一致性分布式事务,强一致性分布式事务的模型有以下4种:
序号 | 模型 |
1 | DTP |
2 | 2PC |
3 | 3PC |
4 | XA |
六、最终一致性分布式事务模型
基于分布式事务,基于强一致性的分布式模型有一定的确定,在高并发,大流量的场景里面使用起来还是非常困难,所以现如今,大多互联网公司还是采用最终一致性的方式来实现分布式事务。常见的最终一致性的分布式事务模型有以下3种:
序号 | 模型 |
1 | TCC |
2 | 可靠消息最终一致性 |
3 | 最大努力通知 |
好了,今天作为分布式事务的开篇,我们先讲解这么多,稍后我们继续讲解分布式事务。
还没有评论,来说两句吧...