ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸。

一、从集中式到分布式

1、集中式

集中式是指有一台或者多台计算机组成的中心节点,数据集中存储于这个中心节点中,并且整个系统的所有业务单元都集中部署在这个中心节点上,系统的所有功能均由集中处理。

2、分布式

分布式系统是一个硬件或者软件分布在不同的网络计算机上,彼此之间仅仅通过消费传递进行通信和协调的系统。

分布式系统特征:

1、分布性

2、对等性

3、并发性

4、缺乏全球时钟(由于分布式系统由一些列的空间上任意分布的多个进程组成,具有分布性,很难定义两个事件究竟是谁先谁后)

5、故障总是会发生

分布式系统典型难题:

1、通信问题

2、网络分区(当网络发生异常时候,只有部分节点进行正常通信,另一些节点不可用,网络分区严重情况下面会导致“脑裂”)

3、三态(成功、失败、超时)

4、节点故障

二、CAP理论和BASE理论

分布式事物:指事物参与者、支持事物的服务器、资源服务器以及事物管理器分别于分布式系统的不同节点之上。通常一个分布式事物中会涉及对多个数据源或者业务系统的操作。

本地事物可以采用ACID模型保证数据的严格一致性。但在分布式系统中,实现事物的严格一致性会和服务的可用性产生冲突,这是有分布式系统的特征决定的。因此,在可用性和一致性之间永远无法存在一个两全其美的方案,于是如何构建一个兼顾可用性和一致性的分布式系统成为一个难题,因此出现了诸如CAP和BASE这样的分布式经典理论。

1、CAP理论

CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer's theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。对于设计分布式系统的架构师来说,CAP 是必须掌握的理论。

在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。

(1)一致性

一致性指数据在多个副本之间是否能够保持一致性的特性。在一致性的需求下,当一个系统在数据一致的状态下执行了更新操作后,应该保证系统的数据任然处于一致的状态。布鲁尔提到对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。

在分布式系统中如果能够针对一个数据项的更新操作执行成功后,所有用户都可以读取到其最新的值,那么这样的系统就被认为具有强一致性。

(2)可用性

可用性指系统提供的服务必须一致处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内(指用户的一个操作,系统必须能够在指定的时间内返回对应的处理结果,如果超过了这个时间,系统就认为不可用)****返回结果(返回结果是可用性的另一个重要指标,要求系统在完成对用户请求处理后,返回一个正常的响应结果,失败或者成功,而不是一个困惑的结果)。

(3)分区容错性

网络分区指在分布式系统中,不同节点分布在不同的子网络(机房或者异地网络等)中,由于一些特殊的原因导致这些网络之间出现网络不连通的状态,但是各个子网络的内部网络是正常的,从而导致整个系统的网络呼喊经被切分为若干个孤立的区域。

分区容错性约束了一个分布式系统需要具有如下特征:分布式系统在遇到任何网络分区故障的时候,仍热能够保证对外提供满足一致性或可用性的服务,除非整合网络环境发生了故障。

(4)总结

在分布式环境中,我们会发现必须选择 P(分区容忍)要素,因为网络本身无法做到 100% 可靠,有可能出故障,所以分区是一个必然的现象。也就是说分区容错性是分布式系统的一个最基本要求。

在CAP理论中,不能同时满足一致性、分区容忍性、可用性,而分区容忍性优势分布式系统的基本要求,因此在架构设计的时候只能在CA或者CP中取舍,也就是只能在一致性或者可用性之间取舍。

CP系统

AP系统

(5)CAP理论中几个重要的细节

CAP 关注的粒度是数据,而不是整个系统。C 与 A 之间的取舍可以在同一系统内以非常细小的粒度反复发生,而每一次的决策可能因为具体的操作,乃至因为牵涉到特定的数据或用户而有所不同。但在实际设计过程中,每个系统不可能只处理一种数据,而是包含多种类型的数据,有的数据必须选择 CP,有的数据必须选择 AP。而如果我们做设计时,从整个系统的角度去选择 CP 还是 AP,就会发现顾此失彼,无论怎么做都是有问题的。(以一个最简单的用户管理系统为例,用户管理系统包含用户账号数据(用户 ID、密码)、用户信息数据(昵称、兴趣、爱好、性别、自我介绍等)。通常情况下,用户账号数据会选择 CP,而用户信息数据会选择 AP,如果限定整个系统为 CP,则不符合用户信息数据的应用场景;如果限定整个系统为 AP,则又不符合用户账号数据的应用场景。)

