分布式系统:CAP 定理

欢迎来到分布式系统系列。在本文中,我们将学习并理解什么是 CAP 定理。CAP 代表一致性、可用性和分区容错性。当我们谈论CAP定理时,我们主要谈论的是分布式系统。首先,让我们了解一下什么是分布式系统。分布式系统是由运行在单台或多台机器上的多个进程组成的系统。在本次讲座中,我们将从分布式系统的角度使用简单的数据库类比来了解 CAP 定理。

什么是 CAP 定理?

CAP定理指出,在分布式系统中,当网络分区发生时,我们只能选择一致性或可用性。这是埃里克·布鲁尔(Eric Brewer)为了理解分布式系统而创造的。CAP 代表一致性、可用性和分区容错性。 

  • 一致性:所有客户都会看到最新的数据。
  • 可用性:即使包含最新数据的节点发生故障,系统也可用并返回数据。
  • 分区容错性:尽管网络出现故障,系统仍应正常工作。

现在,我们已经了解了CAP定理的定义。接下来,我们将了解它在设计或选择数据库、缓存、存储等分布式系统时如何发挥作用。

我们先通过一个简单的类比来理解。我们将向 MySQL 数据库插入一条记录。MySQL 服务器在单台机器上以单个进程运行,以处理读取和写入请求,如下图所示。 

客户端想要读取记录并将其写入关系型 MySQL 数据库。由于数据库实例运行在单机上,系统将保持一致,这意味着客户端将看到最近的写入。如果节点发生故障或者客户端与数据库服务器之间出现网络故障,系统将不可用。 

应用服务器

随着用户数量的增长,我们的数据库应该扩展更多的读取和写入。有多种方法可用于扩展数据库,但我们将讨论在复制或分区数据库时如何应用 CAP 定理。这就是分布式系统的实际应用。为了扩展更多的读取,对于主数据库中发生的每个更改,我们都会将数据从 mysql 主数据库复制到副本。这种方法有助于将写入和读取请求拆分到在不同计算机上运行的单独 MySQL 实例。 

如下图所示,MySQL 实例运行在 master 上,master 接受写入请求。然后,所有写入都会复制到副本计算机中以处理读取请求。与之前的单实例设置相比,我们将写入和读取分离到不同的机器中。

现在,我们已经分发了 MySQL 数据库,它服务于主服务器的写入和读取并复制 MySQL 实例。让我们看看如何使用 CAP 定理来定义此 MySQL 设置。由于我们的数据库设置是分布式的,默认情况下它是分区容忍的,这意味着当某些节点发生故障时,系统应该处理一些客户端请求。

在上面的例子中,我们没有对数据库进行分区。相反,我们仅添加了复制来扩展读取请求。如果主节点发生故障,副本实例可用于服务读取请求。这与之前的单实例设置有点不同。CAP定理指出,在分布式系统中,我们只能选择一致性或可用性。

选择一致性或可用性

假设我们的数据库系统要求高度一致。当客户端发出请求时,它应该随时返回最新的数据。让我们考虑一个将记录写入主数据库的简单场景。

 如果副本机器不可用,那么主数据库有两种选择,

  • 它可能会向客户端返回错误。(同步)
  • 可以将数据写入本机并成功返回。(异步) 

如果我们选择第一个选择,我们会将错误返回给客户端。如果主实例和副本实例之间发生网络分区,我们的系统将保持高度一致。由于主实例和副本实例具有相同的数据,因此我们的客户端将读取最近的写入。我们的系统现在更多的是CP。

如果我们选择第二个选择,我们的系统将具有高可用性。它将向我们的客户端返回成功的响应并将写入存储到我们的本地计算机。我们的写入将在稍后的时间点异步复制。同时,如果写入主实例的客户端从副本实例中读取数据,它可能会也可能不会看到最新的数据。这是由于网络分区或网络故障导致异步复制延迟。

我们的系统现在更像是一个 AP,因为由于主服务器和副本服务器之间的网络分区,我们的客户端可能看不到只读副本中的最新数据。

在分布式系统中,不可能实现 CAP 的所有三个属性。我们只能选择其中的任意两个CAP,例如CA、CP、AP。CA没有任何意义。在大多数情况下,分布式系统是分区容忍的。所以,我们要么选择CP,要么选择AP。

