分布式事务理论一

本地事务

事务概念:事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。本地事务的事务控制由支持事务的数据库负责,客户端给数据库下达事务开始,提交,回滚指令后数据库自动完成事务操作
事务四大特性:

  1. 原子性:事务是一组不可被分割的操作,不会存在中间状态,要么一起成功要么一起失败
  2. 持久性:事务提交后,状态会被保存至数据库
  3. 隔离性: 多个事务之间状态不可见
  4. 一致性: 事务提交之前和提交之后,数据的一致性不会被破坏

本地事务调用图:

分布式事务概念

事务访问涉及的资源和计算涉及的节点部署在不同的节点上,这种情况下涉及的事务称为分布式事务。分布式事务一般伴随微服务架构而使用,本质上是为了解决在微服务架构下,数据不一致的情况

分布式事务理论基础

CAP理论

Consistency 一致性
Availability 可用性
Partition tolerance 分区容错性

  1. 一致性:在分布式系统中,读取数据要么读到最新的数据,要么读取失败,不能读取事务中间状态的数据,一致性强调的是数据的正确性
  2. 可用性: 在分布式系统中,在对任何服务的请求都能得到响应,可用性强调的是服务的可用
  3. 分区容错性: 在分布式系统中,网络通信往往不可靠,如果出现了分区通信错误,或者某些服务挂掉,其他服务仍能正常提供服务,分区容错强调的是多网络分区下对外服务的可用,在分布式系统中,P一般是默认成立的

CAP悖论

一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。当你一个数据项只在一个节点中保存,那么分区出现后,和这个节点不连通的部分就访问不到这个数据了。这时分区就是无法容忍的。提高分区容忍性的办法就是一个数据项复制到多个节点上,那么出现分区之后,这一数据项就可能分布到各个区里。容忍性就提高了。然而,要把数据复制到多个节点,就会带来一致性的问题,就是多个节点上面的数据可能是不一致的。要保证一致,每次写操作就都要等待全部节点写成功,而这等待又会带来可用性的问题。总的来说就是,数据存在的节点越多,分区容忍性越高,但要复制更新的数据就越多,一致性就越难保证。为了保证一致性,更新所有节点数据所需要的时间就越长,可用性就会降低。


如下图所示,现在有两个节点Node1,Node2,如果Node1和Node2之间的通讯失败,那么如果我想从Node2访问V0就会失败,破坏了分区容忍性



如果想在分区网络错误的时候访问Node2也能拿到数据,那么就必须在Node2放一份数据备份,这样就算Node1,Node2通讯失败,访问Node2也可以拿到数据,提高了分区容忍性



随着数据副本的介入,新的问题随之诞生了,数据之间的一致性,假设一种场景,我们把Node1中的V0更新为V1,如果我们在写入的时候,刚好有客户端调用Node2的服务获取数据,那么会造成从Node1和Node2获取到的数据不一致的状态,这就破坏了一致性,
一般的做法是在Node1写入数据的时候,锁住Node2的服务,待Node1数据更新完毕同步到Node2后,再开放服务,但这又破坏了可用性,所以,一般CA在P成立的情况下,不能同时成立
image

CAP组合

CP:放弃可用性,追求一致性
CP:放弃一致性,主球可用性
CA:放弃分区容错,这种就相当于传统单体应用了

CAP常见误区

误解一:分布式系统因为 CAP 定理放弃了 C 或者 A 中的其中一个

很多人在没有对 CAP 做深入了解的情况下,听到很多人说分布式系统必须在 CAP 三个特性里选择两个,就觉得一套分布式系统肯定要么只有可用性要么只有一致性,不存在完整的可用性和一致性功能。这种理解是大有问题的。

因为,P 这种问题发生的概率非常低,所以当没有出现分区问题的时候,系统就应该有完美的数据一致性和可用性。

如果一个分布式系统365天,天天发生网络分区故障,那我只能怀疑是不是挖掘机守着机房用的电缆挖或者大Boss得罪运营商了

误解二:C 和 A 之间的选择是针对整个分布式系统的,只能整体考虑 C 和 A 之间的选择
这个理解有点二极管的味道了,一个大的分布式系统会涉及到非常多的子系统,有的对数据一致性要求高,有的对可用性要求高,针对性做出选择即可,例如,我们做一套财务系统,涉及支付部分,我们要求数据的一致性高一些,那么就可以采用CP组合,
这个时候即使可用性损失了一部分,付款发生了故障也是可接受的,可以接手失败,但是不能接受数据不一致带来的混乱,而在面向个人票据录入的时候,我们对于数据一致性要求就可以不那么高,但是对于客户感受这个时候要求就比较高一些,那么可以牺牲部分数据一致性,采用AP组合让客户对于系统流畅度的感受好一些

误解三:CAP 的三个特性是否只有满足或者不满足两种选择
这种非黑即白理解非常具有迷惑性。

CAP 理论的三种特性并不是只能二选一,一切都有度量。

比如我们要求一致性,往一个节点写入数据,在多少时间范围内,所有节点数据能够得到更新,50ms,还是10ms就认定不满足一致性了呢?

再比如可用性,我们有100台机器组成的集群,1台坏了就算不可用了吗?还是10台,50台

一切都只是度量问题

posted @ 2023-01-05 00:25  itqczzz  阅读(37)  评论(0编辑  收藏  举报