分布式事务CAP与BASE简介
一、CAP理论
CAP理论是由Eric Brewer教授在2000年举⾏的ACM研讨会上提出的⼀个著名猜想:⼀致性(Consistency)、可⽤性(Availability)、分区容错(Partition-tolerance),并且在分布式系统中这三个条件无法被同时满⾜,并且最多只能满⾜其中两个!2003年,MIT的Gilbert和Lynch正式证明了这三者确实是不可兼得的。此后,CAP理论被奉为分布式系统领域中的理论基石。
1、CAP理论内容
- 1、Consistency 数据一致性 (All nodes see the same data at the same time)
即更新操作成功并返回客户端后,所有的节点在同一时间数据完全一致,一致性的问题在集群中是不可避免的。从服务端来看,是数据更新如何复制到整个系统,以保证数据一致性。这里所说的一致性是强一致性 - 2、Availability 完全可用性 (Reads and writes always succeed)
即服务能够一直可用,读写操作能正常响应,并且是在正常的时间内进行响应,不会出现访问失败或者访问超市的情况 - 3、Partition Tolerance 分区容错性
当系统节点间网络中断,系统也要能够对外提供服务。
2、分布式系统能同时满足CAP三个条件吗?答案是:不能!
当集群中节点间网络中断,集群因网络中断被分为A和B两个分区,如果该集群对外完全可用,但是因为A和B两个集群不能通讯,无法做到数据同步,就无法保障数据一致性,故无法同时满足三个条件。
同时满足CP条件,当分区发生时,为了保证数据一致性,所有的操作将会被阻塞,直到数据一致性结果达到,所有的操作将会被返回超时
同时满足AP条件,当分区发生时,为了保证集群对外完全可用,所有的操作会正常返回,但是数据会不一致
同时满足AC条件,放弃P条件,即该系统无法容忍分区发生,当网络正常,系统正常对外服务,当分区发生,系统无法对外提供服务,所以三个要求无法同时满足,只能同时满足其中两个要求。
3、关于P的理解
如果我们放弃P选项,即系统无法容忍分区的情况出现,即当分区出现的时候系统无法对外服务,会出现什么情况呢?现实情况下我们面对的是一个不稳定的网络,网络中断、网络丢包、机器容易宕机的情况时有发生,有概率使系统发生分区。如果这些情况发生导致系统不可用,与分布式高可用,高容错的设计理念相悖。所以P选项是必选的,所以3选2就变成了2选一,即Consistency和Availability 选择一个。
实际上,CAP中的Consistency 数据一致性是强一致性,要求集群中的更新操作像单节点一样,具有原子性,其实在实际运用中可以放宽一致性的要求; Availability (完全可用性)与上述类似,要求读写操作能正常成功响应,并且是在正常的时间内进行响应,但是在实际应用中可以放宽要求。这就延伸出了BASE理论。
二、BASE理论
BASE理论是CAP理论的一个可用性实现,是对CAP理论中一致性和可用性权衡的结果。该理论是eBay的架构师Dan Pritchett 源于对大规模分布式系统的实践总结,BASE理论是对CAP理论的延伸,其核心思想是即使无法做到强一致性(Strong Consistency ,CAP的一致性就是强一致性),但是应用可以采取合适的方法达到最终一致性(Eventual Consistency)。BASE理论是指 基本可用(Basically Available )、软状态(Soft State )、最终一致性(Eventual Consistency)
基本可用(Basically Available )
基本可用的意义在于,当系统出现真正的故障时,可以提供一些降级的服务,而不是不提供服务。基本服务通常会在两方面有所损失:响应时间和功能
响应时间:处理请求的相应时长会受到影响,会比正常的处理时间长。
比如正常的响应时间是30ms,但是为了保证数据一致性,要做数据同步,所以响应的时间会延长到1s或者3s不等,或者超时;当前端访问后端连接不上时,可以再选取其他节点连接,其间会增加处理时间。
功能:与正常情况下提供的功能不一致,通常是一种降级后的功能,保证用户基本功能或者核心功能可用,其他功能不可用。比如双11当天无法提供退换货的功能
软状态(Soft State )
CAP中的数据一致性,要求所有的节点在同一时间数据完全一致,这是一种“硬状态”,是完全一致性,但是与之对应的是“软状态”。软状态指的是允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点中的数据副本存在数据延时。
例如 zookeeper集群中只需要保证大部分节点数据一致性就可以。
最终一致性
最终一致性是指在软状态度过一段时间后,保证系统的所有副本最后都达到数据完全一致的状态,这个时间和网络延时、系统负载、数据复制等因素有关。
最终一致性分为以下几种情况,简单介绍如下:
(1)因果一致性(Causal consistency)
当一个节点在完成数据更新后,同步该节点的数据给另外其他节点,则新的节点对该数据的访问和修改都基于同步过来的数据。与此同时,其他还未更新的节点还使用老数据。
(2)顺序一致性
(3)线性一致性
相关文章:
分布式事务CAP与BASE简介
一、CAP理论 CAP理论是由Eric Brewer教授在2000年举⾏的ACM研讨会上提出的⼀个著名猜想:⼀致性(Consistency)、可⽤性(Availability)、分区容错(Partition-tolerance),并且在分布式系…...

Integer中缓存池讲解
文章目录 一、简介二、实现原理三、修改缓存范围 一、简介 Integer缓存池是一种优化技术,用于提高整数对象的重用和性能。在Java中,对于整数值在 -128 到 127 之间的整数对象,会被放入缓存池中,以便重复使用。这是因为在这个范围…...
PHP Smarty模板如何与MVC框架集成?
首先,让我们来了解一下这两个工具。PHP Smarty模板是一种模板引擎,它可以帮助我们分离模板和逻辑,让代码更加清晰和易于维护。而MVC(Model-View-Controller)是一种常用的Web应用程序架构模式,它将应用程序分…...

