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

news/2024/10/9 13:23:08/

CAP_0">CAP理论

概述。

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

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

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

CAP_6">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.ppmy.cn/news/1441409.html

相关文章

面试八股——RabbitMQ

消息丢失问题 消息确认机制 生产者与MQ之间的消息确认: 当MQ成功接收消息后,会返回给生产者一个确认消息。如果在规定时间内生产者未收到确认消息,则任务消息发送失败。 MQ与消费者之间的消息确认: 当MQ成功接收消息后&#…

常用设计模式简介

设计模式是在软件设计中常见问题的通用可重用解决方案。它们分为三大类:创建型模式、结构型模式和行为型模式。下面是这三类中一些常用设计模式的概述: 创建型模式 单例模式(Singleton) 保证一个类只有一个实例,并提供…

PDF分割合并

提取指定页面并合到一起,输出到代码目录下 import os import time from PyPDF2 import PdfReader, PdfWriterdef extract_pages(pdf_path, page_numbers):# 创建PdfReader对象pdf_reader PdfReader(open(pdf_path, "rb"))# 创建PdfWriter对象pdf_writer…

锂电池SOH预测 | 基于CNN的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 锂电池SOH预测完整代码锂电池SOH预测 锂电池的SOH(状态健康度)预测是一项重要的任务,它可以帮助确定电池的健康状况和剩余寿命,从而优化电池的使用和维护策略。 SOH预测可以通过多种方法实现,其中一些常用的方法包括: 容量衰减法:通过监测电池的容量衰减…

“一带一路”是创新之路。推进“一带一路”建设应促进科技同()、科技同金融深度融合。

“一带一路”是创新之路。推进“一带一路”建设应促进科技同()、科技同金融深度融合。 点击查看答案 A 人才 B 生态 C 产业 D 社会 中国在“一带一路”国家承接大型工程项目方面,资金主要分布在()地区。 A 中东欧 B 东盟 C 南亚 D 西 拓展“一带一路”国际合作…

Linux安装python3环境

搭建Python环境 Linux 中默认自带了 python2 1、进入管理员的身份,先安装依赖的编译环境 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc2、使用 w…

【go零基础】go-zero从零基础学习到实战教程 - 0环境配置

是个前端,最近开始学习go,后端除node外基本0基础,所以学习曲线有点绕,目标是个基础的服务端demo,搞个api服务后台,包含基础的用户登录、文章发布和写文章、权限控制,差不多就是个完整博客系统。…

Java常见排序

1、冒泡排序(从小到大排序) 相邻的元素两两比较,小的放左边,大的放右边 第一轮比较完毕之后,最大值就已经确定了,第二轮比第一轮少循环一次,后面以此类推 如果数据中有n个数据,我…