2019独角兽企业重金招聘Python工程师标准>>>

互联网发展到现在,由于数据量大、操作并发高等问题,大部分网站项目都采用分布式的架构。而分布式系统最大的特点数据分散,在不同网络节点在某些时刻(数据未同步完,数据丢失),数据会不一致。

在2000年,Eric Brewer教授在PODC的研讨会上提出了一个猜想:一致性、可用性和分区容错性三者无法在分布式系统中被同时满足,并且最多只能满足其中两个!

在2002年,Lynch证明其猜想,上升为定理。被这就是大家所认知的CAP定理。

CAP是所有分布式数据库的设计标准。例如Zookeeper、Redis、HBase等的设计都是基于CAP理论的。

CAP定义

所谓的CAP就是分布式系统的三个特性:

  • Consistency,一致性。所有分布式节点的数据是否一致。
  • Availability,可用性。在部分节点有问题的情况(数据不一致、节点故障)下,是否能继续响应服务(可用)。
  • Partition tolerance,分区容错性。允许在节点(分区)数据不一致的情况。

深入理解

有A、B、C三个分布式数据库。

当A、B、C的数据是完全相同,那么就符合定理中的Consistency(一致性)。

假如A的数据与B的数据不相同,但是整体的服务(包含A、B、C的整体)没有宕机,依然可以对外系统服务,那么就符合定理中的Availability(可用性)。

分布式数据库是没有办法百分百时刻保持各个节点数据一致的。假设一个用户再A库上更新了一条记录,在更新完这一刻,A与B、C库的数据是不一致的。这种情况在分布式数据库上是必然存在的。这就是Partition tolerance(分区容错性)

当数据不一致的时候,必定是满足分区容错性,如果不满足,那么这个就不是一个可靠的分布式系统。

然而在数据不一致的情况下,系统要么选择优先保持数据一致性,这样的话。系统首先要做的是数据的同步操作,此时需要暂停系统的响应。这就是满足CP。

若系统优先选择可用性,那么在数据不一致的情况下,会在第一时间放弃一致性,让整体系统依然能运转工作。这就是AP。

所以,分布式系统在通常情况下,要不就满足CP,要不就满足AP。

那么有没有满足CA的呢?有,当分布式节点为1的时候,不存在P,自然就会满足CA了。

例子

上面说到,分区容错性是分布式系统中必定要满足的,需要权衡的是系统的一致性与可用性。那么常见的分布式系统是基于怎样的权衡设计的。

  • Zookeeper 保证CP。当主节点故障的时候,Zookeeper会重新选主。此时Zookeeper是不可用的,需要等待选主结束才能重新提供注册服务。显然,Zookeeper在节点故障的时候,并没有满足可用性的特性。在网络情况复杂的生产环境下,这样的的情况出现的概率也是有的。一旦出现,如果依赖Zookeeper的部分会卡顿,在大型系统上,很容易引起系统的雪崩。这也是大型项目不选Zookeeper当注册中心的原因。
  • Eureka 保证AP。在Eureka中,各个节点是平等的,它们相互注册。挂掉几个节点依然可以提供注册服务的(可以配置成挂掉的比例),如果连接的Eureka发现不可用,会自动切换到其他可用的几点上。另外,当一个服务尝试连接Eureka发现不可用的时候,切换到另外一个Eureka服务上,有可能由于故障节点未来得及同步最新配置,所以这个服务读取的数据可能不是最新的。所以当不要求强一致性的情况下,Eureka作为注册中心更为可靠。
  • Git 其实Git也是也是分布式数据库。它保证的是CP。很容易猜想到,云端的Git仓库于本地仓库必定是要保证数据的一致性的,如果不一致会先让数据一致再工作。当你修改完本地代码,想push代码到Git仓库上时,假如云端的HEAD与本地的HEAD不一致的时候,会先同步云端的HEAD到本地HEAD,再把本地的HEAD同步到云端。最终保证数据的一致性。

更多技术文章、精彩干货,请关注
个人博客:zackku.com
公众号:Zack说码

转载于:https://my.oschina.net/zackku/blog/2877970

