了解高可用架构之前——CAP

CAP定理(布鲁尔定理),在2000年的ACM PODC上提出的猜想

📓1 CAP理论

理论描述

第一版:any distributed system cannot guaranty C,A and P simultaneously
对于一个分布式计算系统,不可能同时满足一致性(Consistence)、可用性(Availability)和分区容错性(Partition Tolerance) 三个设计约束

第二版:in a distributed system (a collection of interconnected nodes that share data.), you can only have two out of the following three guarantees across a write/read pair: Consistency, Availability, and Partition Tolerance - one of them must be sacrificed
在一个分布式系统 ( 指互相连接并共享数据的节点的集合)中,当涉及读/写操作时,只能保证一致性( Consistence )、可用性( Availability )、分区容错性( Partition Tolerance) 三者中的两个,另外一个必须被牺牲

  • 第二版定义了什么才是CAP理论探讨的分布式系统:interconnected和share data,主要是因为分布式系统不一定会互联和共享数据,如果不互联和共享数据,则不一定在CAP理论的范围内
  • 第二版强调了 write/read pair,说明CAP关注的是对数据的读和写操作。不是分布式系统所有的功能

1.1 一致性(Consistency)

第一版:All nodes see the same data at the same time
所有节点在同一时刻都能看见相同的数据

第二版:A read is guaranteed to return the most recent write for a given client
对于某个指定的客户端来说,读操作保证能够返回最新的读写操作结果

  • 第一版以node的角度描述,第二版以client客户端的角度描述
    • 第二版更加符合我们观察和评估系统的方式,站在客户端的角度观察系统的行为和特征
  • 第一版的关键词是see,第二版是read
    • read相比于see更加准确,描述的是客户端读写角度的一致性
  • 第一版强调同一时刻拥有相同数据,第二版没有强调,说明可能同一时刻有不同数据
    • 原因是在系统执行事务时,事务执行过程中,系统就是处于一个可能数据不一致的状态,不同的节点的数据并不完全一致,事务的状态就决定了同一时刻的数据可能是不一致的

1.2 可用性

第一版:Every request gets a response on success/failure
每个请求都能的到成功或失败的响应

第二版:A non-failing node will return a resonable response within a reasonable amount of time(no error or timeout)
一个非故障的节点,会在合理的时间返回合理的响应(不是错误和超时响应)

  • 第一版针对的是所有请求都会有响应,而第二点强调了对于一个没有故障的节点才能满足这个要求
  • 第一版将响应分为成功和失败,第二版则强调在合理的时间和合理的响应,并且说明了不是错误和超时
    • 因为第一版太宽泛了,如果超时了,此时会有一个timeout错误,但是这个错误明显不属于一个合理的错误

1.3 分区容忍性(Partition Tolerance)

第一版:System continues to work despite message loss or partial failure
尽管出现消息丢失或者分区错误,但系统能够继续运行

第二版:The system will continue to function when network partitions occur
当出现网络分区后,系统能够继续履行职责

  • 第一版的word和第二版的function
    • work强调运行,只要系统不宕机,即使返回错误也是work,但是function强调的是发挥作用,能够正常处理业务
  • 第一版中把分区原因源于消息丢失,但是第二版中强调了网络分区,因为导致网络分区的原因不止是消息丢失,连接中断,丢包,拥塞都可能导致网络分区

🧰2 CAP应用

虽然CAP理论是三个要素中只能取两个,但放到分布式环境下思考,会发现必须选择P(分区容忍性),因为网络本身不能做到100%可靠,分区是必然出现的,同时导致了AC的互斥

2.1 CP

在这里插入图片描述

为了保证一致性,分区发生时,N1节点的数据y应该更新到N2,但是由于网络分区N2与N1之间的复制通道中断,y就无法同步到N2,所以当C访问N2时,N2需要响应error,告诉C,服务器发生错误->违背了Availability要求,所以满足了CP就不能满足A

2.2 AP

在这里插入图片描述

为了保证可用性,分区发生时,N1节点的数据y应该更新到N2,但是由于网络分区N2与N1之间的复制通道中断,y就无法同步到N2,所以当C访问N2时,N2为了保证可用,就把数据x给了C,但是此时的数据已经是y了,所以不满足一致性Consistency,所以满足了AP就不能满足C

