首页 > 其他分享 >CAP理论与BASE理论的关系及理解

CAP理论与BASE理论的关系及理解

时间:2024-02-15 23:22:05浏览次数:21  
标签:可用性 理论 CAP 购物车 BASE 分布式系统 一致性 数据

在探讨分布式系统时,我们经常会提到CAP理论。CAP理论是分布式计算中的一个基本原则,它指出在一个分布式数据存储系统中,Consistency(一致性)、Availability(可用性)和Partition Tolerance(分区容错性)这三个特性无法同时被满足。

一、一致性(Consistency)

一致性是指“所有节点在同一时间看到的数据是一致的”。在并发系统中,一致性问题不可避免。对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。换句话说,一致性是站在分布式系统的角度,对访问本系统的客户端的一种承诺:要么我给您返回一个错误,要么我给你返回绝对一致的最新数据。其强调的是数据正确性。

二、可用性(Availability)

可用性是指“读写操作总是能够成功”。换句话说,可用性是站在分布式系统的角度,对访问本系统的客户的另一种承诺:我一定会给您返回数据,不会给你返回错误,但不保证数据最新,强调的是不出错。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

三、分区容错性(Partition Tolerance)

分区容错性是指分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。换句话说,分区容忍性是站在分布式系统的角度,对访问本系统的客户端的再一种承诺:我会一直运行,不管我的内部出现何种数据同步问题,强调的是不挂掉。对于用户而言,即使分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,对于用户而言并没有什么体验上的影响。

CAP理论的权衡

CAP理论的基本观点是,一个分布式系统不可能同时满足C、A、P这三个特性。这并不是在所有时候都只能选择两个特性。在不存在网络失败的情况下(分布式系统正常运行时),C和A能够同时保证。只有当网络发生分区或失败时,才会在C和A之间做出选择。

对于一个分布式系统而言,P是前提,必须保证,因为只要有网络交互就一定会有延迟和数据丢失,这种状况我们必须接受,必须保证系统不能挂掉。所以只剩下C、A可以选择。要么保证数据一致性(保证数据绝对正确),要么保证可用性(保证系统不出错)。

当选择了C(一致性)时,如果由于网络分区而无法保证特定信息是最新的,则系统将返回错误或超时。

当选择了A(可用性)时,系统将始终处理客户端的查询并尝试返回最新的可用的信息版本,即使由于网络分区而无法保证其是最新的。

我们把P去掉,就能保证CA(单机模式).如果要P, 那么就得做出选择,是要准确数据还是服务可用.举例: 如果我们选择C, 那么就得等数据在各个服务中全部同步且一致才返回,这个过程展现给用户的是等待,不能执行别的操作. 如果选择A,用户可以很快得到响应,但是可能数据在其他查询不一致. 这就引出BASE理论.牺牲p就是单机数据库,保障p就是集群部署数据库。引出了BASE理论;

BASE是“Basically Available(基本可用性)、Soft state(软状态)和Eventually consistent(最终一致性)”的缩写。BASE理论是对ACID(原子性、一致性、隔离性和持久性)的一种补充和扩展。BASE理论主要用于分布式系统和大规模数据存储中,提供了一种弱一致性的解决方案。

基本可用性(Basically Available):
系统在面对故障或异常情况时,仍然保证基本的可用性和可操作性,不会因为个别节点或组件的故障而完全不可用。
软状态(Soft state):
系统的状态可以不同步,在一段时间内可以是非一致的。允许系统的某些部分存在中间状态,而不要求立即在所有节点上达到全局一致。
最终一致性(Eventually consistent):
系统的数据在经过一段时间的同步和迁移后,最终会达到一致的状态。尽管在某一时刻数据可能不一致,但系统会尽力保证最终所有节点达到一致性。
BASE理论相对于ACID更加适用于大规模分布式系统和高并发环境,强调可用性和性能,而对数据的一致性要求相对较低。因此,在设计和实现分布式系统时,可以根据具体需求选择使用ACID或BASE理论进行架构和设计。

  实际应用案例:电商购物车系统

基于BASE理论的电商购物车系统是一个典型的实际应用案例,它可以通过合理的设计来确保数据的最终一致性。

  数据一致性保障机制:
在电商购物车系统中,用户可以将商品添加到购物车,然后可以进行结算和支付。这涉及到对购物车中商品数量、价格等数据的操作和更新。为了确保数据的最终一致性,可以采取以下措施:

 基于异步通信:

  当用户操作购物车时,系统不需要立即更新数据,而是使用异步通信的方式将操作请求发送到消息队列中。这样可以保证用户操作的及时响应,并避免同步更新数据带来的性能瓶颈。
使用消息队列解耦:将购物车处理过程中的各个步骤解耦,例如将商品添加到购物车、删除购物车中的商品、更新购物车中的商品数量等操作分别存储为不同的消息。这样可以确保每个操作在消息队列中独立处理,从而提高系统的可伸缩性和灵活性。
最终一致性机制:

  由于BASE理论中接受最终一致性,可以采用以下方法来保证购物车数据的最终一致性:
