首页 > 其他分享 >分布式理论 CAP 和 BASE

分布式理论 CAP 和 BASE

时间:2024-03-25 14:11:57浏览次数:34  
标签:CAP DB1 BASE 一致性 DB0 数据 分布式

本文首发于 https://youngxhui.top/2024/03/distributed-theory/

CAP 理论

在分布式系统中最重要的一条理论为 CAP 理论。这个理论是由加州大学伯克利分校的计算机科学家Eric Allen Brewer 在 2000 年提出的一个猜想,由 2002 年,麻省理工的 xxx 和 xxx 发表了该猜想的证明,使得该猜想变成了一个定理。

CAP 定理中对分布式系统提出了三点,分别为:

  • 一致性(Consistency):多个副本的数据之间能够保持一致;
  • 可用性(Availability):每次请求都可以获取到正常的、非错误的响应,但是无法保证数据是最新的;
  • 分区容错性(Partition tolerance):系统的某个节点发生故障,仍然还可以对外提供一致性和可用性的服务。

CAP 理论

例如当前系统有两个 DB 分别为 DB0 和 DB1。

一致性 C

一致性是指在数据发生变化的时候(也就是写操作发生后),无论是谁获取到的数据(也就是读操作)也是一样的。

当用户1 通过写操作对 DB0 的数据进行修改后,那么无论用户1 还是 用户2 ,无论从 DB0 还是 DB1 读取,读取后的数据都应该是完全一样的,这就是所谓的一致性。

也就是 DB0 的数据发生了修改,应该由相关的机制告诉 DB1 也将相关的数据发生修改,保证该数据在不同的 DB 中是一样的。

可用性 A

当用户发出相关请求,无论 DB0 还是 DB1 都会返回相关的数据,但是这里不需要关心数据是否一致。

分区容错性 P

DB0 和 DB1 例如出现了问题,这个问题可能是网络问题,也有可能是其他硬件问题,导致了 DB0 和 DB1 的系统无法通信。这样 DB0 和 DB1 就成为了两个分区。即使 DB0 和 DB1 无法进行通信,但是 DB0 和 DB1 仍旧可以对外提供服务。

但是这种情况,在实际系统中无法避免这种情况,所以分区容错性是一个必选的条件。

CP 还是 AP

既然 CAP 三条规则无法同时满足,那么就出现了上图中的三种情况,满足任意两条规则,也就是 CA,CP 和 AP 三种架构,但是分区容错性是必选的,这样我们就剩下 CP 和 AP 两种关系。

常见的 CP 软件有 Zookeeper,Zookeeper 为了保证数据的一致性,牺牲了可用性。任何时候 Zookeeper 的访问都能获取一致的结果,但是不保证每次服务请求都可以用。

而 AP 架构中,要求数据一致性并不是那么重要,允许不同的服务可以返回不同的数据。

CAP 的不足

CAP 理论并不是完美的,存在很多问题。例如 DB0 和 DB1 要保持数据的一致性,那么就会发生相关通信,通信是需要时间,这就导致了某些时刻数据是不同步的,常见的情况在主从的机器上的主从延迟,当延迟过大的时候,用户读取的数据是不一致的。

CAP 理论也并不完全是三选二(或者说二选一)的问题,例如分区容错性发生的概论很小,那么就没必要牺牲了 A 和 C。

BASE 理论

BASE 理论算是 CAP 理论的延伸,是对 CAP 理论中一致性和可用性的权衡。在 CAP 中,所谓的一致性是指数据时时刻刻的都保持一致,也就是强一致性。上文中 CAP 的不足也说到,要保证时时刻刻数据的一致性是一件很困难的事情。而 BASE 理论就是对改问题的补充,既然很难做到强一致性,那么系统根据自身的业务特点,确保系统中的数据保证最终一致性也是可以的。

BASE 理论是 ebay 工程师 Dan Pritchett

BASE 是指 Basically Available, Soft State 和 Eventually Consistent 三个短语的缩写。

Basically Available 基本可用

基本可用指的是系统出现故障后,但是还可以使用,但是可能比较正常系统上可能出现一些问题,例如响应时间上,服务降级牺牲部分功能等。

Soft State 软状态

软状态指的是系统数据允许出现中间状态,例如数据库主从同步过程中会出现中间状态,这就是一种软状态。

Eventually Consistent 最终一致性

最终一致性强调经过上述的软状态后,最后数据保持一致性。