CAP 是忽略网络延迟的。意味着,CAP 理论中的 C 在实践中是不可能完美实现的,在数据复制的过程中,节点 A 和节点 B 的数据并不一致。

正常运行情况下,不存在 CP 和 AP 的选择,可以同时满足 CA。CAP 理论告诉我们分布式系统只能选择 CP 或者 AP,但其实这里的前提是系统发生了“分区”现象。如果系统没有发生分区现象,也就是说 P 不存在的时候(节点间的网络连接一切正常),我们没有必要放弃 C 或者 A,应该 C 和 A 都可以保证,这就要求架构设计的时候既要考虑分区发生时选择 CP 还是 AP,也要考虑分区没有发生时如何保证 CA。(同样以用户管理系统为例,即使是实现 CA,不同的数据实现方式也可能不一样:用户账号数据可以采用“消息队列”的方式来实现 CA,因为消息队列可以比较好地控制实时性,但实现起来就复杂一些;而用户信息数据可以采用“数据库同步”的方式来实现 CA,因为数据库的方式虽然在某些场景下可能延迟较高,但使用起来简单。)

放弃并不等于什么都不做,需要为分区恢复后做准备。

2、BASE理论

BASE 是基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)三个短语的简写。BASE理论是对CAP中一致性和可用性权衡的结果,是基于CAP定力逐步演化而来的,是源于大规模互联网系统分布式实践的总结。其核心思想:无法做到强一致性,但是每一个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

(1)基本可用

基本可用指分布式系统在出现不可预知的故障时候,允许损失部分可用性,保证核心服务可用。响应时间上的损失(正常0.5ms之内的故障时候响应延时为1-2秒了)和功能上的损失(秒杀时候的降级数据)

(2)弱状态

也称软状态,指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程中存在延时。

(3)最终一致性

最终一致性强调的是系统中所有的数据副本,在进过一段时间的同步后,最终能够达到一个一致的状态。最终一致性需要保证数据最终能够一致而不需要保证数据实时的一致性。

在没有发生故障的前提下,数据的一致性状态的时间延时,取决于网络延迟,系统负载,数据恢复策略等等因素。

(4)总结

BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。其基本思路就是:通过业务,牺牲强一致性而获得可用性,并允许数据在一段时间内是不一致的,但是最终达到一致性状态。

三、思考:按照CAP理论如何设计一个电商系统?

首先个电商网站核心模块有用户,订单,商品,支付,促销管理等

1、对于用户模块,包括登录,个人设置,个人订单,购物车,收藏夹等,这些模块保证AP,数据短时间不一致不影响使用。

2、订单模块的下单付款扣减库存操作是整个系统的核心,CA都需要保证,极端情况下面牺牲A保证C

3、商品模块的商品上下架和库存管理保证CP

4、搜索功能因为本身就不是实时性非常高的模块,所以保证AP就可以了。

5、促销是短时间的数据不一致,结果就是优惠信息看不到,但是已有的优惠要保证可用,而且优惠可以提前预计算,所以可以保证AP。

6、支付这一块是独立的系统,或者使用第三方的支付宝,微信。其实CAP是由第三方来保证的,支付系统是一个对CAP要求极高的系统,C是必须要保证的,AP中A相对更重要,不能因为分区,导致所有人都不能支付

