分布式系统架构理论,定义了三种指标,理论说我们最多只能满足两个。

## 分布式系统

首先我们这个理论所说的分布式系统,是指系统内会共享数据,互相有连接有交互,才能完成系统功能的的分布式系统。而这个理论的关注点是**数据**的读写。

## 三种指标

- Consistency 一致性:

这里的一致性是针对于分布式读写的。对于一个分布式系统,当一条数据写成功,那么无论我怎么使用这个系统,我都应当能马上读取到这条最新的数据。

不一致性的例子:我更新了一条微博,而我的关注者还不能看到。

- Avalilability 可用性:

是指系统应当随时可用,在reasonable的时间内返回reasonable的结果。

一个反例:我更新了一条微博,我的关注者在刷我微博的时候显示对方正在更新微博,请稍后再试,或者显示一直在读取中。

- Partition Toleranc 分区容忍性:

分布式环境中数据必然会被划分成多个区分到不同的机器上,不同的机器之间会有数据交换。

而机器一多某台机器发生发生故障的概率就会比较高,而且机器间数据的交换依赖于网络,网络也很有可能会有延时、丢包之类的问题。

分区容忍性就要求在分布式系统要考虑到分布式环境的复杂性的前提下能正常提供服务。

(原版cap中的p其实指的是网络分区现象[参考Wiki network partition] ,只由于网络设备的影响,分布式集群被划分成多个子网,但这样理解我始终想不通,可能这样解释更合理)

## 三种指标的意义

- CAP-P:

首先我们来看分区容忍性,由于我们讨论的就是分布式环境,我们的系统肯定不能被这网络环境机器环境所影响,分区容忍性就是个公认的前提,要么你就是很多个单机提供服务,但那不是分布式。为了实现分区容忍性,就需要我们设计多个数据副本,多个副本还不能在同一台机器上,甚至要在多个机房、多个地区存放副本。如果有必要机器之间的网络也需要多个通道,防止网络通路出现问题。

- CAP-CA:

三分钟分布式CAP理论就这么复杂
cap理论

前提环境保证了,我们就来讨论下读写功能。系统的功能无外乎输出输出,也就是读写操作咯。对于读写操作我们需要在一致性和可用性之间有所取舍,当然并不是完全舍去另一方,而是我们不能完美的同时实现C和A。

为啥呢,前提P已经说了我们需要多副本分布在多机器上,这副本之间同步数据是会有延时,其次如何保证在写的同时(副本未同步完成)我的读操作可能会发生在各个副本上,那我应该如何返回正确的数据。所以C和A只能完美保证一个。

## 例子

- 舍C保A(AP)的例子:

比如刚刚的微博这个例子,我们更新了一条微博,不是所有的人都能马上刷出来的,对于哪些还只能刷出旧的微博数据的人来说数据就和我真实的操作不一致了。然而这种业务也不需要要求我们强一致性,没有刷出我的最新微博,也不是什么大事,大不了认为我没有更新而已,对业务影响很小。但是呢也不能一直都不一致是吧,所以C还是不能丢的,可以迟到。

- 舍A保C(CP)的例子:

比如银行账户的例子,大家生活中也许也已经注意到了,银行转账需要几个小时甚至几天,都会显示正在转账中。这时就是视作一种丢失可用性的状态。当然这是业务决定的。

- 舍P保C又保A的场景:

不是分布式的场景的话,我们可以选择CA,比如我是个小银行,我的转账功能可以设计为多地账户不互通,只能本地转账,只在一台服务器上操作,保证可用性和一致性。但整体来看可用性和一致性都丢失了。

# 思考题 acid

通用的关系型数据库设计理论,需要满足四种指标:

- Atomicity 原子性:

- Consistency 一致性:

- Isolation 独立性:

- Durability 持久性:

