1.分布式-理论

news2024/11/16 22:56:38

目录

一、什么是分布式系统

二、CAP理论

1.一致性Consisency

2.可用性(Availability)

3.分区容错性(Partition tolrance)

三、BASE理论

1.Basically Available(基本可用)

2.Soft state(软状态)

3.Eventually consistent(最终一致性)

四、什么是分布式事务

1.本地事务ACID

2.分布式事务

五、分布式事务解决方案

1.二阶段提交2PC

2.三阶段提交3PC

3.TCC(Try-Confirm-Cancel)

4.Saga

5.基于消息的最终一致性:

6.最大努力通知

7.事务补偿机制


一、什么是分布式系统

一个系统各组件分别部署在不同服务器,彼此通过网络通信和协调的系统。

  • 可以指多个不同组件分布在网络上互相协作,比如说电商网站
  • 也可以一个组件的多个副本组成集群,互相协作如同一个组件,比如数据存储服务中为了数据不丢失而采取的多个服务备份冗余,当数据修改时也需要通信来复制数据

分布式最早出现的目地首先是解决单点问题,避免单点故障,然后解决了性能问题。

二、CAP理论

CAP理论说的是在一个分布式计算机系统中,一致性,可用性和分区容错性这三种保证无法同时得到满足,最多满足两个。

1.一致性Consisency

一致性指"all nodes see the same data at the same time",即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。

2.可用性(Availability)

可用性指"Reads and writes always succeed",即服务一直可用,而且是正常响应时间。

对于可用性的衡量标准如下:

3.分区容错性(Partition tolrance)

分区容错性指"the system continues to operate despite arbitrary message l
ss or failure of part of the system",即分布式系统在遇到某节点或网络分区故障的
时候,仍然能够对外提供服务。分区容忍性分是布式系统具备的基本能力。

三、BASE理论

BASE(Basically Available、Soft state、Eventual consistency)是基于CAP理论逐步演化而来的,核心思想是即便不能达到强一致性(Strong consistency),也可以根据应用特点采用适当的方式来达到最终一致性(Eventual consistency)的效果。

两个对冲理念:ACID和BASE

  • ACID是传统数据库常用的设计理念,追求强一致性模型。
  • BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。

1.Basically Available(基本可用)

基本可用本质是一种妥协,也就是出现节点故障或者系统过载时,通过牺牲非核心
功能的可用性,保障核心功能的稳定运行。

实现基本可用的几个策略:

  1. 流量削峰
  2. 延迟响应,异步处理
  3. 体验降级
  4. 过载保护熔断/限流
  5. 故障隔离

2.Soft state(软状态)

弱状态允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延迟。

原子性是硬状态,要求多个节点的数据副本都是一致的。

3.Eventually consistent(最终一致性)

分布式系统不能一直是软状态,必须有个时间期限。在期限过后,应当保证所有副本保持数据
一致性。从而达到数据的最终一致性。这个时间期限取决于网络延时,系统负载,数据复制
方案设计等等因素。

四、什么是分布式事务

分布式事务是相对本地事务而言的,对于本地事务,利用数据库本身的事务机制,
就可以保证事务的ACID特性

1.本地事务ACID

ATOMICITY

原子性:一个事务中所有操作必须全部完成,要么全部不完成;

CONSISTENCY

一致性:在事务开始或结束时,数据库应该在一致状态;

ISOATION

隔离性:事务与事务之间不会互相影响,一个事务的中间状态不会被其他事务感知;

DURABILITY

持久性:一旦事务完成,就不能返回,事务对数据所做的变更完全保存在数据库中;

2.分布式事务

在分布式环境下,会涉及到多个数据库。分布式事务其实就是将对一个库事务的概念
扩大到了对多个库的事务。目的是为了保证分布式系统中的数据一致性。

分布式事务处理的关键是:

  1. 需要记录事务在任何节点所做的所有动作;
  2. 事务进行的所有操作要么全部提交,要么全部回滚;

五、分布式事务解决方案

1.二阶段提交2PC

这是最传统的分布式事务协议。它分为两个阶段:准备阶段和提交阶段。在准备阶段,事务协调者询问所有参与节点是否准备好提交事务;如果所有节点都回复“准备好”,则进入提交阶段,协调者命令所有节点提交事务;如果有任何节点无法准备,协调者命令所有节点回滚。

2PC缺点:

1.性能阻塞问题

执行过程中,所有参与节点都是事务阻塞性的,当参与者占有公共资源时,其他第三方节点访问公共资源就不得不处于阻塞状态,为了数据的一致性而牺牲了可用性,对性能影响较大,不适合高并发高性能场景

2.可靠性问题

2PC非常依赖协调者,当协调者发生故障时,尤其是第二阶段,那么所有的参与者就会都处于锁定事务资源的状态中,而无法继续完成事务操作(如果是协调者挂掉,可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题)

3.数据一致性问题

