随着微服务和分布式系统的广泛运用,CAP 定理被大家熟悉起来,也成为了分布式系统的三大指标。这篇文章我们就来聊一聊 CAP 定理。

CAP 定理

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标:

  • Consistency.
  • Availability.
  • Partition Tolerance.

Eric Brewer 说,这三个指标不可能同时做到。然后就取首字母,组成了 CAP 定理。

一起来看看这三个指标分别代表什么?

Consistency(一致性):指读写数据的一致性,特指分布式系统中数据的一致性。如何理解这句话?

假设我们现在有G1、G2 两个实例,现在的值都是 v0,有一个客户端向 G1 发起更新请求,将 v0 更新为 v1,如下图所示:

在不做任何处理的情况下,G1实例对应的值为 v1,G2对应的值为v0。如果此时客户端发起读请求,读 G1 实例上的数据是 v1,读 G2 实例上的值是 v0,这就出现了数据不一致,这就不满足数据一致性。如何保证数据一致性?需要在 G1 写操作的时候,让 G1 向 G2 发送一条消息,要求 G2 也改成 v1。

这样的话,两个实例的值都是 v1,不管客户端读取哪个服务器获取的数据都一样,这就是数据一致性。用大白话来讲就是多实例之间的数据要相同,比如 MySQL 主从架构下,我们需要通过 binlog 日志来保证主从服务器之间的数据一致性。

Availability(可用性):指服务的高可用,特指分布式系统中服务的高可用,这个就比较好理解,就是我给你发一个请求,你必须给我一个正确的响应。

Partition Tolerance(分区容错性):指在分布式系统遇到网络分区的情况下,仍然可以响应用户的请求。怎么理解呢?

在我们的分布式系统中,节点组成的网络本来应该是连通的。然而可能因为某些故障,使得有些节点之间不连通了,整个网络就分成了几块区域,而数据就散布在了这些不连通的区域中,这就叫分区。容错的意思就是分区了也需要能够正常访问,大白话就是不要出现单点故障。在分布式系统中,网络抖动、故障是不可避免的所以 CAP 中,P 是必须实现的,只能在 CA 上做取舍

接下来我们就来看看 CAP 的选择策略及在开源中间件的运用,加深对 CAP 的理解。

保 CP 弃 A

对数据一致要求比较的场景,可以牺牲一定的可用性,来保证数据的一致性,也就是强一致性。比如金融行业,因为它任何时候都不允许出现数据不一致的情况,否则就会给用户造成损失。因此,这种场景下必须保证 CP。

在我们的开源中间件中,ZooKeeper 就是采用保 CP 弃 A 策略,一起来看看。

在 ZooKeeper 集群中,Leader 节点之外的节点被称为 Follower 节点,Leader 节点会专门负责处理用户的写请求

  • 当用户向节点发送写请求时,如果请求的节点刚好是 Leader,那就直接处理该请求;
  • 如果请求的是 Follower 节点,那该节点会将请求转给 Leader,然后 Leader 会先向所有的 Follower 发出一个 Proposal,等超过一半的节点同意后,Leader 才会提交这次写操作,从而保证了数据的强一致性。

具体示意图如下所示:

当出现网络分区时,如果其中一个分区的节点数大于集群总节点数的一半,那么这个分区可以再选出一个 Leader,仍然对用户提供服务,但在选出 Leader 之前,不能正常为用户提供服务

如果形成的分区中,没有一个分区的节点数大于集群总节点数的一半,那么系统不能正常为用户提供服务,必须待网络恢复后,才能正常提供服务

这种设计就是保证了数据的一致性,但是牺牲了一定的可用性,比如当 Leader 宕机的时候。

保 AP 弃 C

保 AP 弃 C 的策略是比较常见的策略,我们为了追求系统的高可用性,在出现网络抖动的情况下,允许数据暂时不一致,牺牲一定的数据一致性。

网络分区出现后,各个节点之间数据无法马上同步,为了保证高可用,分布式系统需要即刻响应用户的请求。但是此时可能某些节点还没有拿到最新数据,只能将本地旧的数据返回给用户,从而导致数据不一致的情况。

比如我们的 eureka 注册中心就是采用这种策略,在 eureka 集群中,当某个实例宕机了,并不会导致整个 eureka 注册中心不可用,活跃的 eureka 服务器仍然可以响应外部请求。当宕机的服务器重新启动后,在第一次数据同步之前,eureka 实例之间的数据是不一致的,但是经过一次数据同步之后,实例之间的数据就一致了,这就是通过牺牲数据的一致性,来保证系统的高可用。

以上就是 CAP 定理,希望对你的学习或者工作有所帮助。最后留一道思考题:

你们公司的分布式架构是怎么设计的?

欢迎关注公众号【互联网平头哥】。关注这个互联网苟且偷生的程序员,愿你我共同进步,今天最好的是明天最低的要求。

