分布式学习02-CAP理论

文章目录

  • CAP三指标
    • 一致性
    • 可用性
    • 分区容错性
  • CAP不可能三角
    • P存在的必要性
    • CP理论
    • AP理论

CAP理论对分布式系统的特性做了高度抽象,将其抽象为一致性、可用性、分区容错性。 并对特征间的冲突做了总结:CAP不可能三角。

CAP三指标

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

一致性

客户端的每次读操作,不管访问哪个节点,要么读到的都是同一份最新的数据,要么读取失败。一致性强调的是各节点的数据一致,而不是数据完整。
例子:2 个节点的 KV 存储,原始的 KV 记录为“X = 1”
在这里插入图片描述
随后,客户端向节点1发送写请求“SET X= 2“
在这里插入图片描述
如果节点 1 收到写请求后,只将节点 1 的 X 值更新为 2,然后返回成功给客户端,这个时候节点 2 的 X 值还是 1,那么两个节点是非一致性的。
在这里插入图片描述
如果节点 1 收到写请求后,通过节点间的通讯,同时将节点 1 和节点 2 的 X 值都更新为2,然后返回成功给客户端,那么在完成写请求后,两个节点的数据就是一致的了,之后,不管客户端访问哪个节点,读取到的都是同一份最新数据。
在这里插入图片描述

一致性是分布式系统非常重要的一个特性,强调的是数据的一致。在客户端看来,集群和单机在数据一致性上是一样的。

  • 弊端:当发生分区故障的时候,有时不能仅仅因为节点间出现了通讯问题,节点中的数据会不一致,就拒绝写入新数据,之后在客户端查询数据时,就一直返回给客户端出错信息。

可用性

任何来自客户端的请求,不管访问哪个节点,都能得到响应数据,但不保证是同一份最新数据。强调的是服务可用,但不保证数据的一致。
例:用户可以向节点1和2发起读请求,如果不管节点间的数据是否一致,只要节点服务器收到请求,就响应X的值,那个2个节点是满足可用性的。
在这里插入图片描述

分区容错性

当节点间出现任意数量的消息丢失或高延迟的时候,系统仍然可以继续提供服务。不管集群内部出现什么样的数据同步问题,集群会一直运行,对外提供服务。强调的是集群对分区故障的容错能力。
在这里插入图片描述
上图如果节点1和节点2之间的通信出现故障时,集群仍然能够对外提供服务,则此时集群具备分区容错性。如果此时不能对外提供服务,则此时不具备分区容错性。

CAP不可能三角

CAP 不可能三角说的是对于一个分布式系统而言,一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)3 个指标不可兼得,只能在 3 个指标中选择 2 个。
在这里插入图片描述

P存在的必要性

只要有网络交互就一定会有延迟和数据丢失,而这种状况我们必须接受,还必须保证系统不能挂掉。所以就像我上面提到的,节点间的分区故障是必然发生的。也就是说,分区容错性(P)是前提,是必须要保证的。

在不存在网络分区的情况下,也就是分布式系统正常运行时(这也是系统在绝大部分时候所处的状态),就是说在不需要 P 时,C 和 A 能够同时保证。只有当发生分区故障的时候,也就是说需要 P 时,才会在 C 和 A 之间做出选择。而且如果各节点数据不一致,影响到了系统运行或业务运行(也就是说会有负面的影响),推荐选择 C,否则选 A。
上述理论作为理解,一般情况下分布式系统设计必须考虑分区容错性,也就是分区故障的影响。

  • 单击版的MySQL可以理解为CA模型,但此时已经不是分布式系统了。

CP理论

选择了一致性(C)的时候,如果因为消息丢失、延迟过高发生了网络分区,部分节点无法保证特定信息是最新的,那么这个时候,当集群节点接收到来自客户端的写请求时,因为无法保证所有节点都是最新信息,所以系统将返回写失败错误,也就是说集群拒绝新数据写入。

