分布式系统:CAP 定理

news2024/12/30 2:12:10

欢迎来到分布式系统系列。在本文中,我们将学习并理解什么是 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,多数据库管理平台(私有云)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐

摘 要 随着时代的不断更新,社会的不断变换,信息技术的飞速发展,计算机科技技术也逐步走向成熟。图书馆管理系统对于当今社会来说是必不可少的一个信息组成部分,它可以管理大量图书、大量读者、让读者有条不紊的进行借阅图书&#…

易石无代码开发:电商平台连接CRM与客服系统,实现营销自动化

易石无代码开发的优势 易石软件以其强大的无代码开发平台,为电商企业提供了一种全新的业务集成手段。在激烈的市场竞争中,电商平台必须不断优化其运营效率和客户服务质量。易石无需复杂的API开发,通过简单的配置就能实现电商平台与CRM、客服…

Linux Centos系统安装Mysql8.0详解

本文是基于服务器Linux Centos 8.0系统 安装 Mysql8.0真实运维工作实战为例,详细讲解安装的全过程。 1,检查卸载mariadb Mariadb数据库是mysql的分支,mariadb和mysql会有冲突,所以安装Mysql前,首先要检查是否安装了m…

Xilinx FPGA——ISE的UCF时序约束

时序约束是我们对FPGA设计的要求和期望,例如,我们希望FPGA设计可以工作在多快的时钟频率下等等。 设计是要求系统中的每一个时钟都进行时序约束。 一、分组约束语法(NET、PIN、INST) TNM是最基本的分组约束语法,其语法…

如何去选择合适的线缆测试仪?CAT8网线认证测试

如何去选择合适的线缆测试仪? 如果你是第三方检测单位,系统集成商,或者线缆生产厂家,我个人建议选择福禄克DSX系列无疑是比较保险的做法,因为考虑到福禄克在国内耕耘多年所积累起来的品牌知名度和口碑,选择一款大家都…

又一张图片,还单纯吗-MISC-bugku-解题步骤

——CTF解题专栏—— 题目信息: 题目: 又一张图片,还单纯吗 作者:harry 提示:falg{} 解题附件: 解题思路: ok图片隐写问题,老三样儿:binwalk、010Editor、Stegsolve …

电话销售如何提高成功率

电话销售是一种非常有效的销售方式,睡着通信技术,互联网的发展,现在电话销售已经成为一种重要的销售方式,很多行业和领域都有使用。 虽然最终目的都是为了将产品卖出去,但是对于电话销售来说,前期寻找客户…

你知道功能测试和非功能测试有什么区别么?

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

增加3~4个独立数字脉冲发生器通道!数字化仪和AWG新增DPG功能

数字脉冲升级功能 德思特Spectrum系列全部在售数字化仪和AWG产品(包括TS-M2p,TS-M4i,TS-DN2,TS-DN6型号产品),发布了新增的数字脉冲(DPG)升级功能,于11月15日正式推出。…

VM17 启用复制粘贴

一、方法1 1、关闭虚拟机 2、右击虚拟机,选择设置 3、点击选项,选择客户机隔离,勾选启动复制粘贴 二、方法2 1、下载VMware Tools CDS Repository - /var/www/public/stage/session-89/cds/vmw-desktop/ws 选择对应版本的VMware Tools …

哪个软件消除笔好用?我来告诉你

全民自媒体时代,人人都是自媒体人,越来越多的人接触到修图,剪辑,制作,常常在社交媒体上分享美食制作教程,居家好物,影视混剪,小说解说等各种各样的精彩照片,但是在网上找的图片素材往…

msvcp140.dll的解决方法有哪些。详细解析五种可以修复msvcp140.dll丢失的方法

引言: 在日常使用电脑的过程中,我们可能会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。那么,什么是msvcp140.dll文件?它的作用是什么?当它丢失时会对电脑产生什么影响?本文将详细介绍…

windows配置使用supervisor

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、使用步骤1.安装supervisor-win2.配置supervisord3.配置program4.启动supervisord.exe5.supervisorctl.exe管控 二、后台启动总结 前言 windows使用supervi…

一篇博客读懂完全二叉树——堆

目录 一、二叉树的概念及结构 2.1 二叉树概念 2.2 特殊的二叉树: 2.3 二叉树的存储结构 二、二叉树的顺序结构 2.1 二叉树的顺序结构 2.2 堆的概念及结构 三、堆的实现 3.1 插入数据 3.1.1向上调整算法 3.1.2向下调整算法 3.2 删除数据 3.2.1向下调整…

防火墙补充NAT

目录 1.iptables保存规则 2.自定义链 3.NAT NAT的实现分为下面类型&#xff1a; SNAT实验操作 DNAT实验操作 1.iptables保存规则 永久保存方法一&#xff1a; iptables -save > /data/iptables_rule //输出重定向备份 iptables -restore < /data/iptables_r…

使用canvas实现代码雨高级升阶版【附带源码和使用方法】

文章目录 前言基本绿色的彩色版本飘散雪花状后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端面试 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&…

cs11C programming language

cs11C programming language WeChat&#xff1a;yj4399_ Sina Visitor System

Stable Video Diffusion(SVD)参数使用教程

Stable Video Diffusion&#xff08;SVD&#xff09;安装和测试 官网 github | https://github.com/Stability-AI/generative-modelsHugging Face | https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xtPaper | https://stability.ai/research/stable-vid…

elk+filebeat+kafka集群部署

EFK实验架构图&#xff1a; 实现高并发&#xff0c;无需指定logstash 3台esfile&#xff0c;3台kafka 20.0.0.10 esfile 20.0.0.20 esfile 20.0.0.30 esfile 20.0.0.11 kafka 20.0.0.12 kafka 20.0.0.13 kafka在es1主机上解压filebeat cd filebeat 安装nginx服务 vim /usr/loc…

Linux系统编程:进程总结

这一章主要为进程的基本内容作一个总结&#xff0c;为后面的多进程多线程并发作一个铺垫。 进程标识符pid pid类型为 pid_t。 在涉及有关进程相关内容的时候&#xff0c;一定要熟悉 ps 命令的使用&#xff0c;该命令专门用来打印当前系统的进程信息&#xff1a; 这里经常使用…