分布式系统CAP理论与BASE理论

CAP理论

Cap理论又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式系统来说,不可能同时满足如下三点:

  • 一致性(Consistency)

  • 可用性(Availability)

  • 分区容错性(Partition tolerance)(以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。)

  • 一致性

所谓一致性,指的是数据的一致性,在一个分布式数据库系统中,所有集群节点都保持同一份最新数据副本,所有客户端同一时刻访问同一个数据都将是一致的,即“all nodes see the same data at the same time”。

如果所有客户端能时刻看到一致的数据,不存在中间状态,这个叫强一致性。如果允许存在中间状态,经过一段时间数据达到一致性,这个叫最终一致性,或说弱一致性,后面的BASE理论将介绍最终一致性。

  • 可用性

可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内获取一个非错响应,但是不保证获取的数据为最新数据。“有限的时间内”是指,对于用户的一个操作请求,系统必须能够在指定的时间内返回对应的处理结果,如果超过了这个时间范围,那么系统就被认为是不可用的。简单来说就是请求必须要有非错响应,假设不响应或是错误的响应(比如http请求返回404,400等)则认为是不可用。

  • 分区容错性

分区容错性,通常是指发生了网络分区,分布式系统在这种情况下需要有容错能力。这么说有点抽象,下面给出一个图及实际网络分区以说明:

如上图,在一个分布式数据库系统中,由于网络原因,原来作为一个整体的集群系统被一分为二,假设现在这两个分区目前都能被客户端访问到,假设都能写成功 。那么结果就是同一个数据出现不一致,这种情况是牺牲了一致性,保全了可用性()。如果出现分区后,系统不允许写,或者是拥有多数节点的分区允许写,当网络分区恢复成一个整体后,数据是能达到一致的,这种情况牺牲可用性(分区二不允许写)。简单来说,分区容错性指的是,当网络分区出现,分布式系统必须就当前操作在一致性与可用性之间作出选择。由于网络分区并不是可控的,所以分区容错性是Cap理论中必须要实现的,或说是前提,分布式系统在满足P的情况下选择AP或是CP。

因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。 比如 ZooKeeper、HBase 就是 CP 架构,强调一致性,Cassandra、Eureka 就是 AP 架构,注重可用性,Nacos 不仅支持 CP 架构也支持 AP 架构,可根据实际业务场景进行选择。

在发生网络发区的情况下,强一致性和强可用性是矛盾的。假设发生网络分区后(如上图分区一与分区二),为了保证一致性(C),分区一与分区二必须有一个分区处于不可写或说写了不会提交的状态。那么这个就违反了可用性(A)原则。假设两个分区都可写(保证了可用性),很明显,当写的是同一个数据的情况,一致性就被违反了。

BASE理论

待完善

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux系统编程】项目自动化构建工具make/Makefile

介绍: make和Makefile是用于编译和构建C/C程序的工具和文件。Makefile是一个文本文件,其中包含了编译和构建程序所需的规则和指令。它告诉make工具如何根据源代码文件生成可执行文件,里面保存的是依赖关系和依赖方法。make是一个命令行工具&a…

【EMNLP 2023】基于知识迁移的跨语言机器阅读理解算法

近日,阿里云人工智能平台PAI与华南理工大学朱金辉教授团队、达摩院自然语言处理团队合作在自然语言处理顶级会议EMNLP2023上发表基于机器翻译增加的跨语言机器阅读理解算法X-STA。通过利用一个注意力机制的教师来将源语言的答案转移到目标语言的答案输出空间&#x…

关于linux开机自启动

1、系统启动流程 2、 init、 inittab、 init.d、 rcx.d /etc/inittab是Linux系统中的一个配置文件,用于定义系统的运行级别和相应的操作。其语法格式如下: 标签:运行级别:操作:进程 label:runlevel:action:process下面…

【无线网络技术】——无线局域网(学习笔记)

📖 前言:本章首先介绍无线局域网的基本概念,然后详细介绍IEEE 802.11的基本工作原理,侧重于媒体访问控制和一跳范围内的通信技术。 目录 🕒 1. 概述🕘 1.1 覆盖范围🕘 1.2 特点🕘 1.…

3D Web轻量引擎HOOPS Communicator如何实现对大模型的渲染支持?

除了读取轻松外,HOOPS Communicator对超大模型的支持效果也非常好,它可以支持30GB的包含70万个零件和3.5亿个三角面的Catia装配模型! 那么它是如何来实现对大模型的支持呢? 我们将从以下几个方面与大家分享:最低帧率…

os.walk()遍历文件夹/文件

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

Backend - Dbeaver

目录 一、说明 二、下载并安装 (一)官网下载 (二)安装 三、使用 (一)操作步骤 (二)相关问题:无法加载驱动类oracle.jdbc.oracledriver 1. 新建驱动 2. 再重新连接数据库 …

VR全景对旅游业有什么帮助,如何助力旅游业实现新的旅游形式

引言: 旅游业是一个充满机遇的行业,而虚拟现实(VR)全景技术正逐渐改变着旅游业的面貌,通过提供身临其境的体验,VR全景成为了旅游业的新宠,将旅游带入了一个全新的数字化时代。 一、打破地域限制…

AI智能降重软件大全,免费最新AI智能降重软件

在当今信息爆炸的时代,内容创作者们面临着巨大的写作压力,如何在保持高质量的前提下提高效率成为摆在许多人面前的难题。AI智能降重软件因其独特的算法和功能逐渐成为提升文案质量的得力助手。本文将专心分享一些优秀的AI智能降重软件。 147SEO改写软件 …

Vue3+ts----根据配置项,动态生成表单

这里使用的UI框架是ElementPlus,更换其他组件直接更换constant.ts中的type配置和对应的Form组件即可. 大家可以npm install elementplus_dy_form来体验。 思路: 1.这里需要使用h函数方便控制要渲染的表单 2.传递type作为组件或html元素进行渲染&#xff…

NestJs的基础使用

初始化项目 创建项目 // 安装脚手架(只需要安装一次,因为这个是全局的) npm i -g nestjs/cli // 创建项目 nest new project-name // (该过程有个选择包管理工具的,我选的yarn)启动项目 yarn run start:dev // 可以在浏览器访问localhost:3000 输出helloWorld控制器和路由 …

MDK官网如何下载stm32支持包

网站:https://www.keil.com/demo/eval/arm.htm 1 2 3点这个下载