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

## 分布式系统

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

## 三种指标

- 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. RabbitMQ的安装与管理控制台设置

    首先下载安装Erlang环境:http://www.erlang.org/downloads: 再下载安装RabbitMQ:http://www.rabbitmq.com/download.html: ...

  2. Numpy知识(三)

    ndarray的花式索引. 正负数索引,正数就是从0开始的下标正向寻找,负数是-1开始的负向寻找. arr[[1,5,2,6],[0,3,1,2]]:拿取arr[1,0],arr[5,3],arr[2 ...

  3. 02_数据库基础之(二)sql语句入门

    1.基本增删改查操作 #一. 数据类型 常用的3中 # .字符串 例如:你的名字 我是中国人 在数据库中要使用 ‘’引起来 '苹果手机' # .整数类型 例如: 你的年龄 ,办公室的人数 个 ,直接使 ...

  4. 备份u盘kali系统

    把kali系统装在u盘上,会带来极大的便利,只要有网有机就能随时随地hacking,但是u盘体积太小极易丢失,所以需要对其备份以备万一. 一般kali启动U盘分为两个区:启动区和文件存放区.如下图 我 ...

  5. django admin后台显示中文

    在settings中设置 LANGUAGE_CODE = ‘zh-Hans’

  6. python+selenium的环境配置

    以前写过关于python和selenium加myeclipse的环境配置,但是myeclipse启动时过于费时,虽然myeclipse有很好的提示功能,但是作为初学者,我还是直接用python的idl ...

  7. openvpn-admin(openvpn web管理 )

    openvpn 两种认证简介: 1.key分发: 在服务器端生成秘钥,然后下载到本地,将服务器端的ca.crt xx.crt xx.key ta.key(如果服务器启用的话需要,未开启的话不需要,功能 ...

  8. k8s volume 基本类型分类

    volume 类型 静态volume emptyDir 临时空目录, 用途,pod内多用户同享一个目录.与POD的生命周期一至,POD创建时创建,删除时删除. Hostpath 宿主机1:1映射,用途 ...

  9. Android 单元测试四大组件Activity,Service,Content Provider , Broadcast Receiver

    先mark, 后补充 https://blog.csdn.net/stevenhu_223/article/details/14054313 https://www.jianshu.com/p/3aa ...

  10. 创建React组件

    组件概述 组件可以将UI切分成一些独立的.可复用的部件,这样你就只需专注于构建每一个单独的部件. 组件从概念上看就像是函数,它可以接收任意的输入值(称之为“props”),并返回一个需要在页面上展示的 ...