浅谈分布式CAP定理相关推荐

  1. 浅谈分布式架构搭建-理论知识

    浅谈分布式架构搭建 基础 理念 技术选型 后端技术设计 总体架构设计 关键案例设计 架构师搭建架一般优先考虑的是安全性.稳定性.高吞吐量.哈哈,菜鸟的我让我装个B,回忆一下以前架构搭建 基础 理念 C ...

  2. 搞懂分布式技术16:浅谈分布式锁的几种方案

    搞懂分布式技术16:浅谈分布式锁的几种方案 前言 随着互联网技术的不断发展,数据量的不断增加,业务逻辑日趋复杂,在这种背景下,传统的集中式系统已经无法满足我们的业务需求,分布式系统被应用在更多的场景, ...

  3. 分布式--CAP定理

    原文网址:分布式--分布式架构_IT利刃出鞘的博客-CSDN博客 简介 本文介绍分布式的CAP定理. CAP定理概述 说明 一个分布式系统不可能同时满足一致性(C:Consistency).可用性(A ...

  4. 浅谈分布式一致性算法raft

    前言:在分布式的系统中,存在很多的节点,节点之间如何进行协作运行.高效流转.主节点挂了怎么办.如何选主.各节点之间如何保持一致,这都是不可不面对的问题,此时raft算法应运而生,专门 用来解决上述问题 ...

  5. 分布式CAP定理,为什么不能同时满足三个特性?

    在弄清楚这个问题之前,我们先了解一下什么是分布式的CAP定理. 根据百度百科的定义,CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性). Availability(可 ...

  6. springcloud 相同服务名_浅谈分布式与微服务

    分布式和微服务是什么关系?简单来说,分布式和微服务的概念比较相似,分布式属于微服务.但是分布式和微服务在架构.作用和粒度上有所区别.因此,两者的关系是既相互联系又相互区别.本文主要带大家认识分布式和微 ...

  7. 浅谈分布式和微服务架构

    文章目录 一.微服务简介 1.微服务的诞生 2.微服务架构与SOA架构的区别 二.CAP理论 三.分布式事务 四.服务拆分 总结 一.微服务简介 1.微服务的诞生   在微服务概念出现之前还有一个概念 ...

  8. [分享]浅谈分布式数据库

    文章集中整理总结mysql分库分表开源产品,分布式数据库的设计,以及实际应用案例等相关内容,部分附上本文作者实际应用过程中的理解. 本文感谢sjdbc,mycat,姜承尧,林涛等文章提供的精彩介绍. ...

  9. 浅谈分布式集群管理系统

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是分布式专题的第11篇文章,我们一起来聊聊分布式集群资源管理. 在开始文章之前,我们先来问一个问题,为什么是国际上是亚马逊,国内是阿里这 ...

最新文章

  1. physx选择显卡还是cpu_工控机如何选购cpu,工控机cpu选择盒装好还是散装好
  2. [原创] hadoop学习笔记:wordcout程序实践
  3. esp8266 rtos sdk在小黄板上的使用
  4. linux安装python库报错pywin32_完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误...
  5. python测试用例管理_Python测试框架Pytest的常用插件测试报告
  6. java.lang包有哪些类_Java中Lang包的工具类有哪些
  7. mac找不到mysql_mac找不到mysql
  8. IntelliJ IDEA 2021连接MySql数据库的操作
  9. 入职必备两小时入门SVN(一)
  10. Matlab画柱状图和饼状图以及横纵坐标设置,宽度设置等
  11. 带你了解IP地址的计算
  12. 二级域名分发系统源码
  13. elastic mapping not_analyzed 简单理解 + analysis-ik分词器安装
  14. 转:7招,教你在工作中高效做笔记
  15. 开关电源环路的零极点可以在反馈端补偿吗_开关电源的建模和环路补偿设计(1):小信号建模的基本概念和方法(一)...
  16. Golang的Redis简单使用及集群配置(Win10)
  17. .NET 中的程序集
  18. rsync使用ssh指定端口
  19. 玉米社:SEM百度竞价推广转化成本过高要如何处理?
  20. Android自定义注解不被混淆,Android 混淆压缩开启以及自定义混淆规则

热门文章

  1. SpringMvc-Httl-shiro的整合
  2. ArcSDE建Table在ArcCatalog中不可见
  3. EBS   常见的AD命令
  4. Windows Azure真实案例:微软IT-将拍卖工具搬移至云端,方便雇员捐赠
  5. findfirst findnext 递归查找指定目录下所有子目录下所有文件,为什么总是死机?...
  6. JS里在光标位置插入字符
  7. python常用知识点_Python常用知识点
  8. FormData 的使用
  9. 复习HTML+CSS(2)
  10. ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)