一致性问题

在介绍分布式系统一致性问题之前,我们先来了解一下副本概念。分布式系统会存在许多异常问题,比如机器宕机;为了提供高可用服务,一般会将数据或者服务部署到很多机器上,这些机器中的数据或服务可以称为副本。如果其中任何一台节点出现故障,用户可以访问其他机器上的数据或服务。由于副本的存在,如何保证这些节点上的副本数据或服务一致性,是整个分布式系统需要解决的核心问题,这也就是本文提到的一致性问题。

如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop

一致性按照不同的角度可以分为客户端以及系统。从客户端角度看,就是客户端读写操作是否符合某种特性;从系统角度看,就是系统更新如何复制分布到整个系统,以保证数据最终一致。

如果从客户端角度看,一致性又可以分为以下几种:

强一致性(Strong Consistency):在任何时候,用户或节点都可以读到最近一次成功更新的副本数据。这种一致性肯定是我们最想要的,但是很遗憾,强一致性在实践中很难实现,而且一般都会牺牲可用性。

弱一致性(Weak Consistency):某个进程更新了副本的数据,但是系统不能保证后续进程能够读取到最新的值。

最终一致性(Eventual Consistency):最终一致性是弱一致性的一种特例。某个A 进程更新了副本的数据,如果没有其他进程更新这个副本的数据,系统最终一定能够保证后续进程能够读取到A进程写进的最新值。但是这个操作存在一个不一致性的窗口,也就是 A 进程写入数据,到其他进程读取 A 写进去的值所用的时间。最终一致性又可以根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为以下几种:因果一致性(Causal Consistency):如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将返回更新后的值,且一次写入将保证取代前一次写入。与进程A无因果关系的进程C的访问遵守一般的最终一致性规则。

读写一致性(Read-Your-Writes Consistency):当进程A自己更新一个数据项之后,它总是访问到更新过的值,绝不会看到旧值。这是因果一致性模型的一个特例。

会话一致性(Session Consistency):这是上一个模型的实用版本,它把访问存储系统的进程放到会话的上下文中。只要会话还存在,系统就保证读写一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统的保证不会延续到新的会话。

单调读一致性(Monotonic Read Consistency):如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值。

单调写一致性(Monotonic Write Consistency):系统保证来自同一个进程的写操作顺序执行。

当然,还存在其他的一些一致性变种,这里就不再敖述。

CAP 定律

2000 年 7月,来自加州大学伯克利分校的 Eric Brewer 教授提出了著名的 CAP 猜想。2年后,来自麻省理工学院的 Seth Gilbert 和 Nancy Lynch 从理论上证明了 CAP 可行性,从此 CAP 定理在学术上成为了分布式计算领域公认的定理,影响着分布式计算的发展。

如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop

CAP原则包含如下三个元素:C(Consistency) : 一致性。在分布式系统中的所有数据备份,在同一时刻具有同样的值,所有节点在同一时刻读取的数据都是最新的数据副本。

A(Availability):可用性,好的响应性能。完全的可用性指的是在任何故障模型下,服务都会在有限的时间内处理完成井进行响应。

P(Partition tolerance) :分区容忍性。尽管网络上有部分消息丢失,但系统仍然可继续工作。

CAP 原理证明,任何分布式系统只可同时满足以上两点,无法三者兼顾。由于关系型数据库是单节点无复制的,因此不具有分区容忍性,但是具有一致性和可用性;而分布式的服务化系统都需要满足分区容忍性,那么我们必须在一致性和可用性之间进行权衡。如果在网络上有消息丢失,也就是出现了网络分区,则复制操作可能会被延后,如果这时我们的使用方等待复制完成再返回,则可能导致在有限时间内无法返回,就失去了可用性;而如果使用方不等待复制完成, 而在主分片写完后直接返回,则具有了可用性,但是失去了一致性。因此,系统架构师需要把精力放在如何根据业务在 C 和 A 之间进行选择。

BASE 理论

BASE 是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)三个短语的简写,由 eBay 架构师 Dan Pritchett 于 2008 年在《BASE: An Acid Alternative》(论文地址点 这里)论文中首次提出。BASE 思想与 ACID 原理截然不同,它满足 CAP 原理,通过牺牲强一致性获得可用性, 一般应用于服务化系统的应用层或者大数据处理系统中,通过达到最终一致性来尽量满足业务的绝大多数需求。

BASE 模型包含如下三个元素:BA:(Basically Available ),基本可用。

S:( Soft State),软状态,状态可以在一段时间内不同步。

E:(Eventually Consistent ),最终一致,在一定的时间窗口内, 最终数据达成一致即可。

关于最终一致的几种变种参见上面,在实际系统实践中,可以将若干变种结合起来,来实现各种业务需求。

