前言
从事IT代码工作,就不得不与数据库打交道,尤其是后端程序员,肯定是要和数据库打交道的,和数据库打交道的过程中有一个非常重要的概念就是事务,一般单体系统连接一个数据库的情况可以称之为本地事务,那么与之相对的就是分布式事务
本节主要介绍事务、分布式事务
一、事务
事务通常是指和数据库之间的交互的一次会话,也就是一系列对系统中数据进行访问与更新的操作所组成的。当然这是狭义上的解释
事务更多的作用是一种隔离,以防止彼此的操作互相干扰,这类似于java中的线程锁,防止多个独立的连接请求对一个共享资源的竞争,导致的不可测结果。
事务可以分为本地事务和分布式事务。
1 本地事务
本地事务,可以理解为使用数据库本身的事务支持来完成事务操作,比如mysql的innoDB,因为一般本地事务是指一个单体项目和一个数据库之间存在一个交互,那么就可以使用数据库本身事务来支持了。
这里提到数据库事务,就要提到数据库事务的四大特性,ACID。何为ACID,
来个传送门
2 分布式事务
分布式事务一般是指在分布式架构中,为了保持事务特性,来定义的一种事务规则。
首先,分布式架构会将一个应用拆分为多个独立部署的Module,往往一个业务线是需要经过多个服务的,那么这个时候就涉及到事务了。比如在淘宝的购物车中购买一件商品,那么可能需要在购物车服务中将对应商品减去,将商品提交到订单服务,扣除用户账户金额等等操作才能完成一个购买商品的业务,那么如果有一个bug发生到某个服务中,导致该服务事务回滚,那么其他的服务中应该也同步进行回滚,否则就违反了事务的一致性。
一般分布式事务的场景在下边这些中:
-
跨JVM(服务)产生分布式事务

-
跨数据库实例产生分布式事务,指的是一个服务连接两个数据库,那么一次业务操作,需要对两个数据库进行操作,也就是两个Connection连接,那么就可以产生分布式事务问题

-
多服务访问同一个数据库实例也可以产生分布式事务,这个主要体现在有两个Connection上

总结一下,只要本地数据库自身事务无法支持事务问题,那么就可能选择分布式事务,这里体现在两个Connection上,那么就可以简单的看成分布式事务。
二、CAP理论
CAP是指Consistency、Availability、Partition tolerance三个词的缩写,分别代表一致性、可用性、分区容忍性。其中Partition tolerance是分布式系统的基础
针对于数据库的CAP,主要是针对于数据库分布式部署的情况下

