分布式理论之 CAP 定理(布鲁尔定理)

2024-01-08 10:32

本文主要是介绍分布式理论之 CAP 定理(布鲁尔定理),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1. 什么是 CAP 定理

2. 一致性(Consistency)

3. 可用性(Availability)

4. 分区容错性(Partition tolerance)

5. CAP 到底如何选

6. 数据库中的 CAP 定理

6.1 MongoDB 与 CAP

6.2 Cassandra 与 CAP

7. 巨人的肩膀


1. 什么是 CAP 定理

CAP 定理(CAP theorem)又被称作「布鲁尔定理」,是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。

该定理指出一个分布式系统最多只能同时满足一致性(Consistency)可用性(Availability)分区容错性(Partition tolerance)这三项中的两项。

 

2. 一致性(Consistency)

A read is guaranteed to return the most recent write for a given client.

对某个指定的客户端来说,读操作保证能够返回「最新的写操作结果」。

 

3. 可用性(Availability)

A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout).

非故障的节点在合理的时间内返回「合理的响应不是错误和超时的响应」。

 

4. 分区容错性(Partition tolerance)

System continues to work despite message loss or partial failure.

当出现网络分区后,系统能够继续「履行职责

 

5. CAP 到底如何选

  • 虽然 CAP 理论定义是三个要素中只能取两个,但放到分布式环境下来思考,我们会发现必须选择 P(分区容忍)要素,因为网络本身无法做到 100% 可靠,有可能出故障,所以分区是一个必然的现象。
  • 如果我们选择了 CA 而放弃了 P,那么当发生分区现象时,为了保证 C,系统需要禁止写入,当有写入请求时,系统返回 error(例如,当前系统不允许写入),这又和 A 冲突了,因为 A 要求返回 no error 和 no timeout。因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。

 

6. 数据库中的 CAP 定理

6.1 MongoDB 与 CAP

MongoDB 是一个流行的 NoSQL 数据库管理系统,它将数据存储为 BSON(binary JSON)文档。

相对于 CAP 定理,MongoDB是一个 CP 数据存储,它通过保持一致性来解决网络分区问题,同时降低可用性。

MongoDB 是一个单一的主系统,每个副本集只能有一个主节点来接收所有的写操作。同一副本集中的所有其他节点都是辅助节点,它们复制主节点的操作日志并将其应用于自己的数据集。默认情况下,客户机也从主节点读取数据,但他们也可以指定一个允许他们从辅助节点读取数据的读取首选项。

当主节点不可用时,具有最新操作日志的次节点将被选为新的主节点。一旦所有其他次要节点都赶上新的主节点,集群将再次可用。由于在此期间客户端无法发出任何写请求,因此数据在整个网络中保持一致。

 

6.2 Cassandra 与 CAP

Apache Cassandra 是由 Apache 软件基金会维护的开源 NoSQL 数据库。它是一个列式数据库,允许您在分布式网络上存储数据。然而,与 MongoDB 不同的是,Cassandra 拥有一个无主的架构。

相对于 CAP 定理,Cassandra 是一个 AP 数据库,它提供可用性和分区容忍度,但不能一直提供一致性。因为 Cassandra 没有主节点,所以所有节点必须连续可用。然而,Cassandra 允许客户机在任何时候向任何节点写入数据并尽快协调不一致,从而提供了最终的一致性

 

7. 巨人的肩膀

  • https://towardsdatascience.com/cap-theorem-and-distributed-database-management-systems-5c2be977950e
  • https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
  • https://www.ibm.com/cloud/learn/cap-theorem
  • https://www.educative.io/edpresso/what-is-the-cap-theorem

 

这篇关于分布式理论之 CAP 定理(布鲁尔定理)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/583164

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

开源分布式数据库中间件

转自:https://www.csdn.net/article/2015-07-16/2825228 MyCat:开源分布式数据库中间件 为什么需要MyCat? 虽然云计算时代,传统数据库存在着先天性的弊端,但是NoSQL数据库又无法将其替代。如果传统数据易于扩展,可切分,就可以避免单机(单库)的性能缺陷。 MyCat的目标就是:低成本地将现有的单机数据库和应用平滑迁移到“云”端

laravel框架实现redis分布式集群原理

在app/config/database.php中配置如下: 'redis' => array('cluster' => true,'default' => array('host' => '172.21.107.247','port' => 6379,),'redis1' => array('host' => '172.21.107.248','port' => 6379,),) 其中cl

基于MySQL实现的分布式锁

概述 在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就立即对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。 但是到了分布式系统的时代,这种

Kafka 分布式消息系统详细介绍

Kafka 分布式消息系统 一、Kafka 概述1.1 Kafka 定义1.2 Kafka 设计目标1.3 Kafka 特点 二、Kafka 架构设计2.1 基本架构2.2 Topic 和 Partition2.3 消费者和消费者组2.4 Replica 副本 三、Kafka 分布式集群搭建3.1 下载解压3.1.1 上传解压 3.2 修改 Kafka 配置文件3.2.1 修改zookeep

Java验证辛钦大数定理

本实验通过程序模拟采集大量的样本数据来验证辛钦大数定理。   实验环境: 本实验采用Java语言编程,开发环境为Eclipse,图像生成使用JFreeChart类。   一,验证辛钦大数定理 由辛钦大数定理描述为: 辛钦大数定理(弱大数定理)  设随机变量序列 X1, X2, … 相互独立,服从同一分布,具有数学期望E(Xi) = μ, i = 1, 2, …, 则对于任意正数ε ,

Spring Cloud整合Seata实现分布式事务

文章目录 1.Seata1.1 官网1.2 下载1.3 通过安装包运行seata1.3.1 解压seata-server-1.3.0.zip1.3.2 修改 conf/file.conf 配置文件1.3.3 修改conf/registry.conf配置文件1.3.4 添加seata配置信息到nacos1.3.5 配置seata服务端数据库表结构1.3.6 启动seata 2.Spring