在传统的数据中,有ACID四大原则,在分布式中也有对应的CAP理论和BASE理论,这些都是分布式理论的基础。

更多内容参考:大数据学习之路

ACID

ACID分别是Atomicity 原子性、Consistency 一致性、Isolation 隔离性、Durability 持久性,有了这几个特性,就保证了数据库的可靠。

原子性

原子性代表一系列的操作要么全做,要么全不做。比如,在银行转账,从一个账号扣钱,另一个账号加钱,这两个操作必须同时进行。否则就会出现账目对不上的情况。

一致性

一致性官方的描述是,事务执行后必须是从一个一致性状态转到另一个一致性状态。通俗点说就是保证整个系统在操作完成后,虽然处于不同状态,但仍保持一致。比如在转账情境中,从一个账号转出500,转入另一个账号,那么整个系统的金额不应该有变化。

隔离性

隔离性意味着多个并发之间是不可见的,相互隔离不被打扰。隔离性在数据库操作中还是很重要的,如果不考虑隔离性,可能会出现下面的问题:

  • 脏读:事务T1读取了事务T2未提交的数据,结果事务T2回滚了,T1拿到了一个脏数据
  • 不可重复读:事务T1读取数据后,紧接着事务T2就更新了数据,事务T1再次读取的时候发现数据不一致了
  • 幻读:这种一般发生在大批量修改的时候,比如事务T1把所有的数据从1修改到了2,结果修改的过程中,事务T2插入了一条新数据1。最后检查数据发现有一条数据没有修改过来。

针对这几种情况,数据库如Mysql提供了几种事务的隔离级别:

  • Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
  • Repeatable read (可重复读):可避免脏读、不可重复读的发生。
  • Read committed (读已提交):可避免脏读的发生。
  • Read uncommitted (读未提交):最低级别,任何情况都无法保证。

持久性

这种最容易理解了,事务提交后,结果就保存不变了。

CAP

在分布式系统中,也有类似ACID的特性,那就是CAP,他们分别是:

  • Consistency 一致性,强调进群节点中数据一致。在分布式中一致性又包括强一致性和弱一致性,强一致性就是指在任何时刻任何节点看到的数据都是一样的;弱一致性一般实现是最终一致性,即刚开始可能存在差异,但随着时间的推移,最终数据保持一致。
  • Availability 可用性,强调集群在任何时间内都正常使用
  • Partition Tolerance 分区容错性,即使某一部分集群坏掉,另一部分仍能正常工作。

这三个特性只能满足其中两个,牺牲另一个。大部分系统也都是如此:

一般来说分布式集群都会保证P优先,即集群部分节点坏死不影响整个集群的使用,然后再去追求C和A。因为如果放弃P——分区可用性,那不如就直接使用多个传统数据库了。事实上,很多微服务分库分表就是这个道理。

如果追求强一致性,那么势必会导致可用性下降。比如在Master-Slave的场景中,Master负责数据写入,然后分发给各个节点,所有节点都写入成功,才算写入,这样保证了强一致性,但是延迟也会随之增加,导致可用性降低。

因此在可用性和一致性之间,就出现了各种解决方案,如时序一致性、最终一致性等等。

BASE

前面由于分布式在CAP面前各种纠结,因此有人总结出了一套适合分布式的理论——BASE:

  • BA,Basically Available 基本可用,比如降低性能要求、或者功能特性来保证整体的服务可用。比如服务的降级、增加延迟、等待等等。
  • S,Soft State 软状态,允许出现中间状态,比如节点的不同副本之间同步存在延迟
  • E,Eventual Consistency 最终一致性,具体的方案有很多,如因果一致性、读己一致性、会话一致性、单调读一致、单调写一致。

对于这几种一致性,可以简单的说一下:

  • 因果一致性:进程B对进程A有依赖关系,那么B读取到的应该总是A更新后的值
  • 读己一致性:进程A更新某个值后,它自己读到的应该是最新的值
  • 会话一致性:在会话中进行操作,需要保证总是读取到最新的值
  • 单调读一致:从系统读取某个值后,不应该读取到比它还旧的值
  • 单调写一致:同一个进程对系统的写操作,需要保证顺序