💠3 CAP细节

CAP在理论上清晰简洁,但是忽略很多细节,导致应用于实践时,由于各种复杂情况,出现误差和偏差

CAP关注的粒度是数据,而不是整个系统

虽然在理论解释中,出现了很多的system,node等系统级别的概念,但是我们要知道CAP关注的重点和粒度是数据,对于数据才有一致性,可用性和分区容忍性的关注点也都在数据上

  • 设计时,要从数据的角度去选择CP和AP
  • 不同的数据需要选择CP或者AP,没有规定哪种方式处理数据更好
  • 一个系统不可能只会有一种数据,所以要根据不同类型的数据去抉择其处理方式是AP还是CP

CAP是忽略网络延迟的

布鲁尔定义一致性时,没有考虑延迟,所以当事务提交时,数据能瞬间复制到所有节点。

  • 但实际上是,A节点复制到B节点,需要花费一定的网络开销。
  • 在同一个机房,如果数据量不大或者网络I/O较大,那么通常是在几毫秒。
  • 如果不同地点,可能就是几十毫秒,所以C是不一定完美实现的。
    • 之所以说不一定完美实现是因为在一些要求实时一致性的分布式系统中,可以采用不同的负载均衡/分发策略来保证业务的实时一致性
    • 比如商品扣减,金额扣减,这些作用个体是用户的情况,可以按照用户id来分发,这种解决办法会导致某一个节点挂了,那个节点的用户访问不了

正常情况下,不存在CP和AP时可以选择CA

CAP理论告诉我们分布式系统只能选AP或者CP,但是在系统不发生分区时,我们就可以保证CA,因为网络正常说明,数据能正常同步,并且每个节点都可以正常访问。所以同时满足了一致和可用。

  • 但是理论上可以保证CA,但是具体实现不同的数据可能就有不同的实现方式

放弃≠等于不做,为分区后恢复做准备

很多时候,系统都是CA的,分区并不常见,所以我们要保证的是,发生分区后我们要让系统迅速恢复到CA的状态
可用性高的系统也不等于说100%高可用,因为一些因素,比如阿里的光缆被挖断,所以高可用的可用性一般是保证几个9

  • CP情况:用户注册场景,当用户在A节点注册成功后,由于B节点分区,B节点没有A节点的用户注册数据,所以可以在A节点存储日志,等分区结束后同步到B节点
  • AP情况:分区发生后,A、B节点都可以修改用户数据,但是修改的内容可能不一样,如用户1在A中修改数据为x,在B修改数据为y,那么可以将数据合并,或者根据最后修改优先情况,或者人工筛查

🗂️4 ACID、BASE

4.1 ACID

ACID:Atomicity、Consistency、Isolation、Durability

  • Atomicity(原子性):整个操作是原子的不可分割,要么全部完成,要么全部不完成,不会卡在中间某个环节,发生错误会回滚到开始前,整个事务就像没有执行过
  • Consistency(一致性):事务开始和结束前后,数据库完整性没有被破坏
  • Isolation(隔离性):允许多个事务同时对数据进行读写的能力,防止多个事务并发执行时由于交叉执行导致数据不一致
  • Durability(持久性):事务处理结束后,数据的修改是永久的,系统故障也不会导致数据丢失

4.2 BASE

BASE:Basically Available、Soft State、Eventually COnsistency
核心思想是即使无法做到强一致性(CAP就是强一致性),但应用可以采用合适的方式达到最终一致性

  • Basically Available(基本可用):分布式系统出现故障后,保证核心功能能够使用
    • 重点在于如何抉择核心和非核心,每个用户看重的功能都是不同的
  • Soft State(软状态):允许存在一个中间状态(CAP理论中的数据不一致),且不影响系统整体可用性,
  • Eventually COnsistency(最终一致性):系统中所有数据副本通过一定时间最终达到一致的状态
    • 不同的数据能容忍的时间是不同的,用户账号同步最好1分钟达到一致,因为用户的请求可能会发到其他节点,微博可容忍时间更长一点,因为用户看不看得到某个大V的微博影响不大

BASE是对CAP中AP的延伸和补充

  • CAP是忽略延时,但延时无法避免,BASE提到的最终一致性也是补充了这一点
  • AP的牺牲一致性也只是分区时间的一致性,还是要保证最终一致性