戴上 CAP 这顶帽子,又能和面试官扯皮了相关推荐

  1. 戴上 CAP 这顶帽子,我要和面试官扯皮了

    随着微服务和分布式系统的广泛运用,CAP 定理被大家熟悉起来,也成为了分布式系统的三大指标.这篇文章我们就来聊一聊 CAP 定理. CAP 定理 1998年,加州大学的计算机科学家 Eric Brew ...

  2. 戴好这六顶帽子的项目经理,无论项目团队还是个人成长都受益终生

    六顶思考帽是一个操作简单.经过反复验证的思维工具,让每一场会议.每一次讨论.每一份报告.每一个决策都充满新意和生命力.这六顶帽子分别是: 这个工具能够帮助PM: 提出建设性的观点: 聆听别人的观点: ...

  3. 思考问题的“六顶帽子”

    思考问题的"六顶帽子"(Six Thingking Hats)由爱德华·德·博诺(Edward de Bono)博士首次提出,他是世界上公认的创造性思维领域的权威,由他设计的思考方 ...

  4. 面向对象编程的两顶帽子

    从传统的面向过程的模式,到学习掌握面向对象编程的过程中,总是有些思想观念难于转变,面向对象,更多的是思维的方式,而不是使用方法.越是深入的学习,越感到面向对象技术的博大精深,最近有一些心得总结一下. ...

  5. 字节面试官推荐的一份 Java 基础面试题!太顶了

    Java 基础篇 Java 有哪些特点 并发性的: 你可以在其中执行许多语句,而不必一次执行它 面向对象的:基于类和面向对象的编程语言. 独立性的: 支持一次编写,到处运行的独立编程语言,即编译后的代 ...

  6. 面试官:同事欠你500,你怎么要回来?硕士答不上,学渣智答录用

    在日常生活中,难免会遇到同事借钱的情况,这时,如何把借出去的钱要回来,是一件既考验情商,又考验能力的技术活. 在面试中,遇到一些不按照套路出牌的面试官,便会考验直击人心的面试题,考验你的情商和应变能力 ...

  7. 两顶白帽子和一顶红帽子_自我发展:我如何不戴两顶帽子并找到第三顶帽子

    两顶白帽子和一顶红帽子 Hi all! I lead antispam team and several machine learning teams at Mail.ru Group. The su ...

  8. 741-一群人开舞会,每人头上都戴着一顶帽子...

    题目如下 一群人开舞会,每人头上都戴着一顶帽子.帽子只有黑白两种,黑的至少有一顶.每个人都能看到其它人帽子的颜色,却看不到自己的.主持人先让大家看看别人头上戴的是什幺帽子,然后关灯,如果有人认为自己戴 ...

  9. 为什么西游记中要给孙悟空戴上紧箍儿?

    西游记中为什么要给孙悟空戴上紧箍儿? 我们知道西游记中孙悟空被如来佛祖一巴掌压到五行山下约五百年后,如来佛祖开了个盂兰盆会,决定将三藏真经传往东土大唐,观世音菩萨自愿请缨,在途中点化孙悟空拜唐僧为师, ...

最新文章

  1. python反转字符串(简单方法)及简单的文件操作示例
  2. rapidminer员工离职分析_HR如何做好离职分析?
  3. java多个mapreduce_一个简单的MapReduce示例(多个MapReduce任务处理)
  4. 机器学习:决策树过拟合与剪枝,决策树代码实现(三)
  5. Exchange 2013 SP1部署系列7:发送连接器的配置
  6. 算法分析与设计实验报告四——回溯法实验
  7. java drawline变黑,为什么java.awt.Graphics.drawLine特别慢?
  8. 量子计算机优点概括,量子计算机简介
  9. MTK平台创建Vendor方法(最大化复用代码)
  10. logstash问题记录:Attempted to resurrect connection to dead ES instance, but got an error
  11. java秒转换为年月日_SimpleDateFormat将月/日/年 时分秒转换为年-月-日 时:分:秒
  12. cesium 关于feature的知识点
  13. Excel 宏录制与VBA编程 —— 3、第一个VBA弹窗代码(附视频)
  14. 艺术 几张产生视觉错觉的图片
  15. 免费大学生简历模板下载,500套精美大学生个人简历模板下载(求职、考研)
  16. 小波神经网络wavelet neural network
  17. 华为 ap ac设备配置命令
  18. Ollydbg使用指南
  19. stm32—洋桃一号开发板U盘测试相关问题
  20. 微信小程序 地图标记

热门文章

  1. mame模拟器能设置中文吗?mame模拟器更换语言
  2. ECMAScript 6的基础认知
  3. (附源码)ssm+mysql+基于Java的微小企业人事管理系统的设计与实现 毕业设计231012
  4. 微软新一代搜索引擎NEW Bing如何提前注册使用
  5. 华为DCIP Datacom认证分类
  6. Xiaojie雷达之路---雷达原理(二刷)多普勒效应及其在雷达中的应用
  7. 使用opencv调用IP摄像头APP
  8. English_Rhymes_Phonics_resource
  9. INS/伪距组合导航(1)
  10. FIRST集合FOLLOW集