CAP原理是描述一致性,可用性,和分区兼容性的理论,但这个原理用在实际情况下时往往让人很困惑。什么样的情况适用于这样的原理?有哪些先决条件?如何创建一个同时满足一致性和可用性,分区兼容性的分布式系统?等等的问题。现在我就尝试使用一种简单易懂的方式来把分布式的各种问题抽茧剥丝的放在大家面前。

首先我们把红色的球定义为数据,蓝色的框定义为容器。那么分布式的问题就可以简化为数据如何放入容器内和如何访问的问题?容器也就是CAP原理所描述的分区。当你想把1个数据放入到n分区时我们可以有3种放入的方式。

第一种CP的方式,假设当前有两个容器,我们把数据切分为两个部分,分别放入AB两个容器中。这个分布式模型中能够保证数据的一致的,即数据被平分为左右两个部分,不会出现数据的歧义,那么这个模型下也是有分区兼容性的因为被平分之后放入两个分区中。

这里一致性指的是当修改分区内的数据A时。两个容器内的数据也是相同的,不会出现数据歧义。但当AB其中任何一个分区无法使用时。就会获取不到全部的数据,导致数据出现不可用的状态。

第二种AP的方式,我们把数据复制两份分别放入AB两个分区。当AB任意分区不能使用的情况下,也可以使用数据,保持数据的可用性。

但当两个容器分别修改数据就会导致不能获得一致的数据,这就是AP方式保持可用性和分区兼容性,牺牲数据一致性。

第三种CA的方式,就是保持数据的一致性和可用性牺牲数据分区兼容性。直白的说就是把数据完整的放到一个分区内,那么他也不是一个分布式系统。

好的以上就是关于CAP基本原理的介绍。那么设计一个分布式系统最基本要考虑的,就是如何把数据放入到各个分区中。因为CA就不是一个分布式系统,那么它首先可以被排除掉了。在剩下的CP和AP中对数据的一致性就成了必然的选择,因为不可用的数据或者互相矛盾的数据显然是不可以接受的。那么我们唯一的选择就剩下了CP的分布式系统。但CP的问题也很明显就是任何一个分区或叫节点崩溃之后数据就是不完整的了,会导致数据的错误和不可使用。作为一个互联网工程师首先想到的是我们为每一个分区加上备份服务器好不好呢?而CAP原理的作者认为你加入的不是备份服务,对于CAP原理来说只是是将CP的方式变为了AP的方式。

备份服务器A1与B1与原来的服务器组合成了一个怪异的CP与AP的混合体。虽然增加了可用性,备份服务器与原服务器如果因为任何意外的原因产生数据不一致那么整个系统就失去了一致性,这个组合就是变成了AP系统。所以我们要把备份服务器A1放到A的后面让用户不能直接修改A1服务器。A1服务器只能由A服务器来修改。

那么分布式系统就变成了一个由CP面和AP面组成的矩阵。

在一般情况下其中CP面负责统一的对外通信,提供统一的可分区的数据服务。AP面对用户为不可见状态,当CP面任意节点崩溃或不可用时,在AP方向选择一个可用的服务器转为CP服务器继续为用户提供服务。只要系统有足够多的AP服务器可以转换为CP服务器使其抵消不可用服务器的概率,那么就能保证整个分布式矩阵式CP&AP完备。

在这个分布式矩阵里也可以不单单使用某个面为外部提供数据服务。在系统的设计上可以使用AP节点为用户提供只读服务。这也不局限在CP节点或者某个面,任意的节点其实都可以对外提供只读服务。那么对于可靠性要求不高的只读服务,所有节点就相当于是一个平面二维的系统。可见分布式矩阵相当的灵活,可以依据用户视图做不同的切割。

那么在现实中有没有CP&AP的系统呢?答案是有的,传统的主从服务器就是一个C&AP的系统。注意这里是C&AP不是CP&AP,因为单机的主从系统并不是分布式的。但是提供分布式服务的主从系统例如大型的网站加上阿里的云的数据库,就可以看作是CA&AP完备的系统。因为阿里云的数据库隐含的,提供了主从备份和磁盘备份,相当于对用户和开发者不可见的AP系统。

同理现在的区块链技术也是一个C&AP的系统。由一个POW或DPOS选择的C提供一致性服务,与全网或若干服务器提供的AP服务,组成的单C的分布式矩阵。

接下来深度讨论一个关于一致性定义的问题。因为这涉及到一个C容器能否划分为CP容器的问题?也就是什么样的数据需要一致性的问题?

