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

分布式事务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、引入该编辑页 引入可以参考这个&#xff0c;根据自己的需求进行修改和添加。 <template><md-editor v-model"text"/> </templat…...

R语言的物种气候生态位动态量化与分布特征模拟实践技术

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

大数据Flink(六十一):Flink流处理程序流程和项目准备

文章目录 Flink流处理程序流程和项目准备 一、Flink流处理程序的一般流程...

C语言快速回顾(一)

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

Element Plus报错:ResizeObserver loop completed with undelivered notifications.

el-selected踩坑&#xff1a;el-selected 显示下拉框 mouseover 时报错&#xff01;&#xff01;&#xff01; 原来是属性 popper-append-to-body 被废除&#xff0c;改为 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

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

Ant Design Mobile是什么?

在当今的数字时代&#xff0c;移动应用程序和网页设计已经成为各行各业的重要组成部分。用户界面的设计直接影响到用户体验和产品的成功。为了帮助设计师在移动设计领域更好&#xff0c;Antdesignmobile应运而生。Antdesignmobile是蚂蚁金服的移动UI设计语言和框架&#xff0c;…...

深入理解设计模式-行为型之模板(和回调区别联系)

概述 模板设计模式&#xff08;Template Design Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将算法的一些步骤延迟到子类中实现。模板设计模式允许子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板设计模式的核心思想…...

LabVIEW控制通用工作台

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

什么是事务,并发带来的事务问题以及事务隔离级别(图文详解)

一、什么是事务&#xff1f; 简单说就是逻辑上的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 举个例子&#xff0c;假如小明要给小红转账100元&#xff0c;这个转账会涉及到两个关键操作&#xff1a;①将小明的余额减少100元。 ②将小红的余额增加100元 。但…...

【MySQL】MySQL数据库的delete from table和truncate table之间的区别

DELETE FROM table 和 TRUNCATE TABLE 是两种不同的数据库操作&#xff0c;用于从MySQL数据库的表中删除数据。它们有以下区别&#xff1a; 操作方式&#xff1a;DELETE FROM table 是一种逐行删除的操作&#xff0c;它会逐个删除表中的每一行数据&#xff0c;并且可以带有条件…...

强制Edge或Chrome使用独立显卡【WIN10】

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

easyx图形库基础:3实现弹球小游戏

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

vue基础知识三:v-show和v-if有什么区别?使用场景分别是什么?

一、v-show与v-if的共同点 我们都知道在 vue 中 v-show 与 v-if 的作用效果是相同的(不含v-else)&#xff0c;都能控制元素在页面是否显示 在用法上也是相同的 <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中的旋转&#xff0c;首先通过cv.getRotationMatrix2D获得旋转矩阵 #cv.getRotationMatrix2D(center,ang…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...