【分布式】浅谈CAP、BASE理论(1)

news2024/11/18 12:17:49

CAP理论

起源

CAP定理,又被称作布鲁尔定理。这个定理起源于加州大学柏克莱分校的计算机科学家埃里克·布鲁尔在2000年的分布式计算原理研讨会上提出的一个猜想1。在2002年,麻省理工学院的赛斯·吉尔伯特和南希·林奇发表了布鲁尔猜想的证明,使之成为一个定理。

吉尔伯特和林奇证明的CAP定理比布鲁尔设想的某种程度上更加狭义。定理讨论了在两个互相矛盾的请求到达彼此连接不通的两个不同的分布式节点的时候的处理方案。

简介

一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

  • 一致性(C):在任意时间,系统内所有节点访问同一份最新的数据副本;
  • 可用性(A):保证每个请求不管成功或者失败都有响应;
  • 分区容错性(P):系统中任意信息的丢失或失败不会影响系统的继续运作;

CAP理论

CAP理论中的CA和数据库事务中ACID的CA并完全是同一回事儿。两者之中的A都是C都是一致性(Consistency)。CAP中的A指的是可用性(Availability),而ACID中的A指的是原子性(Atomicity),切勿混为一谈。

CAP理论详解

一致性

可以理解为如果一个写操作成功了,那么后续的请求都必须读到这个最新的值。如果这个操作失败了,那么后续所有的读操作都不能读到这个新的值。也可以理解为当一个节点更新操作成功后,所有节点在同一时间的数据保持一致

  • 对于客户端:难点在于更新完数据如何获取最新值;
  • 对于服务端:难点在于将最新数据同步到各个节点;

可用性

所有的读/写操作都能在一定响应时间内及时响应,可以终止、不会一直等待,不出现用户操作失败或者访问超时等用户体验不好的情况。可用性通常情况下和分布式数据冗余,负载均衡等有着很大的关联。

通常采用停机时间来衡量一个系统的可用性,称之为N个9

可用性分类可用水平(%)年可容忍停机时间
容错可用性99.9999%<1 min
极高可用性99.999%<5 min
具有故障自动恢复能力的可用性99.99%<53 min
高可用性99.9%<8.8h
商品可用性99%<43.8 min

以5个9(99.999%)为例,它的计算公式如下:
( 1 − 0.99999 ) × 365 × 24 × 60 = 5.256 (1-0.99999) \times 365 \times 24 \times 60 = 5.256 (10.99999)×365×24×60=5.256
也就是说全年停机时间不超过5.256分钟,至于6个9,全年停机时间不超过半分钟(已经十分夸张了)。

分区容错性

分区容错性是指除非整个网络瘫痪,否则一直能够对外提供服务。在系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

CAP理论证明

CAP理论证明了一个系统不能同时满足C、A、P三个理论,只能三选二。以下图为例:

CAP证明

现在有一个客户端向三个节点发送信息,假定只要有一个节点成功则认为成功,那么如果【N2】和【N3】成功写入但是【N1】因为网络故障没有成功写入,对于客户端来说依旧认为系统可用,但是从服务端的角度触发各个节点之间的一致性(C)就会被放弃,但是保证了可用性(A)

现在假定所有节点都写入成功才认为操作成功,则【N1】因为网络故障写入失败,那么【N2】和【N3】就会回滚,那么整个操作也就失败了, 这样做虽然保证了一致性(C),但是放弃了可用性(A)

综上,任何一个分布式系统无法同时保证CAP,必须进行三选二,以一张表进行说明:

选择说 明
CA放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择
AP放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,例如很多NoSQL系统就是如此
CP放弃可用性,追求一致性和分区容错性,一些分布式数据库会选用此方案

在分布式环境下,P是一定存在的,一旦出现了网络分区,那么一致性和可用性就一定要抛弃一个。

  • 对于NoSQL系统,更加注重可用性,所以会使一个AP系统;
  • 对于分布式关系型数据库,强调一致性,所以一般会是一个CP系统,虽然分布式关系型数据库无法做到100% 高可用,单一般做到5个9。实际应用中通常采用如下两个指标进行评价
    • RPO(Recovery Point Objective):指数据库在灾难发生后会丢失多长时间数据,只要还有一个节点保留了最新数据,那么RPO=0;
    • RTO(Recovery Time Objective):指数据库在灾难发生后多长时间恢复正常,一般指定一个阈值,保证RTO<几分钟。

BASE理论

