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

分布式事务CAP与BASE简介

一、CAP理论

  CAP理论是由Eric Brewer教授在2000年举⾏的ACM研讨会上提出的⼀个著名猜想:⼀致性(Consistency)、可⽤性(Availability)、分区容错(Partition-tolerance),并且在分布式系统中这三个条件无法被同时满⾜,并且最多只能满⾜其中两个!2003年,MIT的Gilbert和Lynch正式证明了这三者确实是不可兼得的。此后,CAP理论被奉为分布式系统领域中的理论基石。

1、CAP理论内容

  • 1、Consistency 数据一致性 (All nodes see the same data at the same time)
    即更新操作成功并返回客户端后,所有的节点在同一时间数据完全一致,一致性的问题在集群中是不可避免的。从服务端来看,是数据更新如何复制到整个系统,以保证数据一致性。这里所说的一致性是强一致性
  • 2、Availability 完全可用性 (Reads and writes always succeed)
    即服务能够一直可用,读写操作能正常响应,并且是在正常的时间内进行响应,不会出现访问失败或者访问超市的情况
  • 3、Partition Tolerance 分区容错性
    当系统节点间网络中断,系统也要能够对外提供服务。

2、分布式系统能同时满足CAP三个条件吗?答案是:不能!

   当集群中节点间网络中断,集群因网络中断被分为A和B两个分区,如果该集群对外完全可用,但是因为A和B两个集群不能通讯,无法做到数据同步,就无法保障数据一致性,故无法同时满足三个条件。

同时满足CP条件,当分区发生时,为了保证数据一致性,所有的操作将会被阻塞,直到数据一致性结果达到,所有的操作将会被返回超时

同时满足AP条件,当分区发生时,为了保证集群对外完全可用,所有的操作会正常返回,但是数据会不一致

同时满足AC条件,放弃P条件,即该系统无法容忍分区发生,当网络正常,系统正常对外服务,当分区发生,系统无法对外提供服务,所以三个要求无法同时满足,只能同时满足其中两个要求。

3、关于P的理解

   如果我们放弃P选项,即系统无法容忍分区的情况出现,即当分区出现的时候系统无法对外服务,会出现什么情况呢?现实情况下我们面对的是一个不稳定的网络,网络中断、网络丢包、机器容易宕机的情况时有发生,有概率使系统发生分区。如果这些情况发生导致系统不可用,与分布式高可用,高容错的设计理念相悖。所以P选项是必选的,所以3选2就变成了2选一,即Consistency和Availability 选择一个。
   实际上,CAP中的Consistency 数据一致性是强一致性,要求集群中的更新操作像单节点一样,具有原子性,其实在实际运用中可以放宽一致性的要求; Availability (完全可用性)与上述类似,要求读写操作能正常成功响应,并且是在正常的时间内进行响应,但是在实际应用中可以放宽要求。这就延伸出了BASE理论。

二、BASE理论

  BASE理论是CAP理论的一个可用性实现,是对CAP理论中一致性和可用性权衡的结果。该理论是eBay的架构师Dan Pritchett 源于对大规模分布式系统的实践总结,BASE理论是对CAP理论的延伸,其核心思想是即使无法做到强一致性(Strong Consistency ,CAP的一致性就是强一致性),但是应用可以采取合适的方法达到最终一致性(Eventual Consistency)。BASE理论是指 基本可用(Basically Available )、软状态(Soft State )、最终一致性(Eventual Consistency)

基本可用(Basically Available )

基本可用的意义在于,当系统出现真正的故障时,可以提供一些降级的服务,而不是不提供服务。基本服务通常会在两方面有所损失:响应时间功能
响应时间:处理请求的相应时长会受到影响,会比正常的处理时间长。
比如正常的响应时间是30ms,但是为了保证数据一致性,要做数据同步,所以响应的时间会延长到1s或者3s不等,或者超时;当前端访问后端连接不上时,可以再选取其他节点连接,其间会增加处理时间。
功能:与正常情况下提供的功能不一致,通常是一种降级后的功能,保证用户基本功能或者核心功能可用,其他功能不可用。比如双11当天无法提供退换货的功能

软状态(Soft State )

  CAP中的数据一致性,要求所有的节点在同一时间数据完全一致,这是一种“硬状态”,是完全一致性,但是与之对应的是“软状态”。软状态指的是允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点中的数据副本存在数据延时。
例如 zookeeper集群中只需要保证大部分节点数据一致性就可以。

最终一致性

最终一致性是指在软状态度过一段时间后,保证系统的所有副本最后都达到数据完全一致的状态,这个时间和网络延时、系统负载、数据复制等因素有关。
最终一致性分为以下几种情况,简单介绍如下:
(1)因果一致性(Causal consistency)
当一个节点在完成数据更新后,同步该节点的数据给另外其他节点,则新的节点对该数据的访问和修改都基于同步过来的数据。与此同时,其他还未更新的节点还使用老数据。
(2)顺序一致性
(3)线性一致性

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

相关文章:

  • Integer中缓存池讲解
  • PHP Smarty模板如何与MVC框架集成?
  • spring cloud alibaba 应用无法注册到sentinel dashboard
  • 如何在vue3中加入markdown语法
  • R语言的物种气候生态位动态量化与分布特征模拟实践技术
  • 大数据Flink(六十一):Flink流处理程序流程和项目准备
  • C语言快速回顾(一)
  • Element Plus报错:ResizeObserver loop completed with undelivered notifications.
  • scope穿透(二)
  • 2023+HuggingGPT: Solving AI Tasks with ChatGPT and itsFriends in Hugging Face
  • Ant Design Mobile是什么?
  • 深入理解设计模式-行为型之模板(和回调区别联系)
  • LabVIEW控制通用工作台
  • 什么是事务,并发带来的事务问题以及事务隔离级别(图文详解)
  • 【MySQL】MySQL数据库的delete from table和truncate table之间的区别
  • 强制Edge或Chrome使用独立显卡【WIN10】
  • easyx图形库基础:3实现弹球小游戏
  • vue基础知识三:v-show和v-if有什么区别?使用场景分别是什么?
  • Python Opencv实践 - 图像旋转
  • 第五章 Opencv图像处理框架实战 5-10 文档扫描OCR识别
  • CentOS 7 源码制作openssh 9.4p1 rpm包 —— 筑梦之路
  • OpenCV图像处理——轮廓检测
  • 【论文阅读】基于深度学习的时序预测——Non-stationary Transformers
  • 开发者如何使用讯飞星火认知大模型API?
  • linux 系统中vi 编辑器和库的制作和使用
  • 麒麟arm架构 编译安装qt5.14.2
  • 【springmvc系】利用RequestBodyAdviceAdapter做接口鉴权
  • ROS学习笔记(三)---好用的终端Terminator
  • NFT Insider#102:The Sandbox重新上线LAND桥接服务,YGG加入Base生态
  • Webpack 的 sass-loader 在生产模式下最小化 CSS 问题