base cap 分布式_分布式系统一致性问题、CAP定律以及 BASE 理论相关推荐

  1. base cap 分布式_神一样的CAP理论被应用在何方?

    " 对于开发或设计分布式系统的架构师工程师来说,CAP 是必须要掌握的理论. 图片来自 Pexels But:这个文章的重点并不是讨论 CAP 理论和细节,重点是说说 CAP 在微服务中的开 ...

  2. base cap 分布式_干货分享:基于本地消息表的分布式事务解决方案总结

    前段时间学习了分布式事务的几种方案,下面主要总结下基于本地消息表实现可靠消息最终一致性的分布式事务方案. 1,什么是分布式事务? 在传统架构中往往是一个单体架构,一个系统就对应一个war包,然后这个系 ...

  3. base cap 分布式_高并发架构系列:详解分布式一致性ACID、CAP、BASE,以及区别

    在面试环节,经常会问CAP.BASE等相关的分布式理论,其实这些名词主要还是来自于分布式的一致性,今天主要介绍分布式一致性:强一致性.最终一致性.ACID.CAP等理论. 分布式一致性的背景 随着分布 ...

  4. base cap 分布式_分布式基础(1):CAP原理、BASE思想和最终一致性

    CAP,BASE和最终一致性是NoSQL数据库存在的三大基石. CAP C: Consistency 一致性 A: Availability 可用性(指的是快速获取数据) P: Tolerance o ...

  5. base cap 分布式_简单理解CAP-BASE

    原标题:简单理解CAP-BASE 1.CAP CAP是分布式系统的指导理论,是NoSQL数据库的理论基石.CAP其实就是对分布式系统的特性总结,即一致性(Consistency).可用性(Availa ...

  6. 浅论服务端应用程序开发中的CAP思想(非分布式系统中的CAP理论)

    本文从属于笔者的<服务端应用程序结构风格变迁之路> CAP理论是分布式系统构建中的基础理论之一,其中的C(Consistency),一致性即指所有的节点都能访问同一份最新的数据副本.A(A ...

  7. cap理论具体含义_分布式系统:CAP 理论的前世今生

    CAP 理论是分布式系统设计中的一个重要理论,虽然它为系统设计提供了非常有用的依据,但是也带来了很多误解.本文将从 CAP 诞生的背景说起,然后对理论进行解释,最后对 CAP 在当前背景下的一些新理解 ...

  8. 分布式事务前看懂CAP、BASE

    CAP.BASE跟后面要看的分布式事务有直接的关系,但是这两个分布式的理论对我们研究分布式系统里面的一些技术和方案都是作为基础的知识需要掌握的 这个CAP这个东西啊,也是个在研究分布式相关的问题中,比 ...

  9. [分布式]:分布式系统的CAP理论

    2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想.2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP.之后, ...

  10. 深入理解分布式、微服务中CAP定律和BASE理论

    一.背景 随着互联网的快速蔓延,各种传统项目(单体应用的架构)已经不能够满足当前各种复杂的需求场景,都逐渐向分布式服务.微服务做转换,而如今分布式.微服务架构已经普遍存在互联网公司的项目中,像大型电商 ...

最新文章

  1. Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常
  2. composer的简单使用
  3. RedHat Enterprise Linux之raid5磁盘阵列
  4. 自动驾驶汽车定位技术
  5. [html] const nums1 = [1, 2, 2, 1], nums2 = [2] 交集是什么?
  6. php+当前+日期+函数是,php时间日期的处理函数
  7. Java数组扩容算法及Java对它的应用
  8. 简述php语言的特点是_PHP语言有哪些优势和特点(一)
  9. MX记录有什么用?为什么今天的电子邮件系统是这样的?
  10. php调用pdf虚拟打印机,电脑中怎么安装pdf虚拟打印机
  11. android 手势输入法,基于触摸屏的手势输入法
  12. android+动态光圈效果,三星S9评测:安卓机皇是你,960帧拍摄+可变光圈
  13. 基于野火霸道的 STM32F103 代码集合
  14. 【Java每日面试题】大厂是如何设计秒杀系统的,渣本Java开发小伙如何一步步成为架构师
  15. 邮箱如何发邮件?邮箱怎么发邮件,掌握这几点,轻松搞定
  16. 喜欢计算机专业的理由英语,计算机专业的英文自我介绍
  17. html图片底部显示,html – 将背景图像保持在底部
  18. imperva代理拦截
  19. 石油管道巡线案例:SABER无人机高原2500米轻松作业
  20. Audio播放音频 --- 建立播放通道

热门文章

  1. MiluGPS(迷路者GPS导航软件)
  2. Feisty中totem-xine播放rm和rmvb没有声音
  3. 宏定义(#ifndef+#define+#endif)的作用
  4. LC-130 被环绕区域
  5. NIS 报错No such map passwd.byname. Reason: Can't bind to server which serves this domain
  6. 二叉搜索树(排序二叉树)
  7. maven项目转换成dynamic项目
  8. [Android]EditText属性详解
  9. 工作一两年后 ,你会选择什么样的公司?
  10. 程序员应该学会自我学习