参考

分布式理论——从ACID到CAP再到BASE的更多相关文章

  1. CAP原则、BASE理论

    CAP原则.BASE理论 2017-12-15 目录 1 CAP原则  1.1 CAP原则是什么  1.2 CAP为何三者不可得兼  1.3 一致性与可用性的决择2 BASE理论  2.1 BASE理 ...

  2. 分布式理论系列(一)从 ACID 到 CAP 到 BASE

    分布式理论系列(一)从 ACID 到 CAP 到 BASE 一.ACID 1.1 事务的四个特征: (1) Atomic(原子性) 事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程 ...

  3. 分布式理论 BASE、CAP、ACID

    CAP原理: 在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Co ...

  4. 【转】分布式理论-CAP理论

    一 CAP理论简述 CAP (Consistency, Availability, Partition  Tolerance,) 理论是NoSQL数据库管理系统构建的基础.     强一致性:等同于所 ...

  5. CAP原理、一致性模型、BASE理论和ACID特性

    CAP原理 在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Con ...

  6. 【分布式】1、CAP原则(CAP定理)、BASE理论

    CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...

  7. 关于分布式存储系统中-CAP原则(CAP定理)与BASE理论比较

    CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...

  8. 分布式系列文章 —— 从 ACID 到 CAP / BASE

    转自:https://mp.weixin.qq.com/s?amp;mid=2652037708&__biz=MzI0NDI0MTgyOA%3D%3D&idx=1&chksm= ...

  9. 分布式理论: CAP、BASE (转)

    分布式系统的CAP理论是由Eric Brewer于1999年首先提出的,又被称作布鲁尔定理(Brewer's theorem),CAP是对Consistency(一致性).Availability(可 ...

随机推荐

  1. VS2017编译boost库

    1.http://www.boost.org/     下载boost库. 2.解压到 D:\ProgramFiles\boost 3.环境配变量配置     VS2017更加注重跨平台性,安装文件较 ...

  2. OneNET麒麟座应用开发之三:获取温湿度数据

    对于大气环境监测来说温湿度也是重要的指标.原本计划使用SHT15来采集温湿度数据,不过在OneNET麒麟开发板上,我们发现已经集成有SHT20温湿度传感器,于是我们就使用它了.如下图的红框处: 我们还 ...

  3. python----面向对象(2)

    反射 class ClassA: name = 'xiaoming' def __init__(self): self.y = 'y' #先执行 __setattr__ 在执行__getattribu ...

  4. hdu1890 splay维护区间翻转

    这题的建模有点不太一样,是按结点横坐标赋予键值的 同时每次rotate和splay时都要注意下往上往下更新 /* 先建立好splay tree,将结点按num/输入顺序排序,遍历时每次将当前结点提到根 ...

  5. pytest四:fixture_yield 实现 teardown

    既然有 setup 那就有 teardown,fixture 里面的 teardown 用 yield 来唤醒 teardown的执行 在所有用例执行完后执行:yield import pytest ...

  6. java使用md5加密

    代码: public String EncoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingExcep ...

  7. OSGI命令

    OSGi的一些支离破碎的知识 以下命令说明内容来自于Eclipse的OSGi框架Equinox. ---Controlling the OSGi framework---launch - start ...

  8. c# windows服务如何获取自己的安装路径

    public static string GetWindowsServiceInstallPath(string ServiceName)        {            string key ...

  9. L3-020 至多删三个字符 (30 分) 线性dp

    给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 1] 内的字符串. 输 ...

  10. 6-17 看图写树 uva10562

    非常好的dfs题  有很多细节 关于‘ ’  ‘0’  ’\n‘  的处理  他们都属于isspace函数 其中 while(buf[x+2][i]=='-'&&buf[x+3][i] ...