【分布式理论】聊一下 ACID、BASE、CAP、FLP

分布式理论基础

今天我们来聊一下分布式相关基础理论基础,上一篇文章中,我描述了一下分布式系统的纲,但是想要入手学习分布式系统设计,其实需要先从基本理论开始。而知名的ACID、BASE、CAP、FLP都是相关的理论基础。

ACID

ACID对于了解关系型数据库的开发者来说应该是不陌生的。具体如下

  • 原子性(Atomicity):整个事务操作过程中,要么是整体成功的,要么是整体失败的,不可能出现一半成功一半失败。如果出现异常的话,那么需要进行回滚到最原始的状态。举一个例子来说,比如我们在一个大事物中同时操作了订单和支付的表,那么当出现异常的情况,比如说三方异常或者是内部系统错误,事务会进行回滚到原始的状态。
  • 一致性(Consistency): 在事务执行的前后,数据的完整性约束没有破坏。
  • 隔离性(Isolation): 两个事务之间不会互相干扰,即一个事务A不会看到另一个事务B的中间数据。
  • 持久性(Durability): 当事务完成之后,数据会被持久化到磁盘中,并且出现机器宕机等可以进行数据的恢复。

ACID的目的其实是为了保证数据的一致性,但是这种一致性是强一致性,在单机系统下可以很好的实现,但是放在分布式系统中,我们很难去权衡系统之间可用和数据的强一致性。而分布式事务需要通过二阶段提交协议和TCC(Try-Confirm-Cancel)实现。

CAP

在这里插入图片描述

  • 一致性 (Consistency)
  • 可用性 (Availability)
  • 分区容错性 (Partition Tolerance)

CAP的三大限定条件

  • 分布式:分布式可能发生网络分区
  • 数据存储:通过数据复制来实现数据存储的系统,比如Redis、ZK、Kafka等
  • 同时满足:CAP

一致性

一致性强调的是不管任何时刻,在任何节点上查看的数据都是一样的。强调的是各节点间的数据一致
比如有两个节点1和2,分别设置x=1
在这里插入图片描述
接着客户端将节点1 设置 x=2
在这里插入图片描述
节点1在接受到请求后,将x设置为2,然后返回success
在这里插入图片描述
如果节点1在将x设置为2的时候,通过同步或者异步的方式 也将节点2 x设置为2,那么当返回给客户端成功的时候,客户端不管查询节点1还是节点2的值都是2,那么就是数据一致性,否则就是数据不一致。
在这里插入图片描述

可用性

上面说了一致性,但是在分布式中,可能出现各种不可控因素,硬件层面、软件层面、人为层面、地理级别的故障等。那么是无法保证数据之间的一致性,这个时候就需要从另一个层面进行评估即可用性。
可用性描述的是不管出现任何问题,可以保证客户端的访问 可以返回结果,但是数据的一致性没有办法保证,即上述中可能出现节点2没有返回x的最新值,但是系统是可用的。

分区容错性

因为在分布式系统中,网络通讯是不可靠的,可能出现消息丢失或者系统故障等,都会对外提供服务,强调的是集群对分区故障的容错能力。
总结一下 CAP 关注的粒度是数据,而不是整个系统。大多数人认为CAP关注的是系统级别,其实并不是。

CAP不可能三角

在分布式环境下,网络是不可靠的,因此P 分区容错性是必须考虑的,如果我们选择CA,即当出现分区情况时,我们为了保证C那么就需要禁止写入数据,这与A相冲突,因为A要返回 no timeout和no error。所以只能选择CP和AP。

CP

在这里插入图片描述
为了保证数据一致性,当网络N1到N2的复制通道中断,N1将数据更新到了Y而N2没有将数据更新到Y而停留在X,所以当客户端访问N2的时候,为了保证数据的一致性,N2会返回系统错误。

AP

在这里插入图片描述
而与上述相反的时,N2的值是X的时候 访问N2阶段,AP下,会将X返回,并不会提示系统错误。

BASE

在这里插入图片描述

而在CAP中,因为没有办法满足三者,所以有一个变种,那就是BASE

  • Basic Availability:基本可用。这意味着,系统可以出现暂时不可用的状态,而后面会快速恢复。
  • Soft-state:软状态。它是我们前面的“有状态”和“无状态”的服务的一种中间状态。也就是说,为了提高性能,我们可以让服务暂时保存一些状态或数据,这些状态和数据不是强一致性的。
  • Eventual Consistency:最终一致性,系统在一个短暂的时间段内是不一致的,但最终整个系统看到的数据是一致的。

