大白话图文结合的方式讲解什么是CAP
编程界的小学生
- 一、什么是CAP
- 二、细说CAP
- 三、CAP组合
- 1、CP
- 2、AP
- 3、CA
- 四、Base理论
- 五、个人公众号
一、什么是CAP
是一种定理,多用于描述分布式架构,CAP这三个字母对应三种理念,且这三种理念只能两两组合,不能CAP三种理念同时共存(为什么?下面说)。
- C:Consisteny(一致性)
- A:Availability(可用性)
- P:Partition Tolerance(分区容错性)
二、细说CAP
- C:Consisteny(一致性),比如数据库是主从模式,一个写库请求进来了,master库完成了写入操作,但是再slave同步数据之前,另一个用户查了这条数据,结果没查到,但是也没报错,这就不是强一致性。虽然最终会同步成功,但这是最终一致性的体现。强一致性的体现在于我不管你因为什么没同步成功(可能网络延迟或其他等),只要没同步成功,我这个slave就不能对外提供服务。必须主从数据一致才可以提供服务。(很少有做到这点的)
- A:Availability(可用性),还是上面的例子,就是保证了可用性。因为虽然主从没同步完成,但是我从库照样能提供服务而且及时响应结果。也就是说可用性保证服务可用,而不在乎数据是否一致。明显和C是冲突的,那CA怎么还能组合到一起?后面说。
- P:Partition Tolerance(分区容错性),集群部署了三台服务。挂了一台,其他两台还能继续对外提供服务,这时候我就认为他是没问题的,也就是我能容忍你挂了一台,只要还有服务能对外提供请求即可。所以一般分区容忍性是必须的,一般都需要从C和A之间做选择。
三、CAP组合
1、CP
即一致性和分区容忍性。
把节点A和节点B理解成mysq主从的话,那么就是A和B之间不能互相通讯,网络出问题了,当有客户端向A写入msg1的时候,会直接失败,因为C要保证A和B两个节点之间的数据强一致性。
假如有另一个客户端向B节点进行读取msg2消息的时候,B返回是成功的,因为msg2节点是A和B之间网络通顺时存在的老数据,数据是一致的。这就是虽然你A不可用,但是我B还能提供服务,这就保证了分区容忍性。
2、AP
即可用性和分区容忍性。
节点A和B之间不能互相通讯,当有客户端向A节点写入msg1的时候,节点A允许 写入,请求操作成功,但此时由于A和B不能通信,所以导致B节点的msg1的数据是旧的,或者根本不存在。但是另一个客户端向B节点读取msg1的时候是可以成功的,要么读到的是旧数据要么读取不到。但是服务是可用的,只是数据可能有问题。这就保证了可用性,舍弃了强一致性。
3、CA
CA的话我只能想到单机上是可以保证的,一台机器数据肯定一致,服务肯定可用。不可用的时候服务也不能用,也能保证一致性。单台机器也没有分区容错性的概念。所以完美CA。
四、Base理论
Base理论是对CAP理论的延申,核心思想就说既然无法做到强一致性(CAP中的C),但是可以采取合适的方式达到最终一致性。
Base的全称是:Basically Available(基本可用)、Soft State(软状态)、Eventual Consistency(最终一致性)。
- Basically Available(基本可用)
指分布式系统再出现故障的时候,允许损失部分可用性,即保证核心可用。比如电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务,这就是损失部分可用性的体现。
- Soft State(软状态)
指系统允许存在中间状态,而这个中间状态不会影响系统整体可用性。比如分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延迟就是软状态的体现。
- Eventual Consistency(最终一致性)
指系统中的所有数据副本经过一定时间后最终能够达到一致的状态。也是弱一致性的体现。
五、个人公众号
微信公众号【Java码农社区】
大白话图文结合的方式讲解什么是CAP相关推荐
- 两种可以支持跨域的方式 - 讲解篇
针对项目:vue.js + Express 本例的vue.js项目使用Express框架作为后台数据服务端 什么叫做跨域? 通常情况下是指两个不在同一域名下的页面无法进行正常通行,或者无法获取其他域名 ...
- Android系统 (190)---Android:JSON 简介 amp; 解析方式 讲解(Gson、AS自带org.json、Jackson)
Android:JSON 简介 & 解析方式 讲解(Gson.AS自带org.json.Jackson) 前言 现今最主流的数据交换格式 非 JSON莫属 今天,我将全面介绍 JSON &am ...
- javascript 设计模式_用英雄联盟的方式讲解JavaScript设计模式(二)
前言 大家好,这是第三篇作者对于设计模式的分享了,前两篇可以参考: 手写一下JavaScript的几种设计模式 (工厂模式,单例模式,适配器模式,装饰者模式,建造者模式) 用英雄联盟的方式讲解Java ...
- mysql select count() count(1)_select count()和select count(1)的区别和执行方式讲解
select count()和select count(1)的区别和执行方式讲解 发布时间:2020-09-06 13:26:14 来源:脚本之家 阅读:227 作者:CODETC 在SQL Serv ...
- 3dmax最全选择方式讲解
3dmax最全选择方式讲解 在用3dmax建模工作中有一大半的时间是在进行各种选择,活用选择方式会很大提高工作效率. 选择方式在主菜单栏位置:在编辑菜单中.主要分为点击选择,区域选择(框选),按名称选 ...
- 用通俗易懂的方式讲解:主成分分析(PCA)算法及案例(Python 代码)
文章目录 知识汇总 加入方式 一.引入问题 二.数据降维 三.PCA基本数学原理 3.1 内积与投影 3.2 基 3.3 基变换的矩阵表示 3.4 协方差矩阵及优化目标 3.5 方差 3.6 协方差 ...
- 移动电源当中的自动检测负载方式讲解
本文引用地址: http://power.21ic.com//ce/technical/201603/46836.html 移动电源当中的自动检测负载方式讲解 时间:2016-03-29 来源: 随着 ...
- 用通俗易懂的方式讲解:CatBoost 算法原理及案例
文章目录 知识汇总 解惑答疑 1.梯度提升概述 2.什么是 CatBoost 3.CatBoost 的主要特点 01 对称树 FloatFeature OneHotFeature OnlineCtr ...
- RTC芯片——DS1302驱动方式讲解(附代码)
RTC芯片--DS1302驱动方式讲解(附代码) 最近的一个项目中用到了DS1302rtc芯片,中间弯弯绕绕也费了点时间,好在最后还是成功搞定,现做一下总结,希望能让各位少走些弯路. 写代码前所需了解 ...
- map容器对象插入数据的4种方式讲解
map容器对象插入数据的4种方式讲解 map容器对象插入数据的4种方式 #include <string> #include <iostream> #include < ...
最新文章
- 跨平台PHP调试器设计及使用方法——探索和设计
- D3.js比例尺 定量比例尺 之 线性比例尺(v3版本)
- 机器学习实战-贝叶斯算法-24
- Navicat远程连接linux下mysql服务器1045错误解决办法在这儿
- 不使用任何路由协议使3台路由器通信
- .Net下几种日志管理方法
- mysql数据库优化skip_优化配置mysql数据库优化
- Salesforce.com + AutoCAD WS集成研究集锦
- (五)ThinkPHP实践之Session驱动-TTLSA
- java使用d3_D3 快速入门指北
- 信息学奥赛一本通c++【1033】
- IntelliJ配置jenkins服务的Crumb Data
- 软装和硬装又有哪些不同?
- 企立方:拼多多关键词出价多少合适
- ubuntu中搜狗输入法怎么翻页
- 炼丹志 | 2021显卡挑选指南
- 思维导图02----Java面向对象
- 【UNIAPP】APP快速免费生成一键发布页面
- 备用内存 释放_Windows备用内存过大问题分析
- 通过自定义ServiceHost实现对WCF的扩展[实例篇]
热门文章
- 计算机专业考信息安全研究生,我是计算机科学与技术专业的学生,想考信息安全的研究生,我们本专业涉及的知识主要是计算机的组成原理,...
- PVE系列教程(七)、安装iKuai软路由
- 模数转换器ADC的常用术语和主要技术指标(一)
- Shopee卖家如何布局产品合理定价,新手必知的定价策略
- EOF是什么意思以及怎么输入
- 基于python-实现仿天眼查-企查查-完整源码
- c语言混合运算优先级判断,《C语言解惑》—— 3.1 混合运算要小心
- pcap报文80211-8023区别
- 贝尔商道赚钱思维36道第04道:二八定律,约仅有20%的因素影响80%的结果
- 魔兽世界WOW服务器端的模拟器【2010】