1.1 CAP理论的含义

Cap理论表示在分布式系统中一致性(C)、可用性(A)和分区容错性(P)最多只能同时满足两个。
  一致性:客户端更新数据成功后,在任意时刻,在系统任意对外提供服务的节点,读取到的数据都是最新写入的数据。(强一致性)。
  可用性:当系统出现异常时,仍能对外提供服务。
  分区容错:当出现网络分区时,系统的容错能力(机器之间出现网络故障,不能正常通信)。
  证明cap理论:有两台机器M1和M2,为保持一致性,两台机器的数据相同,现在客户端对M1的数据进行更新,但M1和M2之间出现网络故障(分区),M的最新数据无法同步到M2,导致M1的数据变为v1,M2仍为v0。现有一客户端向M2发送数据读取请求,对此请求的处理有两种选择:

  1. 返回旧数据v0,满足可用性,但是却违反了一致性。
  2. 阻塞此次读操作,直至网络故障恢复,M1的数据v1同步到M2中,满足一致性,但违反了可用性。

由于分布式系统天生具有分区的特性,所以一定要满足P,只能在CA中选其一。
Cap理论说明了想设计完全满足强一致性、可用性和分区容错性的分布式系统是不切实际的,只能在三者之间权衡,为分布式系统的设计提供理论指导。

1.2 一致性的分类

一致性可从客户端和服务端两个角度来看,客户端一致性定义客户端怎样和何时看到数据更新,服务端一致性定义更新时数据如何流经系统及系统对更新有何保证。
  客户端一致性分为以下几种:
  1. 强一致性:数据更新之后,任何客户端在后续的访问中都能访问到最新版本的数据。
  2. 弱一致性:数据更新之后,不能保证客户端的访问能访问到最新更新之后的数据,数据更新到所有客户端可见这段时间称为不一致窗口。
  3. 最终一致性:最终一致性是种特殊的弱一致性,假如更新数据之后没有后续的对此数据对象的更新操作,系统保证一段时间之后任何客户端对此数据对象的访问都能返回最后一次更新的数据。
  最终一致性有如下变种:
  1. 因果一致性: 如果进程A向进程B传达它已更新数据项,则进程B的后续访问将返回更新的值,并且保证写入将取代先前的写入。进程C的访问与进程A没有因果关系,遵循正常的最终一致性规则。
  2. 读已之所写一致性: 进程A在更新数据项之后始终访问更新的值,并且永远不会看到较旧的值。这是因果一致性模型的特例
  3. 会话一致性:是读已之所写的实际应用版本,进程对系统的访问存在与一个会话上下文中,在此会话中的访问遵循读已之所写一致性。
  4. 单调读一致性:进程访问某一数据对象的值之后,此进程后续的访问都不会返回更旧版本的值。
  5. 单调写一致性:系统保证相同进程的一系列写操作是序列化有序的。
同一个系统中,可以同时满足多种一致性,例如读已之所写和单调读一致性是常用的组合方案,这两种一致性使系统更易使用。

服务端一致性:
  N=存储数据副本的结点数量
  W=在更新完成之前,需要确认更新成功的副本数量。
  R=当读操作访问数据对象,需要访问的副本数量
  如果W+R>N,写副本和读副本会出现重叠,能保证一定能读到更新后的数据对象,从而保证强一致性。例如:在实现了primary-backup关系数据库管理系统中,同步副本技术N=2,W=2,R=1,能保证强一致性;异步副本方式N=2,W=1,R=1, R+W=N,一致性不能得到保证。
  如果W+R<=N, 那么不能保证强一致性,只能是弱一致性或最终一致性。如在主备RDBMS中,使用异步同步副本,并开启从副本读功能的方式,那么N=2, W=1和R=1。在这种情况下,R+W=N, 一致性不能得到保证。

1.3 CAP理论的变种(BASE理论)

BASE理论由CAP理论演化而来,是工业界对分布式系统实践的总结,其核心思想是即使无法达到强一致性,也要保证满足最终一致性。
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。
  基本可用:当系统发生不可预知故障时,允许损失部分可用性,例如:部分机房故障,允许查询时间变长(时间上的损失),系统高峰期为保证系统的稳定性,将部分用户请求引导到降级页面(功能上的损失)。
  软状态:允许系统中的数据存在中间状态,该中间状态不会影响系统的整体可用性,即允许多个副本间的同步存在延时。
  最终一致性:系统中数据的副本经过一段时间的同步之后,最终能达到一致性状态,不要求强一致性。

参考文献

