CAP定理与BASE理论

Wesley13
• 阅读 589

1. CAP定理

  • C:Consistency,一致性
  • A:Availability,可用性
  • P:Partition tolerance,分区容错性

CAP定理,指的是在一个分布式系统中,一致性、可用性、分区容错性,三者不可得兼。

2. CAP详解

2.1 一致性(C)

指所有节点访问同一份最新的数据副本。通俗理解就是,在分布式系统中,所有的数据副本,在同一时刻值相同。

2.2 可用性(A)

每次请求都能获取到相应,可以对外提供服务

2.3 分区容错性(P)

由于分布式系统的一个节点发生网络延迟或故障,在规定时限内系统不能做到数据一致性,就发生了分区(系统中有多个数据不一致的节点)。此时,必须在一致性和可用性之间做出选择。

例如:分布式系统中有两个节点,一个节点发生了网络延迟或故障。如果为了保证节点数据一致性,那么就必须放弃可用性,就是两个节点都不再提供服务;如果为了保证可用性,就是说仍要提供服务,那么就必须放弃一致性,没有发生网络延迟或故障的节点仍提供服务。

3. CP还是AP?

在分布式系统中,发生网络延迟或故障是不可避免的,也就是分区容错性是避免不掉的,而发生了分区后,只能在一致性和分区容错性自建选择,那么我们只有两种选择:

  • 数据一致性和分区容错性(CP)
  • 可用性和分区容错性(AP)

无论选择CP,还是选择AP,都是根据业务需求来选择,没有所谓的谁比谁好。

3.1 选择CP

也就是说,我们更看重数据的一致性,适用于对数据一致性有严格要求的业务场景,例如金融,12306售票。

3.2 选择AP

此时更看重可用性,放弃一致性(还是要追求最终一致性的,不一致的数据没有意义),也是各大互联网公司一直宣称服务不可用时间有多少秒,强调的就是可用性。

4. BASE理论

BASE理论是:

  • 基本可用(BA, Basically Available)
  • 软状态(Soft State)
  • 最终一致性(Eventual Consistency)

其思想是,在分布式系统,选择可用性和分区容错性时,无法做到一致性,可以采用适当的方案达到最终一致性,在保证可用性的同时,数据最终也能达到一致。

例如,在电商的促销活动中,是为了追求高可用(相对于CAP中的可用,高可用偏重于可以处理高并发,也是就高QPS),放弃一致性,选择最终一致性(下单成功后,不会立马收到短信,延迟一段时间还是会收到短信。记得某平台,在购物节期间,都不再提供发短信服务了)。为什么要追求可用,甚至是高可用呢?在促销活动中,1件商品,可能有1百万个人同时在抢,那么就是说,当一个人进入抢购时(要判断这个人是不是满足参加的条件等),剩余的都在等待,甚至于拒绝你抢购,对用来说,这是不能容忍的,最真实的案例就是12306上抢票。

4.1 基本可用

指在分布式系统中,发生故障时,允许损失一部分功能,但是其它功能还是可用的。

4.2 软状态

指分布式系统中,允许存在数据的中间状态,而中间状态又不会影响系统的可用性。

4.3 最终一致性

分布式系统中的数据在一段时间后,最终能达到一致性。

5. CAP定理和BASE理论

CAP定理揭示了在分布式系统中一致性、可用性和分区容错性的不能同时满足,而可以设计满足BASE理论的分布式系统。

参考文献

CAP定理

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

CAP和BASE理论

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
2年前
CAP定理的理解
CAP定理1.CAP1.1定义以下定义来自维基。在理论计算机科学中,CAP定理(CAPtheorem),又被称作布鲁尔定理(Brewer'stheorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:一致性(Consistency)(等同于所有节点访问同一份最新的数据副本)
Wesley13 Wesley13
2年前
CAP BASE ACID
CAP(理论)Consistency(一致性),数据一致更新,所有数据变动都是同步的Availability(可用性),好的响应性能Partitiontolerance(分区容错性)可靠性定理:任何分布式系统只可同时满足二点,没法三者兼顾。忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
CAP理论
分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:●一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)●可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)●分区容错性(P):以实际效果而言,分区相当于对
Stella981 Stella981
2年前
Raft分布式一致性算法整理
CAP定理1.Consistency:一致性2.Availability:可用性3.Partitiontolerance:分区容错性CAP定理指出,在异步网络模型中,不存在一个系统可以同时满足上述3个属性。换句话说,分布式系统必须舍弃其中的一个属性。对于需要在分布式条件下运行的系统来说,如何在一致性、可用性和分区容错
Stella981 Stella981
2年前
Linux下分布式系统以及CAP理论分析
CAP理论被很多人拿来作为分布式系统设计的金律,然而感觉大家对CAP这三个属性的认识却存在不少误区,那么什么是CAP理论呢?CAP原本是一个猜想,2000年PODC大会的时候大牛Brewer提出的,他认为在设计一个大规模可扩放的网络服务时候会遇到三个特性:一致性(consistency)、可用性(Availability)、分区容错(partitionto
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这