我们知道在分布式系统中不同的业务其实并不需要完全的数据一致性,大对数场景中,我们必须保证的是核心链路的稳定性、可用性,所以BASE其实就是CAP的一个变种。倾向于设计出一个更富有弹性能力的系统。
在分布式系统中故障是不可避免的,当出现分区或者故障的时候,我们应该在设计层面多去考虑可能出现的问题,把故障处理当成功能写入代码中,即Design for Failure。新手与老手的差别就是新手可能会完整基本功能就可以了,但是老手会考虑很多边界问题,不和合法性以及可能出现的各种异常问题。
举一个例子:比如买书,ACID的玩法是将库存锁住,不可能同时多个用户购买,而BASE的玩法是异步处理,可以支持用户抢购。
ACID是酸、BASE是碱,从本质上来说ACID的C强调的是一致性(CAP中C),而BASE强调的是可用性(CAP中A)
关注点也不一样:ACID关注的是数据的完整性,而CAP的C关注的是分布式节点的数据一致性

如何选择

在这里插入图片描述

FLP

很多人知道CAP、ACID、BASE 但是却不了解FLP,这里为了文章的完整性,介绍一下
FLP是分布式领域中非常著名的定理,在异步通讯场景中,即使只有一个进程失败,也没有任何算法能保证非失败进程达到一致性。
限定条件

  • 确定性协议:给定一个输入,一定会产生相同的输出。
  • 异步网络通讯:同步通信:同时在线,允许超时,异步通信,没有统一时钟,不能时间同步,不能使用超时,消息可任意延时,乱序。
  • 所有存活节点:所有存活的节点必须最终到达一致性。

在这里插入图片描述

小结

本篇 介绍了ACID、CAP、BASE、FLP,ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸,所以,在软件工程中没有银弹,需要我们结合自身业务去考虑。以下列了相关的系统比如
CA:MySQL
CP:ZK、Redis、HBase
AP:Eureka等
在这里插入图片描述

推荐阅读
分布式系统的冰与火
架构演进方案

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

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

相关文章

六、FM1288调试方案-调试过程及细节

本篇文章,主要讲述实际调试操作:具体到需要调节哪些寄存器,调节完后,会有什么样的变化。但是整体效果不能达到我们期望的绝对感觉,所以我先把我们调试的结果放在前面,如果觉得不理想,也可以不看后面的内容了。 文章目录 1. 调试准备1.1 建立与FM1288芯片通信1.2 Uart结…

什么是多相流?在熟悉工业中常见的两相及多相流的分类及特点

文章目录 一、多相流的概览1.相的概念 二、多相流的引入单相流与多相流: 三、多相流及特性介绍四、常见的多相流的分类及特点1、常见的两相及多相流3、两相流动力学的发展简史4、两相流的研究方法和理论模型 一、多相流的概览 1.相的概念 物理学: 自然界中物质的态…

基于simulink使用麦克风阵列的声波束成形

一、前言 此示例演示如何对麦克风阵列接收到的信号进行波束化,以在嘈杂环境中提取所需的语音信号。 二、模型的结构 该模型模拟在 10 元件均匀线性麦克风阵列 (ULA) 上接收来自不同方向的三个音频信号。在接收器处添加热噪声后,应…

智慧厕所引导系统的应用

智慧公厕引导系统是一种基于智能化技术的公厕管理系统,可以为如厕者提供更加便捷、舒适、安全的如厕环境和服务,同时也可以引导如厕者文明如厕,营造文明公厕的氛围。智慧公厕引导系统可以通过智能引导屏、手机小程序等方式,为如厕…

【存储数据恢复】NetApp存储WAFL文件系统数据恢复案例

存储数据恢复环境: NetApp存储设备,WAFL文件系统,底层是由多块硬盘组建的raid磁盘阵列。 存储故障: 工作人员误操作导致NetApp存储内部分重要数据被删除。 存储数据恢复过程: 1、将存储设备的所有磁盘编号后取出&…

Linux上Nacos基本使用:连接MySQL并修改密码、启动、停止命令等

Nacos如何连接MySQL并修改密码 说明如何将内嵌数据库Derby切换为MySQL数据库直接新建MySQL数据库: 必须是MySQL5.7及以上 如何修改密码启动、停止命令 说明 nacos默认: 使用内嵌的数据库(Derby)默认登录地址 ip:8848/nacos; 账号&#xff1…

React 组件

文章目录 React 组件复合组件 React 组件 本节将讨论如何使用组件使得我们的应用更容易来管理。 接下来我们封装一个输出 “Hello World&#xff01;” 的组件&#xff0c;组件名为 HelloMessage&#xff1a; React 实例 <!DOCTYPE html> <html> <head> &…

JVM系列-第7章-对象的实例化内存布局与访问定位

对象的实例化内存布局与访问定位 对象的实例化 大厂面试题 美团&#xff1a; 对象在JVM中是怎么存储的&#xff1f;对象头信息里面有哪些东西&#xff1f; 蚂蚁金服&#xff1a; 二面&#xff1a;java对象头里有什么 对象创建的方式 new&#xff1a;最常见的方式、单例…

