1、NoSQL运动

自从上世纪80年代以降,关系型数据库(即传统的OLTP和OLAP数据库)一直都是后端业务系统的主导,能够满足很多需求。但是,随着数据量的激增、对查询响应要求提升、越来越多非结构化数据泛滥等原因,关系型数据库的领域面临挑战,因此催生了NoSQL(非关系型、not only SQL)运动——这个词在世纪之交才出现,但是NoSQL思想和数据库出现得要早得多。

各式各样的NoSQL数据库在分布式、实时性、可扩展性、Schema-less等方向都取得了突破。下图示出了关系型数据库和NoSQL的区别,以及4种NoSQL存储模式——键值、列族、图和文档。

NoSQL数据库几乎都不会提供ACID事务保证,也不将ACID作为指导思想,毕竟在分布式系统上实现ACID太难了。它们的基础是分布式领域的两个著名理论,即CAP和BASE。

2、CAP理论

CAP理论由Eric Brewer在2000年作为猜想提出,并在2002年由Seth Gilbert和Nancy Lynch证明了其正确性。CAP理论的内容为:

在分布式系统中,不可能同时满足一致性(Consistency)、可用性(Availability)、分区容错性(partition tolerance)三大特征,最多只能满足其中两者

2.1 一致性

Every read receives the most recent write or an error.

对于客户端向分布式系统的读请求,要么督导最新的数据,要么失败

也就是说,不管数据如何更新,它在多个副本之间都可以保持精准、立即的同步,所有客户端取得的数据永远是“正确”的。

由此可见,CAP中的“一致性”与 ACID中的“一致性”虽然不是一个概念,但它仍然指的是最强的一致性

2.2 可用性

Every request receives a (non-error) response, without the guarantee that it contains the most recent write.

字面意思是说,对分布式系统的请求一定会得到非错误的响应,但不保证响应一定包含最新写入的数据。也就是说从客户端的角度看,不会出现向分布式系统发出请求但得不到任何有意义的响应的情况,即系统提供的服务对客户端而言不能宕机,一直都是可用的。

2.3 分区容错性

The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes.

字面意思是说,就算分布式系统内部节点之间的通信出了问题(如延迟、丢包),系统仍然能正常运作。这里的“分区”是指网络分区(network partition)——网络中有节点挂掉时,原网络分解为两个或多个子网络的过程。也就是说,系统不会因为内部的网络不可靠就停止服务。

2.4 CP/AP的抉择与“CAP+ NoSQL铁三角”

由于一致性、可用性、分区容错性三者只能得其二,所以必然有所取舍。

但是,考虑到是分布式系统,分布式系统总是有多个节点组成,网络问题几乎必定会出现。

所以分区容错性必须要保证,一致性和可用性之间做出权衡,即选择CP还是AP的问题

考虑下面的极简模型:有两个数据中心,它们通过网络进行Replication,即数据在其中一个数据中心发生更改,就会立即通过网络传输到另外一个数据中心。每个客户端同时只能连接到一个数据中心的Application做读写操作。

假设Replication连接断掉了----即产生了网络分区,我们有两种选择:

  • AP:仍然允许所有客户端读写,但是两个数据中心之间不再同步,他们的数据就会逐渐地变得不同,即牺牲一致性,保证可用性
  • CP:只允许连接到一个数据中心上的客户端读写,另一个停止服务,直到Replication连接恢复,即牺牲可用性,保证一致性

Consistent, Available (CA) Systems have trouble with partitions and typically deal with it with replication. Examples of CA systems include:

  • Traditional RDBMSs like Postgres, MySQL, etc (relational)
  • Vertica (column-oriented)
  • Aster Data (relational)
  • Greenplum (relational)

Consistent, Partition-Tolerant (CP) Systems have trouble with availability while keeping data consistent across partitioned nodes. Examples of CP systems include:

  • BigTable (column-oriented/tabular)
  • Hypertable (column-oriented/tabular)
  • HBase (column-oriented/tabular)
  • MongoDB (document-oriented)
  • Terrastore (document-oriented)
  • Redis (key-value)
  • Scalaris (key-value)
  • MemcacheDB (key-value)
  • Berkeley DB (key-value)

Available, Partition-Tolerant (AP) Systems achieve "eventual consistency" through replication and verification. Examples of AP systems include:

  • Dynamo (key-value)
  • Voldemort (key-value)
  • Tokyo Cabinet (key-value)
  • KAI (key-value)
  • Cassandra (column-oriented/tabular)
  • CouchDB (document-oriented)
  • SimpleDB (document-oriented)
  • Riak (document-oriented)

