近年来,CAP 定理已经成为分布式系统设计的基本准则之一,CAP 定理表明,任何分布式计算机系统只能同时满足一致性(Consistency),可用性(Availability)和分区容错性(Partition Tolerance)三者中的任意两个。

那么这三者的具体含义是什么呢?

一致性

当数据在多个节点上分区存储时,所有节点在某个指定时间将会看到相同的数据,并且在所有时间点都应该看到相同的数据

当客户端查询时,每个节点将返回最新的数据,否则系统将直接出错提示

一致性的保证是通过在更新多个节点数据时,同时禁止读取数据的方式来实现的

可用性

在任何时间点,对系统发起的每个请求都会产生一个有效的响应

当然,这并不意味着系统的每个请求都会收到包含最新数据的响应,可用性是通过在不同服务器节点间进行数据复制实现的

分区容错性

即使发生网络故障或者数据丢失,系统也能够连续运行

可以通过在节点和网络集群间充分的复制数据和系统功能来实现分区容错。通过这种方式引入的冗余能够确保即使在一个或者多个节点间不能互相通信的情况下,系统整体也能够持续运行

由于任何分布式系统任何时候只能同时满足 CAP 定理中的两个属性,因此,我们可以根据这一点将分布式系统分为三类:

CA 系统:数据在所有节点之间是一致的,我们也可以从系统的任意节点中进行读和写,但节点间通信网络不能出故障

CP 系统:数据在所有节点之间是一致的,而且能够容忍分区出错并防止数据不同步

AP 系统:系统中所有节点总是在线的,但无法保证获取到的是最新数据,但只要网络正常,节点间就会进行同步

在真实的分布式系统网络环境中,网络分区是不可避免的,因此,通常需要保证即使在发生网络分区的情况下,系统作为整体仍然能够正常运行并提供服务,也就是满足分区容错性。因此,留给大多数分布式系统的选择也就只剩下到底是保证系统一致性还是可用性了。

在进行系统设计时,我们要根据具体的业务场景需求来进行选择。例如你设计的是一个类似微博这样的系统,那么肯定要保证系统的高可用,而用户发表一条微博后,其他用户要过一小段时间才能查看到,这并不会产生多大的影响,此时可用性相对一致性而言就重要的多了。

那么常见的中间件存储系统都是什么类型的呢?如下图所示:

最后要强调一点,CAP 定理关注的是对数据的读写操作,而不是分布式系统的所有功能,它要求分布式系统节点间是互相连接且有数据共享的,例如 Memcache 的集群中节点相互间没有连接和数据共享,因此不是 CAP 定理讨论的对象,同理 ZooKeeper 的选举机制也不是 CAP 探讨的对象。

给大家推荐一个程序员学习群:863621962。群里有分享的视频,还有思维导图

群公告有视频,都是干货的,你可以下载来看。主要分享分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频。

