博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CAP定理
阅读量:6170 次
发布时间:2019-06-21

本文共 1239 字,大约阅读时间需要 4 分钟。

一、简介

互联网高速发展,数据量爆发增长,传统的单体应用已经不能满足需要了,这时候分布式系统就应运而生。在分布式系统中,常常提到CAP定理,这个定理也成为了理解分布式应用的起点。

 

二、CAP

那么CAP定理指的是什么呢?

1)C:consistency,即一致性

2)A:availability,即可用性

3)P:partition tolerance,分区容错性

我们先来看看,这几个词汇分别表示什么意思

1、一致性

一致性就是要求在写操作完成后,读操作必须返回写操作的值。

例如:

  system1和system2分别部署在不同服务器上,system1讲用户user1的名字从marry修改为lay,那么system2在读取数据的时候,必须返回lay

2、可用性

可用性就是当对任意系统发起请求,系统必须响应结果

例如:

  system1和system2分别部署在不同的服务器上,用户随机对system1发送请求或者对system2其中一台发送请求,那么对应的系统必须响应结果。

3、分区容错性

分区容错的意思就是分布式系统中的不同服务器之间的通信可能失败,而系统设计必须考虑到这种情况。

例如:

  system1和system2分别部署在不同的服务器上,system1对system2发起调用请求,而由于网络等硬件设备问题system1无法调用system2。

 

三、CAP定理为何不能同时成立?

理解CAP的关键点在于理解CAP定理为何三个指标不能同时成立,也就是说理论上在分布式系统中你可能实现:CA、CP、AP其中一种,但是无法实现CAP同时成立。针对现实角度来说,CAP定理的P(分区容错性)几乎是一定成立的,因为网络不稳定,硬件问题...等因素是无法避免的。所以我们考虑的是选择CP(一致性、分区容错性)组合、还是AP(可用性、分区容错性)组合。

那为什么C(一致性)和A(可用性)相互排斥呢?

我们思考两种情况:

1、保证C(一致性)

  system1和system2分别部署在不同的服务器上,如果要保证一致性,那么system1在执行写操作的时候就必须防止system2同时出现读写操作,所以我们必须把system2锁定,等到写入完毕了才允许进行读写,来达到一致性的目的。

  可是,在system2被锁定的时候,如果用户对system2发起请求,将无法响应结果,也就违反了可用性原则。

2、保证A(可用性)

  那么如果保证可用性呢?

  system1和system2分别部署在不同的服务器上,由于我们要保证可用性,那么也就不能在写入的时候对另外一台进行加锁。也就意味着,可能出现两台同时执行的情况,那么数据也就无法保证一致性。

这两种情况说明,在分区容错性成立的情况下,保证一致性就无法保证可用性,保证可用性就无法保证一致性。

 

参考文章:

转载于:https://www.cnblogs.com/lay2017/p/9589572.html

你可能感兴趣的文章
Nginx + CGI/FastCGI + C/Cpp
查看>>
学习笔记------jsp页面与jsp标记
查看>>
DS博客作业02--线性表
查看>>
第三届ACM山东省赛I题_Chess_STL
查看>>
jQuery each和js forEach用法比较
查看>>
前端笔记-作用域链的一些理解加记录(JS高级程序设计读书笔记1)
查看>>
改造你的网站,变身 PWA
查看>>
Leetcode 142. Linked List Cycle IIJAVA语言
查看>>
网络基础5
查看>>
Exchange Supported operating system platforms
查看>>
unity3鼠标点击移动
查看>>
Linux 安装中文包
查看>>
谷物大脑
查看>>
访问控制-禁止php解析、user_agent,PHP相关配置
查看>>
AgileEAS.NET之系统架构
查看>>
python3.5里的正则表达式
查看>>
Exchange server 2013 SP1 客户端会议室邮箱自动回复延迟
查看>>
nginx反向代理缓存服务器构建
查看>>
RHEL6 搭建LVS/DR 负载均衡集群 案例
查看>>
以太坊·Rinkeby 测试网络
查看>>