Hbase为什么是CP?

Hbase的数据是按照RowKey分布在各个Region(即RegionServer)上的。在稳定的Habse集群中,不管访问同一个RowKey多少次,最终都会指向同一个RegionServer,并且Habse保证对行的更新操作和新行的put操作都是原子的,所以是强一致的。

但是,如果RegionServer因为网络分区不可达,HMaster将其视为失败,并触发它持有的region的WAL重放(replay)。在整个重放过程中,这些region都不能提供服务,所以不能保证可用性。如果正在重放的region也能被读写,那么就一定会返回不一致的数据

2.5 CP/AP的分类是严谨的么?

Martin Kleppman(大名鼎鼎的《Designing Data-intensive Applications》一书的作者)在2015年写的一篇博文《Please stop calling databases CP or AP》。从这题目也可以看出来,他认为用CAP原理来界定是很不科学的,观点如下:

  • CAP的定义太狭窄,如:一致性实际上指的是最强的线性一致性(linearizability);可用性要求所有节点都能做出响应,与real-world可用性差别甚大;分区容错性的真正含义是容忍异步的不可靠网络,名称过于误导。
  • 只考虑了单变量的读写,完全没考虑事务。
  • 除了网络问题之外,没考虑其他很多异常情况,如节点出错、磁盘用尽等,也没有将延迟问题算在内(例如,一般不会认为5分钟才能返回查询结果的系统是“可用”的)。

Martin Kleppman进一步指出,CAP理论过于一刀切了,而人们总是强行将分布式系统的设计塞入CP或AP其中之一,丢失了很多细节,并且原来的consistency、availability的含义也改变了。甚至有不少系统的实现都同时不满足严格的C和A,只满足P,虽然有些尴尬,但也不意味着就是糟糕的方案。他另外写了一篇《A Critique of the CAP Theorem》提出了CAP分类的替代方案,就不再赘述了。这两篇都很有意思。

3、BASE理论

BASE理论由Dan Prichett在2008年藉由论文《BASE:An ACID Alternative》提出。它是三个词组的首字母缩写,即:

  • 基本可用(basically available)
  • 软状态(soft state)
  • 最终一致性(eventually consistent)

文字游戏很有意思,acid(“酸”)与base(“碱”)正好是对立的,当然这不代表RDBMS和NoSQL是水火不容。

BASE是对CAP一致性和可用性权衡的结果,来源于对大规模互联网分布式实践的总结,是基于CAP理论演化来的。

3.1 基本可用

所谓基本可用,是指分布式系统在出现故障时,允许损失部分可用性,以保证系统基础运转仍然正常。这在实际操作中并不少见,如:

  • 正常情况下,数据库需要在200ms内返回查询结果,但由于故障,使得响应时间延长到了2s,即响应的延迟增加了;
  • 在电商大促高峰(特别是秒杀)时,为了维护整个系统的稳定性,部分订单会不成功,用户会被引导至降级页面,即牺牲部分功能。

3.2 软状态

软状态也称为弱状态,是指允许系统中的数据存在中间状态,并且该中间状态不影响系统的可用性。翻译成人话,就是分布式系统在不同节点之间进行数据同步的过程中允许有一定的不同步性。

3.3 最终一致性

最终一致性是指系统中的所有副本在经过一段时间的同步之后,最终总能够达到一致的状态。它是BASE的终极目标,也是任何分布式系统在实践中必须达到的目标。

最终一致性是个复杂的话题,本文已经非常之长了,就不再展开了。引用一下Werner Vogels在2008年的文章《Eventually Consistent Revisited》中的观点,他认为最终一致性是特殊的弱一致性:系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。

那么有哪些手段保证最终一致性呢?比较重量级的方案就是直接引入分布式事务,如2PC、3PC、TCC等,轻量级的方案都可以在业务中自己实现,如重试+幂等性保证、状态机、重做日志等,不再一一赘述。

来源:https://mp.weixin.qq.com/s/biwE4sADMcGOGhyEqufEJg
来源:https://blog.nahurst.com/visual-guide-to-nosql-systems

