CAP理论是指在分布式系统设计中,没有一种设计可以同时满足Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)3个特性,这三者不可得兼。
CAP即:
在分布式系统中,对于不同客户端的每次读操作,要么读到的是最新的数据,要么读取失败,保证在同一时刻读到的值都是一样的,通俗的讲就是要么返回一个错误,要么返回绝对一致的最新数据,其强调的是数据正确。
要求服务在接受到客户端的请求后,都能够给出响应,服务可用性考量的是系统的可用性,要求系统在高并发和部分节点宕机的情况下,系统整体依然能够响应客户端的请求。通俗的讲我一定会给出响应,不会给你返回错误,但不保证数据是最新的,强调的是不出错。
在分布式系统中,不同节点之间通过网络进行通信,基于网络的不可靠性,位于不同网络分区的节点可能会通信失败,如果系统能够容忍这种情况,说明它是满足分区容错性的。通俗的讲就是不管我的内部出现何种数据同步问题,我会一直运行,强调的是不挂掉。
对于一个分布式系统而言,首先要满足分区容忍性,因为只要有网络交互就一定会有延迟和数据丢失,这种情况我们必须接受,必须保证系统不能挂掉,否则分布式系统的扩展将会受到限制,即服务节点的部署数量和地区将会受限,违背了分布式系统设计的初衷,所以一般来讲分布式系统都会满足分区容忍性,所以只剩下C、A可以选择,要么保证数据一致性,要么保证可用性。那么我们怎么来权衡选择呢?选择的关键点取决于业务场景。
举例:
假设有两个实例A1和A2,它们之间的网络通信出现了异常,基于分区容忍性,这并不会影响A1和A2的独立正常运行,如上图示例1,若此时用户1请求A1修改某数据,用户2请求节点2访问数据且返回了更新前的数据,这将满足服务可用性,但并不能满足数据一致性。如示例2,如果A2需要等待A1的通知后才返回正确的数据,虽然满足了数据一致性,但无法响应客户端请求,违背了服务可用的指标。
既然一个分布式系统无法同时满足一致性、可用性、分区容错性三个特点,所以我们就需要抛弃一样:
放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择。
放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,是大多数互联网应用的选择,因为机器数量庞大,部署节点分散,网络故障是常态,可用性是必须保证的。
放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用。如银行等对数据一致性要求比较高的系统。
Redis持久化机制(面试考点)与位图API
爬虫--识别验证码
TZYLT's 2024CSP-S游记
「CSP2024」游记
js模拟构造函数的实现过程
god father
划水
命令拼接技巧
SD NAND 与 SPI NAND
C语言中的编译过程详解
step7 V5.x上的SCL
yolo --- 核心思想
一些学科笑话
NOIP2024模拟赛20 & 11.1 小记
20241101 数据结构与算法期中机试收获
什么是IT技术
即将到来!
舍得-时间-工作是人的一生最重要的事情-自己要有私房钱-人的一生最重要的事情是书写自己的人生
2.TiUP 部署 DM 集群
ubuntu 24.04 部署 mysql 8.4.3 LTS
Fiddler抓包Android7以内版本
【游记】CCPC 济南 2024 游记
AJAX & AXIOS-2024/11/1
验证码处理在自动化测试中的应用
Java,启动!
2024/11/1日 日志 关于JavaScript简介&引入方式 以及基础语法的学习
原型模式的C++实现
python bytecode解析
09-XSS键盘监听、cookie窃取&文件上传绕过
Ethernaut Level 11: Elevator Attack and Blockchain Interaction
快速部署开源spug运维平台的Docker安装指南
驱动调试之printk的原理与使用
计算机思维模型及其应用
华为云发布代码大模型PanGu-Coder2,实现高效代码生成
Linux多硬盘数据存储和分区操作
构建高可用架构: 分层冗余与自动故障转移
LoRA:高效调参的大语言模型适应方法
《分布式系统的基本原理及互联网分层架构的本质》
Hadoop写流程解析
Java架构师的系统架构设计方法论中的规范要点
使用observeDOM解决BetterScroll插件在移动端无法滑动的问题
互联网一致性架构设计实践
高并发系统架构与水平扩展
混合应用的崛起:跨平台开发取代原生应用