java web后端技能树_后端技能树修炼:CAP 定理相关推荐

  1. java web前端哪个城市,Java Web 是前端还是后端

    Java Web 是前端还是后端 Java Web 是前端还是后端? Java Web是属于后端,Java Web就是用Java技术开发的Web应用,而Java是一种可以编写跨平台应用软件.完全面向对 ...

  2. Java web小项目_个人主页(1)—— 云环境搭建与项目部署

    摘自:Java web小项目_个人主页(1)-- 云环境搭建与项目部署 作者:丶PURSUING 发布时间: 2021-03-26 23:59:39 网址:https://blog.csdn.net/ ...

  3. Java web小项目_个人主页(2)—— 边缘加速原理与实现

    摘自:Java web小项目_个人主页(2)-- 边缘加速原理与实现 作者:丶PURSUING 发布时间: 2021-03-27 14:44:40 网址:https://blog.csdn.net/w ...

  4. java web前后台交互_前后端交互(javaweb)

    前段后台交互的学习(Java web) 标签 : 前后端交互 Javaweb 下面介绍了一些关于交互的细节: 请求数据 前端提供请求数据. 在开发中,后台在查询数据库时,需要借助查询条件才能查询到前端 ...

  5. java web程序示例_想要建立一些有趣的东西吗? 这是示例Web应用程序创意的列表。...

    java web程序示例 Interested in learning JavaScript? Get my ebook at jshandbook.com 有兴趣学习JavaScript吗? 在js ...

  6. 基于java web的图书馆_基于Java-Web的图书管理系统的设计与实现.doc

    题 目 基于Java Web的图书管理 系统的设计与实现 指导老师 ****** 专业班级 姓 名 ******* 学 号 ***** 年 月*日 第 PAGE \* MERGEFORMAT 0 页 ...

  7. java web 颜色灰色_网站动态变灰解决方案(java web项目网站)

    每逢5.12和哀悼日,各大门户网站都会把自己网站变灰色,以此来表示对逝者的哀悼. 下面是一个java web项目网站变化的设计方案. 思路是这样的,首先由个页面来操作网站是变灰还是不变灰, 然后把选择 ...

  8. java web.xml 监听器_【JAVA 核心技术】java web 中的监听器

    为什么要有监听器? 监听器是用来处理一系列事件的java类,可被配置在java web项目中. 既然如此,为什么不用代码直接调用监听器? 这可能是因为J2EE规范规定的项目工程标准,用web.xml指 ...

  9. java web数据库面试_数据库面试技巧,通过JDBC展示自己专业性,摘自java web轻量级开发面试教程...

    importjava.sql.Connection;2 importjava.sql.DriverManager;3 importjava.sql.ResultSet;4 importjava.sql ...

  10. java web应用程序_说说Java Web中的Web应用程序|乐字节

    大家好,我是乐字节的小乐,今天接着上期文章<Javaweb的概念与C/S.B/S体系结构>继续往下介绍Java Web ,这次要说的是web应用程序. 1. Web 应用程序的工作原理 W ...

最新文章

  1. 【带你重拾Redis】Redis数据结构及使用场景
  2. 姚期智施尧耘获FOCS 2021时间检验奖,MIT华人摘最佳学生论文奖
  3. sourcetree 回滚
  4. STM32固件库文件树及构成详解
  5. 2.异步回调检测线程结束
  6. 2019年第十届蓝桥杯 - 省赛 - C/C++大学C组 - D. 质数
  7. PHP array_flip() array_merge() array+array的使用总结
  8. Mac下Git项目使用的.gitignore文件
  9. 某微型计算机指令格式如图,组成原理考试试卷
  10. 买了基金之后要天天盯着吗?
  11. 我们在 web 应用开发过程中经常遇到输出某种编码的字 符, 如 iso8859-1 等, 如何输出一个某种编码的字符串?...
  12. CodeVS 1014 装箱问题(DP)
  13. 多线程编程(Linux C)
  14. paip.hibernate save 失败的解决
  15. Mysql 常用函数集
  16. 浅谈视频会议系统的运行与维护
  17. BBRv2 Cruise 阶段的 inflight 补偿
  18. Tushare如何获取股票历史交易数据
  19. 软件设计师2017下半年
  20. Android 模拟一个电子画板同屏的效果

热门文章

  1. ffmpeg builds by zeranoe_FFmpeg
  2. java default修饰符_2019最新java面试题附答案
  3. 比较两组数据的差异用什么图更直观_芯片数据分析中常见的一些图的作用
  4. Android开发之引用三方库导致SO库冲突的解决办法
  5. Android开发之xml动画(补间动画)记录
  6. 我的世界java版记分板_我的世界计分板指令 如何使用计分板教程
  7. cpucores_CPUCores怎么用 CPUCores使用方法指南_3DM单机
  8. Codeforces Round #565 (Div. 3) A. Divide it!
  9. mac ntfs读写插件的双十一活动已经开始啦
  10. bootstrap去掉表格边框