首页 > 其他分享 >CAP理论

CAP理论

时间:2023-06-03 16:03:56浏览次数:28  
标签:可用性 理论 CAP 容错性 分布式系统 一致性 分区

什么是CAP理论

CAP理论是指在分布式系统设计中,没有一种设计可以同时满足Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)3个特性,这三者不可得兼。

 

 

CAP即:

  • C:Consistency(一致性)
  • A:Availability(可用性)
  • P:Partition tolerance(分区容忍性)

一致性(C)

在分布式系统中,对于不同客户端的每次读操作,要么读到的是最新的数据,要么读取失败,保证在同一时刻读到的值都是一样的,通俗的讲就是要么返回一个错误,要么返回绝对一致的最新数据,其强调的是数据正确。

可用性(A)

要求服务在接受到客户端的请求后,都能够给出响应,服务可用性考量的是系统的可用性,要求系统在高并发和部分节点宕机的情况下,系统整体依然能够响应客户端的请求。通俗的讲我一定会给出响应,不会给你返回错误,但不保证数据是最新的,强调的是不出错。

分区容忍性(P)

在分布式系统中,不同节点之间通过网络进行通信,基于网络的不可靠性,位于不同网络分区的节点可能会通信失败,如果系统能够容忍这种情况,说明它是满足分区容错性的。通俗的讲就是不管我的内部出现何种数据同步问题,我会一直运行,强调的是不挂掉。

CAP 怎么选择

对于一个分布式系统而言,首先要满足分区容忍性,因为只要有网络交互就一定会有延迟和数据丢失,这种情况我们必须接受,必须保证系统不能挂掉,否则分布式系统的扩展将会受到限制,即服务节点的部署数量和地区将会受限,违背了分布式系统设计的初衷,所以一般来讲分布式系统都会满足分区容忍性,所以只剩下C、A可以选择,要么保证数据一致性,要么保证可用性。那么我们怎么来权衡选择呢?选择的关键点取决于业务场景。


举例:

假设有两个实例A1和A2,它们之间的网络通信出现了异常,基于分区容忍性,这并不会影响A1和A2的独立正常运行,如上图示例1,若此时用户1请求A1修改某数据,用户2请求节点2访问数据且返回了更新前的数据,这将满足服务可用性,但并不能满足数据一致性。如示例2,如果A2需要等待A1的通知后才返回正确的数据,虽然满足了数据一致性,但无法响应客户端请求,违背了服务可用的指标。

既然一个分布式系统无法同时满足一致性、可用性、分区容错性三个特点,所以我们就需要抛弃一样:

CA

放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择。


AP

放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,是大多数互联网应用的选择,因为机器数量庞大,部署节点分散,网络故障是常态,可用性是必须保证的。

CP

放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用。如银行等对数据一致性要求比较高的系统。

总结

  • CAP理论是在设计分布式系统的过程中,处理数据一致性问题时必须考虑的理论。
  • 在分布式系统中,P是前提,本质上是对C、A的选择,可根据实际情况进行权衡。

 

 

标签:可用性,理论,CAP,容错性,分布式系统,一致性,分区
From: https://www.cnblogs.com/fulaien/p/17454081.html

相关文章

  • 卡尔曼滤波器理论基础
    强推DR_CAN的视频教学,讲的很清楚,而且例子举得也很通俗易懂。[点击这里跳转](https://www.bilibili.com/video/BV1ez4y1X7eR/?spm_id_from=333.788&vd_source=c2b3fa1e2440ee7e7443aca0df4fb0bb)###1.本质:递归算法引入一个情景,有一个人拿一个尺子去测量一个硬币的直径。共测量......
  • Cookie的理论基础
    1. 简单Cookie介绍   46session的实现原理中,每一个session对象都会关联一个sessionid,例如:  - JSESSIONID=41C481F0224664BDB28E95081D23D5B8  - 以上的这个键值对数据其实就是cookie对象。 - 对于session关联的cookie来说,这个cookie是被保存在浏览器的“运行内存”当......
  • Blockchain 理论基础
    1.区块链理论基础区块链,是技术.本质上是一个分布式账本系统,需要通过共识机制来确保网络中的节点对账本数据的状态达成一致,以实现去中心化和安全性起源 2008年,雷曼兄弟倒闭.后两周 中本聪,论文<比特币:点对点的电子现金系统> 区块链技术,就是点对点的解决方案4......
  • linux Capabiltiy 示例——以前只有root和普通用户两种权限,root的权限太大了,现在有了c
    Capabiltiy示例Capability的设定和清除下面的示例程序给当前的进程设定Capability,最后我们清除掉所设置的Capability,源代码如下:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/types.h>#include<unistd.h>#include<sys/capability.h>exter......
  • [email protected] install: `node-gyp rebuild`
    异常:首先检查系统环境变量NODE_PATH值是否设置正常路径下是否有node-gyp包若是没有就执行以下命令npminstall-gnode-gyp......
  • Tcpreplay重放pcap包, tcprewrite编辑pcap文件
    Tcpreplay是一种pcap包的重放工具,它可以将tcpdump和Ethereal/Wireshark等工具捕捉到的网络流量包进行编辑修改和重放.重写Layer2、3、4层数据包,并将流量重新发送至目标网络,这样通过重放网络流量包从而实现复现问题情景以定位bugtcpreplay本身包含了几个辅助工具(tcpprep、tcpr......
  • Spider理论系列--Redis(值得类型)
    Redis值的类型字符串String哈希hash列表list集合set有序集合zset数据操作的全部命令:http://redis.cn/commands.htmlconfiggetdatabases查看所有的数据库数据库以0开始一共16个(1)String概述:String是redis最基本的类型,最大能存储512MB的数据,String类型是二进制安全的,即可......
  • dnscapy使用——本质上是建立ssh的代理(通过dns tunnel)
    gitclonehttps://github.com/cr0hn/dnscapy.giteasy_installScapy服务端:pythondnscapy_server.pya.friendsxxx.com45.77.39.xxx客户端:ssh-oProxyCommand="sudopythondnscapy_client.pya.friendsxxx.com45.77.39.xxx"[email protected]其中:a.friendsxxx.com是......
  • 代码随想录算法训练营第六天|哈希表理论基础、242.有效的字母异位词两个数组的交集、2
    242.有效的字母异位词力扣题目链接(opensnewwindow)给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。示例 1:输入:s="anagram",t="nagaram"输出:true示例2:输入:s="rat",t="car"输出:false说明: 你可以假设字符串只包含小写字母。思路:......
  • Spider理论系列--MongoDB(二)
    六、INSERT使用insert db.集合名.insert(文档)#如果是添加数据建议使用insert插入多条数据: db.集合名.insert([文档])#注意一定要加[]否则可能只会把第一条文档插入进去db.user.insert({'name':'lisi','age':20})db.user.insert([{'name':'lisi','age':......