当我们选择上例中的第一个选项来选择CP时,并不是说我们的系统将不可用。当主实例无法连接到副本实例时,我们的数据库将无法响应写入。在这种情况下,我们更看重一致性而不是可用性。

我们可以将分布式系统称为 CP 或 AP,因为这些属性在某些场景(例如网络故障)中受到青睐。在这里,我们不能牺牲 P(分区容错性),因为分布式系统默认是分区容错的。 

因此,如果没有 P,我们就无法构建任何分布式系统。我们必须支持 C (CP) 或 A(AP) 来定义我们的系统。

结论

在本文中,我们了解了 CAP 定理以及如何使用它来定义分布式系统的属性。当我们构建分布式数据库、缓存、存储等时,我们可以选择决定我们的系统应该如何表现。无论是在某些场景下必须支持一致性还是可用性,在本文中,我们已经了解了分布式 MySQL 只读副本的属性以及在网络故障期间我们可以从中得到什么。


更多技术干货请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

irds.cn,多数据库管理平台(私有云)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/206566.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【驱动】串口驱动分析(一)-软件架构

区分不同的终端类型 串行端口终端(/dev/ttySn) 串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。 有段时间这些串行端口设备通常被称为终端设备&#xff0…

Redis哈希对象(listpack介绍)

哈希对象的编码可以是ziplist或者hashtable。再redis5.0版本之后出现listpack,为了是代替ziplist。 一. 使用ziplist编码 ziplist编码的哈希对象使用压缩列表作为底层实现,每当有新的键值对要加入到哈希对象时,程序都会先将保存了键值对的键…

el-table实现动态表头

1.1el-table渲染 <el-tableref"refreshTable":data"tableData"highlight-current-row><el-table-columnfixedwidth"170px"label"测点"align"center"prop"测站名称"/><el-table-column label"…

万户ezOFFICE wpsservlet任意文件上传漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品&#xff0c;统一的基础管理平台&#xff0c;实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台&#xff0c;将外网信息…

位图和布隆过滤器(C++)

位图和布隆过滤器 一、位图1. 引入2. 概念3. 代码实现setreset完整代码 4. 位图的应用 二、布隆过滤器1. 引入2. 概念3. 逻辑结构4. 特点5. 代码实现6. 布隆过滤器的应用 三、哈希切割 一、位图 1. 引入 当面对海量数据需要处理时&#xff0c;内存不足以加载这些数据&#xf…

C语言二叉树与堆的实现(一)

目录 二叉树 二叉树的分类&#xff08;目前只谈两种&#xff09; 满二叉树 完全二叉树 二叉树的性质&#xff08;其余的可以自己总结&#xff09; 选择练习 二叉树的存储结构 顺序存储方式 链式存储方式 一种完全二叉树&#xff1a;堆 堆的概念 堆的性质 建堆的时…

Windows本地搭建Emby媒体库服务器并实现远程访问「内网穿透」

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力应用场景之一&…

OpenCvSharp从入门到实践-(06)创建图像

目录 1、创建图像 1.1实例1-创建黑色图像 1.2实例2-创建白色图像 1.3实例3-创建随机像素的雪花点图像 2、图像拼接 2.1水平拼接图像 2.2垂直拼接图像 2.3实例4-垂直和水平两种方式拼接两张图像 在OpenCV中&#xff0c;黑白图像其实就是一个二维数组&#xff0c;彩色图像…

GCN01——Ubuntu中设置vivado编辑器为vscode

确定vscode位置 在命令行中输入 which code得到文件地址 进入文件夹后可看到&#xff0c;这是个链接文件&#xff0c;不过无所谓&#xff0c;就用这个地址就行 设置Text Editor 打开setting选择右侧text editor 这里说明了如何进行设置 将自己的地址加进去就行 /usr/share…

Springboot快速整合kafka

kafka的基本了解 kafka也是 目前常用的消息中间件,支持同步与异步通信,和rabbitmq一样,工作模式大概相同,并且被spingboot整合的后的都是 中间件Template的实列化客户端类 ,消费者监听注解为KafkaListener,和RabbitListener和很相似,这些消息中间件使用过后,发现大致都是相同的…