CP 模型的分布式系统,一旦因为消息丢失、延迟过高发生了网络分区,就影响用户的体验和业务的可用性。因为为了防止数据不一致,集群将拒绝新数据的写入

  • ZooKeeper,Etcd 和 HBase

AP理论

选择了可用性(A)的时候,系统将始终处理客户端的查询,返回特定信息,如果发生了网络分区,一些节点将无法返回最新的特定信息,它们将返回自己当前的相对新的信息。

AP 模型的分布式系统,实现了服务的高可用。用户访问系统的时候,都能得到响应数据,不会出现响应错误,但当出现分区故障时,相同的读操作,访问不同的节点,得到响应数据可能不一样。

  • 典型应用就比如 Cassandra 和 DynamoDB。

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

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

相关文章

JS进阶 4——深浅拷贝、异常处理、节流防抖

JS进阶 4——深浅拷贝、异常处理、节流防抖 1.深浅拷贝 直接复制对象的问题 const obj {uname: xiao,age: 18}const o objo.age 20console.log(o) //原来对象的age也被彻底改变了console.log(obj)浅拷贝——内部引用仍然拷贝的是地址 拷贝对象:Object.assdin(…

实现实时数据推送:设计一个WebSocket服务器的实用指南

实现实时数据推送:设计一个WebSocket服务器的实用指南 在现代Web应用中,实时数据推送已成为一种重要的交互方式。无论是在线聊天、实时通知还是数据监控,WebSocket都提供了一种高效的双向通信机制。本文将详细介绍如何使用Python设计一个WebSocket服务器,支持实时数据推送…

python 实现djb2哈希算法

djb2哈希算法介绍 DJB2哈希算法是一种简单且快速的哈希算法,由Daniel J. Bernstein设计。这种算法的实现非常简单,适用于短键值的哈希表,也常被用于嵌入式设备和资源受限的系统。 基本原理 DJB2算法的原理是将输入的字符串视为一个字节数组…

Windows环境Apache httpd 2.4 web服务器加载PHP8:Hello,world!

Windows环境Apache httpd 2.4 web服务器加载PHP8:Hello,world! (1)首先需要安装apache httpd 2.4 web服务器: Windows安装启动apache httpd 2.4 web服务器-CSDN博客文章浏览阅读222次,点赞5次&…

std::string

std::string是C标准库中的一个基本类模板,专门用于处理字符串。它提供了一个可变长度的字符序列,以及一系列用于字符串操作的方法。std::string是值类型,这意味着当它作为函数参数传递或赋值时,整个字符串数据会被复制。 std::st…

Git 下载及安装超详教程(2024)

操作环境:Win 10、全程联网 一、什么是Git? Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 创立,用于有效、高速地处理从小到大的项目版本管理。Git 是目前世界上最流行的版本控制系统,被广泛用于软件开发中…

ECCV 2024 | 融合跨模态先验与扩散模型,快手处理大模型让视频画面更清晰!

计算机视觉领域顶级会议 European Conference on Computer Vision(ECCV 2024)将于9月29日至10月4日在意大利米兰召开,快手音视频技术部联合清华大学所发表的题为《XPSR: Cross-modal Priors for Diffusion-based Image Super-Resolution》——…

安防监控/视频系统EasyCVR视频汇聚平台如何过滤134段的告警通道?

视频汇聚/集中存储EasyCVR安防监控视频系统采用先进的网络传输技术,支持高清视频的接入和传输,能够满足大规模、高并发的远程监控需求。平台支持国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为…

基于Zynq SDIO WiFi移植三(支持2.4/5G)

应用问题-WIFI作为AP-hostapd多次连接 设备作为WIFI热点时,连接出现了下述问题: 1 手机连接需要三次,三次都需要输入密码; 2 平板连接需要三次,三次都需要输入密码; 3 电脑连接需要一次,无感…

【优选算法】(第十七篇)

