[转帖]分布式必备理论基础:CAP和BASE

分布式,必备,理论,基础,cap,base · 浏览次数 : 0

小编点评

**CAP理论** * CAP 是分布式系统设计理论中三个基本需求的综合要求:一致性、可用性和分区容错性。 * 一致性:数据在多个副本之间能够保持一致的特性。 * 可用性:系统提供的服务一直处于可用的状态,每次请求都能获得正确的响应。 * 分区容错性:分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。 **BASE理论** * BASE 是 CAP 中一致性、可用性和最终一致性三个短语的缩写。 * BASE 理论是对 CAP 中一致性 C 和可用性 A 权衡的结果,它来源于对大规模互联网系统分布式实践的总结。 * BASE 理论的核心思想是:即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

正文

http://blog.itpub.net/70024420/viewspace-2926174/

 

 

大家好,我是老三,今天是没有刷题的一天,心情愉悦,给大家分享两个简单的知识点:分布式理论中的CAPBASE

CAP理论

什么是CAP

CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)Partition tolerance(分区容错性)这三个基本需求,最多只能同时满足其中的2个。

  • 一致性 :数据在多个副本之间能够保持一致的特性。
  • 可用性:系统提供的服务一直处于可用的状态,每次请求都能获得正确的响应。
  • 分区容错性:分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

什么是分区?

在分布式系统中,不同的节点分布在不同的子网络中,由于一些特殊的原因,这些子节点之间出现了网络不通的状态,但他们的内部子网络是正常的。从而导致了整个系统的环境被切分成了若干个孤立的区域,这就是分区。

为什么三者不可得兼

首先,我们得知道,分布式系统,是避免不了分区的,分区容错性是一定要满足的,我们看看在满足分区容错的基础上,能不能同时满足一致性可用性

假如现在有两个分区N1N2,N1和N2分别有不同的分区存储D1和D2,以及不同的服务S1和S2。

  • 在满足一致性 的时候,N1和N2的数据要求值一样的,D1=D2。
  • 在满足可用性的时候,无论访问N1还是N2,都能获取及时的响应。

好的,现在有这样的场景:

  • 用户访问了N1,修改了D1的数据。
  • 用户再次访问,请求落在了N2。此时D1和D2的数据不一致。

接下来:

  • 保证一致性:此时D1和D2数据不一致,要保证一致性就不能返回不一致的数据,可用性无法保证。
  • 保证可用性:立即响应,可用性得到了保证,但是此时响应的数据和D1不一致,一致性无法保证。

所以,可以看出,分区容错的前提下,一致性可用性是矛盾的。

CAP原则权衡

CAP三者不可同得,那么必须得做一些权衡。

CA without P

如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但是对于分布式系统,分区是客观存在的,其实分布式系统理论上是不可选CA的。

CP without A

如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。

AP wihtout C

要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。

CAP原则实际应用

我们应该都接触过微服务,常见的可以作为注册中心的组件有:ZooKeeper、Eureka、Nacos...。

  1. ZooKeeper 保证的是 CP。 任何时刻对 ZooKeeper 的读请求都能得到一致性的结果,但是, ZooKeeper 不保证每次请求的可用性比如在 Leader 选举过程中或者半数以上的机器不可用的时候服务就是不可用的。
  2. Eureka 保证的则是 AP。 Eureka 在设计的时候就是优先保证 A (可用性)。在 Eureka 中不存在什么 Leader 节点,每个节点都是一样的、平等的。因此 Eureka 不会像 ZooKeeper 那样出现选举过程中或者半数以上的机器不可用的时候服务就是不可用的情况。Eureka 保证即使大部分节点挂掉也不会影响正常提供服务,只要有一个节点是可用的就行了。只不过这个节点上的数据可能并不是最新的。
  3. Nacos 不仅支持 CP 也支持 AP。

BASE理论

什么是BASE理论

BASE 是 Basically Available(基本可用) 、Soft-state(软状态) 和 Eventually Consistent(最终一致性) 三个短语的缩写。

BASE 理论是对 CAP 中一致性 C 和可用性 A 权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。

BASE理论的核心思想是:

即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

BASE理论的三个特性

基本可用

什么是基本可用呢?

假如系统出现了不可预知故障,允许损失部分可用性,当然也不能完全不可用。

损失的这部分可用性指的是什么?

  • 响应时间上的损失:正常情况下的搜索引擎0.5秒即返回给用户结果,而基本可用的搜索引擎可以在2秒作用返回结果。

  • 功能上的损失:在一个电商网站上,正常情况下,用户可以顺利完成每一笔订单。但是到了大促期间,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。

软状态

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

最终一致性

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

分布式一致性的 3 种级别:

  1. 强一致性 :系统写入了什么,读出来的就是什么。
  2. 弱一致性 :不一定可以读取到最新写入的值,也不保证多少时间之后读取到的数据是最新的,只是会尽量保证某个时刻达到数据一致的状态。
  3. 最终一致性 :弱一致性的升级版,系统会保证在一定时间内达到数据一致的状态。

