分布式系统:ACID与CAP

ACID: 在计算机科学中,ACID是数据库事务的一组特性,旨在保证数据的有效性,即使在出现错误、断电和其他意外情况下也能保持数据的一致性。在数据库的上下文中,满足ACID属性的一系列数据库操作(可以被视为对数据的单一逻辑操作)称为“事务”。例如,从一个银行账户向另一个账户转账,即使涉及多个更改(比如从一个账户借记并向另一个账户贷记),也视为单一事务。

CAP:在理论计算机科学中,CAP定理(也称为Brewer定理,以计算机科学家Eric Brewer命名)规定任何分布式数据存储只能提供三个特性中的两个(一致性、可用性、分区容错性)。

概要

•ACID处理个体节点的数据一致性 = 事务级别•CAP处理整个集群的数据一致性 = 节点级别

ACID:

原子性(Atomicity):

原子事务是一系列数据库操作的不可分割和不可约简,要么全部发生,要么全部不发生。

一个原子事务的例子是从账户A向账户B进行货币转账。它包括两个操作:从账户A取款和存入到账户B。通过在原子事务中执行这些操作,确保数据库保持在一致的状态,即如果这两个操作中的任何一个失败,资金既不会丢失也不会被创建。

一致性(Consistency):

所有已应用的数据更改为所有数据库连接提供一致的数据视图。也就是说,在成功写入、更新或删除记录之后,任何读取请求都会立即接收到记录的最新值。

一致性(或正确性)指的是任何给定的数据库事务必须仅按照允许的方式更改受影响的数据。写入数据库的任何数据必须符合所有定义的规则,包括约束、级联、触发器以及所有这些规则的组合。

隔离性(Isolation):

隔离性确定事务完整性对其他用户和系统的可见性。隔离性通常在数据库级别定义,是一个属性,定义了一个操作的更改在何时或如何成为对其他操作可见。

较低的隔离级别增加了许多用户同时访问相同数据的能力,但增加了用户可能遇到的并发效果(如脏读取或丢失更新)的数量。相反,较高的隔离级别减少了用户可能遇到的并发效果,但需要更多的系统资源,并增加了一个事务将阻塞另一个事务的机会。

二阶段锁定是数据库管理系统中最常见的事务并发控制方法,用于提供正确性的序列化和可恢复性。为了访问数据库对象,事务首先需要为该对象获取锁定。根据访问操作类型(例如读取或写入对象)和锁类型,如果另一个事务持有该对象的锁定,则获取锁定可能会被阻塞和延迟。

持久性(Durability):

持久性是ACID属性,保证已提交的事务将永久保存。例如,如果航班预订报告表示已成功预订座位,则即使系统崩溃,座位也将保留预订状态。

持久性可以通过将事务的日志记录刷新到非易失性存储中来实现,然后在确认提交之前。

在分布式事务中,所有参与的服务器必须在确认提交之前进行协调。这通常通过二阶段提交协议来完成。

许多数据库管理系统通过将事务写入事务日志来实现持久性,可以重新处理事务日志以在任何后续故障之前重新创建系统状态。只有在事务记录输入日志后,事务被视为已提交。

9452eb9dac10f204e4c6877d718256aa.jpeg
0*z5L-KJZpq5FAvqh9.jpeg

CAP

一致性(Consistency)(所有节点通过最终一致性拥有相同的数据):一致性意味着在一个节点上的更新/更改立即传播到其他节点。•可用性(Availability):每个请求都会收到(非错误的)响应,但不能保证它包含最新的写入。例如,我们需要跟踪和报告国家的公民数量,如果在计算中丢失了最新数据,不会对最终结果造成重大错误。我们可以使用支持可用性的数据存储。另一方面,当我们需要跟踪业务交易时,我们需要选择支持一致性的数据存储。•分区容错性(Partition Tolerance):即使发生节点之间的任意消息丢失(或延迟),系统仍然可以继续运行。

当发生网络分区故障时,必须决定采取以下其中一种操作:

•取消操作,从而降低可用性但确保一致性•继续操作,从而提供可用性但可能导致不一致性。

