IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 分布式基础-CAP定理的含义 -> 正文阅读

[大数据]分布式基础-CAP定理的含义

分布式基础-CAP定理的含义

随着微服务的发展,分布式系统(distributed system)正变得越来越重要,java后端系统多是分布式系统,很少有单机部署了。

在引入分布式系统的同时,也带来了复制性,只有了解了分布式系统的基本定理,才会明白引入分布式系统会带来哪些问题?以及如何去解决。

可以这么说,CAP定理是理解分布式系统的起点。

如果想要更深入的了解,可以参考Seth Gilbert;Nancy A. Lynch 的论文 Perspectives on the CAP Theorem

一.分布式系统的三个指标

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance(分区容错)

取首字母分别为:C、A、P,CAP定理简单的说,就是分布式系统不能同时满足三个指标。

1.1 Partition tolerance(分区容错)

大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。

Partition tolerance 的含义是:区间通信可能失败,比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。

对于分布式系统,区间通信无法保证一定成功,分区容错无法避免。即CAP中的P一定存在,CAP定理告诉我们,剩下的C和A,无法同时成立。

1.2 Consistency(一致性)

Consistency的含义是:在写操作之后,在访问分布式系统中任一节点查询数据的时候,都是最新的数据。

假设分布式系统中有两个节点:S1和S2,每个节点都存储一个变量V0,这时候客户端client开始对S1进行写操作,更新V0 -> V1,然后S1更新完成会通知client。

这时候,很明显是不满足一致性的,由于S2节点变量value还是V0,假如client在write操作完成之后,read操作S2节点,value还是V0,不是最新的V1。

因此为了满足一致性,S1节点在将变量V0更新为V1之前,会先锁定S2节点的读写操作,在将S1节点变量更新为V1之后,会通知S2更新变量为V1,S2更新成功会通知S1,S1在确保S1、S2节点都更新成功之后,解锁S2节点的读写操作,并返回client更新成功。

具体操作如下图所示:

在这里插入图片描述

此时就是满足一致性的分布式系统。

1.3 Availability(可用性)

Availability的含义是:任何时候,client向任意一个节点S1或者S2发送请求,都能立马得到响应,不管获得的数据是V0还是V1。

二.分布式系统中Consistency 和 Availability 为啥不能同时满足

一致性和可用性,为什么不可能同时成立?答案很简单,因为可能通信失败(即出现分区容错)。

如果保证 S2 的一致性,那么 S1 必须在写操作时,锁定 S2 的读操作和写操作。只有数据同步后,才能重新开放读写。锁定期间,S2 不能读写,可用性无法满足。

如果保证 S2 的可用性,那么势必不能锁定 S2,所以一致性不成立。

综上所述,S2 无法同时做到一致性和可用性。系统设计时只能选择一个目标。如果追求一致性,那么无法保证所有节点的可用性;如果追求所有节点的可用性,那就没法做到一致性。即要么AP,要么CP。

引用:
1.https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
2.https://www.ruanyifeng.com/blog/2018/07/cap.html
3.https://blog.csdn.net/hzygcs/article/details/86534670

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:14:07  更:2021-09-12 13:15:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:47:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码