业界比较推崇是最终一致性级别,但是某些对数据一致要求十分严格的场景比如银行转账还是要保证强一致性。

最终一致性怎么保证呢?

  • 读时修复 : 在读取数据时,检测数据的不一致,进行修复。比如 Cassandra 的 Read Repair 实现,具体来说,在向 Cassandra 系统查询数据的时候,如果检测到不同节点 的副本数据不一致,系统就自动修复数据。
  • 写时修复 : 在写入数据,检测数据的不一致时,进行修复。比如 Cassandra 的 Hinted Handoff 实现。具体来说,Cassandra 集群的节点之间远程写数据的时候,如果写失败 就将数据缓存下来,然后定时重传,修复数据的不一致性。
  • 异步修复 : 这个是最常用的方式,通过定时对账检测副本数据的一致性,并修复。

总结

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

CAP理论严格来讲不是三选二,而是CPAP二选一,因为通常P(分区容错性)是必须得到保证的。

BASE理论面向的是大型高可用、可扩展的分布式系统。与传统ACID特性相反,不是强一致性模型,BASE提出通过牺牲强一致性来获得可用性,并允许数据一段时间内的不一致,但是最终需要达到一致状态。

与[转帖]分布式必备理论基础:CAP和BASE相似的内容:

[转帖]分布式必备理论基础:CAP和BASE

http://blog.itpub.net/70024420/viewspace-2926174/ 大家好,我是老三,今天是没有刷题的一天,心情愉悦,给大家分享两个简单的知识点:分布式理论中的CAP和BASE。 CAP理论 什么是CAP CAP原则又称CAP定理,指的是在一个分布式系统中,Consi

[转帖]10 张图搞懂服务注册发现机制

http://blog.itpub.net/70024420/viewspace-2926779/ 在微服务架构或分布式环境下,服务注册与发现技术不可或缺,这也是程序员进阶之路必须要掌握的核心技术之一,本文通过图解的方式带领大家轻轻松松掌握。 引入服务注册与发现组件的原因 先来看一个问题,假如现在我

[转帖]正则表达式技巧与注意事项

https://www.cnblogs.com/codelogs/p/16060052.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介# 现如今,正则表达式几乎是程序员的必备技能了,它入手确实很容易,但如果你不仔细琢磨学习,会长期停留在正则最基本的用法

[转帖]15 个必须知道的 chrome 开发工具技巧

在Web开发者中,Google Chrome是使用最广泛的浏览器。六周一次的发布周期和一套强大的不断扩大开发功能,使其成为了web开发者必备的工具。你可能已经熟悉了它的部分功能,如使用console和debugger在线编辑CSS。在这篇文章中,我们将分享15个有助于改进你的开发流程的技巧。 一、快

[转帖]电脑小白必读的CPU基础知识大全,CPU知识科普最新全面讲解

http://www.lotpc.com/yjzs/9374.html 对于电脑来说,CPU是最核心的硬件之一,相当于人体的大脑,它决定着一台电脑的运算速度,无论是台式机还是笔记本,CPU的选购至关重要。相信大家对CPU还不是很了解,下面装机之家分享一下CPU知识科普最新全面讲解,想要学习CPU知识

[转帖]【JVM】JVM源码分析之Metaspace解密

概述 metaspace,顾名思义,元数据空间,专门用来存元数据的,它是jdk8里特有的数据结构用来替代perm,这块空间很有自己的特点,前段时间公司这块的问题太多了,主要是因为升级了中间件所致,看到大家讨论来讨论去,看得出很多人对metaspace还是模棱两可,不是很了解它,因此我觉得有必要写篇文

[转帖]性能优化经验分享

https://maimai.cn/article/detail?fid=1773648919&efid=5xfDOW5OR3tSS0iyVW2ukA 近期,开发 C 端 h5 页面时,发现首页白屏时间比较长,并且用户也多次反映了这个问题,优化这个首屏加载时间是迟早的事,所以在开始优化前先做一些必要

[转帖]Linux设备与内存单位-扇区、块、段、页(sector、block、segment、page)

每个概念是对不同的对象而言的,但它们有一定的联系 这些概念的分析背景是Linux下的内存页和磁盘结构 扇区 是硬盘等存储设备传送单位,大小一般为512B 块 是VFS和文件系统的传送单位(所以相关设备也成为块设备),大小必须是2的幂,不能超过页的大小。 段 是一个内存页或内存页的一部分,它包含磁盘上

[转帖]ubuntu 时间同步-安装ntp服务器

原文链接: https://www.idcyunwei.org/post/235.html 姊妹篇:ubuntu 时间同步- systemd-timesyncd配置 在Ubuntu 18.04服务器上安装和配置NTP服务器 下面是安装NTP服务器并进行必要修改以在网络中实现所需时间同步的分步过程。

[转帖]RabbitMQ学习笔记03:Work Queues

参考资料:RabbitMQ tutorial - Work Queues — RabbitMQ 前言 这篇文章我们会创建一个Work Queue,它会在多个worker(即消费者 consumer)中分发耗时的任务。Work Queue也叫做Task Queue是为了避免当处理一个占用资源的任务时必