[1] 分布式系统的CAP理论.https://www.hollischuang.com/archives/666
[2] Vogels W. Eventually consistent[J]. Communications of the ACM, 2009, 52(1): 40-44.
[3] 分布式系统原理九:CAP理论和BASE理论.http://feixiao.github.io/2017/03/14/fbsxt9/

分布式系统原理之cap理论的更多相关文章

  1. 【Redis数据库】再有人问你CAP理论是什么,就把这篇文章发给他

    CAP是Consistency(一致性),Availability(可用性),Partition tolerance(分区容错性)的缩写.在学习redis过程中看到这个名词,查找各位大佬的文章发现这篇 ...

  2. 如果有人问你CAP理论是什么,就把这篇文章发给他。

    绝对和你在网上看到的CAP定理介绍不一样. CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer's theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric B ...

  3. CAP理论中的P到底是个什么意思

    在CAP理论中,C代表一致性,A代表可用性(在一定时间内,用户的请求都会得到应答),P代表分区容错.这里分区容错到底是指数据上的多个备份还是说其它的 ? 我感觉分布式系统中,CAP理论应该是C和A存在 ...

  4. 【D】分布式系统的CAP理论

    2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想.2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP.之后, ...

  5. 转载:分布式系统的CAP理论

    原文转载Hollis原创文章:http://www.hollischuang.com/archives/666 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提 ...

  6. 分布式系统之CAP理论杂记[转]

    分布式系统之CAP理论杂记 http://www.cnblogs.com/highriver/archive/2011/09/15/2176833.html 分布式系统的CAP理论: 理论首先把分布式 ...

  7. 分布式系统之CAP理论

    任老师第一节主要讲了分布式系统实现时候面临的八个问题,布置的作业就是这个,查询CAP理论. 笔者初次接触分布式,所以本文主要是一个汇总. 一.CAP起源 CAP原本是一个猜想,2000年PODC大会的 ...

  8. 分布式系统之CAP理论杂记

    分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:● 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值.● 可用性(A):在集群中一部分节点故障后,集群整体是否 ...

  9. 分布式系统CAP理论

    在单机的数据库系统之中,我们很容易实现一套满足ACID 特性的 事务处理系统, 事务的一致性不存在问题. 但是在分布式系统之中,由于数据分布在不同的主机结点上,如何对着些数据进行分布式的事务处理就具有 ...

随机推荐

  1. Linux下Nginx的安装(二)

    一.安装Nginx ## 安装前准备 ## #GNU编译器集合 #Nginx编译需要PCRE #在Nginx的各种模块中需要使用gzip压缩 #在Nginx中,如果服务器提供安全网页时则会用到Open ...

  2. (day47)作业

    一.链式表达式完成菜单栏 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  3. 微信小程序 - 结构目录 | 配置介绍

    结构目录 小程序框架提供了自己的视图层描述语言 WXML 和 WXSS,以及 JavaScript,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑. 一.小程序文件结构和传 ...

  4. luoguP2260 [清华集训2012]模积和

    题意 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}n\%i*m\%j*[i!=j]\) \(\sum\limits_{i=1}^{n}\sum\limits ...

  5. oracle左连接与右连接

    left join(左联接)       ---返回左表中的所有记录和右表中条件字段相等的记录. right join(右联接)     ---返回右表中的所有记录和左表中联结字段相等的记录 inne ...

  6. 《30天自制操作系统》笔记2 --- 初步了解汇编产生的二进制(Day1)

    nask.exe应该就是nas kit(nas开发工具的意思),由于这个编译器是作者自己写的,所以这种汇编语言应该是作者改造出来的,所以我叫它nas汇编语言. 作者说nask是模仿nasm语法的,关于 ...

  7. 利用Jenkins打包并远程部署NodeJS应用

    本文Jenkins版本2.190.2,为19年11月最新 1.安装Jenkins.Git和NodeJS Jenkins安装参考:https://www.cnblogs.com/zhi-leaf/p/1 ...

  8. 运行带参数的python脚本

    问题描述: 要执行python脚本,有哪几种方法. 特别是看书的时候,书上只讲解了如何在linux下运行,windows根本就没有那些命令,该怎么办呢? 方法1:python自带的IDLE编辑器 Ru ...

  9. Vue.js+vue-element

    Vue.js+vue-element搭建属于自己的后台管理模板:什么是Vue.js?(一)   Vue.js+vue-element搭建属于自己的后台管理模板:Vue.js是什么?(一) 前言 本教程 ...

  10. CW2 Software Maintenance Spec Sheet

    CW2 Software Maintenance Spec SheetAcademic Year 2019/2020CW2 is about maintaining and extending a r ...