分布式理论之BASE理论

系列文章 -> 分布式理论html

  1. 分布式理论之CAP定理(布鲁尔定理)
  2. 分布式理论之BASE理论
  3. 分布式理论之2PC协议(2阶段提交协议)

什么是BASE理论

如前文中说CAP定理是三个单词的缩写,BASE也是同样,是由Basically Available(基本可用),Soft state(软状态),和 Eventually consistent(最终一致性)三个短语的缩写。数据库

为何会出现BASE理论

CAP定理只能三选二

CAP 理论代表,对于一个分布式系统而言,它是没法同时知足 Consistency(强一致性)、Availability(可用性) 和 Partition tolerance(分区容忍性) 这三个条件的,最多只能知足其中两个。segmentfault

分区容错必须选

对于互联网来讲,因为网络环境是不可信的,因此分区容错性(P)必须知足网络

为了用户体验,先选可用性

如今只能在一致性和可用性之间作选择,大部分状况下,你们都会选择牺牲一部分的一致性来保证可用性,由于你不返回给用户数据,这体验也太差了,宁肯拒绝服务也不能说能访问却没有数据,固然,严格场景下,好比支付场景,强一致性是必需要知足,这另说。并发

可是放弃了一致性的系统又失去了存在的意义

好了,咱们只能放弃一致性,可是咱们真这样作了,将一致性放弃了,如今这个系统返回的数据你敢信吗?没有一致性,系统中的数据也就从根本上变得不可信了,那这数据拿来有什么用,那这个系统也就没有任何价值,根本没用。分布式

如上所述,因为咱们三者都没法抛弃,但CAP定理限制了咱们三者没法同时知足,这种状况,咱们会选择尽可能靠近CAP定理,即尽可能让C、A、P都知足,在此大势所趋下,出现了BASE定理。post

核心思想

强一致性(Strong consistency)没法获得保障时(分区容错和可用性知足系统),咱们能够根据业务自身的特色,采用适当的方式来达到最终一致性(Eventual consistency)网站

名词解释

Basically Available(基本可用)

基本可用是相对于正常的系统来讲的,常见以下状况搜索引擎

  • 响应时间上的损失:正常状况下的搜索引擎0.5秒即返回给用户结果,而基本可用看的搜索结果可能要1秒,2秒甚至3秒(超过3秒用户就接受不了了)
  • 功能上的损失:在一个电商网站上,正常状况下,用户能够顺利完成每一笔订单,可是到了促销时间,可能为了应对并发,保护购物系统的稳定性,部分用户会被引导到一个降级页面

Soft state(软状态)

软状态是相对原子性来讲的atom

  • 原子性(硬状态) -> 要求多个节点的数据副本都是一致的,这是一种"硬状态"
  • 软状态(弱状态) -> 容许系统中的数据存在中间状态,并认为该状态不影响系统的总体可用性,即容许系统在多个不一样节点的数据副本存在数据延迟

Eventually consistent(最终一致性)

弱一致性
和强一致性相对
系统并不保证连续进程或者线程的访问都会返回最新的更新过的值。系统在数据写入成功以后, 不承诺当即能够读到最新写入的值,也不会具体的承诺多久以后能够读到。但会 尽量保证在某个时间级别(好比秒级别)以后,可让数据达到一致性状态

最终一致性是弱一致性的特定形式

亚马逊CTO Werner Vogels在于2008年发表的一篇文章中对最终一致性进行了很是详细的介绍
【英文】All Things Distributed
【译】最终一致性
官方解释
系统可以保证在没有其余新的更新操做的状况下,数据最终必定可以达到一致的状态,所以全部客户端对系统的数据访问最终都可以获取到最新的值。

对于软状态,咱们容许中间状态存在,但不可能一直是中间状态,必需要有个期限,系统保证在没有后续更新的前提下,在这个期限后,系统最终返回上一次更新操做的值,从而达到数据的最终一致性,这个容忍期限(不一致窗口的时间)取决于通讯延迟,系统负载,数据复制方案设计,复制副本个数等,DNS是一个典型的最终一致性系统。

最终一致性模型变种

  • 因果一致性(Causal consistency)

若是节点A在更新完某个数据后通知了节点B,那么节点B的访问修改操做都是基于A更新后的值,同时,和节点A没有因果关系的C的数据访问则没有这样的限制

  • 读己之所写(Read your writes)

因果一致性的特定形式,一个节点A总能够读到本身更新的数据

  • 会话一致性(Session consistency)

访问存储系统同一个有效的会话,系统应保证该进程读己之所写

  • 单调读一致性(Monotonic read consistency)

一个节点从系统中读取一个特定值以后,那么该节点从系统中不会读取到该值之前的任何值

  • 单调写一致性(Monotonic write consistency)

一个系统要可以保证来自同一个节点的写操做被顺序执行(保证写操做串行化)

实践中,每每5个系统进行排列组合,固然,不仅是分布式系统使用最终一致性,关系型数据库在某个功能上,也是使用最终一致性的,好比备份,数据库的复制过程是须要时间的,这个复制过程当中,业务读取到的值就是旧的。固然,最终仍是达成了数据一致性。这也算是一个最终一致性的经典案例
图片描述

BASE和ACID的区别与联系

参考ACID维基百科
ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程当中,为保证事务(transaction)是正确可靠的,所必须具有的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)

原子性:一个事务(transaction)中的全部操做,要么所有完成,要么所有不完成,不会结束在中间某个环节。事务在执行过程当中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务历来没有执行过同样。

一致性:在事务开始以前和事务结束之后,数据库的完整性没有被破坏。这表示写入的资料必须彻底符合全部的预设规则,这包含资料的精确度、串联性以及后续数据库能够自发性地完成预约的工做。

隔离性:数据库容许多个并发事务同时对齐数据进行读写和修改的能力,隔离性能够防止多个事务并发执行时因为交叉执行而致使数据的不一致。事务隔离分为不一样级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

持久性:事务处理结束后,对数据的修改就是永久的,即使系统故障也不会丢失。

  • ACID是传统数据库经常使用的设计理念, 追求强一致性模型。
  • BASE支持的是大型分布式系统,提出经过牺牲强一致性得到高可用性。

ACID和BASE表明了两种截然相反的设计哲学。

总的来讲,BASE 理论面向大型高可用可扩展的分布式系统,与ACID这种强一致性模型不一样,经常是牺牲强一致性来得到可用性,并容许数据在一段时间是不一致的。虽然二者处于【一致性-可用性】分布图的两级,但二者并非孤立的,对于分布式系统来讲,每每依据业务的不一样和使用的系统组件不一样,而须要灵活的调整一致性要求,也所以,经常会组合使用ACID和BASE。

参考

All Things Distributed
[译]最终一致性
CAP原理、一致性模型、BASE理论和ACID特性
分布式理论(二) - BASE理论
ACID
从分布式一致性谈到CAP理论、BASE理论

相关文章
相关标签/搜索