在阶段二中,当协调者向参与者发送commit请求之后,发生了局部网络异常或者在发送commit请求过程中协调者发生了故障,这回导致只有一部分参与者接受到了commit请求。而在这部分参与者接到commit请求之后就会执行commit操作。但是其他部分未接到commit请求的机器则无法执行事务提交。于是整个分布式系统便出现了数据不一致性的现象。

4.二阶段无法解决的问题

协调者在发出 commit 消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了,那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交。

2.三阶段提交3PC

3PC,三阶段提交协议,是二阶段提交协议的改进版本。三阶段提交有两个改动点:

  1. 在协调者和参与者中都引入超时机制
  2. 为了解决2PC中协调者单点故障的问题,3PC引入了预提交阶段

所以3PC分为3个阶段:CanCommit 准备阶段、PreCommit 预提交阶段、DoCommit 提交阶段

3PC缺点

与2PC相比,3PC降低了阻塞范围,并且在等待超时后,协调者和参与者会中断事务,避免了协调者单点问题,阶段三中协调者出现问题时,参与者会继续提交事务。但数据不一致问题依然存在,当在参与者收到 preCommit 请求后等待 doCommit 指令时,此时如果协调者请求中断事务,而协调者因为网络问题无法与参与者正常通信,会导致参与者继续提交事务,造成数据不一致。

2PC和3PC都无法保证数据绝对的一致性,一般为了预防这种问题,可以添加一个报警,比如监控到事务异常的时候,通过脚本自动补偿差异的信息。

3.TCC(Try-Confirm-Cancel)

TCC模型将事务操作分为三个阶段:Try(预留资源)、Confirm(确认提交)和Cancel(取消释放)。在Try阶段,每个参与者尝试预留资源但不实际提交,如果所有参与者都能预留成功,则在Confirm阶段真正提交事务;否则,在Cancel阶段撤销之前的操作。

4.Saga

Saga通过一系列的短事务(也称为子事务)来模拟长事务,每个子事务都是可补偿的。如果某个子事务失败,Saga会执行之前所有子事务的补偿操作,从而达到事务的最终一致状态。

5.基于消息的最终一致性:

在这种模式下,服务之间通过消息队列异步通信,利用消息的发送与确认机制保证最终一致性。通常包括发布/订阅模型和事件驱动架构,如 Saga 也可以通过这种方式实现。

6.最大努力通知

最大努力通知也称为定期校对,是对MQ事务方案的进一步优化。它在事务主动方增加了消息校对的接口,如果事务被动方没有接收到主动方发送的消息,此时可以调用事务主动方提供的消息校对的接口主动获取。

最大努力通知,事务主动方尽最大努力(重试,轮询....)将事务发送给事务接收。被动方也可调用接口校对并消费。

7.事务补偿机制

通过业务层面的设计实现事务的补偿逻辑,允许服务在失败后通过反向操作恢复到一致状态,适用于对实时性要求不高的场景。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1665472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

天机学堂—学习辅助功能(含场景问答和作业)