base cap 分布式_1、分布式基础之CAP和BASE理论相关推荐

  1. 分布式事务前看懂CAP、BASE

    CAP.BASE跟后面要看的分布式事务有直接的关系,但是这两个分布式的理论对我们研究分布式系统里面的一些技术和方案都是作为基础的知识需要掌握的 这个CAP这个东西啊,也是个在研究分布式相关的问题中,比 ...

  2. base cap 分布式_神一样的CAP理论被应用在何方?

    " 对于开发或设计分布式系统的架构师工程师来说,CAP 是必须要掌握的理论. 图片来自 Pexels But:这个文章的重点并不是讨论 CAP 理论和细节,重点是说说 CAP 在微服务中的开 ...

  3. 深入理解分布式、微服务中CAP定律和BASE理论

    一.背景 随着互联网的快速蔓延,各种传统项目(单体应用的架构)已经不能够满足当前各种复杂的需求场景,都逐渐向分布式服务.微服务做转换,而如今分布式.微服务架构已经普遍存在互联网公司的项目中,像大型电商 ...

  4. java cap是什么_寒冬面试归来总结最新蚂蚁4面(Java):CAP+数据强一致性+分布式等...

    原标题:寒冬面试归来总结最新蚂蚁4面(Java):CAP+数据强一致性+分布式等 01 - 最新蚂蚁一面 1 自我介绍和项目 2 Java的内存分区 3 Java对象的回收方式,回收算法. 4 CMS ...

  5. 什么是分布式系统?分布式学习入门基础

    一.什么是分布式系统 分布式系统是由一组通过网络进行通信.为了完成共同的任务而协调工作的计算机节点组成的系统.分布式系统的出现是为了用廉价的.普通的机器完成单个计算机无法完成的计算.存储任务.其目的是 ...

  6. python分布式框架celery项目开发_本项目在 Celery 分布式爬虫的基础上构建监控方案 Demo...

    CrawlerMonitor UPDATE: 2020.4.14 Introduction 本项目在 Celery 分布式爬虫的基础上构建监控方案 Demo,在编写 Statsd + InfluxDB ...

  7. 分布式事务专题-基础概念(1)

    文章目录 分布式事务专题-基础概念(1) 1.1 什么是事务 1.2 本地事务 1.3 分布式事务 1.4 分布式事务产生场景 1.5 链接 分布式事务专题-基础概念(1) 1.1 什么是事务 什么是 ...

  8. VMware搭建分布式集群基础环境

    VMware搭建分布式集群基础环境 1. 前言 在日常学习.工作当中,我们经常需要用到分布式集群环境,如zookeeper集群.redis集群.大数据集群等,而通常并没有那么多的物理机器可以使用,因此 ...

  9. 分布式事务的常见概念:ACID,BASE,XA,SAGA

    ACID和BASE这是事务实现的两种基础理论, ACID是刚性事务,强调的是隔离性和强制一致性,隔离性的话就导致事务操作的资源在事务结束以前要一直被锁定占用,又因为强一致性,如果一个事务中包含了多个子 ...

  10. 【分布式】分布式事务解决方案概述

    本地事务与分布式事务 事务 数据库事务(简称:事务,Transaction)是指数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成. 事务拥有以下四个特性,习惯上被称为ACID特性: 原子 ...

最新文章

  1. http请求过程简要
  2. NCEPU:线下组队学习周报(009)
  3. pythonassertbug_还在 Bug 不断?不妨试试这 2 个装X技巧
  4. 聊聊elasticsearch的RoutingService
  5. 快速问医生如何快速实现 患者与医生即时问诊?
  6. soureTree中如何设置git 用户名与密码 SourceTree提交修改用户详细图文方法
  7. mysql整除、取余、四舍五入
  8. 大数据架构的典型方法和方式
  9. 原则 principles
  10. opencv-api SIFT_create()
  11. android创建项目,并开发项目。
  12. 使用 docker 来安装 oracle 11c
  13. easyui combobox设置只能选择下拉
  14. 刨根究底字符编码之九——字符编码方案的演变与字节序
  15. 千兆网线水晶头的接法
  16. 12306 余票检测软件
  17. Matlab代码书写规范
  18. Minio服务端和客户端部署说明
  19. 微信JS SDK Demo 官方案例[转]
  20. Java—ISBN号码问题

热门文章

  1. iOS内购测试自动订阅型产品
  2. 爬取pexels女性图片+百度人脸检测过滤高颜值美女
  3. PAT甲级 1138 后序遍历
  4. 电信光纤入户 itv 路由器设置
  5. 一次 HTTP 请求到底经历了什么?
  6. 《中国棒球》:国家女子棒球队·一棒成名
  7. 消费心理学(03):比例偏见
  8. 广告让你不自觉地掏钱?消费者行为背后的心理学
  9. opencv4.3 Stitcher图像拼接方法——学习笔记1
  10. 用python编写录音机——通过输入控制录音的开始和结束