📖5 总结

  • CAP理论核心:一致性、可用性、分区容忍性
  • CAP理论指的是分布式系统中设计读写操作,CP和AP只能实现一个,要牺牲A和C中的一个
  • 分布式系统理论上不能选转CA只能选择AP活CP,因为正常情况下就是满足CA的
  • CAP关注点是在数据上,而不是整个系统
  • CAP是忽略延迟的
  • CAP中的放弃不等于不做,需要保证分区结束后的同步能快速完成
  • ACID的应用场景是数据库事务,CAP关注的是分布式系统数据读写
  • BASE是CAP理论中AP的延伸

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

环境、能源主题会议,斯普林格/ IEEE 出版

🌟第四届环境污染与治理国际学术会议 (ICEPG 2024) ✅收录率高,EI稳定检索 【往届见刊后1个月内完成检索】 ✅华北水利水电大学主办,院士、校长、杰青等大咖齐聚 ✔会议时间:2024年10月25-27日 ✔会议地点:郑州东站…

苹果AI科学家研究证明基于LLM的模型存在缺陷 因为它们无法推理

苹果公司人工智能科学家的一篇新论文发现,基于大型语言模型的引擎(如 Meta 和 OpenAI 的引擎)仍然缺乏基本的推理能力。该小组提出了一个新的基准–GSM-Symbolic,以帮助其他人衡量各种大型语言模型(LLM)的推…

常见开源组件的详解

文章目录 RPCRPC架构和工作流程为什么有了HTTP还要用RPC底层协议数据格式连接管理错误处理 使用场景常见的RPC框架 Web应用框架主要功能常见的Web应用框架Spring Boot (Java)Django (Python)Express.js (Node.js) Redis主要特点应用场景缓存问题Redis集群架构主从复制Redis Clu…

Fiddler配合wireshark解密ssl

环境: win11(wireshark)--虚拟机win7(Fiddler)---虚拟机win7(HTTPS站点) 软件安装问题: 需要.net环境,NDP461-KB3102436-x86-x64-AllOS-ENU.exe。 安装fiddler后安装下…

Excel:vba实现合并工作表(表头相同)

这个代码应该也适用于一些表头相同的工作表的汇总,只需要修改想要遍历的表,适用于处理大量表头相同的表的合并 这里的汇总合并表 total 是我事先创建的,我觉得比用vba代码创建要容易一下,如果不事先创建汇总表就用下面的代码&…

chattts一步步的记录,先跑起来。

0.下载git工具 Git - Downloads (git-scm.com)https://git-scm.com/downloads Download – TortoiseGit – Windows Shell Interface to Githttps://tortoisegit.org/download/ 1.安装 随意,可以安汉化,也可不安。无所谓 2.建个目录,我的上…

qiankun 主项目和子项目都是 vue2,部署在同一台服务器上,nginx 配置

