1、CAP

CAP是分布式系统的指导理论,是NoSQL数据库的理论基石。CAP其实就是对分布式系统的特性总结,即一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。

先说一下分区容错性,就是CAP中的P,这一项其实是必选项,CAP主要用在分布式系统中,所谓分布式就表示有多个服务器或节点,比如数据库的主从配置。如果不要P,那只是个单机服务,就不需要CAP来指导了。

再说一下数据一致性,就是CAP中C,这一项表示分布式系统中的每个服务或节点对外提供的数据必须得一致,比如数据在A数据库被修改了,必须立刻同步至其他(比如B)数据库服务器上。客户端访问B数据库时必须是最新的数据,否则不提供服务。

最后说一下可用性,就是CAP中A,我个人感觉这一项应该是最重要的原则了,搞分布式系统最主要的目的是实现高可用,即一台服务器崩了,还有其他节点继续提供服务。同时还能实现数据的安全,比如数据库同步备份等。

总结一下,其实同时实现数据一致性和可用性是互相矛盾的,想实现可用性,就要放弃数据一致性。分区容错性是必选的,所以留给我们的选项只有CP或AP。

CP,即实现一致性和分区容错性,此组合为数据强一致性模式,即要求多服务之间数据一定要一致,牺牲了可用性,比如操作A服务时,就要让其他服务不可用,一些对数据要求比较高的场景使用此方式,比如涉及金钱等。这种模式性能很低。实现强一致性的方案有2PC(两阶段提交)。

AP,即实现可用性和分区容错性,此组合为数据最终一致性模式,即要求所有服务都可用,牺牲了数据一致性,比如操作A服务修改数据,同时读取B服务查询时发现数据还是旧数据,但过一会数据就会一致,互联网分布式服务多数基于AP,Base模式也是基于AP组合。实现最终一致性的方案有TCC、消息队列、Saga等,其中消息队列用的最多。

2、BASE

BASE,即Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)。它是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论。互联网中对可用性要求非常高,但对一致性要求要少点,比如发一个消息给用户,用户不用立即收到,晚个一两秒也OK的。所以可以牺牲CAP中C,BASE理论大部分是对AP的补充和权衡。

Basically Available(基本可用),它是要求分布式系统中所有节点要做到高可用。

Soft State(软状态),它定义数据可以有一个中间状态,比如服务A更新数据,读取B服务时,允许存在一定的延迟,客户端读取的为中间状态。

Eventually Consistent(最终一致性),它允许数据存在中间状态,做不到强一致性,但要做到最终一致性,比如消息列表多刷几次,总归能刷出来。常用实现数据一致性的是用消息队列,如下图:

简单理解CAP-BASE相关推荐

  1. 为什么CAP不能同时满足的简单理解

    为什么CAP不能同时满足的简单理解 cap定理:前提是分布式系统中,cap三个只能满足两个,不能同时满足三个特性. Consistency (一致性):所有节点在同一时间的数据都是完全一致的. Ava ...

  2. ACID+CAP+BASE+Transaction(事务)

    ACID+CAP+BASE+Transaction(事务) 数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity).一致性(Consis ...

  3. base cap 分布式_简单理解CAP-BASE

    原标题:简单理解CAP-BASE 1.CAP CAP是分布式系统的指导理论,是NoSQL数据库的理论基石.CAP其实就是对分布式系统的特性总结,即一致性(Consistency).可用性(Availa ...

  4. NoSql理解+传统关系型数据库ACID+Nosql的CAP+BASE的理解

    1)什么是Nosql NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL", 泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在 ...

  5. 分布式系统 - CAP, BASE, ACID之间的关系 - 学习/实践

    1.应用场景 主要用于学习分布式系统中CAP, BASE, ACID之间的关系,理清各自的应用场景. 2.学习/操作 1.文档阅读 22 | 想成为架构师,你必须知道CAP理论-极客时间 23 | 想 ...

  6. cap理论具体含义_如何正确理解CAP理论?

    如何正确理解CAP理论? 在大数据领域,被业界广泛谈及的CAP理论存在着一些关键性的认知误区,而只有全面地考察与分析分布式环境中的各种场景,我们才能真正正确地理解它. 目前,CAP(Consisten ...

  7. 你真的理解CAP理论吗?

    最近在学习消息中间件的时候,接触到了分布式系统,进而接触到CAP理论,上一次接触还是在年初的时候公司的技术分享会上,有人在介绍项目的时候简单介绍了这个CAP理论,但并没有深入研究.这次,该是时候研究一 ...

  8. java阻塞队列作用_简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用...

    简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用 Condition:可以理解成一把锁的一个钥匙,它既可以解锁(通知放行),又可以加锁(阻塞) n ...

  9. Android:安卓学习笔记之MVP模式的简单理解和使用

    Android MVP模式的简单理解和使用 MVP模式 1. 为什么使用MVP模式? 1.1.实例说明 2.一步步让你理解MVP 2.1.MVP实现第一步, 将页面拆分为M/V/P三个模块 2.2. ...

  10. android 点击事件消费,Android View事件分发和消费源码简单理解

    Android View事件分发和消费源码简单理解 前言: 开发过程中觉得View事件这块是特别烧脑的,看了好久,才自认为看明白.中间上网查了下singwhatiwanna粉丝的读书笔记,有种茅塞顿开 ...

最新文章

  1. mysql 最小日期函数_MySQL 日期加减函数汇总
  2. 微软白皮书:47页报告详解中国芯片设计云技术
  3. php 变成 25,2020-09-25 PHP变量介绍
  4. linux下的find文件查找命令与grep文件内容查找命令(转)
  5. 蓄电池充放电试验培训课件
  6. create tablespace 与 heap_insert 函数
  7. 使用Camel在Amazon上构建分布式工作流应用程序
  8. linux pap认证,配置PPP PAP 认证
  9. Oracle public view,【易错概念】以太坊Solidity函数的external/internal,public/private,view/pure/payable区别...
  10. 第一次给知名项目贡献代码,有点紧张
  11. java的class文件魔数和版本对应关系
  12. Airtool 2 for Mac(Wi-Fi流量捕获工具)支持m1
  13. mysql如何彻底卸载_windows如何彻底卸载mysql
  14. 向日葵如何远程桌面Linux,最快的远程桌面向日葵软件
  15. 《货币简史》书中的精髓:货币产生的起源是什么?货币又是如何发展起来的?
  16. 【Vue学习笔记_05】v-on事件监听
  17. 介入切除心脏肿瘤:ONOCOR血管可回收技术历史性应用
  18. 程序员如何读懂火焰图
  19. 大脑的四个黄金记忆时间段
  20. Tampermonkey 高级API的使用 附Demo

热门文章

  1. saltstack 主题说明
  2. .net api 和java平台对接技术总结
  3. 如何查找Power BI本地报表服务器产品密钥
  4. 添加ASP.NET网站资源文件夹
  5. jquery send(data) 对data的处理
  6. net MVC 重定向总结
  7. wpf中的datagrid中如何显示图片
  8. CSS/DIV网页设计视频教程目录【转】
  9. Mac OS使用技巧之十二:解决APP Store更新、下载出错的问题
  10. Netty 4.x – ByteBuf