《分布式技术原理与算法解析》学习笔记Day20

news2024/9/27 12:08:08

CAP理论

什么是CAP理论?

CAP理论用来指导分布式系统设计,以保证系统的可用性、数据一致性等。

  • C,Consistency,一致性,指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。
  • A,Availability,可用性,指系统提供的服务一直处于可用状态,对于用户的请求可即时响应。
  • P,Partition Tolerance,分区容错性,指在分布式系统遇到网络分区的情况下,仍然可以响应用户的请求。网络分区是指因为网络故障导致网络不连通,不同节点分布在不同的子网络中,各个子网络内网络正常。

一致性、可用性和分区容错性是分布式系统的三个特征。

CAP理论是指在分布式系统中,C、A、P这三个特征不能同时满足,只能满足其中两个。

如何平衡C、A和P?

在实际场景中,网络环境不可能百分百不出故障,比如网络拥塞、网卡故障等,都会导致网络故障或者不通,从而导致节点之间无法通信,或者集群中节点被划分成多个分区,分区中的节点之间可以通信,但是分区之间是不能通信的。

这种由网络故障导致的集群分区情况,被称为网络分区

保证一致性C和可用性A(CA)

在分布式系统中,现有的网络基础设施无法做到始终保持稳定,网络分区难以避免,牺牲分区容错性P,就相当于放弃部分分布式系统,因此在分布式系统中,是不需要考虑CA模式的。

但是在单点系统或者单机系统中,CA需求是可以满足的,例如大部分关系型数据库,如果部署在单台机器上,因为不存在网络通信,所以是可以保证CA的。

保证一致性C和分区容错性P(CP)

如果一个分布式场景需要很强的数据一致性,或者该场景可以容忍系统长时间没有响应,那么放弃可用性A,保留一致性C是比较合适的。

一个保证CP的分布式系统,一旦发生网络分区会导致数据无法同步的情况,这时需要牺牲系统的可用性,降低用户体验,直到节点数据达到一致后再提供服务。

一般涉及到金融相关的场景,在任何时候都需要保证强一致,因此要保证CP。

保证CP的系统包括Redis、HBase、ZooKeeper等。

例如,ZooKeeper集群包括Leader节点和Follower节点,Leader节点专门负责处理用户的写请求:

  • 当用户向节点发送写请求时,如果请求的节点是Leader,那么直接处理请求。
  • 如果请求的节点是Follower,那么该节点会将请求转给Leader,然后Leader会向所有的Follower发出一个Proposal,等超过一半的节点统一后,Leader才会提交这次写操作,从而保证数据的强一致性。

当ZooKeeper集群中出现网络分区,如果其中一个分区的节点数大于集群节点数的一半,那么这个分区可以再选出一个Leader,仍然对外提供服务,但是在选出Leader之前,系统是不可用的;如果形成的分区中,没有一个分区的节点数大于集群节点总数的一半,那么系统不能正常对外提供服务,必须等待网络恢复后,才能正常提供服务。

保证可用性A和分区容错性P(AP)

如果一个分布式系统需要很高的可用性,或者说在网络状况不好的情况下,允许数据暂时不一致,那么可以牺牲一定的一致性。

这时网络分区出现后,各节点之间的数据无法马上同步,为了保证高可用,分布式系统需要即刻响应用户请求,但此时某些节点还没有拿到最新数据,只能将本地旧的数据返回给用户,从而产生数据不一致的情况。

适合AP的场景有很多,例如查询网站、电商中的商品查询等,这样的系统用户体验更加重要,需要保证系统的可用性。

保证AP的系统包括CoachDB、Eureka、Cassandra、DynamoDB等。

下面是关于CA、CP和AP的详细比较。
在这里插入图片描述

CAP和ACID

ACID是数据库事务中常见的理论,它和CAP是两回事:

  • ACID中的A是指“原子性”,强调事务要么执行成功,要么执行失败;CAP中的A是指“可用性”,表示系统提供的服务一直处于可用状态,可以响应用户的请求。
  • ACID中的C是指事务执行前后,数据的完整性保持一致或者满足完整性约束;CAP中的C强调的是数据一致性,集群中各节点之间通过复制技术保证数据在任意时刻都是相同的。

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

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

相关文章

GO 中的 defer 有哪些注意事项?上

xdm , 不知道你们是否有使用过 defer ,这种语法在是 go 特有的,用起来真是爽的不要不要的 很多时候,我们在使用一些新东西,出现一些莫名其妙的现象或者是结果的时候,我们总会认为,这个东西不友…

打游戏什么蓝牙耳机好用?打游戏比较好的蓝牙耳机

游戏耳机提供身临其境的细致声音,同时也是与朋友在线聊天的绝佳通信设备,尤其对于游戏玩家来说,聆听和被聆听的最佳方式之一就是游戏耳机,那2023年到底有哪些值得购买的游戏耳机呢?现在就让我们一起来看看吧。 第一款…

【uniapp】uniapp项目vue2/vue3引入使用vant组件库

前言 vant是一个优秀的移动端组件库,他支持VUE2、VUE3、微信小程序三个框架,这期就来尝试在uniapp中,vue2和vue3分别引入vant组件库 注意:本教程只适用H5,无法运行到微信小程序 Vue3引入vant 新建一个uniapp项目&am…

如何利用 Python 进行客户分群分析(附源码)