BASE理论是CAP理论的一种妥协,由于cap只能CA二选一,所以BASE理论降低了对可用性和一致性的要求。

  • 基本可用(Basic Available):允许可用性降低(可能响应延长、可能服务降级);
  • 软状态(Soft State):指允许系统中的数据存在中间状态,并认为该中间状态不会影响系统整体可用性,比方说【正在同步】这个状态,其实就是允许节点间交互数据具有一定的延迟;
  • 最终一致性(Eventually consistent):所有节点数据同步可以存在时延,在一定时间后必须达成数据一致。

总结

  1. CAP理论最主要是证明了你不能做什么;
  2. CA二选一不代表完全放弃其中的一个选择另一个,不能生搬硬套理论;
  3. 设计一个系统时,需要根据实际情况对CA进行降级,可以看做是一种妥协的过程。

  1. https://people.eecs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Portraiture2023免费后期修图插件磨皮神器DR5

后期修图中有一个非常关键&#xff0c;而且不可或缺的步骤&#xff0c;那就是磨皮&#xff0c;磨皮的方法有很多种&#xff0c;但最方便快捷就能达到大片级效果的方法&#xff0c;莫过于使用磨皮插件了&#xff0c;Portraiture图像磨皮插件&#xff0c;支持PS CC- CC2023&#…

4.R语言【rehsape2包】介绍、melt( )、cast( )函数、其他使用技巧

b站课程视频链接&#xff1a; https://www.bilibili.com/video/BV19x411X7C6?p1 腾讯课堂(最新&#xff0c;但是要花钱&#xff0c;我花99&#x1f622;&#x1f622;元买了&#xff0c;感觉讲的没问题&#xff0c;就是知识点结构有点乱&#xff0c;有点废话&#xff09;&…

CAD转换PDF怎么转换?新手必备的方法

相信很多从事建筑类的相关工作的小伙伴们对CAD文件都并不陌生&#xff0c;在设计图纸和数据更改大都是使用这类文件的专业工具。这类文件的专业性较强设计出来的图纸也比较规范&#xff0c;但就有一个问题比较麻烦&#xff0c;那便是在不同设备打开需要对应的查阅软件&#xff…

【TypeScript】Ts基本概念

TypeScript基本概念 TypeScript 是什么&#xff1f; 目标&#xff1a;能够说出什么是typescript 内容&#xff1a; TS 官方文档TS 中文参考 - 不再维护 TypeScript 简称&#xff1a;TS&#xff0c;是 JavaScript 的超集&#xff0c;简单来说就是&#xff1a;JS 有的 TS 都有…

振弦采集模块参数配置工具的连接与断开

振弦采集模块参数配置工具的连接与断开 在指令区的【 COM 端口】组合框内操作完成。【端口】 下拉框&#xff1a;列出了本计算机当前已经存在的所有 COM 端口名称&#xff0c;若与模块连接的端口名称未在下拉框中列出&#xff0c;还可通过手工输入端口名的方法自由输入。 【速…

【NI Multisim 14.0原理图文件管理——新建设计文件】

目录 序言 一、原理图文件管理 二、新建设计文件 &#x1f34d;1. 空白文件 &#x1f34d; 2.系统安装模板文件 &#x1f34d;3. 自定义模板文件 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表进行电路设…

C#,图像二值化(21)——局部阈值的韦尔纳算法(Wellner Thresholding)及源代码

1 韦尔纳算法&#xff08;Wellner Throsholding&#xff09;摘要针对计算大量缺陷时速度较慢且图像阈值不平滑的Wellner算法&#xff0c;本文提出了两种改进方案&#xff0c;第一种是一维平滑算法&#xff08;ODSA&#xff09;&#xff0c;第二种是基于第一种算法的&#xff0c…

《MYSQL实战45讲》笔记(11-20)

11&#xff1a;怎么给字符串字段加索引&#xff1f; 业务场景&#xff1a;基于字符串字段做查询。例如邮箱登录等等。 前缀索引的优势&#xff1a;相对于整个字段索引&#xff0c;前缀索引的占用空间更小。 前缀索引带来的问题&#xff1a;区分度过低的时候会额外扫描次数。 …

CATIA和CAD超全对比,来看看哪个好用

从文明伊始&#xff0c;绘图和制图就对人类发展发挥着重要作用&#xff0c;它通过图形表示使概念更容易理解&#xff0c;这导致了“工程艺术”的发展。绘图是一种使用图片和符号来呈现概念、想法或观点的方式&#xff0c;而绘图是任何现实世界对象或事物的图形表示。为了简化数…

1、Visual Studio 2017安装