1、主项目配置 1.1 micro.vue 组件 <template><div id"container-sub-app"></div> </template><script> import { loadMicroApp } from qiankun; import actions from /utils/actions.js;export default {name: microApp,mixins: [ac…

python+appium+雷电模拟器安卓自动化及踩坑

一、环境安装 环境&#xff1a;window11 1.1 安装Android SDK AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 这里面任选一个就可以&#xff0c;最终下载完主要要安装操作安卓的工具adb&#xff0c;安装这个步骤的前提是要…

防火墙的三种工作模式:路由模式、透明模式(网桥)、混合模式

防火墙作为网络安全的核心设备之一&#xff0c;扮演着至关重要的角色。它不仅能够有效防御外部网络的攻击&#xff0c;还能保护内部网络的安全。在如今复杂多样的网络环境下&#xff0c;防火墙的部署和工作模式直接影响着网络安全策略的实施效果。防火墙通常可以工作在三种模式…

如何成为 Rust 核心贡献者?Rust 开发的核​​心是什么?Rust 重要技术专家揭秘

10 月 17 - 18日&#xff0c;由 GOSIM 开源创新汇主办、CSDN 承办的 GOSIM CHINA 2024 将在北京盛大启幕。作为 GOSIM 开源年度大会的第三届盛会&#xff0c;本次活动邀请了 60 多位国际开源专家&#xff0c;汇聚了来自全球百余家顶尖科技企业、知名高校及开源社区的技术大咖、…

衡石分析平台系统-分析人员手册

应用创建​ 用户可以通过多种方式创建应用&#xff0c;不同场景下应用创建方法不同。 新建空白应用​ 新建空白应用是新建一个空的应用&#xff0c;应用中没有数据集和仪表盘。 点击应用创作页面右上方的新建应用&#xff0c;新建空白的分析应用和查询应用。 新建的空白应用…

汽车宣传动画渲染怎么做?云渲染加速汽车动画渲染

在汽车行业&#xff0c;宣传动画已成为展示新车型和技术创新的重要工具。高质量的渲染不仅能够吸引观众的眼球&#xff0c;还能有效传达汽车的性能和美学。随着技术的发展&#xff0c;云渲染技术为汽车宣传动画的渲染提供了新的可能性&#xff0c;大大提高了渲染效率和质量。 第…

区块链-智能合约Solidity编程

文章目录 一、ubuntu安装二、FISCO BCOS安装五、 WeBASE安装5.1 WeBASE简介5.2 节点前置服务搭建5.3 调用HelloWorld合约 七、Solidity极简入门7.1. 值类型7.2. 变量数据存储和作用域7.3. 函数7.4 控制流7.5 数组&映射7.6 结构体7.7 修饰符7.8 事件7.9 面向对象7.10 抽象合…

与鸿蒙同行,Java Solon v3.0 正式发布(向下兼容)

与 HarmonyOS NEXT 10月8日公测同行。Solon &#xff08;开放原子开源基金会&#xff0c;孵化项目&#xff09; v3.0 正式发布&#xff0c; 且将在 2025 年启动华为编程语言 “仓颉” 版开发&#xff08;届时会有 Solon-Java 和 Solon-CJ 两大版本&#xff09;。本次大版本更新…

免费送源码:Java+Springboot+MySQL 水环境检测系统的设计与实现 计算机毕业设计原创定制

摘 要 在我国,水源的污染是不可忽视的问题。对于水质监测进行数据的采集工作,目前主要通过人工实现。因此,部分地区的采集工作,实施起来难度很大,比如恶劣环境和偏僻山区等地。所以,目前对于水质监测的研究,主导方向是建立更加高效完善,智能化的水质监测系统。近几年,无线传感器…

【C++贪心 DFS】2673. 使二叉树所有路径值相等的最小代价|1917

本文涉及知识点 C贪心 反证法 决策包容性 CDFS LeetCode2673. 使二叉树所有路径值相等的最小代价 给你一个整数 n 表示一棵 满二叉树 里面节点的数目&#xff0c;节点编号从 1 到 n 。根节点编号为 1 &#xff0c;树中每个非叶子节点 i 都有两个孩子&#xff0c;分别是左孩子…

java数据库操作-cnblog

创建lib目录&#xff0c;填入jar包 选择 libraries添加lib目录 package nb;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class JDBCtest {private static final String url "jdbc:mysql://localhost:3306/test?c…

SAP学习笔记 - 豆知识12 - 自动批量更新会计期间

网上买的那种SAP学习虚拟机&#xff0c;一般都是古老的会计期间。 要想更新到现在的日期&#xff0c;需要MMRV/MMPV挨月更新&#xff0c;感叹SAP挺会折磨人。 之前也做过多次探索&#xff0c;基本都没太成功。 SAP MM学习笔记 - 豆知识10 - OMSY 初期化会计期间&#xff0c;…

深入探索Spring Cloud Gateway:微服务网关的最佳实践

优质博文&#xff1a;IT-BLOG-CN Spring Cloud Gateway作为Spring Cloud框架的第二代网关&#xff0c;在功能上要比Zuul更加的强大&#xff0c;性能也更好。随着Spring Cloud的版本迭代&#xff0c;Spring Cloud官方有打算弃用Zuul的意思。在笔者调用了Spring Cloud Gateway的…

使用 Visual Studio Installer Projects 打包 C# WinForms 程序的教程

前言 在开发完成一个 C# WinForms 程序后&#xff0c;打包成安装程序是发布和分发软件的重要步骤之一。通过使用 Visual Studio Installer Projects&#xff0c; 可以轻松创建一个 .exe 或 .msi 格式的安装包供用户安装。本文将详细介绍如何使用 Visual Studio Installer Proj…