当前位置: 首页 > news >正文

学习《分布式》必须清楚的《CAP理论》

分布式的理论基础CAP理论

当学习分布式的redis、mq等中间件时,都会看到有提到CAP。

CAP理论是学习分布式必备的一个概念知识点。

CAP理论由三个特性组成,分别是一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)。

注意:一般的分布式的系统服务或中间件,是不能同时拥有这三个特性的,只能同时拥有其中的两个特性,要么是保证系统的一致性和分区容错性(CP),要么保证系统的可用性和分区容错性(AP)。

请添加图片描述

一致性(Consistency)

当一条数据更新完成之后,这个分布式系统里所有的服务节点,在同一个时间点读取同一条数据得到的信是需要完全一致的。

例如:

我在分布式系统里的服务A处操作更新数据,将一条数据更新为 “张三” ,当服务A响应更新成功之后,此时不管从服务A还是从服务B读取这条数据,得到的都要是 ”张三“ ,而不能是其他。

存在的问题:

当服务A响应数据更新成功之后,服务A是需要将更新的数据同步到服务B、服务C等其他分布式系统节点的,这个同步的过程就会导致数据的实时性存在一定的延迟。

会出现在服务A更新完成之后,数据还没有同步到其他服务节点时,有个请求需要从服务B节点读取这条数据,此时就会导致数据的不一致问题。

而为了保证数据的一致性,解决不一致的问题,就会对这个数据资源进行一个加锁操作,加锁之后,所有的请求就不得对该数据资源进行操作,请求会进入阻塞状态。

只有的等各个服务的数据同步完之后,才会释放这个资源的锁。

所以要保证分布式系统各服务之间数据的一致性,就势必会影响到整个系统的性能,对其吞吐量会有一定的影响。

可用性(Availability)

对于所有的读操作和写操作,系统一直处于可用的状态,且响应时间正常,不会出现超时,响应错误等不友好的情况(但是不保证获取到或操作的数据是最新数据)。

可用性呢,可以简单的理解为牺牲了一定的数据一致性,不能等到分布式系统的各个服务进行数据同步完成之后,才来响应客户的请求,为了性能需要立刻马上去响应用户的请求。

所以如果要保证系统的可用性,分布式系统的各个服务进行数据同步时,不能进行加锁阻塞用户的请求操作,只能异步的去进行数据同步写操作。

分区容错性(Partition Tolerance)

一个分布式系统的各个服务是分散部署在各个服务器、各个地区机房的。

当分布式系统的某一节点服务在遇到各种各样的网络、服务器故障之后,无法正常提供服务时,不会影响到整个系统,其他节点的服务依旧可以正常提供服务,这个是分布式的初衷,也是分布式系统需求具备的基本能力。

如果达不到这个能力,那这个系统都不能称为一个分布式系统。

例如: redis主从架构集群,被分散部署在不同的服务器、机房里面,当其中一个redis主节点挂掉宕机之后,会由被部署在其他服务器上的redis从节点顶上来,整个系统不会因为其中一个redis节点出现问题,而停止提供服务。

总结

分布式系统一定是要保证分区容错性的,然后就是在一致性和可用性之间进行一个取舍。

为了保证数据的一致性,就势必会因为加锁、网络波动等原因,去阻塞用户的请求,这就必然达不到可用性的要求。

而为了保证可用性,而使分布式系统的各个服务节点之间用异步操作去同步数据,就定然会在导致数据还没同步完成时,用户请求到旧数据的问题,就无法达到一致性的要求。

所以一个分布式系统只能达到CAP理论其中的两个特性,要么是保证系统的一致性和分区容错性(CP),要么保证系统的可用性和分区容错性(AP)。

http://www.lryc.cn/news/444972.html

相关文章:

  • navicat无法连接远程mysql数据库1130报错的解决方法
  • JetPack01- LifeCycle 监听Activity或Fragment的生命周期
  • OpenCSG推出StarShip SecScan:AI驱动的软件安全革新
  • 占道经营检测-目标检测数据集(包括VOC格式、YOLO格式)
  • 828华为云征文 | 云服务器Flexus X实例:RAG 开源项目 FastGPT 部署,玩转大模型
  • MySQL之基本查询(一)(insert || select)
  • 基于深度学习的多智能体协作
  • Nmap网络扫描器基础功能介绍
  • idea 编辑器常用插件集合
  • 如何优化Java商城系统的代码结构
  • 两数之和、三数之和、四数之和
  • 这几个方法轻松压缩ppt文件大小,操作起来很简单的压缩PPT方法
  • 【nvm管理多版本node】下载安装以及常见问题和解决方案
  • C++(学习)2024.9.23
  • 大数据处理从零开始————3.Hadoop伪分布式和分布式搭建
  • 跟着问题学12——GRU详解
  • 内核是如何接收网络包的
  • 计算机毕业设计之:基于微信小程序的电费缴费系统(源码+文档+讲解)
  • 【leetcode】环形链表、最长公共前缀
  • C#开发记录如何建立虚拟串口,进行串口通信,以及通信模板
  • 电源设计的艺术:从底层逻辑到工程实践
  • 软媒市场新探索:软文媒体自助发布,开启自助发稿新篇章
  • 【Kubernetes】常见面试题汇总(二十七)
  • 基于单片机巡迹避障智能小车系统
  • Python163邮箱发送:提升发送效率的技巧?
  • springboot中的异步任务
  • Linux学习笔记8 理解Ubuntu网络管理,做自己网络的主人
  • 理解线程的三大特性:原子性、可见性和有序性
  • 英特尔®以太网网络适配器E810-CQDA1 / E810-CQDA2 网卡 规格书 e810 网卡 规格书 Intel100G E810 网卡 白皮书
  • 好用的idea方法分隔符插件