分布式与一致性协议之CAP(一)

news2024/10/5 13:21:46

CAP理论

概述。

在开发分布式系统的时候,会遇到一个非常棘手的问题,那就是如何根据业务特点,为系统设计合适的分区容错一致性模型,以实现集群能力。这个问题棘手在当发生分区错误时,应该如何保障系统稳定运行而不影响业务。CAP理论对分布式系统的特性做了高度抽象,比如抽象成一致性、可用性、分区容错性,并对特性间的冲突(也就是CAP不可能三角)做了总结。
问题来了:什么是一致性、可用性和分区容错性?它们之间有什么关系?我们又该如何使用CAP理论来思考和设计分区容错一致性模型呢?

CAP理论:分布式系统的PH试纸,用它来测酸碱度。

CAP理论就像PH试纸一样,可以用来度量分布式系统的酸碱度,帮助我们思考如何设计合适的酸碱度,在一致性和可用性之间进行妥协、这种,进而设计出满足场景特点的分布式系统。那么如何理解CAP理论呢?

CAP三指标

CAP理论对分布式系统的特性做了高度抽象,形成了3个指标:

  • 1.一致性(Consistency);
  • 2.可用性(Availability)
  • 3.分区容错性(Parition Tolerance)
    一致性是指客户端的每次读操作,不管访问哪个节点,要么读到的是同一份最新写入的数据,要么读取失败。大家可以把一致性看作分布式系统对访问自己的客户端的一种承诺:不管你访问哪个节点,要么我给你返回的
    是绝对一致的最新写入的数据,要么你读取失败。可以看到,一致性强调的是数据正确。

一致性指标

描述的是分布式系统的一个非常重要的特性,强调的是数据正确。也就是说,对客户端而言,它每次都能读取到最新写入的数据。

不过集群毕竟不是单机,当发生分区故障时,不能仅仅因为节点间出现了通信问题,无法响应最新写入的数据,就在客户端查询数据时一直想客户端返回出错信息,举个例子说明.业务集群中的一些关键系统,比如名字路由系统(基于Raft算法的强一致性系统),如果仅仅因为发生了分区故障,
无法响应最新数据(比如因通信异常,候选人都无法赢得大多数选票,使得集群没有了领导者),为了不破坏一致性,在客户端查询相关路由信息时,系统就一直向客户端返回出错信息,此时相关的业务都将因为获取不倒指定路由信息而不可用、瘫痪,出现灾难性的故障。此时,我们就需要牺牲数据正确的要求,在每个节点使用本地数据来响应客户端请求,以保证服务可用,这也是另外一个指标,可用性。

例子
  • 举个例子。两个节点的KV存储系统,原始的KV记录为"X=1",如图所示:
    在这里插入图片描述
    紧接着,客户端向节点1发送写请求"SET X=2",如图所示
    在这里插入图片描述
    如果节点1收到写请求后,只将节点1的X值更新为2,然后返回Success给客户端,如图所示
    在这里插入图片描述
    此时如果客户端访问节点2执行读操作,就无法读到最新写入的X值,这就不满足一致性了,如图所示
    在这里插入图片描述
    如果节点1收到写请求后,通过节点间的通信,同时将节点1和节点2的X值都更新为2,然后返回Success给客户端,如图所示
    在这里插入图片描述
    那么在完成写请求后,不管客户端访问哪个节点,读取到的都是同一份最新写入的数据,如图所示,这就叫一致性。
    在这里插入图片描述

可用性

是指任何来自客户端的请求,不管访问哪个非故障节点,都能得到响应数据,但不保证是同一份最新数据。也可以把可用性看作分布式系统对访问本系统的客户端的另外一种承诺:我尽力给你返回数据,不会不响应你,但是我不保证每个节点给你的数据都是最新的。这个指标抢到的是服务可用,但不保证数据正确。