目录 判断字符是否唯⼀(easy) 题目解析 讲解算法原理 编写代码 丢失的数字(easy) 题目解析 讲解算法原理 编写代码 判断字符是否唯⼀(easy) 题目解析 1.题目链接:. - 力扣&#xff08…

计算机视觉——图像修复综述篇

目录 1. Deterministic Image Inpainting 判别器图像修复 1.1. sigle-shot framework (1) Generators (2) training objects / Loss Functions 1.2. two-stage framework 2. Stochastic Image Inpainting 随机图像修复 2.1. VAE-based methods 2.2. GAN-based methods …

WPF C# 读写嵌入的资源 JSON PNG JPG JPEG 图片等资源

WPF C# 读写嵌入的资源 JSON PNG JPG JPEG 图片等资源 1、嵌入资源读取 当文件属性的生成操作设置为嵌入资源时,读取方式如下: string name System.Reflection.Assembly.GetExecutingAssembly().GetName().Name "Resource\testproject\test.pn…

YOLOv11改进 | Conv篇 | YOLOv11引入SKConv

1. SKConv介绍 1.1 摘要:在标准卷积神经网络(CNN)中,每层中阿尔蒂神经元的感受野被设计为共享相同的大小。在神经科学界众所周知,视觉皮层神经元的感受野大小受到刺激的调制,这在构建CNN时很少考虑。我们在CNN中提出了一种动态选择机制,允许每个神经元根据输入信息的多…

一个简单的摄像头应用程序4

我们进一步完善了这个app01.py,我们优化了界面使其更人性化,下面介绍中包含了原有的功能及新增的功能: 创建和管理文件夹: create_folder 函数用于创建保存照片和视频的文件夹。 get_next_file_number 函数用于获取文件夹中下一个可用的文件编号。 图像处理: pil_to_cv 函…

[深度学习][python]yolov11+deepsort+pyqt5实现目标追踪

【算法介绍】 YOLOv11、DeepSORT和PyQt5的组合为实现高效目标追踪提供了一个强大的解决方案。 YOLOv11是YOLO系列的最新版本,它在保持高检测速度的同时,通过改进网络结构、优化损失函数等方式,提高了检测精度,能够同时处理多个尺…

【嵌入式软件-数据结构与算法】01-数据结构

摘录于老师的教学课程~~(*๓╰╯๓)~~内含链表、队列、栈、循环队列等详细介绍~~ 基础知识系列 有空再继续更~~~ 目录 【链表】 一、单链表 1、存储结构:带头结点的单链表 2、单链表结点类型的定义 3、创建单链表 1)头插法 2)尾插法 …

手部姿态映射到远程操作机器人

要将手部姿态数据映射到远程操作机器人,可以使用 Python 和一些库(如 mediapipe 和 numpy)来i简单实现这个功能。以下是一个具体的实现步骤,主要包括手部姿态检测、数据处理和关节位置映射。 1. 环境准备 确保您安装了必要的库&…

如何写好计算机毕业设计的开题报告【2025版】

如何写好计算机毕业设计的开题报告 引言 在计算机科学与技术专业的毕业过程中,撰写开题报告是非常重要的环节之一。开题报告不仅是你毕业设计的起点,更是对未来研究方向的规划与框架。如何写好开题报告,直接影响到你毕业设计的成功与否。本…

Python办公自动化之Word

在现代办公环境中,自动化无疑是提升工作效率的关键。特别是处理文档的工作,很多人可能花费大量时间在重复性任务上。那么,有没有一种方法可以让我们用 Python 来自动化 Word 文档的操作呢?今天,我们来聊聊如何用 Pytho…

k8s-集群部署1

k8s-集群部署1 一、基础环境准备二、docker环境准备三、k8s集群部署1.kubeadm创建集群2.使用kubeadm引导集群 总结 一、基础环境准备 首先,需要准备三个服务器实例,这里我使用了阿里云创建了三个实例,如果不想花钱,也可以在VM上创…