分布式事务-理论基础


个人名片:

博主:酒徒ᝰ.
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:三人行,必有我师焉。

本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

目录

  • 二、理论基础
    • [1. CAP定理](#1. CAP定理)
    • [2. BASE理论](#2. BASE理论)
    • [3. 解决分布式事务的思路](#3. 解决分布式事务的思路)

二、理论基础

解决分布式事务问题,需要一些分布式系统的基础知识作为理论指导。

  • CAP理论
  • BASE理论

1. CAP定理

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。

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

它们的第一个字母分别是 C、A、P。

Eric Brewer 说,这三个指标不可能同时做到。这个结论就叫做 CAP 定理。

  1. 一致性

Consistency(一致性):用户访问分布式系统中的任意节点,得到的数据必须一致。

  1. 可用性

Availability (可用性):用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝。

  1. 分区容错

Partition(分区) :因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区。
Tolerance(容错):在集群出现分区时,整个系统也要持续对外提供服务

  1. 矛盾

在分布式系统中,系统间的网络不能100%保证健康,一定会有故障的时候,而服务有必须对外保证服务。因此Partition Tolerance(分区 容错)不可避免。
当已经分区的节点接收到新的数据变更时,就会出现问题了:

  • 如果此时要保证一致性,就必须等待网络恢复,完成数据同步后,整个集群才对外提供服务,服务处于阻塞状态,不可用。
  • 如果此时要保证可用性,就不能等待网络恢复,那node01、node02与node03之间就会出现数据不一致。
    也就是说,在P一定会出现的情况下,A和C之间只能实现一个。

总结

1.简述CAP定理内容?

  • 分布式系统节点通过网络连接,一定会出现分区
  • 当分区出现时,系统的一致性和可用性就无法同时满足

2.elasticsearch集群 是C(一致性)P还是A(可用性)P?

答:CP

ES集群出现分区时,故障节点会被剔除集群,数据分片会重新分配到其它节点,保证数据一致。因此是低可用性,高一致性,属于CP

2. BASE理论

BASE理论是对CAP的一种解决思路,包含三个思想:

  • Basically Available (基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。
  • **Soft State(软状态):**在一定时间内,允许出现中间状态,比如临时的不一致状态。
  • Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。

3. 解决分布式事务的思路

分布式事务最大的问题是各个子事务的一致性问题,因此可以借鉴CAP定理和BASE理论,有两种解决思路:

  • AP模式:各子事务分别执行和提交,允许出现结果不一致,然后采用弥补措施恢复数据即可,实现最终一致。

  • CP模式:各个子事务执行后互相等待,同时提交,同时回滚,达成强一致。但事务等待过程中,处于弱可用状态。

但不管是哪一种模式,都需要在子系统事务之间互相通讯,协调事务状态,也就是需要一个事务协调者(TC)
这里的子系统事务,称为分支事务 ;有关联的各个分支事务在一起称为全局事务

总结

简述BASE理论三个思想:

  • 基本可用
  • 软状态
  • 最终一致
相关推荐
躺不平的理查德3 小时前
General Spark Operations(Spark 基础操作)
大数据·分布式·spark
talle20213 小时前
Zeppelin在spark环境导出dataframe
大数据·分布式·spark
渣渣盟3 小时前
大数据开发环境的安装,配置(Hadoop)
大数据·hadoop·分布式
Angindem4 小时前
SpringClound 微服务分布式Nacos学习笔记
分布式·学习·微服务
龙仔72512 小时前
离线安装rabbitmq全流程
分布式·rabbitmq·ruby
〆、风神14 小时前
Spring Boot 整合 Lock4j + Redisson 实现分布式锁实战
spring boot·分布式·后端
胡萝卜糊了Ohh15 小时前
kafka
分布式·kafka
桑榆080618 小时前
Spark-Streaming核心编程
大数据·分布式·spark
nbsaas-boot19 小时前
分布式微服务架构,数据库连接池设计策略
分布式·微服务·架构