CAP、BASE理论相关推荐

  1. ACID+CAP+BASE+Transaction(事务)

    ACID+CAP+BASE+Transaction(事务) 数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity).一致性(Consis ...

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

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

  3. CAP与Base理论

    分布一致性的提出 在分布式系统中要解决的一个重要问题就是数据的复制.在我们的日常开发经验中,相信很多开发人员都遇到过这样的问题:假设客户端C1将系统中的一个值K由V1更新为V2,但客户端C2无法立即读 ...

  4. 10分钟了解分布式CAP、BASE理论

    CAP理论 2000年7月,Eric Brewer教授提出CAP猜想:2年后,Seth Gilbert和Nancy Lynch从理论上证明了CAP:之后,CAP理论正式成为分布式计算领域的公认定理.C ...

  5. CAP 理论、BASE 理论、FLP 理论

    CAP 理论.BASE 理论.FLP 理论 CAP 理论.BASE 理论.FLP 理论 1.CAP 理论 C(Consistency) 一致性: 在写操作之后的所有读操作,必须要返回写入的值. A(A ...

  6. CAP 原则与 BASE 理论

    导航 引言 一.CAP 原则 1.1 Consistency 一致性 1.2 Available 可用性 1.3 Partition tolerance 分区容错性 1.4 CAP 的矛盾 1.5 C ...

  7. 从分布式一致性谈到CAP理论、BASE理论

    问题的提出 在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景. 1.火车站售票 假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车 票, ...

  8. 从分布式环境的特点、问题到CAP、BASE理论详解

    分布式的特点: 定义: 分布式系统是一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅仅通过网络进行通信和协调的系统. 特点: 同一个分布式系统中的计算机在空间部署上可以是任意分布的,这些计算机 ...

  9. 看《大明王朝1566》聊分布式中的CAP和BASE理论

    概述 CAP 和 BASE 理论 基本上接触过分布式系统的朋友都知道 CAP 和 BASE 理论,这两个理论对工程实践中的分布式架构设计具有重要的影响.CAP 理论是加州大学伯克利分校的 Eric B ...

  10. 分布式与微服务——Iaas,Paas和Saas、单体应用和缺点、微服务概念、传统 分布式 SOA 架构与微服务架构的区别、微服务实战、什么是RPC、CAP定理和BASE理论、唯一ID生成、实现分布式

    文章目录 1-什么是Iaas,Paas和Saas 一 IaaS基础设施服务 二 paas平台即服务 三saas软件即服务 四 总结 2-单体应用和缺点 一 单体应用 二 单体应用的缺陷 3-微服务概念 ...

最新文章

  1. 【Netty】ChannelHandler和ChannelPipeline
  2. Python面向对象(继承)
  3. 大流行后的数据中心非接触式技术
  4. chrome里面模拟手机上打开网页的场景方法
  5. idea java 桌面应用_IDEA打包应用程序的教程图解
  6. python可变参数_Python学习之路:函数传递可变参数与不可变参数,每天学一点点...
  7. Linux基金会发布开源Hypervisor项目ACRN支持物联网设备开发
  8. 快速突破面试算法之搜索算法篇
  9. AR拍照的实现核心代码
  10. 笔记本电脑插入耳机只能外放,耳机没声音
  11. 关于Eclipse在servlet中连接数据库时出现驱动加载失败的解决
  12. python归一化 增大差异_python-面向对象进阶
  13. 将DOM对象转换成图片
  14. 【百度地图API】如何在地图上添加标注?——另有:坐标拾取工具+打车费用接口介绍...
  15. Duplicate named routes definition:
  16. 前端基础-Node.js核心模块的使用
  17. (转)Google Voice呼转到中国电话的五种方法
  18. 手机网络抓包 转载记录http://blog.csdn.net/skylin19840101/article/details/43485911
  19. c语言武汉市出租车收费标准 3公里以内,武汉的士/出租车起步价是多少?怎么算的?...
  20. 23最新《Android音视频开发进阶指南》,音视频开发者速领

热门文章

  1. 基于大数据的资金流量分析:思路与应用前景设想
  2. Java 程序该怎么优化?(命令篇)
  3. html设置图片为部分背景颜色,设置HTML的一个部分作为一个不同的背景颜色
  4. 家用计算机键盘图,电脑键盘示意图,教您如何正确的使用键盘
  5. 用python批量爬qq号_简单教程 8位QQ靓号爬取并过滤 – Python版
  6. win7设置自动开机时间_使计算机自动开机
  7. Hadoop去掉格,换行符,制表符,回车符,换页符【好吧,其实用正则表达式一下子就搞定了】
  8. 此Apple ID尚未在iTunes Store Apple Id登录苹果商店(App Store)身份验证提示需要官网技术支持
  9. 什么是混合移动App开发【重点学习系列---干货十足--一文详解】
  10. 统计软件简介与数据操作