这个是数据库的主从复制结构
1 C Consistency
一致性就是指写操作后的读操作可以读取到最新的数据结构,当数据分布到多个节点上,从任意节点读取的数据都是最新的状态。
也就是上图中,需要完成以下目标:
1 写入主数据库最新数据成功,则向从数据库查询最新数据也成功。
2 写入主数据库失败,则在从数据库查询不到最新数据
如何实现呢?
1 写入主数据库后,要将数据同步到从数据库。
2 写入主数据库后,在向从数据库同步数据的时候,需要将从数据库锁定,待同步完成后在释放锁,以免在新数据写入成功后,服务在从数据库查询到旧数据
以上总结一下,就是必须保持强一致,数据库集群数据同步未完成之前,不释放锁。
分布式系统一致性的特点:
1 由于存在数据同步的过程,写操作的响应会有一定的延迟。
2 为了保证数据一致性会对资源暂时锁定,待数据同步完成释放锁定资源,也就是说此期间如果需要向从数据库中读取对应的最新数据,为了保持数据的一致,将等待锁释放才可以读取到对应的资源
3 如果请求数据同步失败了,那么将返回给调用从数据库请求数据的服务以错误信息,一定不会返回旧数据
2 A-Availbility
可用性是指任何事物操作都可以得到相应结果,且不会出现相应超时或相应错误。
上图中,满足可用性需要实现如下目标:
1、从数据库接受到数据查询的请求则立即能够响应数据查询结果;
2、从数据库不允许出现相应超时或响应错误。
如何实现可用性?
1、写入主数据库后要将数据同步到从数据库;
2、由于要保证从数据库的可用性,不可将从数据库的资源进行锁定;
3、即使数据还没有同步过来,从数据库也要返回要查询的数据,哪怕是旧数据,如果连旧数据也没有则可以按照约定返回一个默认信息,但是不能返回错误或者相应超时。
可用性特点:
1、所有请求都有相应,且不会出现响应超时或者响应错误,就是以可用为基本原则进行开发。
3 P-Partition Tolerance
通常分布式系统中各个节点部署在不同的子网(网络中的概念)中,这就是网络分区,不可避免的会出现由于网络问题而导致的节点之间通信失败,此时仍可对外提供服务,这叫分区容忍性。
上图中,要实现分区容忍性就要实现如下目标:
1、主数据库向从数据库同步数据失败不影响读写操作;
2、其中一个节点挂掉不影响另外一个节点对外提供服务。
如何实现分区容忍性?
1、尽量使用异步取代同步的方式,例如使用异步方式将数据从主数据库同步到从数据库,这样节点之间能有效实现松耦合;
2、添加从数据库节点,其中一个从节点挂掉,其他从节点继续提供服务。
分布式容忍性特点:
1、分区容忍性是分布式系统具备的基本能力。
4. CAP组合
根据上边的CAP理论,可以分析出来P是一个分布式系统的基础,而C和A是在基于P的基础上其实是有些矛盾的,也就是说一致性和可用性,并不能全部满足。
4.1 AP
放弃一致性(强一致性),追求分区容忍性和可用性,这是目前很多分布式系统的选择。
这里所谓的放弃一致性,更加准确的说是放弃强一致性,但是要保障最终一致性,这里是什么意思呢?下边的Base理论有解释。
4.2 CP
放弃可用性,追求一致性和分区容忍性,这个zookeeper就是CP模式,再比如一些银行汇款也是CP模式
4.3 CA
放弃分区容忍性,也就是不进行分区,不考虑由于网络不通或者节点挂掉的问题,则可以实现一致性和可用性。根据上边的理论,分区容忍性是分布式架构的基础,那么这样的系统也不能算是一个标准的分布式系统,我们最常用的关系型数据就满足了CA原则
三、Base理论
BASE是basically Available(基本可用),Soft state(软状态),Eventually consistent(最终一致性)。
base理论是对AP的一个扩展,因为AP是牺牲掉一致性来获取可用性,当出现故障允许部分不可用但是要保证其他核心可用,允许数据在一段时间内不一致,但是最终是要达到一致状态。满足BASE理论的事务,我们称之为柔性事务。
- Basically Availability:分布式系统在出现故障后,允许损失部分可用功能,保证核心功能可用。如,电商网站交易出现了问题,但是商品依然可以浏览(对其他模块不应该产生影响)
- Soft state:由于不要求强一致性,所以Base允许系统中存在中间状态(也叫软状态),这个状态不影响系统可用性,如订单中的支付中、数据同步中等状态,待数据最终一致后状态改为成功状态
- Eventually consistent:最终一致是指经过一段时间后,所有节点数据都将会达到一致,但是需要一定时间的延迟、等待。
以上内容通过学习【黑马】分布式事务解决方案专题整理所得笔记内容,里边还有一些是在网上检索的信息
本文介绍了事务的本地与分布式概念,详细阐述了数据库的CAP理论,包括一致性(C)、可用性(A)和分区容忍性(P)的权衡,并探讨了CAP的三种组合情况。此外,文章还提到了Base理论,强调了基本可用、软状态和最终一致性的重要性,是理解分布式事务的重要参考。

598

被折叠的 条评论
为什么被折叠?