BASE 理论的提出是通过牺牲系统的强一致性来保证系统的可用性,允许系统在一段时间内的数据是不一致的,但是要求最终数据的一致性。

参考文章

一文看懂|分布式系统之CAP理论

分布式架构之CAP理论/AP架构/CP架构

标签:CAP,DB1,BASE,一致性,DB0,数据,分布式
From: https://www.cnblogs.com/youngxhui/p/18094260

相关文章

  • drf : 通用视图类和(GenericAPIView)5个视图扩展类,九个视图子类,视图集。
    视图RESTframework提供了众多的通用视图基类与扩展类,以简化视图的编写。APIViewrest_framework.views.APIViewAPIView是RESTframework提供的所有视图的基类,继承自Django的View父类。GenericAPIView使用[通用视图类]继承自APIVIew,主要增加了操作序列化器和数据库查询的方......
  • Base64编解码及C++代码实现
    1.Base64是什么?        Base64是一种二进制到文本的编码方式。如果要更具体一点的话,可以认为它是一种将byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符。        例如字符串mickey0380对应的Base64为bWlja2V5MDM4MA==。其中那个=......
  • 分布式操作系统的价值和意义
     Laxcus分布式操作系统不是传统操作系统的延续,而是另一类操作系统。它在传统操作系统的路径之外,开辟了一条新的操作系统赛道。随着人工智能技术成熟和产业化发展,全球计算机网络,正在从第一代的互联网、第二代的移动互联网,快速切换到第三代的算力互联网。算力互联网融合了互联网......
  • .NET分布式Orleans - 3 - Grain放置
    在Orleans7中,Grain放置是指确定将Grain对象放置在Orleans集群中的哪些物理节点上的过程。Grain是Orleans中的基本单位,代表应用程序中的逻辑单元或实体。Grain放置策略是一种机制,用于根据不同的因素,将Grain对象放置在合适的节点上,以实现负载均衡、最小化网络延迟和提高容错性。G......
  • 使用etcd来实现一个简单的分布式锁
    使用etcd来实现一个简单的分布式锁使用etcd来实现一个简单的分布式锁分布式锁有着极为广泛的使用,在多节点服务部署中是必不可少的一环.在本文中,我们尝试以etcd为基础来实现一个简单的分布式锁.基本能力Lock上锁Unlock解锁一些额外的设置,比如Watch-Dog模式/设置最......
  • etcd 以及 redis分布式锁的实现优劣比较
    etcd以及redis分布式锁的实现优劣比较背景介绍在学习etcd时,对于使用etcd实现分布式锁(使用etcd来实现一个简单的分布式锁)做了一个简单的示例,同时也能想到和Redis实现的分布式锁相比,基于etcd来做有什么好处呢?技术要点底层技术比较我们必须要明白一件事情,两者的底......
  • 使用etcd来实现一个简单的分布式锁
    使用etcd来实现一个简单的分布式锁使用etcd来实现一个简单的分布式锁分布式锁有着极为广泛的使用,在多节点服务部署中是必不可少的一环.在本文中,我们尝试以etcd为基础来实现一个简单的分布式锁.基本能力Lock上锁Unlock解锁一些额外的设置,比如Watch-Dog模式/设置最......
  • 大数据分布式事务的深入理解?
        在一个大数据系统内部分布式事务无处不在,但凡一个任务分布到多台机器上执行就会涉及到分布式事务的场景,分布式事务一直以来都是分布式系统比较难以解决的问题。    事务的理解,比如你要将账户A转1块钱到账户B中,那么这个行为在执行时会被拆分成两个步骤,第一......
  • .NET分布式Orleans - 2 - Grain的通信原理与定义
    Grain是Orleans框架中的基本单元,代表了应用程序中的一个实体或者一个计算单元。每个Silo都是一个独立的进程,Silo负责加载、管理和执行Grain实例,并处理来自客户端的请求以及与其他Silo之间的通信。通信原理在相同的Silo中,Grain与Grain之间的通信通过直接的方法调用实现。每个......
  • 【OceanBase】v4.2.1 集群命令汇总
    查看集群信息#查看所有集群obdclusterlist#启动集群ob3clusterobdclusterstartob3cluster#停止集群obdclusterstopob3cluster登录数据库#root用户的sys租户登录数据库obclient-hxxx.xxx.xxx.xxx-uxxx:sys:root-P2883-pxxxxxx-c-A-DOceanbas......