分布式事务-理论基础


个人名片:

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

本项目基于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理论三个思想:

  • 基本可用
  • 软状态
  • 最终一致
相关推荐
打工的小王1 分钟前
消息队列之Kafka(一)搭建服务
分布式·kafka
清风~徐~来1 小时前
【视频点播系统】Redis-SDK 介绍及使用
数据库·redis·wpf
鸡蛋豆腐仙子1 小时前
redis及实现分布式锁的原理
java·redis·分布式·学习·缓存
棉晗榜2 小时前
WPF DataGrid鼠标滚不动,划不动解决
wpf
baivfhpwxf20232 小时前
wpf自适应布局
wpf
蒸蒸yyyyzwd2 小时前
分布式学习笔记 p5-13
笔记·分布式·学习
好家伙VCC2 小时前
**发散创新:用 Rust构建多智能体系统,让分布式协作更高效**在人工智能快速演进的今天,**多智能体系统(
java·人工智能·分布式·python·rust
C澒2 小时前
从单体到分布式:SLDS 2.0 全球物流履约网络架构演进之路
前端·分布式·架构·系统架构·教育电商·交通物流
Jack_David2 小时前
kafka_2.13-4.1.1集群安装
java·分布式·kafka
jiuweiC5 小时前
kafka重平衡问题-golang
分布式·golang·kafka