234546b76201d05d52750a1e24d51942.png

CAP定理的维恩图

因此,如果存在网络分区,则必须在一致性和可用性之间选择。

4e0e96b26a7c49386a3a5d408fccda54.png
0*PyiMBeDQi3RZpeLR.png

作为CAP权衡

CAP定理基于三个权衡,其中之一是“原子一致性”(缩写为“一致性”),“讨论原子一致性与讨论ACID数据库有些不同,因为数据库一致性是指事务,而原子一致性仅指单个请求/响应操作序列的属性”。

5f8327654986246596c23974f42546c4.png

注意:尽管一些人偏向一致性,而其他人偏向可用性,但其他NoSQL数据存储(如Cassandra和DynamoDB)可以同时提供两者。

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

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

相关文章

【云原生】K8S二进制搭建三:高可用配置

目录 一、部署CoreDNS二、配置高可用三、配置负载均衡四、部署 Dashboard 一、部署CoreDNS 在所有 node 节点上操作 #上传 coredns.tar 到 /opt 目录中 cd /opt docker load -i coredns.tar在 master01 节点上操作 #上传 coredns.yaml 文件到 /opt/k8s 目录中,部…

servlet生命周期和初始化参数传递

servlet生命周期和初始化参数传递 1、servlet生命周期 只有第一次访问才会初始化,之后访问都只执行service中的。 除非tomcat关闭重新启动: 2、初始化参数传递

ruby - ckeditor 设置编辑器高度

参考&#xff1a;Blogs <% f.cktext_area :zh_content, ckeditor: { height: 1000} %>

决策树与随机森林

目录 决策树是&#xff1a;Why&#xff1a;How&#xff1a;基本概念决策树生成举例决策树缺点参考 Demo 随机森林1.是&#xff1a;2.Why&#xff1a;3.How&#xff1a;参考 Demo 决策树 是&#xff1a; 1.一种有监督的分类&#xff08;或预测&#xff09;算法。 2.利用属性、…

嵌入式Linux编程--贪吃蛇

习得&#xff1a; 1.ncurse库&#xff1a; 使用ncurse是因为案件响应灵敏&#xff0c;不用回车&#xff1b;头文件#include<curses.h> 创建.c文件&#xff0c;同时gcc编译也需要添加 -lcurses 主函数中&#xff1a; initscr();//ncurse界面初始化函数 …

springboot背诵

1、springboot简介 2、spring注解 Bean&#xff1a; Configuration&#xff1a; Component&#xff1a; Controller&#xff1a; Service&#xff1a; Repository&#xff1a; ComponentScan&#xff1a; Import&#xff1a; Conditional&#xff1a; ConfigurationProperties&…

跨cpu架构部署容器技术点:怎样修改Linux 的内核版本

在使用Docker 进行跨平台部署之后&#xff0c;我们还可以尝试进行跨架构部署。 从X86 架构上移植到 aarch64 上。 要使用这个功能&#xff0c;需要Docker 的版本在19以上&#xff0c;因为这个是19以上版本中提供的一个实验性方案。 除此之外还需要&#xff1a;Linux的内核版本要…

uni-app-使用tkiTree组件实现树形结构选择

前言 在实际开发中我们经常遇见树结构-比如楼层区域-组织架构-部门岗位-系统类型等情况 往往需要把这个树结构当成条件来查询数据&#xff0c;在PC端可以使用Tree&#xff0c;table&#xff0c;Treeselect等组件展示 在uni-app的内置组件中似乎没有提供这样组件来展示&#x…

并查集模板的应用:连通块

一、链接 837. 连通块中点的数量 二、题目 给定一个包含 nn 个点&#xff08;编号为 1∼n1∼n&#xff09;的无向图&#xff0c;初始时图中没有边。 现在要进行 mm 个操作&#xff0c;操作共有三种&#xff1a; C a b&#xff0c;在点 aa 和点 bb 之间连一条边&#xff0c…

Windows server上用nginx部署vue3项目

