阅读笔记(三)CAP理论相关

2024-09-05 05:18
文章标签 cap 笔记 阅读 理论 相关

本文主要是介绍阅读笔记(三)CAP理论相关,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一. 简介

  本文分享一些关于CAP原理介绍的文章和重点内容。

二. 通俗易懂的CAP事例

  《A plain english introduction to CAP Theorem》一文用一个通俗易懂的事例讲述了CAP原理。下面是简单概括后的例子。

  1. 有一天,你发出广告为他人提供了一项服务:帮他人记录各种信息,并提供查询功能。(单服务器架构)
  2. 随着业务的增多,一个人渐渐忙不过来了,可能遇上生病、有事,也可能24小时工作也无法让所有用户满意,再加上排队、拥塞等情况会导致业务损失,因此让自己老婆帮忙一起来提供服务 (分布式架构) :顾客依然是打老电话来记录或者查询信息,但是内部分线让自己和老婆谁有空谁接 (负载均衡)
  3. 在这种情况下,遇到了第一个问题:顾客打电话被自己接到了,要求查询之前存放的信息,但是在自己的笔记本上没有发现有存放过信息因此回复没有信息。实际上是因为顾客存储信息的时候接通的是老婆那边,因此没有存在自己这里,导致了信息的不一致,也就是Consistency
  4. 通过思考,你提出了这样的解决办法:在用户打电话更新、记录信息的时候,我们告诉彼此新的信息,起到同步的作用。但是这种做法存在一个缺陷:如果有一天自己或者老婆有事/生病了,那就导致另一个人的存储无法得到更新,也就是无法保证可用性(Availability)
  5. 通过进一步思考,你提出了 同时可以保证一致性(Consistency)和可用性(Availability) 的解决方案 (CA) :在4的方案基础上增加一个检测机制:当自己或者老婆回来工作时,首先会进行信息的校验和同步,保持一致之后再继续工作下去
  6. 5得出的方案的确可以保证了一致性和可用性,但是这带来了另一个问题:假如老婆不开心了,不乐意和自己进行这个信息的同步更新,那怎么办?(Partition Tolerance 分区容错) 如果想保证一致性,那就不能兼顾可用性,反之亦然,这就是CAP原理。

三. 再看CAP

  《CAP Theorem: Revisited》一文通过绘图和简洁的讲解说明了为什么只有可能出现CP或者AP而不存在CA模型。其实从第二节的例子中已经很明显的可以看出来了,只要有分区容错问题,则CA一定是无法保持的。
  首先大家需要意识到网络是不可靠的,经常会在意想不到的时候发生问题,而我们没有办法去选择什么时候发生问题或不发生。在此前提下,才出现了CAP原理,即我们随时都可能因为网络的不可靠出现分区问题,并由此需要解决分区容错,而对此,我们只能选择可靠性或者一致性二者其一。

  1. CP(Consistency/Partition Tolerance )
    当N1和N2两个服务器突然断开了连接时,假设其中的同一数据x在N1中更新为了y。这是如果想要保持一致性,则访问N2服务器就会得到error回复或者因为分区同步失败等待过久导致timeour error,即失去了可靠性(Availability)。当我们需要保持高度一致的原子性读写时则必须损失一定的可用性
  2. AP(Availability/Partition Tolerance)
    与上例相反,如果我们需要保证高度可用性,则访问N1和N2服务器分别会得到x和y的数据回复。

四. CAP FAQ

  《The CAP FAQ》是Henry Robinson在github上发表的一系列FAQ,这里前排推荐这位大牛的博客,有很多不错的文章,如《Distributed systems theory for the distributed systems engineer》。这里没有全文搬运,仅给出部分和上文不同的内容。

  1. CAP问题的起源
    CAP问题源于Eric Brewer博士的演讲“Towards Robust Distributed Systems”,后由MIT的Seth Gilbert 和 Professor Nancy Lynch在论文“Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services”中阐明。

  2. 什么是原子性(atomic or linearizable)
    原子性,即一致性,是保证客户端发出get()请求时获取到的值得一致性。对客户端来说,分布式的服务器在他们看来仅仅是一台抽象的机器,这就是原子性的缘由。

  3. 什么时候系统必须放弃C或者A
    CAP理论仅在某些情况下才会发生:首先网络出现错误导致了分区容错P的出现,然后对数据的严苛要求才会导致了必须舍弃C或者A。如果不是在这种严苛条件下,即某些情况下并没有请求导致必须舍弃C或者A,则我们可以同时保持着CA的状态。

  4. C和A有各种等级吗?
    我们看可以适当放松C和A的要求去搭建灵活的系统。例如很多系统选择放松可靠性的要求,保障一致性,如ZooKeeper。而亚马逊的Dynamo则放松了一致性的检测,保持更高度的可用性。在自己搭建架构时,切记根据需要来选择哪种方式更适合。

五. 参考文献

  1. A plain english introduction to CAP Theorem
  2. CAP Theorem: Revisited
  3. The CAP FAQ

这篇关于阅读笔记(三)CAP理论相关的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138049

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个