每个电子商务数据分析师必须掌握的一项数据聚类技能 如果你是一名在电子商务公司工作的数据分析师,从客户数据中挖掘潜在价值,来提高客户留存率很可能就是你的工作任务之一。 然而,客户数据是巨大的,每个客户的行为都不一样。20…

python中安装gurobi和pycharm没有语法提示问题解决

安装gurobi第一步 :下载gurobi ( http://www.gurobi.com ) ,需要注册账号第二步、申请License注册如果可以通过校园网, 则直接生成。不能的话,通过网站,发邮件申请 http://www.gurobi.cn/NewsView1.Asp?id4第三、邮件…

【虹科】基于Lidar的体积监控实现高效的库存管理

迄今为止,很多物料厂家测量库存的结果数据仍然不准确,会存在很大的误差,导致供应链效率低下——这个问题可以通过Lidar技术轻松解决。近年来,全球供应链的脆弱性已经多次得到证明。无论是油轮被困在苏伊士运河,阻塞海峡…

JSP 在线学习管理系统myeclipse定制开发sqlserver数据库网页模式java编程jdbc

一、源码特点 JSP 在线学习管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为SQLServer2008&#x…

从事Python自动化测试,30岁熬到月薪20K+,分享我的多年面试经…

年少不懂面试经,读懂已是测试人。 大家好,我是小码哥,一名历经沧桑,看透互联网行业百态的测试从业者,经过数年的勤学苦练,精钻深研究,终于从初出茅庐的职场新手成长为现在的测试老鸟&#xff0…

nodejs/eggjs如何使用第三方pure esm lib

问题Instead change the require of index.js in xxx/app/ws/index.ts to a dynamic import() which is available in all CommonJS modules.上述错误发生在我使用import引入一个第三方包的时候提示的,至于原因,主要是node当前仅支持cjs,而目…

TCP的三握四挥

本文是向大家介绍tcp的三次握手四次挥手的全过程,能够让我们更熟悉面向连接的传输层控制协议的原理,保证了数据传输的稳定性和可靠性。如果我们把网络体系按照OSI模型划分,那么不论是从上往下还是从下往上数,处于最中间的都是传输…

复赛名单公布!2022隐私计算HACKATHON大赛火热进行中!

开放隐私计算开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号O…

Python+Qt生日提醒

PythonQt生日提醒如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<PythonQt生日提醒>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用推荐首选。文章目…

在k8s集群部署ELK

使用kubeadm或者其他方式部署一套k8s集群。 在k8s集群创建一个namespace&#xff1a;halashow 2 ELK部署架构 3.1 准备资源配置清单 Deployment中存在一个es的业务容器&#xff0c;和一个init容器&#xff0c;init容器主要是配置vm.max_map_count262144。 service暴露了9200…

MSP430F2132IRHBR功能框图TPS259824LNRGER电路保护和电源管理解决方案芯片

概述&#xff1a;MSP430F21x2 16位超低功耗微控制器 (MCU) 是MSP430系列微控制器的一部分。这些MCU采用一种架构&#xff0c;加上5种低功耗模式&#xff0c;能在便携式测量应用中延长电池的使用寿命。这些器件具有一个强大的16位 RISC CPU、16位寄存器和用于获得最大编码效率的…

Springboot整合mybatis并接收前端数据

mybatis之前记录过了。本以为可以快乐的开发项目&#xff0c;但是没想到在springboot中使用mybatis还不一样&#xff0c;那么我就在这里记录一下。 请注意&#xff0c;sprngboot中使用的mybatis是专门为springboot设计的&#xff0c;单独引用依赖的话需要在springboot找到如下…

Java性能分析

0、问题代码&#xff1a; 代码问题其实很明显&#xff0c;但是这里主要是为了练习如何使用工具进行分析 所以最好先不要看代码&#xff0c;假装不知道程序逻辑&#xff0c;而是先通过工具去分析&#xff0c;再结合分析数据去看代码&#xff0c;从而推出问题点在哪 import jav…

代码随想录NO50 |动态规划_leetcode 392.判断子序列 115.不同的子序列

动态规划_leetcode 392.判断子序列 115.不同的子序列今天继续子序列&#xff01; 392.判断子序列 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] 表示以下标i-1为结尾的字符串s&#xff0c;和以下标j-1为结尾的字符串t&#xff0c;相同子序列的长度为dp…

靠谱的动漫绘画培训班国内有哪些

动漫绘画培训班有哪些&#xff0c;今天给大家带来的是国内专业的动漫培训机构排名&#xff0c;这5个动漫培训机构&#xff0c;相信你一定都知道&#xff0c;快来看看吧&#xff01; 一&#xff1a;动漫绘画培训机构排名 1、轻微课 轻微课是国内人气很高的板绘学习平台&#…

2.23作业ccc

检测中断到来时&#xff0c;让LED灯状态取反&#xff0c;并且在串口工具上打印一句话例如&#xff1a;当按键1按下之后&#xff0c;让LED1状态取反&#xff0c;并打印“LED1 down”当按键2按下之后&#xff0c;让LED2状态取反&#xff0c;并打印“LED2 down”当按键3按下之后&a…

vue2安装ant-design UI报错 ERR! peer vue@“>=3.2.0“ from ant-design-vue@3.2.15

npm install ant-design-vue --save 安装报错&#xff0c;使用的是vue2&#xff0c;如图&#xff0c; npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: default0.1.0 npm ERR! Found: vue2.7.14 npm ERR! v…