我的课表 需求分析 原型图 管理后台 用户端 流程图 数据设计 接口设计 支付成功报名课程后, 加入到我的课表(MQ)分页查询我的课表查询我正在学习的课程根据id查询指定课程的学习状态删除课表中的某课程 代码实现 数据表设计 添加课程到课表(非标准接口&#x…

ApiHug Official Website

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | MarketplaceApiHug-H…

OpenHarmony 实战开发——分布式硬件管理详解

前言 分布式硬件是 OpenHarmony 提供的一个分布式能力,能将多种设备组成一个“超级终端”,使用户根据现实需要和硬件能力,选择合适的硬件提供服务,灵活运用硬件进行资源分配和按需组合,充分发挥各类硬件设备的能力&am…

Jenkins android 自动打包安卓 centos8.5 运维系列五

1 新建项目android #cat android.sh #!/bin/bash rm -rf /data/.jenkins/workspace/android/app/build/outputs/apk/debug/* rm -rf /data/.jenkins/workspace/android/app/build/outputs/apk/release/* cd /data/.jenkins/workspace/android/app source /etc/profile g…

WEB前端复习——CSS

CSS:层叠样式表 将显示样式与内容分开 基本语法&#xff1a; 选择器{ 规则; } ①标签选择器&#xff1a;以HTML标签名为选择 <style>p{color: red;} </style> <body><p>你好</p> </body> ②id选择器&#xff1a;一次性的 以#号定义 &l…

在做题中学习(57):寻找数组的中心下标

724. 寻找数组的中心下标 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;前缀和后缀和 思路&#xff1a;要看一个数是不是中心下标&#xff0c;就看他前面数的和 与 后面数的和 相不相等。 1.i前面数的和&#xff0c;是[0,i-1] 的前缀和&#xff0c;i后面数的和&am…

音视频入门基础:像素格式专题(2)——不通过第三方库将RGB24格式视频转换为BMP格式图片

音视频入门基础&#xff1a;像素格式专题系列文章&#xff1a; 音视频入门基础&#xff1a;像素格式专题&#xff08;1&#xff09;——RGB简介 音视频入门基础&#xff1a;像素格式专题&#xff08;2&#xff09;——不通过第三方库将RGB24格式视频转换为BMP格式图片 一、引…

STM32-07-STM32_外部中断

文章目录 STM32 中断系统1. 中断2. NVIC3. EXTI4. AFIO5. 中断配置步骤6. 外部中断代码 STM32 中断系统 1. 中断 目的&#xff1a;中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。中断过程&#xff1a;当CPU正在处理某事件的时候外界发生了紧急事件请求 &#…

ESP-01S刷固件ESP8266_NonOS_AT_Bin_V1.7.5_1 笔记240510

ESP-01S刷固件ESP8266_NonOS_AT_Bin_V1.7.5_1 笔记240510 固件下载地址 ESP-AT固件页面: https://www.espressif.com.cn/zh-hans/products/sdks/esp-at/resource 直接下载ESP8266 NonOS AT Bin V1.7.5.zip: https://www.espressif.com.cn/sites/default/files/ap/ESP8266_No…

32.768kHz晶振的时间精度问题及其解决方法

32.768kHz晶振因其稳定性高、功耗低&#xff0c;被广泛应用于实时时钟(RTC)、计时电路及低功耗电子产品中。然而&#xff0c;在某些情况下&#xff0c;这些晶振可能出现时间偏差&#xff0c;影响设备正常工作。以下是可能导致32.768kHz晶振时间误差的原因及相应的解决策略。 温…

Snort规则编写

1&#xff09;TCP NULL端口扫描的特征&#xff1a; 扫描者发送一个TCP SYN包到目标主机的某个端口&#xff0c;但不设置任何TCP标志位&#xff08;即flag为NULL&#xff09;。 如果端口关闭&#xff0c;目标主机会回应一个RST&#xff08;复位&#xff09;和ACK&#xff08;确认…

数据结构之图——探索图论的奥秘

前言 在这篇文章中&#xff0c;我们一起来看看我们生活中都会用到&#xff0c;但却不那么熟悉的数据结构——图&#xff08;英语&#xff1a;graph&#xff09;。我们看下百科定义&#xff1a; 在计算机科学中&#xff0c;图&#xff08;英语&#xff1a;graph&#xff09;是一…

py黑帽子学习笔记_网络编程工具

tcp客户端 socket.AF_INET表示使用标准IPV4地址和主机名 SOCK_STREAM表示这是一个TCP客户端 udp客户端 udp无需连接&#xff0c;因此不需要client.connect这种代码 socket.SOCK_DGRAM是udp的 tcp服务端 server.listen(5)表示设置最大连接数为5 发现kill server后端口仍占用…

大模型微调之 在亚马逊AWS上实战LlaMA案例(九)

大模型微调之 在亚马逊AWS上实战LlaMA案例&#xff08;九&#xff09; 代码阅读 src/llama_recipes/inference/prompt_format_utils.py 这段代码是一个Python模块&#xff0c;它定义了几个类和模板&#xff0c;用于生成安全评估的提示文本。以下是对每一行代码的注释和提示词…

Datax数据采集

一、Datax介绍 官网&#xff1a; DataX/introduction.md at master alibaba/DataX GitHub DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。 DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、…

MySQL innodb_buffer_pool_size 相关常用语句

对于MySQL速度慢的问题&#xff0c;除了优化 SQL 以外&#xff0c;应该必须优先想到的即使 MySQL 数据库的 innodb_buffer_pool_size 配置问题。 一般来说&#xff0c;innodb_buffer_pool_size 的默认大小都是很小的&#xff0c;尤其是 win 下其默认大小更是只有离谱的 8M。Li…

2024 年最新本地、云服务器安装部署 miniconda 环境详细教程(更新中)

Anaconda 概述 Anaconda 是专门为了方便使用 Python 进行数据科学研究而建立的一组软件包&#xff0c;涵盖了数据科学领域常见的 Python 库&#xff0c;并且自带了专门用来解决软件环境依赖问题的 conda 包管理系统。主要是提供了包管理与环境管理的功能&#xff0c;可以很方便…

土壤墒情自动监测站—墒情异常数据报警提示

TH-TS600土壤墒情自动监测站通常配备有预警提示功能&#xff0c;用于在墒情出现异常情况时及时向用户发出警告。这一功能对于农业生产至关重要&#xff0c;因为它可以帮助农民或农田管理者及时发现土壤墒情的变化&#xff0c;并采取相应的措施来确保作物健康生长。 土壤墒情自动…

Excel实用技巧持续学习

1、Excel高效设置图标格式&#xff1a; 2、饼图可以统一设置数据标签在图外面&#xff01;&#xff01; 环形图不可以&#xff0c;但是可以中间手动加上白色圆形&#xff0c;将饼图变为圆环。 可以设置标签的文本显示&#xff1a; 3、饼图和环形图最好进行排序&#xff01;显得…

睿尔曼机械臂ROS控制

下载git工程 git clone https://github.com/RealManRobot/rm_robot.git安装配置 catkin build rm_msgs source devel/setup.bash catkin build source setup.bash这里注意&#xff0c;如果采用setup.sh多半不会成功&#xff0c;必须要source setup.bash文件&#xff0c;ros才…