系统分析师之系统设计(十五)

目录 一、软件流程设计 1.1 业务流程分析方法 1.2 业务流程建模 1.2.1 标杆瞄准 1.2.2 IDEF 1.2.3 DEMO 1.2.4 流程建模语言 1.2.5 基于服务的BPM 1.2.6 业务流程重组BPR 1.2.7 业务流程管理BPM 二、软件架构设计 2.1 概念 2.2 软件架构风格 三、 结构化设计 四…

为什么停更ROS2机器人课程-2023-

机器人工匠阿杰肺腑之言&#xff1a; 我放弃了ROS2课程 真正的危机不是同行竞争&#xff0c;比如教育从业者相互竞争不会催生ChatGPT…… 技术变革的突破式发展通常是新势力带来的而非传统行业的升级改革。 2013年也就是10年前在当时主流视频网站开启分享&#xff1a; 比如 …

Vulfocus-struts2初了解

CVE-2013-2135 漏洞原理&#xff1a; 配置了通配符*&#xff0c;访问name.action时使用name.jsp来渲染页面&#xff0c;但是在提取name解析时&#xff0c;对其执行了OGNL表达式解析&#xff0c;所以导致了命令执行。如果一个请求与任何其他定义的操作不匹配&#xff0c;它将匹…

AMB300系列母线槽红外测温解决方案某锂电厂房项目案例分享

安科瑞 耿敏花 一、 行业背景 近年来&#xff0c;在国家政策引导与技术革新驱动的双重作用下&#xff0c;锂电产业保持快速增长态势&#xff0c;产业规模持续扩大&#xff0c;同时新能源产业工厂锂电池生产线对于电的依赖性很高&#xff0c;因而对供电设备的可靠性提出…

stable diffusion模型讲解

AI模型最新展现出的图像生成能力远远超出人们的预期&#xff0c;直接根据文字描述就能创造出具有惊人视觉效果的图像&#xff0c;其背后的运行机制显得十分神秘与神奇&#xff0c;但确实影响了人类创造艺术的方式。 AI模型最新展现出的图像生成能力远远超出人们的预期&#xf…

JAVA代码规范审查

JAVA代码规范审查 1. 添加必要的注释 所有的类都必须添加创建者和创建日期&#xff0c;以及简单的注释描述 方法内部的复杂业务逻辑或者算法&#xff0c;需要添加清楚的注释 一般情况下&#xff0c;注释描述类、方法、变量的作用 任何需要提醒的警告或TODO&#xff0c;也要注…

从 0~1 创建 Vue2 项目

前言 从0开始搭建Vue2项目&#xff1b;介绍项目目录结构&#xff1b;为了项目方便需要添加的配置。创建 Vue2 项目共有两种方式&#xff1a; 手动选择&#xff1b;选择默认模式。 给孩子点点关注吧&#xff01;&#x1f62d; 一、环境准备 1.1 安装包管理工具 1.1.1 安装 …

CentOS7安装MySQL

CentOS默认安装有MariaDB&#xff0c;这是MySQL的分支。 但还是要在系统中安装MySQL&#xff0c;且安装完成后可直接覆盖MariaDB。 1、下载并安装MySQL官方 Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 使用上面命令就…

VS Code 常用插件推荐

VS Code 常用插件推荐 1. Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code 适用于 VS Code 的中文&#xff08;简体&#xff09;语言包 2. Auto Rename Tag 自动关闭标签&#xff0c;写 html 标签的时候可以重命名标签名。 现在 vscode 已经内置了&…

分享2个教学视频录制的方法!

案例&#xff1a;如何录制教学视频&#xff1f; 【我是一名老师&#xff0c;我想录制一些教学视频发布在网络平台上&#xff0c;但是我不知道如何操作。有没有人知道录制教学视频需要什么工具&#xff1f;如何录制&#xff1f;】 随着在线教育的普及&#xff0c;越来越多的教…

三位一体,铸就无敌铁军!海陆空协同,开启集群新篇章!

在机器人领域&#xff0c;多机器人系统的研究一直是一大热点&#xff0c;众多高校与研究所逐步投入到机器人集群系统的研究当中&#xff0c;其中无人机编队表演、无人车群园区运输、无人船集群水域监测等集群应用更是进入了大众的视野。但对多机器人集群系统的需求却远不止于此…

KD305Y带吸收比极化指数兆欧表

一、概述 KD305Y绝缘电阻测试仪对众多的电力设备如&#xff1a;电缆、电机、发电机、变压器、互感器、高压开关、避雷器等要求做一系列的绝缘性能试验&#xff0c;首先是要做绝缘电阻测试。近年来随着电力事业的飞速发展,大容量设备的使用不断增加&#xff0c;用普通的兆欧表无…