SS6811H38V/1.6A 两通道 H 桥驱动芯片

SS6811H 为舞台灯光和其它电机一体化应用 提供一种双通道集成电机驱动方案。SS6811H 有 两路 H 桥驱动&#xff0c;每个 H 桥可提供最大输出电流 1.6A (在 24V 和 Ta 25C 适当散热条件下)&#xff0c;可驱 动两个刷式直流电机&#xff0c;或者一个双极步进电机&#xff0c;或 …

【shell】shell脚本编程作业

1 编写bash脚本&#xff0c;要求用户输入源目录和目标目录(绝对路径&#xff09;&#xff0c;然后列出源目录下所有的文件&#xff0c;并将这些文件拷贝到目标目录&#xff0c;并在文件名后面加上时间戳。&#xff08;提交源代码和运行截图&#xff09; if [ -d $1 ] || [ -d…

The Sandbox 携手 Sandsoft,与 Nuqtah 合作推动沙特阿拉伯的 Web3 发展

新的合作伙伴关系将增强创作者的能力&#xff0c;促进区块链生态系统的包容性。 The Sandbox 及其合作伙伴 Sandsoft 是移动游戏开发商和发行商&#xff0c;也是 AAA 人才驱动的投资者&#xff0c;他们非常高兴地宣布与 Nuqtah 建立新的合作伙伴关系&#xff0c;Nuqtah 是中东和…

SQL Sever 复习笔记【一】

SQL Sever 基础知识 一、查询数据第1节 基本 SQL Server 语句SELECT第2节 SELECT语句示例2.1 SELECT - 检索表示例的某些列2.2 SELECT - 检索表的所有列2.3 SELECT - 对结果集进行筛选2.4 SELECT - 对结果集进行排序2.5 SELECT - 对结果集进行分组2.5 SELECT - 对结果集进行筛选…

⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)

1.这里我代码没啥问题~~~编辑器里也没毛病 void Start(){// 加载底图和上层图片string backgroundImagePath Application.streamingAssetsPath "/background.jpg";Texture2D backgroundTexture new Texture2D(2, 2);byte[] backgroundImageData System.IO.File.R…

ClassNotFoundException: org.apache.hive.spark.client.Job

hive使用的是3.13版本&#xff0c;spark是3.3.3支持hadoop3.x hive将engine从mr改成spark&#xff0c;通过beeline执行insert、delete时一直报错&#xff0c;sparkTask rpc关闭&#xff0c; 查看yarn是出现ClassNotFoundException: org.apache.hive.spark.client.Job。 开始…

Flutter应用程序加固的问题及解决方案

​&#x1f680;Flutter应用程序加固的问题及解决方案引言在移动应用开发中&#xff0c;为了保护应用程序的安全性&#xff0c;开发者需要对应用进行加固。在使用Flutter技术进行应用程序开发时&#xff0c;也需要注意应用程序的安全问题和加固方案。本文将介绍在Flutter应用程…

windows 此系统禁止运行脚本报错处理

windows 此系统禁止运行脚本报错处理 start 在命令行中运行执行的脚本&#xff0c;运行原理可以参考文章 《》本文主要介绍&#xff0c;如何处理window默认的对脚本运行的限制。 详细说明 出现报错如下&#xff1a; 主要原因就是系统默认禁止了在 powershell 环境下某些脚…

【Docker】Swarm内部的负载均衡与VIP

在Docker Swarm中&#xff0c;有两种方式可以实现内部的负载均衡&#xff1a;Service VIP和Routing Mesh。 Service VIP&#xff08;Virtual IP&#xff09;&#xff1a;Service VIP是一种基于VIP的负载均衡方式&#xff0c;它为每个服务分配一个虚拟IP地址。当请求到达Servic…

ROC曲线绘制和AUC计算

ROC曲线绘制和AUC计算 文章目录 ROC曲线绘制和AUC计算1.什么是ROC曲线&#xff1f;2.ROC曲线怎么看&#xff1f;3.怎么计算AUC&#xff1f;4.AUC的数值有什么含义&#xff1f;5.为什么要采用TPR和FPR来做ROC曲线6.TPR、FPR与灵敏度、特异性的关系是什么&#xff1f;7.ROC曲线在…