使用分布式锁:

  在对购物车数据进行操作时,使用分布式锁来保证同一时刻只有一个线程可以修改购物车数据,以避免并发问题。
消息队列的消费者幂等性:

  消费消息的服务节点需要具备幂等性,确保相同消息在处理时只会产生一次结果。例如,当多次收到某个商品被添加到购物车的消息时,只执行一次添加操作。
定时任务的校正机制:

  定时任务可周期性检查消息队列中未被正确消费的消息,并进行校正。例如,如果某个操作消息没有被正确处理,则定时任务可以重新处理该消息,确保数据最终一致。

 

标签:可用性,理论,CAP,购物车,BASE,分布式系统,一致性,数据
From: https://www.cnblogs.com/amicable/p/18016753

相关文章

  • 《SagDRE: Sequence-Aware Graph-Based Document-Level Relation Extraction with Ada
    代码原文地址关键参考文献:Document-LevelRelationExtractionwithAdaptiveThresholdingand LocalizedContextPooling摘要关系抽取(RE)是许多自然语言处理应用的重要任务,它的目标是从文档中抽取出实体之间的关系。文档级RE任务面临着许多挑战,因为它不仅需要跨句子......
  • 协程理论
    协程(1)介绍什么是协程?就是在线程下面开设多线程协程(Coroutines)是一种用于异步编程的概念,它是一种更轻量级的线程。协程允许程序在执行过程中暂停和恢复,从而实现非阻塞的异步编程模型在Python中,协程可以使用asyncio模块来实现。Python3.5引入了async和await关......
  • 通过注册表交换Ctrl键和CapsLock键
    频繁地使用左下角的Ctrl键对我的小拇指产生了非常大的负担,想把它和不常用但很容易按的CapsLock键交换。先打开注册表,导航到HKEY_LOCAL_MACHINE->System->CurrentControlSet->Control->KeyBoardLayout。右键新建->二进制值,命名为ScancodeMap。右键新建的Scanc......
  • 体光伏效应和二次谐波产生的微观理论(Photogalvanic effect 、bulk photovoltaic effec
    此领域较易入门,经典文献为:1.综述:https://www.nature.com/articles/s41563-021-00992-72.Sipe大佬的论文:开创领域的两篇最经典论文,值得全部重复:https://journals.aps.org/prb/abstract/10.1103/PhysRevB.61.5337https://journals.aps.org/prb/abstract/10.1103/PhysRevB.52.146......
  • 我在代码随想录|写代码| 贪心算法 | 理论基础, 455.分发饼干, 376. 摆动序列,53. 最大
    学习目标:博主介绍:27dCnc专题:数据结构帮助小白快速入门......
  • 大白话说明白K8S的PV / PVC / StorageClass(理论+实践)
    本文主要通过大白话说明白PV、PVC的概念和原理,再说说StorageClass的作用,最后通过实践加深理解。先来个一句话总结:PV、PVC是K8S用来做存储管理的资源对象,它们让存储资源的使用变得可控,从而保障系统的稳定性、可靠性。StorageClass则是为了减少人工的工作量而去自动化创建PV的组......
  • 5分钟搞懂K8S的污点和容忍度(理论+实战)
    本文主要快速讲解Kubernetes的污点和容忍度,一句话总结:如果Pod能容忍某个节点上的污点,那么Pod就可以调度到该节点。在K8S中,如果Pod能容忍某个节点上的污点,那么Pod就可以调度到该节点。如果不能容忍,那就无法调度到该节点。污点和容忍度就像谈恋爱的小情侣,你情我愿,女生知道男生的......
  • 各种bin在多种情况下漏洞利用的理论和实践
    先看一下main_arena中的大致结构:largebinattck此图不完全正确,其中largebin里的chunk如果是小组中最前面的那个chunk,并且大组中只有一个小组,bk_nextsize和fd_nextsize就都指向自己,且链表当中最后一个chunk的bk和最前面的chunk的fd指针指向头部,如果是小组中非最前面的chunk,则b......
  • nim静态编译capstone示例代码
    capstone.c代码:/*CapstoneDisassemblerEngine*//*ByNguyenAnhQuynh<[email protected]>,2013*/#include<stdio.h>#include<stdlib.h>#include<capstone/capstone.h>#include<capstone/platform.h>staticcshhandle;s......
  • FSCapture如何将照片改为固定的尺寸和像素大小
    制作要求:原始照片像素为2134*3048;比如要求尺寸2.5*3.5cm(295*413像素),格式仅限JPG、png和JPEG,大小300KB以内(不包含)。FSCapture操作过程:(1)修正比例。打开FSCapture后,将照片拖入该软件内,计算高宽比为3.5/2.5=1.4(不要循环小数,目的是比例应一致),像素数必须是整数,基于这个原则,2134相......