分布式系统CAP理论与BASE理论

news2024/11/16 12:34:15

CAP理论

Cap理论又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式系统来说,不可能同时满足如下三点:

  • 一致性(Consistency)

  • 可用性(Availability)

  • 分区容错性(Partition tolerance)(以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。)

  • 一致性

所谓一致性,指的是数据的一致性,在一个分布式数据库系统中,所有集群节点都保持同一份最新数据副本,所有客户端同一时刻访问同一个数据都将是一致的,即“all nodes see the same data at the same time”。

如果所有客户端能时刻看到一致的数据,不存在中间状态,这个叫强一致性。如果允许存在中间状态,经过一段时间数据达到一致性,这个叫最终一致性,或说弱一致性,后面的BASE理论将介绍最终一致性。

  • 可用性

可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内获取一个非错响应,但是不保证获取的数据为最新数据。“有限的时间内”是指,对于用户的一个操作请求,系统必须能够在指定的时间内返回对应的处理结果,如果超过了这个时间范围,那么系统就被认为是不可用的。简单来说就是请求必须要有非错响应,假设不响应或是错误的响应(比如http请求返回404,400等)则认为是不可用。

  • 分区容错性

分区容错性,通常是指发生了网络分区,分布式系统在这种情况下需要有容错能力。这么说有点抽象,下面给出一个图及实际网络分区以说明:

如上图,在一个分布式数据库系统中,由于网络原因,原来作为一个整体的集群系统被一分为二,假设现在这两个分区目前都能被客户端访问到,假设都能写成功 。那么结果就是同一个数据出现不一致,这种情况是牺牲了一致性,保全了可用性()。如果出现分区后,系统不允许写,或者是拥有多数节点的分区允许写,当网络分区恢复成一个整体后,数据是能达到一致的,这种情况牺牲可用性(分区二不允许写)。简单来说,分区容错性指的是,当网络分区出现,分布式系统必须就当前操作在一致性与可用性之间作出选择。由于网络分区并不是可控的,所以分区容错性是Cap理论中必须要实现的,或说是前提,分布式系统在满足P的情况下选择AP或是CP。

因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。 比如 ZooKeeper、HBase 就是 CP 架构,强调一致性,Cassandra、Eureka 就是 AP 架构,注重可用性,Nacos 不仅支持 CP 架构也支持 AP 架构,可根据实际业务场景进行选择。

在发生网络发区的情况下,强一致性和强可用性是矛盾的。假设发生网络分区后(如上图分区一与分区二),为了保证一致性(C),分区一与分区二必须有一个分区处于不可写或说写了不会提交的状态。那么这个就违反了可用性(A)原则。假设两个分区都可写(保证了可用性),很明显,当写的是同一个数据的情况,一致性就被违反了。

BASE理论

待完善

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

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

相关文章

第二十一章网络通信

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信,必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称,是一种网络协议。Internet 网络采用的协议是TCP/IP协议,其全称是Transmission …

粤能环保亮相迪拜COP28,智能技术铸就运河城市可持续未来

在全球应对气候变化的重要会议——迪拜COP28大会上,运河城市面临的独特环境挑战引起了广泛关注。随着城市化进程的加快,运河城市在处理固体废物、减少温室气体排放以及维持水资源安全方面面临着严峻考验。智能垃圾分类作为应对这些挑战的有效途径&#x…

Efficient physics-informed neural networks using hash encoding

论文阅读:Efficient physics-informed neural networks using hash encoding Efficient physics-informed neural networks using hash encoding简介方法PINN哈希编码具有哈希编码的 PINN 实验Burgers 方程Helmholtz 方程N-S 方程训练效率对比 总结 Efficient physi…

将项目代码上传到github

文章目录 1. 上传步骤1.1. 设置保存项目代码的文件夹1.2. 打开git1.3. 连接到github仓库1.4. 将本地文件上传到github 附录. git 常用命令 摘要:该文章主要从上传代码步骤讲起,关于git下载和其环境配置没有涉及到。 1. 上传步骤 1.1. 设置保存项目代码…

Java-网络通信总结

文章目录 网络程序设计基础局域网与互联网 网络协议IP协议TCP/IP 协议端口域套接字 TCP 程序InterAddress 类ServerSocket 类 UDP 程序DatagramPacket 类DatagramSocket 类 网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素…

【Pyqt】QObject::connect: Cannot queue arguments of type ‘QTextCursor‘

问题说明 文本框接收到新的数据 不会自动滚动,并提示警告 QObject::connect: Cannot queue arguments of type ‘QTextCursor’ (Make sure ‘QTextCursor’ is registered using qRegisterMetaType().) 原因 线程回来的槽函数里面 调用了ui的代码 我们不能通过线程…

