后端技能树修炼:CAP 定理

栏目: 后端 · 发布时间: 6年前

内容简介:作者简介:ASCE1885,本文由于潜在的商业目的,未经授权不开放全文转载许可,谢谢!

作者简介:ASCE1885, 《Android 高级进阶》《Android 高级进阶(源码剖析篇)》 作者

本文由于潜在的商业目的,未经授权不开放全文转载许可,谢谢!

后端技能树修炼:CAP 定理

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

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

  • 当数据在多个节点上分区存储时,所有节点在某个指定时间将会看到相同的数据,并且在所有时间点都应该看到相同的数据
  • 当客户端查询时,每个节点将返回最新的数据,否则系统将直接出错提示
  • 一致性的保证是通过在更新多个节点数据时,同时禁止读取数据的方式来实现的
  • 在任何时间点,对系统发起的每个请求都会产生一个有效的响应
  • 当然,这并不意味着系统的每个请求都会收到包含最新数据的响应,可用性是通过在不同服务器节点间进行数据复制实现的

分区容错性

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

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

  • CA 系统:数据在所有节点之间是一致的,我们也可以从系统的任意节点中进行读和写,但节点间通信网络不能出故障
  • CP 系统:数据在所有节点之间是一致的,而且能够容忍分区出错并防止数据不同步
  • AP 系统:系统中所有节点总是在线的,但无法保证获取到的是最新数据,但只要网络正常,节点间就会进行同步

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

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

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

后端技能树修炼:CAP 定理

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

参考资料:

  1. System Design Interview Concepts – CAP Theorem
  2. 想成为架构师,你必须知道 CAP 理论 by 李运华

后端技能树修炼:CAP 定理


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++沉思录

C++沉思录

Andrew Koenig、Barbara Moo / 黄晓春、孟岩(审校) / 人民邮电出版社 / 2008-1 / 55.00元

《C++沉思录》基于作者在知名技术杂志发表的技术文章、世界各地发表的演讲以及斯坦福大学的课程讲义整理、写作而成,融聚了作者10多年C++程序生涯的真知灼见。全书分为6篇32章,分别对C++语言的历史和特点、类和继承、STL与泛型编程、库的设计等几大技术话题进行了详细而深入的讨论,细微之处几乎涵盖了C++所有的设计思想和技术细节。全书通过精心挑选的实例,向读者传达先进的程序设计的方法和理念。一起来看看 《C++沉思录》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具