例子
  • 举个例子。比如,用户可以选择向节点1或者节点2发起读操作,如果
    不考虑节点间的数据是否一致,只要节点服务器收到请求就立即响应X的值,如图所示,那么两个节点的服务是满足可用性的
    在这里插入图片描述

分区容错性

是指当节点间出现任意数量的消息丢失或高延迟的时候,系统仍然可以继续工作,也就是说,分布式系统告诉访问本系统的客户端:不管我的内部出现什么样的数据同步问题,我都会一直运行。这个指标强调的是集群对分区故障的容错能力.因为分布式系统与单机系统不同,它涉及多节点间的通信和交互,节点间的分区故障是必然发生的,所以,在分布式系统中
分区容错性是必须要考虑的。

现在在了解了一致性、可用性和分区容错性,那么在涉及分布式系统时,是从一致性、可用性、分区容错性中选择其一,还是三者都可以选择呢?这3个指标之间有什么冲突吗?

例子
  • 举个例子。当节点1和节点2的通信出现问题时,如果系统仍能继续工作,那么两个节点是满足分区容错性的
    在这里插入图片描述

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

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

相关文章

高精度加法及乘法

目录 字符串的高精度加法 为什么需要高精度加法? 怎么进行高精度加法? 链表的高精度加法 翻转链表(带虚拟头节点) 字符串的高精度乘法 字符串的高精度加法 大数加法_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.co…

超详细神仙级Python入门教程,从零基础入门到精通,从看这篇开始

一、初聊Python 1.为什么要学习Python? 在学习Python之前,你不要担心自己没基础或“脑子笨”,我始终认为,只要你想学并为之努力,就能学好,就能用Python去做很多事情。在这个喧嚣的时代,很多技…

数字积分生态:区块链与电商的未来发展之路

大家好,我是微三云周丽,今天给大家分析当下市场比较火爆的商业模式! 小编今天跟大伙们分享什么是区块链与电商的完美结合? 区块链技术作为一种去中心化、不可篡改的分布式账本技术,正逐渐渗透到各行各业,给…

yolov5实现人脸检测与性别分类

自建数据集训练人脸检测模型 自建数据集训练人脸性别分类研判模型 使用代码级联两个模型实现静态识别 动态实时识别 python开发语言,pytorch框架,支持一键部署运行

齐护K210系列教程(十一)_显示摄像头图像

显示摄像头图像 因不同的型号在设计的屏显示方向时不同,我们设计程序时可以通过旋转屏幕或摄像头图像的方式来达到正确的显示方向。 型号Q1及掌机前面还有一个RGB灯可以用于摄像头的补光,这样在比较暗的环境下可以开启,让摄像头图像更清晰。…

云计算技术架构及发展

云计算是指一种将可伸缩、弹性、共享的物理和虚拟资源池以按需自服务的方式供应和管理,并提供网络访问的模式。 云计算服务商利用分布式计算和虚拟资源管理等技术,通过网络将分散的ICT资源集中起来形成共享的资源池,并以动态按需和可度量的方…

mysql buffer pool详解

介绍 缓冲池是InnoDB在访问表和索引数据时缓存的主内存区域。缓冲池允许直接从内存访问频繁使用的数据,这加快了处理速度。在专用服务器上,通常会将多达80%的物理内存分配给缓冲池。 为了提高大容量读操作的效率,缓冲池被划分为可能包含多行…

Ubuntu查看端口状态

完蛋了,好像动心了,近一周吃啥东西都索然无味,这可如何是好!!!不知道在期待什么,恐惧与窃喜—— 在Ubuntu系统中,查看某个端口是否被放行(即允许流量通过)&am…

AI论文速读 |从图结构角度统一车道级交通预测:基准和基线

题目:Unifying Lane-Level Traffic Prediction from a Graph Structural Perspective: Benchmark and Baseline 作者:Shuhao Li, Yue Cui, Jingyi Xu, Libin Li, Lingkai Meng, Weidong Yang(杨卫东), Fan Zhang, Xiaofang Zhou(周晓方) 机构&#xff…