Windows server上用nginx部署vue3项目 一、Node中node_modules文件夹及package.json文件的作用说明二、VUE3项目打包三、Windows Server上的Nginx部署 一、Node中node_modules文件夹及package.json文件的作用说明 node_modules是安装node后用来存放用包管理工具下载安装的包的…

快速消除视频的原声的技巧分享

网络上下载的视频都会有视频原声或者背景音乐&#xff0c;如果不喜欢并且想更换新的BGM要怎么操作呢&#xff1f;今天小编就来教你如何快速给多个视频更换新的BGM&#xff0c;很简单&#xff0c;只需要将原视频的原声快速消音同时添加新的背景音频就行&#xff0c;一起来看看详…

设计模式行为型——中介者模式

目录 什么是中介者模式 中介者模式的实现 中介者模式角色 中介者模式类图 中介者模式代码实现 中介者模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是中介者模式 中介者模式&#xff08;Mediator Pattern&#xff09;属于行为型模式&#xff0c;是用来降低…

CVE漏洞复现-CVE-2019-5021 镜像漏洞利用

CVE-2019-5021 镜像漏洞利用 随着容器技术的普及&#xff0c;容器镜像也成为软件供应链中非常重要的一个组成的部分。人们像使用 pip 等工具从仓库获取各种编程软件库一样&#xff0c;可以从 Docker Hub 或 第三方仓库拉取镜像&#xff0c;在其基础上进行开发&#xff0c;从而…

adb调试

连不上 adb 如果还遇到5037端口被占用的问题&#xff0c;就找出进程号用taskkill命令杀死该进程即可 1、查找5037端口对应的进程&#xff1a;netstat -ano|findstr 5037 2、杀死该进程&#xff1a;taskkill /F /PID pid 连接unity profiler 打开发包&#xff0c;并安装在手机…

【2023年11月第四版教材】《第2章-信息技术发展》

《第2章-信息技术发展》 章节说明1 计算机软硬件2 计算机网络2.1 网络的作用范围2.2 OSI模型2.3 广域网协议2.4 网络协议2.5 TCP/IP2.6 软件定义网络&#xff08;SDN&#xff09;2.7 第五代移动通信技术 章节说明 大部分为新增内容&#xff0c;预计选择题考4分&#xff0c;案例…

网络音频终端音频编码解码终端

网络对讲终端SV-7011V 网络对讲终端SV-7011V&#xff0c;采用了ARM音频DSP架构&#xff0c;集网络对讲、网络广播、监听等功能于一身&#xff0c;内置麦克风、配置line out、line in、Mic in功能输出接口&#xff0c;适用于学校&#xff0c;机场&#xff0c;广场等场所。 产品…

保姆级教程--抢先体验 Microsoft 365 Copilot,微软全家桶Chat GPT

【ChatGPT】前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击查看学习资料&#xff09; 前段时间微软发的Microsoft 365 Copilot 可以说非常火爆了&#xff0c;那么该…

元素2D转3D 椭圆形旋转实现

椭圆旋转功能展示 transform-style: preserve-3d;&#xff08;主要css代码&#xff09; gif示例&#xff08;背景图可插入透明以此实现边框线的旋转&#xff09; 导致的无法点击遮挡问题可以参考我的另一个文章 穿透属性-----------------------css穿透属性 实时代码展示

决策树的划分依据之:信息增益率

在上面的介绍中&#xff0c;我们有意忽略了"编号"这一列.若把"编号"也作为一个候选划分属性&#xff0c;则根据信息增益公式可计算出它的信息增益为 0.9182&#xff0c;远大于其他候选划分属性。 计算每个属性的信息熵过程中,我们发现,该属性的值为0, 也就…

Redis 双写一致性实践及案例

面试问题&#xff1a; 你只要用缓存&#xff0c;就可能会涉及到redis缓存与数据库双存储双写&#xff0c;你只要是双写&#xff0c;就一定会有数据一致性的问题&#xff0c;那么你如何解决一致性问题&#xff1f;双写一致性&#xff0c;你先动缓存redis还是数据库mysql哪一个&…