spring cloud alibaba 应用无法注册到sentinel dashboard
一。技术背景 由于升级jdk17的需要 我们将项目中的 spring cloud spring cloud alibaba 以及springboot进行了升级 各版本如下 spring cloud 2021.0.5 spring cloud alibaba 2021.0.5.0 spring boot 2.6.13 二。问题表现 当启动项目服务后,服务无法注册到 sentin…...
如何在vue3中加入markdown语法
1、首先需要安装 md-editor-v3 yarn add md-editor-v3 或者是在vue图形化界面中直接搜索 md-editor-v3 进行安装。 2、引入该编辑页 引入可以参考这个,根据自己的需求进行修改和添加。 <template><md-editor v-model"text"/> </templat…...

R语言的物种气候生态位动态量化与分布特征模拟实践技术
在全球气候快速变化的背景下,理解并预测生物种群如何应对气候变化,特别是它们的地理分布如何变化,已经变得至关重要。利用R语言进行物种气候生态位动态量化与分布特征模拟,不仅可以量化描述物种对环境的需求和适应性,预…...

大数据Flink(六十一):Flink流处理程序流程和项目准备
文章目录 Flink流处理程序流程和项目准备 一、Flink流处理程序的一般流程...

C语言快速回顾(一)
前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。C/C是音视频必…...

Element Plus报错:ResizeObserver loop completed with undelivered notifications.
el-selected踩坑:el-selected 显示下拉框 mouseover 时报错!!! 原来是属性 popper-append-to-body 被废除,改为 teleported。 element ui <el-select:popper-append-to-body"false"value-key"id&q…...

scope穿透(二)
上篇文章已经讲了,如何穿透样式,今天我们进入element-ui官网进行大规模的穿透处理。 1.输入框 <template><div class""><el-input v-model"input" placeholder"请输入内容"></el-input></div> </template>…...

2023+HuggingGPT: Solving AI Tasks with ChatGPT and itsFriends in Hugging Face
摘要: 语言是llm(例如ChatGPT)连接众多AI模型(例如hugs Face)的接口,用于解决复杂的AI任务。在这个概念中,llms作为一个控制器,管理和组织专家模型的合作。LLM首先根据用户请求规划任务列表,然后为每个任务分配专家模…...

Ant Design Mobile是什么?
在当今的数字时代,移动应用程序和网页设计已经成为各行各业的重要组成部分。用户界面的设计直接影响到用户体验和产品的成功。为了帮助设计师在移动设计领域更好,Antdesignmobile应运而生。Antdesignmobile是蚂蚁金服的移动UI设计语言和框架,…...
深入理解设计模式-行为型之模板(和回调区别联系)
概述 模板设计模式(Template Design Pattern)是一种行为型设计模式,它定义了一个算法的骨架,将算法的一些步骤延迟到子类中实现。模板设计模式允许子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板设计模式的核心思想…...

LabVIEW控制通用工作台
LabVIEW控制通用工作台 用于教育目的的计算机化实验室显着增长,特别是用于运动控制的实验室。它们代表了各种工业应用中不断扩大的领域,并成为以安全的方式使用通常昂贵或独特的实验室设备进行实时实验的宝贵工具。NI LabVIEW等软件应用程序的开发和不断…...

什么是事务,并发带来的事务问题以及事务隔离级别(图文详解)
一、什么是事务? 简单说就是逻辑上的一组操作,要么都执行,要么都不执行。 举个例子,假如小明要给小红转账100元,这个转账会涉及到两个关键操作:①将小明的余额减少100元。 ②将小红的余额增加100元 。但…...
【MySQL】MySQL数据库的delete from table和truncate table之间的区别
DELETE FROM table 和 TRUNCATE TABLE 是两种不同的数据库操作,用于从MySQL数据库的表中删除数据。它们有以下区别: 操作方式:DELETE FROM table 是一种逐行删除的操作,它会逐个删除表中的每一行数据,并且可以带有条件…...

强制Edge或Chrome使用独立显卡【WIN10】
现代浏览器通常将图形密集型任务卸载到 GPU,以改善你的网页浏览体验,从而释放 CPU 资源用于其他任务。 如果你的系统有多个 GPU,Windows 10 可以自动决定最适合 Microsoft Edge 自动使用的 GPU,但这并不一定意味着最强大的 GPU。 …...

easyx图形库基础:3实现弹球小游戏
实现弹球小游戏 一.实现弹球小游戏:1.初始化布:2.初始化一个球的信息:3.球的移动和碰撞反弹4.底边挡板的绘制和移动碰撞重置数据。 二.整体代码: 一.实现弹球小游戏: 1.初始化布: int main() {initgraph(800, 600);setorigin(40…...

vue基础知识三:v-show和v-if有什么区别?使用场景分别是什么?
一、v-show与v-if的共同点 我们都知道在 vue 中 v-show 与 v-if 的作用效果是相同的(不含v-else),都能控制元素在页面是否显示 在用法上也是相同的 <Model v-show"isShow" /> <Model v-if"isShow" />当表达式为true的时候&#…...

Python Opencv实践 - 图像旋转
import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR)#图像旋转 #Opencv中的旋转,首先通过cv.getRotationMatrix2D获得旋转矩阵 #cv.getRotationMatrix2D(center,ang…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...