算法提高 第一期 KMP扩展算法

1## 具体思路: 和KMP算法的是想类似,充分利用已经比较字符性质来减少冗余的字符比较次数。KMP的思想是充分的利用模式串中所有前缀字串(以模式串为开头的字串)的真前缀和真后缀(指子串的开始字符与子串的最后字符相等的…

vCenter 物理配置与虚拟机配置对应关系

目录 背景现状概念存储池物理与虚拟资源分配及使用情况汇总 分配cpu内存硬盘VSAN、VM Encryption和VVOL No Requirements厚置备和精简置备 总结cpu内存硬盘建议 背景 现在有三台服务器,需要统计上面所有服务占用的资源情况与总和,目的是看还有多少资源可…

「React Native」为什么要选择 React Native 作为的跨端方案

文章目录 前言一、常见因素二、举个栗子2.1 项目背景2.2 为什么选择 React Native2.3 项目实施2.4 成果总结 前言 没有完美的跨端技术,只有适合的场景。脱离适用场景去谈跨端技术没有什么意义。 一、常见因素 共享代码库: React Native 允许开发者编写…

H264编码标准中游程编码应用介绍

H264编码标准 H.264编码标准,也被称作MPEG-4 AVC(Advanced Video Coding),是一种被广泛使用的数字视频压缩标准。它由国际电信联盟(ITU-T)和国际标准化组织(ISO)共同开发&#xff0…

Vue3后台管理系统推荐

目录 项目概述 🍟 项目展示 功能特点 🥗 结语 💨 项目概述 🍟 基于Vue 3框架与Element-Plus UI组件库技术精心构建的后端管理模板。该模板系统已成功实现一个基础的权限管理模块,宗旨在于为追求高效二次开发的开发…

The_Maya_Society

突然发现自己做了一些逆向题都没有写笔记 今天,发现这道题有意思 1.解压文件 三个文件The Maya Society.html,maim.cc,maya.png 当时我看到这个题的时候,我以为是不是会是js逆向 看来是我蠢了 这三个文件,main.css和maya.png这两…

<计算机网络自顶向下> 路由器组成

路由器结构概况 路由:运行路由选择算法/协议(RIP, OSPF, BGP)生成路由表转发:从输入到输出链路交换数据包-根据路由表进行分组的转发中间的fabric是用来接收输入的分组交给输出端口的,完成局部的转发(根据…

GPT-SoVITS声音克隆训练和推理(新手教程,附整合包)

环境: Win10 专业版 GPT-SoVITS-0421 整合包 问题描述: GPT-SoVITS声音克隆如何训练和推理教程 解决方案: Zero-shot TTS: Input a 5-second vocal sample and experience instant text-to-speech conversion.零样本 TTS:输入 5 秒的人声样本并体验即时文本到语音转换…

震惊!小红书矩阵账号管理-批量发布笔记

“小红书引流软件矩阵工具-笔记批量发” 昨天,有个粉丝急匆匆地来找我,一脸焦急地说:“大佬,我现在运营着好几个小红书账号,每天都要发布内容,可把我忙坏了,有没有什么高效的管理方法啊&#xf…

1.PROXY-代理内容

SwitchyOmega,浏览器插件(edge,火狐插件库都是存在的),安装后的样式 1.安装 2.设置 我们常用的功能,主要是设置一个代理ip访问学习网站入github等,或者docker服务等 3.启动代理 4.验证 https…

Python爬取AppStore脚本获取评论数据Python脚本获取苹果软件评价

Python爬取AppStore脚本获取评论数据Python脚本获取苹果软件评价 效果: # -*- coding: utf-8 -*- import urllib.request import json import xlsxwriter page=1; appid=726029718 workbook = xlsxwriter.Workbook(app评论.xlsx) worksheet = workbook.add_worksheet() forma…