目录 一、简介 二、安装步骤 三、Visual Studio 2017的使用 一、简介 Visual Studio是微软推出的一款C编译器&#xff0c;将“高级语言”翻译为“机器语言&#xff08;低级语言&#xff09;”的程序&#xff0c;VS是一个非常完整的开发工具集&#xff0c;包括了所有软件生命…

Vue2.0开发之——组件数据共享-父向子传值(38)

一 概述 组件之间的关系父向子传值子向父传值 二 组件之间的关系 2.1 组件之间的关系 在项目开发中&#xff0c;组件之间的最常见的关系分为如下两种 父子关系兄弟关系 2.2 父子组件之间的数据共享 父子组件之间的数据共享又分为: 父 -> 子共享数据子 -> 父共享数据…

070-JAVA项目实训:仿QQ即时通讯软件讲座五(讲解用户注册功能)

【上一讲】069-JAVA项目实训:仿QQ即时通讯软件讲座四(讲解系统登录功能)_CSDN专家-赖老师(软件之家)的博客-CSDN博客 本文主要内容是实现注册QQ用户功能,自动获取本机IP地址,与系统用户判断端口是否唯一,使用的主要技术如下: 1.使用数据库技术完成注册功能; 2.自动…

【Linux】线程概念

目录&#x1f308;前言&#x1f338;1、Linux线程概念&#x1f361;1.1、概念&#x1f362;1.2、线程的优点&#x1f367;1.3、线程的缺点&#x1f368;1.4、线程的异常和用途&#x1f33a;2、Linux下进程 vs 线程&#x1f308;前言 这篇文章给大家带来线程的学习&#xff01;…

渗透测试基础【01】——测试流程(IPC$)

渗透测试基础【01】——测试流程 注意&#xff0c;攻击对方需要对方授权&#xff0c;本文章目的只为教学&#xff0c;不要拿去干违法的事 1 渗透测试流程 授权&#xff08;获取目标用户授权&#xff0c;否则是违法行为&#xff09;信息收集 nslookup whois扫描漏洞 nmapip…

【前端代码高亮】页面代码高亮展示之Highlight高亮组件应用详解,附多个主题效果

【写在前面】作为前端开发的基本上都有接触这个高亮组件&#xff0c;这个也是目前被大家誉为最全面&#xff0c;体验最好的&#xff0c;所以针对数据展示型高亮显示我是力推这个的&#xff0c;但是我个人还是觉得还有不完美的地方&#xff0c;比如说一边输入一边高亮就不行了。…

《UEFI内核导读》如果没有内存,程序代码还能不能执行?

敬请关注&#xff1a;“固件C字营 首先思考一个问题&#xff0c;冯洛伊曼架构的计算机如果没有内存&#xff0c;代码能被否正常执行&#xff1f;过程&#xff08;函数&#xff09;能不能被相互调用&#xff1f;答案是肯定的&#xff0c;其中的一个实现方法如下。这里只介绍汇编…

如何在Instagram上开店?Instagram开店教程请收好

Instagram 是国外非常重要的图像分享平台&#xff0c;具有很强的视觉吸引力。更重要的是&#xff0c;它是最受网红欢迎的社交媒体网站之一&#xff0c;每天有超过5亿用户访问它。巨大的流量和高活跃度&#xff0c;为卖家提供了大量的营销机会。而且最重要的是&#xff0c;现在在…

唤醒手腕 Go 语言开发学习笔记(基本简介、环境安装、基础知识)

1. Go语言简介 Go&#xff08;又称 Golang&#xff09;是 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近&#xff0c;但功能上有&#xff1a;内存安全&#xff0c;GC&#xff08;垃圾回收&#xf…

day12|层序遍历合集、226.翻转二叉树、101.对称二叉树

目录 层序遍历合集 102.二叉树的层序遍历 107.二叉树的层次遍历II 199.二叉树的右视图 637.二叉树的层平均值 429.N叉树的层序遍历 515.在每个树行中找最大值 116.填充每个节点的下一个右侧节点指针 117.填充每个节点的下一个右侧节点指针II 104.二叉树的最大深度 11…

Hi3861鸿蒙物联网项目实战:智慧农业

华清远见FS-Hi3861开发套件&#xff0c;支持HarmonyOS 3.0系统。开发板主控Hi3861芯片内置WiFi功能&#xff0c;开发板板载资源丰富&#xff0c;包括传感器、执行器、NFC、显示屏等&#xff0c;同时还配套丰富的拓展模块。开发板配套丰富的学习资料&#xff0c;包括全套开发教程…