三分钟分布式CAP理论的更多相关文章

  1. 分布式CAP理论

    分布式CAP理论 来自wiki: 在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下 ...

  2. 分布式CAP理论介绍:一致性(Consistency),可用性(Availability),容忍网络分区(Partition tolerance)

    在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Consisten ...

  3. 分布式零基础之--分布式CAP理论

    研究到分布式系统CAP理论,记录下来下回详细分析它: CAP是指三个单词的简称 C: 一致性(Consistence) 所有节点访问的都是同一份最新的数据副本. A: 可用性(Availability ...

  4. 分布式系统及CAP理论

    一.集中式系统 在学习分布式之前,先了解一下与之相对应的集中式系统是什么样的. 集中式系统用一句话概括就是:一个主机带多个终端.终端没有数据处理能力,仅负责数据的录入和输出.而运算.存储等全部在主机上 ...

  5. 10分钟了解分布式CAP、BASE理论

    CAP理论 2000年7月,Eric Brewer教授提出CAP猜想:2年后,Seth Gilbert和Nancy Lynch从理论上证明了CAP:之后,CAP理论正式成为分布式计算领域的公认定理. ...

  6. [转]10分钟了解分布式CAP、BASE理论

    原文: https://www.cnblogs.com/chengtian/p/11278072.html ---------------------------------------------- ...

  7. 看完这篇,保证让你真正明白:分布式系统的CAP理论、CAP如何三选二

    引言 CAP 理论,相信很多人都听过,它是指: 一个分布式系统最多只能同时满足一致性(Consistency).可用性(Availability)和分区容错性(Partition tolerance) ...

  8. 从分布式一致性谈到CAP理论、BASE理论

    问题的提出 在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景. 1.火车站售票 假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车票,然 ...

  9. 【转】分布式理论-CAP理论

    一 CAP理论简述 CAP (Consistency, Availability, Partition  Tolerance,) 理论是NoSQL数据库管理系统构建的基础.     强一致性:等同于所 ...

随机推荐

  1. 获取当前ip

    测ip地址http://2018.ip138.com/ic.asphttps://www.ip.cn/

  2. tf.name_scope()和tf.variable_scope() (转)

    网络层中变量存在两个问题: 随着层数的增多,导致变量名的增多: 在调用函数的时候,会重复生成变量,但他们存储的都是一样的变量.   tf.variable不能解决这个问题. 变量作用域使用tf.var ...

  3. 机器学习之overfiting

    有错欢迎指正,别让小弟继续错下去. 我们在使用机器学习过程中,经常会overfiting,overfiting的产生原因是noise.训练样本大的话,还好,不用考虑这个 问题.但是,当数据量小的时候, ...

  4. windows下搭建vue

    1.windows https://nodejs.org/en/download/ 下载安装包2.点击安装 安装完成3.进入cmd npm -v4.安装淘宝镜像cnpm npm下载速度过慢因为安装完n ...

  5. Html----编写

    文档的编辑 选择文档---->修改文档后缀名(.thml)--->用浏览器打开(解释和执行HTML源代码的工具) 浏览器主要分类及内核 火狐(Firefor)--->Gecho IE ...

  6. MySQL 5.7 使用原生JSON类型

    首先回顾一下JSON的语法规则: 数据在键值对中, 数据由逗号分隔, 花括号保存对象, 方括号保存数组. 按照最简单的形式,可以用下面的JSON表示: {"NAME": " ...

  7. 第八篇:Jmeter的分布式测试

    一: 由于Jmeter本身的瓶颈,当模拟数以千计的用户并发的时候,使用单台机器会有些力不从心,甚至还会引起Java内存溢出的错误,要解决这个问题,就要使用分布式测试,运行多台机器,也就是所谓的Agen ...

  8. 早上STO单紧急寻源处理

    truncate table SAP_SO_STO1_STO2; truncate table SAP_STO1_STO2; INSERT INTO STG.SAP_SO_STO1_STO2(VBEL ...

  9. 《xss跨站脚本剖析与防御》实验笔记

    1.书籍<xss跨站脚本剖析与防御>上介绍的xss测试代码 <img src="javascrpt:alert('xss');">, <table b ...

  10. 解题(JuZhengCalculate-矩阵乘法计算量)

    题目描述 矩阵乘法的运算量与矩阵乘法的顺序强相关. 例如: A是一个50×10的矩阵,B是10×20的矩阵,C是20×5的矩阵 计算A*B*C有两种顺序:((AB)C)或者(A(BC)),前者需要计算 ...