当前位置: 首页 > article >正文

SpringCloud-高级篇(五)

一:分布式事务理论基础

原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)
事务前后数据的完整性必须保持一致。
隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
————————————————

在原来学的单体架构项目中,往往只有一个服务,这个服务只访问一个数据库,业务比较简单,基于数据库本身的特性,能够实现ACID,我们现在要研究微服务,微服务的业务比较复杂,可能一个业务需要跨越多个服务,每个服务要有自己的数据库,这个时候考数据库本身的特性不能保证整个业务的ACID

订单模块:

OrderService:

远程调用的客户端:

数量模块: 

 客户端:

库存模块:

使用Postman发送订单请求:

订单表刷新一下:

余额由1000变成800:

库存表变成由10变8:

更改订单数量:变大订单购买数量超过余额导致失败:

此时用户的余额不应该扣除,但是扣减了

此时的状态不是一致的

理论上库存服务报错,前面也应该跟着回滚,但是没有,因为每个服务都是独立的,库存服务抛了异常,账户服务不知道,第二每个服务都是独立的,他们的事务也是独立的,订单服务,账户服务执行完业务之后事务结束了执行提交了,没有办法回滚,最终没有达成事务状态的一致,这个时候就出现了分布式事务的问题

解决分布式事务的理论基础

1.CAP定理 

为了满足一致性可以让node03等待node02网络的恢复和数据同步,在恢复之前,所有访问的请求都阻塞下去,这么做就可以满足数据的一致性,此时node03就变成不可用的了

为了满足可用性,就没有办法保持一致性

当网络分区出现时,可用性跟一致性没有办法同时满足

分区是不可避免的,只要你是分布式系统节点之间都是通过网络连接的,只要通过网络连接的,就没有办法永远保持永远健康

我们可以这么认为分布式系统分区一定会出现,整个集群不需要对外提供服务,P一定要实现,此时C和A之间只能要一个

 

2.BASE理论

P分区一定会出现,A可用跟C一致一定只能选一个,这两个特性都非常重要,都不想放弃那怎么办?BASE理论正好可以解决这个问题

BASE理论是对CAP理论的调和跟选择和调和

我们分布式事务当中分为很多子事务,他们各自执行跟提交,有些成功,有些失败,这个时候状态不一致,我们希望分布式事务的子事务状态要一致,要么都成功,要么都失败,基于BASE理论去解决:

各个子事务要去互相通信,去辨别对方的执行状态,各个子事务之间怎么去通信呢,需要一个协调者帮助子事务去通信,感知对方的状态


http://www.kler.cn/a/147440.html

相关文章:

  • git创建远程仓库,以gitee码云为例GitHub同理
  • Swift的可选绑定(Optional binding)
  • cmake生成器表达式
  • 零基础利用实战项目学会Pytorch
  • 数仓建设之Oracle常见语法学习
  • 树状数组+概率论,ABC380G - Another Shuffle Window
  • 【开发实践】网页预览excel表格原版样式
  • win10安装pytorch(py39)
  • 前端工程、静态代码、Html页面 打包成nginx 的 docker镜像
  • Android 相机库CameraView源码解析 (一) : 预览
  • 正点原子linux应用编程——入门篇2
  • mysql使用--存储程序
  • 【C语言】深入理解数据类型转换与运算
  • Leetcode.974 和可被 K 整除的子数组
  • 虹科Pico汽车示波器 | 汽车免拆检修 | 2016款东风悦达起亚K5车发动机怠速抖动严重、加速无力
  • 94.STM32外部中断
  • 【微服务】java 规则引擎使用详解
  • Docker-compose容器编排
  • 【深入剖析K8s】容器技术基础(一):从进程开始说起
  • numpy np.where 使用方法
  • MTK联发科MT6762/MT6763/MT6765安卓核心板参数规格比较
  • CH02_交给子类
  • mysql8下载与安装教程
  • 正则表达式(Java)(韩顺平笔记)
  • 查看linux处理器架构(uname命令 使用指南)
  • Java Elasticsearch 指标聚合