刚刚,深兰科技在国际顶级会议EMNLP竞赛中再夺两冠

12月6日至10日,自然语言处理领域的国际顶级会议EMNLP(自然语言处理中的经验方法会议)在新加坡召开,研究人员、学者和业界专业人士齐聚一堂,展示和讨论该领域的最新研究成果、进展和创新。 会上公布了各项任务竞赛的获奖名单,深兰科…

JumpServer初探

JumpServer资产,用户关系如图所示。 资产管理下有资产列表和系统用户,系统用户分为特权用户和普通用户。资产列表下管理的是服务器,而特权用户就是JumpServer用来登录服务器的账号,因此特权用户需要拥有较高的权限,比…

计算机基础知识67--BBS

迁移表格 # 以后你写的每个python项目,都必须有一个txt文件叫 requirements.txt,里面放了当前项目所有的依赖,别人拿到项目---》需要执行 pip install -r requirements.txt # 装好该项目所有依赖 django3.2.20 # 模块 pillow mysqlclient # 主体项目功…

C语言精选——选择题Day39

第一题 1. 有下面的定义,则 sizeof(s) 为多少? char *s "\ta\017bc"; A:9 B:5 C:6 D:7 答案及解析 C 本题涉及到了转义字符 \t 是水平制表符,算一个字节 \017 是表示八进制数&#…

【开放集检测OSR】open-set recognition(OSR)开集识别概念辨析

开放集学习 Openset Learning 主动学习 Active Learning 例外检测 Out-of-Distribution open-set recognition(OSR)开集识别 anomaly detection和outlier detection 文章目录 OOD检测OSR开放集识别OSR开放集识别在训练和测试阶段的数据集使用数据分布似然函数OSR开放集识别的特…

VMware安装OpenEuler(安装界面)

本文中使用的OpenEuler版本:22.03 LTS SP2 VMware:17.0.0 一、下载镜像 根据CPU和场景,按需下载 https://www.openeuler.org/zh/download/?versionopenEuler%2022.03%20LTS%20SP2 二、初始化VmWare 三、配置操作系统 四、安装操作系统 …

爱智EdgerOS之深入解析如何在EdgerOS中使用SQLite3数据库引擎

一、SQLite 简介 数据管理是应用开发者最常遇到的挑战之一,无论是支付宝的余额,或是京东购物车里的商品,都需要存储在对应服务后端的数据库中,以满足用户查询、转账、购买等各种各样的使用场景。EdgerOS 智能边缘计算操作系统内置…

CCF 202104-2:邻域均值--C++

#include<iostream> #include<bits/stdc.h>using namespace std;int A[601][601]; int n;//长宽都为n个像素double FindNeighborSum(int i,int j,int r,int A[][601]) {int sum0;//像素和 int gs0;//领域 中的像素个数 for(int xi-r;x<ir;x)//找到每一个领域像素…

Numpy数组的运算(第7讲)

Numpy数组的运算(第7讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

盘点11月Sui生态发展,了解Sui的近期成长历程!

11月是Web3的“回暖期”&#xff0c;行业持续展现增长趋势。Sui紧随行业脚步&#xff0c;开展了一系列生态活动。其中历时一个多月的Quest 3游戏活动顺利结束并公布奖励&#xff0c;在多地区成功举办Move和Sui生态黑客松&交流会&#xff0c;还有针对中文社区开发者教育的星…

一.初始typescript

什么是ts 首先我们要确认typescript是一个语言&#xff0c;是等同于JavaScript层级得&#xff0c;并不是一些人认为得是JavaScript得类型规范工具或者插件。 ts与js的差异 从type script这个名字就可以看出&#xff0c;ts其实是JavaScript的一个类型化超集&#xff0c;它增…

低多边形游戏风格3D模型纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

[linux] kaggle 数据集用linux下载

你可以通过以下步骤获取Kaggle的下载链接并在Linux中进行下载&#xff1a; 首先&#xff0c;确保你已经安装了Python和Kaggle API。如果没有安装&#xff0c;你可以通过以下命令安装&#xff1a; pip install kaggle 接着&#xff0c;你需要在Kaggle网站上获取API Token。登录…

大数据技术1:大数据发展简史

前言&#xff1a;学习大数据技术&#xff0c;知道会用已经够了&#xff0c;但是要想走得更远&#xff0c;应该了解它发展的来龙去脉&#xff0c;为何会有新的技术/工具的出现&#xff0c;相比老的技术有什么样的进步。 1、传统数据处理系统存在的问题 随着信息时代互联网技术爆…