首页 > 其他分享 >CAP原则

CAP原则

时间:2023-06-06 10:32:34浏览次数:31  
标签:可用性 原则 CAP 查询 分布式系统 一致性 数据

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)

可用性(A):保证每个请求不管成功或者失败都有响应。

分区容忍性(P):系统中任意信息的丢失或失败不会影响系统的继续运作。

CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。如果在某个分布式系统中数据无副本, 那么系统必然满足强一致性条件, 因为只有独一数据,不会出现数据不一致的情况,此时C和P两要素具备,但是如果系统发生了网络分区状况或者宕机,必然导致某些数据不可以访问,此时可用性条件就不能被满足,即在此情况下获得了CP系统,但是CAP不可同时满足

因此在进行分布式架构设计时,必须做出取舍。当前一般是通过分布式缓存中各节点的最终一致性来提高系统的性能,通过使用多节点之间的数据异步复制技术来实现集群化的数据一致性。通常使用类似 memcached 之类的 NOSQL 作为实现手段。虽然 memcached 也可以是分布式集群环境的,但是对于一份数据来说,它总是存储在某一台 memcached 服务器上。如果发生网络故障或是服务器死机,则存储在这台服务器上的所有数据都将不可访问。由于数据是存储在内存中的,重启服务器,将导致数据全部丢失。当然也可以自己实现一套机制,用来在分布式 memcached 之间进行数据的同步和持久化,但是实现难度是非常大的

可用的抉择

编辑播报

CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地。

  1. 数据库事务一致性需求  很多web实时系统并不要求严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求并不高。允许实现最终一致性。
  2. 数据库的写实时性和读实时性需求  对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说发一条消息之 后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。
  3. 对复杂的SQL查询,特别是多表关联查询的需求  任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角 度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。



标签:可用性,原则,CAP,查询,分布式系统,一致性,数据
From: https://blog.51cto.com/u_4018548/6422733

相关文章

  • Java的先行发生原则
    先行发生原则(Happens-Before)是Java内存模型定义的一个等效判断原则。依赖这个原则,我们可以通过几条简单规则判断数据是否存在竞争,线程是否安全,而不需要陷入Java内存模型苦涩难懂的定义之中。“先行发生”原则指的是什么。比如说操作A先行发生于操作B,其实就是说在操作B发生......
  • 项目设计原则(新增用户故事)
    用户故事:(1):角色:作为一个上班人员我每天需要从家里到公司开车,我想要各个地区的计价收费以及路况情况。(2):需求:计时收费:根据用户租赁的总体时长进行计算收费。路程收费:根据用户的开车总路程进行计算收费。(3)商业价值:①第一要务肯定是要考虑如何盈利,只有保证自身不断发展,才能推出......
  • Kubescape入门
    Kubescape是一个K8sopen-source工具,提供multi-cloudK8s单层玻璃,包括风险分析、安全合规性、RBAC可视化工具和图像漏洞扫描。Kubescape在CI/CD管道的早期阶段扫描K8s集群、YAML文件和HELM图表,根据多个框架(例如NSA-CISA、MITREATT&CK®)、软件漏洞和RBAC(role-based-access-control)......
  • Jmeter函数助手41-unescapeHtml
    unescapeHtml函数用于将HTML转义过的字符串反转义为Unicode字符串。Stringtounescape:填入字符 1、escapeHtml函数是将字符进行HTML转义,unescapeHtml函数函数则是将HTML转义过的字符反转,unescapeHtml函数和escapeHtml函数功能刚好相反。${__unescapeHtml(value="hello"+"w......
  • CAP理论
    什么是CAP理论CAP理论是指在分布式系统设计中,没有一种设计可以同时满足Consistency(一致性)、Availability(可用性)、Partitiontolerance(分区容错性)3个特性,这三者不可得兼。  CAP即:C:Consistency(一致性)A:Availability(可用性)P:Partitiontolerance(分区容忍性)一致性(C)......
  • Blender+kanzi 变换归原则和应用窗口的变换使用方法。
    1、选中物体,ctrl+a 弹出 应用窗口,选择应用旋转,它会把变换的窗口数值都归0.同理其他的也是一样。这个操作会把模型的轴心回归到blender画面的中心点儿。 如果不归0的话,导入到kanzi里面,模型就跟kanzi里的不一致。 2、移动物体到左上角,设置原点到几何中心。ctrl +a 全......
  • SOLID设计原则
    单一责任原则(SRP)一个类只能有一个职责(一个功能)![U7I(QNLB{I@T{RHTHJ4)22.png例子:支付接口(支付有非常多中方式但是每一种方式都是支付)此时就需要让抽象类去调用需要调用的类,而不是调用一个类,类中包含的非常多的功能优点:减少类中不相关功能的代码耦合,使得类更加的健壮;另外,单一职责原......
  • 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......