CAP原理
定义
在一个分布式系统(指系统中的节点互相连接并共享数据)中,当涉及读写操作时,只能保证一致性 (Consistency)、可用性 (Availability)、分区容错性 (Partition Tolerance)三者中的两个,另外一个必须被牺牲。
- 一致性:CAP中的C和ACID 中的C不是一个含义,ACID 中的C是指数据库中的数据满足一定的约束条件。而CAP中的C是指线性一致性,即:客户端向系统写入什么,那么读出来的也会是什么。也就是要保证客户端读取到的数据一定是上次写入的最新数据。
- 可用性:指系统中的部分节点出现故障后,系统能否还能对外提供完全可用的服务;
- 分区容错性:指是否允许系统中的节点之间无法通信,也就是无法互相连接;
适用场景
那么什么样的分布式系统是节点之间互联并共享数据呢?
典型的场景就是数据库的主从集群,一个数据库集群有一个主,多个从,主从之间会进行数据复制。所以适用于CAP原理。
那么如果我现在是一个Redis的集群,集群中每台机器存储不同的数据,集群中每台机器不需要复制和传递数据,那么就不属于CAP原理的讨论范围。同理,如果是A,B两个不同的业务系统,比如招行账号A给工行账号B转账100元,由于招行和工行是两个不同的业务系统,业务上隔离,且他们之间也没有共享的数据,从而也不属于CAP原理的讨论范围。
场景方案选择
- 传统数据库主从集群:如果当前是一个现在是一个主从复制的数据库集群,同一条数据会在主从数据库上都存储,那么当存在主从数据库之间网络断开时,我们确实只能要么选择A放弃C,要么选择C放弃A。选择A放弃C,就是客户端读取到的可能不是最新的数据,但是系统持续可用;选择C放弃A,就是让系统服务不可用,客户端自然就不会认为数据不一致了。
- 分布式数据库,如阿里的OceanBase,这种数据库也是一个主从的集群,但是主从节点往往使用Paxos/Raft等副本一致性协议,做到整个数据库系统,在部分节点发生故障时,也能在很短的时间内自动重新选主,选出一个新的主从集群的数据库系统。在重新选主的过程中,系统不可用,相当于放弃了A,而一旦选出新的主之后,系统又继续可用,且数据对外是线性一致的。相比传统的数据库主从集群,分布式数据库由于可以在遇到网络分区导致数据库主从节点之间无法互联时,可以快速选出新的主,然后快速恢复,所以架构设计上和用户体验上,要好很多。但是系统设计的复杂度也非常高。
分布式事务
通过上面的分析,我们知道CAP中的数据一致性,本质上是为了维护同一个数据的不同副本之间的一致性。而更多的时候,我们要解决的是不同业务系统之间的数据一致性,即数据之间总是应该满足规定的业务规则。典型的场景比如有跨行转账、订单和减库存。这种场景,由于没有数据共享的特征,所以不适用于CAP。比如A银行的账户给B银行的账户转账100元,那么转账前后,两个账户的钱加起来应该不变。也就是A扣款了,B就必须加款。那么这种场景如何解决呢?一般的做法是采用分布式事务,常见的分布式事务的解决方案有:2PC\3PC、TCC、基于分布式MQ+本地消息、分布式MQ事务消息、Sagas。
CAP原理的更多相关文章
- NOSQL数据模型和CAP原理
NOSQL数据模型和CAP原理 http://blog.sina.com.cn/s/blog_7800d9210100t33v.html 我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoS ...
- [转]CAP原理与最终一致性 强一致性 透析
在足球比赛里,一个球员在一场比赛中进三个球,称之为帽子戏法(Hat-trick).在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子.CAP原理中,有三个要素: 一致性 ...
- CAP原理的证明
CAP概述 C: Consistency 一致性 A: Availability 可用性 P:Partition Tolerance分区容错性 CAP理论的核心是:一个分布式系统不可能同时很好的满足一 ...
- CAP原理、一致性模型、BASE理论和ACID特性
CAP原理 在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Con ...
- 在分布式数据库中CAP原理CAP+BASE
本篇博文的内容均来源于网络,本人只是整理,仅供学习! 一.关系型数据库 关系型数据库遵循ACID规则 事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1.A (At ...
- 大数据 --> CAP原理和最终一致性
CAP原理和最终一致性 CAP原理和最终一致性(Eventually Consistency)
- CAP原理中的一致性
CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾.因此在进行分布式架构设计时,必须做出取舍.而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值.因此设计分布式数据系统,就是在 ...
- 对CAP原理的理解
对CAP原理的理解 CAP原理按照定义,指的是C(Consistency)一致性,A(Availability)可用性,P(Partition tolerance)分区容错性在一个完整的计算机系统中三 ...
- Nosql数据库的四大分类及分布式数据库CAP原理
1. Nosql数据库的四大分类 2. 分布式数据库CAP原理 2.1 关系型数据库事务遵循的ACID规则 首先了解传统关系型数据库事务遵循的ACID规则: 原子性(Atomicity):事务里的所有 ...
- Redis_NoSql分布式数据库CAP原理
前文简单介绍了NoSql数据库的四大分类以及常用的数据库技术,本文简单介绍分布式数据库CAP原理. 一.传统的CAID是什么 1. A(Atomicity)原子性:事务里的所有操作要么全部做完,要么都 ...
随机推荐
- 安全性与收尾工作 创建基本的安全策略 精通ASP-NET-MVC-5-弗瑞曼
- 认识JPA以及如何使用JPA(1)
一:JDBC是什么? JDBC统一了Java应用程序访问数据库的标准. 二:什么是JPA? JPA统一了Java应用程序使用使用ORM框架的方式. 配置文件说明: 三:使用JPA的第一个实例. 1.创 ...
- 个人第四次作业——Alpha测试
Alpha项目测试 这个作业属于哪个课程 链接 这个作业要求在哪里 链接 团队名称 愿头发与你我同在 这个作业的目标 测试非本组的另外三组项目 姓名 张伟 学号 201731024216 测试报告 一 ...
- Web前端-HTML、CSS、JS
概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,它是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他, 这样就可以让浏览 ...
- 对于n!的快速质因数分解
N!的阶乘的质因数分解 对于N的阶乘 比如8! 我们要算其中一个质因数出现次数 我们注意到 8!=1 2 3 4 5 6 7 8 1 1 1 1 2的倍数出现的次数8/2=4 1 1 4的倍数出现的次 ...
- java8 stream按对象多个属性对集合进行分组,并进行组装数据
如图,数据库查出来的数据: 需求是按menu_id和menu_name分组,stream实现最简单, stream里面只有按一个属性分组的,但是可以利用string简单变换一下: List<Js ...
- AcWing 787.归并排序
AcWing 787.归并排序 题目描述 给定你一个长度为n的整数数列. 请你使用归并排序对这个数列按照从小到大进行排序. 并将排好序的数列按顺序输出. 输入格式 输入共两行,第一行包含整数 n. 第 ...
- 【WPF学习】第三十一章 WPF命令模型
WPF命令模型由许多可变的部分组成.总之,它们都具有如下4个重要元素: 命令:命令表示应用程序任务,并且跟踪任务是否能够被执行.然而,命令实际上不包含执行应用程序任务的代码. 命令绑定:每个命令绑定针 ...
- 死磕mysql(2)
想测试自己的查询语句,导入批量的数据,一开始很慢以为是自己的语句有问题,后来是这个autocommit,效率相差好多好多............ delimiter // create procedu ...
- 死磕mysql
数据库创建语句 create database new; 创建一个名为new 的数据库 drop database new; 删除名为new的数据库 数据库名为小写,当初教我的那个人对我说在某个系统中 ...