我们看上图,一个全部为红色的球分为两半分别放入AB两个容器。当A容器内的球变为绿色的时候。把容器内的两个球拿出来拼成绿红的球是否是一个有效的球,如果有效的球,那么我们称这个球是可以分区的,也就是分区兼容的数据。如果这个球必须是全部变成绿才是有效的,那么这个数据本身就是分区不兼容的数据。

那么将C&AP转为CP&AP的过程,就要找到C中可以分区兼容的数据进行分区的过程。

参考资料:

http://blog.csdn.net/godfrey90/article/details/6754884

CAP原理应用与分布式矩阵相关推荐

  1. 分布式系统:FLP Impossibility/CAP原理

    分布式系统: 分布式系统的概念: 分布式系统是一组自治计算机系统的集合,这些系统在物理上是分开的,但通过配备分布式系统软件的集中式计算机网络连接起来.自治计算机将通过共享资源和文件并执行分配给它们的任 ...

  2. CAP 原理和分布式矩阵的应用

    CAP 原则是描述一致性.可用性和分区兼容性的理论, 但在实际情况下, 这一原则常常令人困惑. 什么样的情况适用于这一原则? 先决条件是什么? CAP 原则是否真的使分布式系统不一致和可用? 现在, ...

  3. redis学习-分布式数据库CAP原理

    传统的ACID分别是什么 A (Atomicity) 原子性 C (Consistency) 一致性 I (Isolation) 独立性 D (Durability) 持久性 关系型数据库遵循ACID ...

  4. 分布式CAP原理:一致性、可用性、分区容错

    目录 CAP概念 分区容错(Partition tolerance) 一致性(Consistency) 可用性(Availability) 一致性和可用性之间的矛盾 使用场景 CAP概念 单机系统由于 ...

  5. 分布式基础--CAP原理

    上图是CAP原理图,看到之后,不禁引入下面几个问题,让我们一一带着问题去了解CAP. 1.什么是CAP? 2.什么是分区? 3.为什么只有3选2? 4.可用的抉择? 1. 什么是 CAP 定理 CAP ...

  6. 分布式数据库CAP原理

    分布式数据库CAP原理 CAP简介 CAP理论 CAP总结 CAP简介 传统的关系型数据库事务具备ACID: (1)A :原子性 (2)C :一致性 (3)I :独立性 (4)D :持久性 分布式数据 ...

  7. 分布式数据库中CAP原理CAP+BASE

    一.传统的ACID 分别是什么 1.A: atomicity 原子性 2.C: Consistency 一致性 3.I: Isolation 独立性 4.D: Duraility 持久性 二.CAP ...

  8. base cap 分布式_分布式基础(1):CAP原理、BASE思想和最终一致性

    CAP,BASE和最终一致性是NoSQL数据库存在的三大基石. CAP C: Consistency 一致性 A: Availability 可用性(指的是快速获取数据) P: Tolerance o ...

  9. redis学习之——CAP原理CAP+BASE

    Remote Dictionary Server 分布式系统 分布式系统(distributed system) 由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成.分布式系统是建 ...

最新文章

  1. Spring核心--IOCAOP
  2. 【AI不惑境】残差网络的前世今生与原理
  3. sqlserver中的查询两个结果集的差的运算
  4. Java 第四周总结
  5. 关于OpenMesh在Vs2008下编译与安装
  6. BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数(数位DP+恶心细节)
  7. npm 删除依赖包_npm 和 yarn 你选哪个?
  8. git rebase 合并中间的提交
  9. smartdrv.exe是什么(收藏)
  10. 高通8926和高通410的参数对比
  11. 知道创宇爬虫题--代码持续更新中
  12. 宇宙是一个无始无终的循环?道翰天琼认知智能机器人平台API接口大脑为您揭秘-2。
  13. 实时视频直播平台的技术要点详解
  14. 业内首家全线上碎股自助交易 富途证券:股数有多少,需求无大小
  15. vc项目开发:俄罗斯方块制作日志 [上]
  16. 我的七条人生哲理以及个人学习方法总结
  17. 利用c++进行程序词法分析
  18. python多进程与并发
  19. 个人人民币定期存款-存本取息Personal CNY Time Deposit – Schedule
  20. 用JAVA实现输入年月日,输出这是一年的第几天,是星期几

热门文章

  1. 计算机c盘应该装什么区别,电脑的c盘和d盘有什么区别吗
  2. Alextnet网络
  3. 深度学习网络结构大全
  4. python spss_SPSS语法调用Python,让spss插上翅膀
  5. 抽奖动画效果html,利用css实现一个抽奖动画效果
  6. requireJs笔记
  7. 大数据日志分析系统-logstash
  8. 怎么使用计算机播放音乐,怎么给电脑设置默认音乐播放器
  9. vue3中使用canvas
  10. Zigzag 压缩小整数