从NoSQL运动谈分布式系统的CAPBASE理论
Posted 大数据技术与架构
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从NoSQL运动谈分布式系统的CAPBASE理论相关的知识,希望对你有一定的参考价值。
NoSQL运动
自从上世纪80年代以降,关系型数据库(即传统的OLTP和OLAP数据库)一直都是后端业务系统的主导,能够满足很多需求。但是,随着数据量的激增、对查询响应要求提升、越来越多非结构化数据泛滥等原因,关系型数据库的领域面临挑战,因此催生了NoSQL(非关系型、not only SQL)运动——这个词在世纪之交才出现,但是NoSQL思想和数据库出现得要早得多。
各式各样的NoSQL数据库在分布式、实时性、可扩展性、Schema-less等方向都取得了突破。下图示出了关系型数据库和NoSQL的区别,以及4种NoSQL存储模式——键值、列族、图和文档。
CAP理论
在分布式系统中,不可能同时满足一致性(consistency)、可用性(availability)、分区容错性(partition tolerance)三大特征,最多只能同时满足其中二者。
那么一致性、可用性、分区容错性分别又是什么含义呢?
一致性
Every read receives the most recent write or an error.
字面意思是说,对于客户端向分布式系统的读请求,要么读到最新的数据,要么失败。也就是说,不管数据如何更新,它在多个副本之间都可以保持精准、立即的同步,所有客户端取得的数据永远是“正确”的。由此可见,CAP中的“一致性”与ACID中的“一致性”虽然不是一个概念,但它仍然指的是最强的一致性。
可用性
Every request receives a (non-error) response, without the guarantee that it contains the most recent write.
字面意思是说,对分布式系统的请求一定会得到非错误的响应,但不保证响应一定包含最新写入的数据。也就是说从客户端的角度看,不会出现向分布式系统发出请求但得不到任何有意义的响应的情况,即系统提供的服务对客户端而言不能宕机,一直都是可用的。
分区容错性
The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes.
字面意思是说,就算分布式系统内部节点之间的通信出了问题(如延迟、丢包),系统仍然能正常运作。这里的“分区”是指网络分区(network partition)——网络中有节点挂掉时,原网络分解为两个或多个子网络的过程。也就是说,系统不会因为内部的网络不可靠就停止服务。
CP/AP的抉择与“CAP+NoSQL铁三角”
很显然,由于一致性、可用性、分区容错性三者只能得其二,所以必须有所取舍。但是,我们考虑的是分布式系统,分布式系统总是由多个节点组成,网络问题几乎必定会出现。所以分区容错性必须要保证,而在一致性和可用性之间做出权衡,即选择CP还是AP的问题。
考虑下面的极简模型:有两个数据中心,它们通过网络进行Replication,即数据在其中一个数据中心发生更改,就会立即通过网络传输到另外一个数据中心。每个客户端同时只能连接到一个数据中心的Application做读写操作。
假设Replication连接断掉了——即产生了网络分区,那么我们只有两种选择。
AP:仍然允许所有客户端读写,但是两个数据中心之间不再同步,它们的数据就会逐渐地变得不同,即牺牲一致性,保证可用性。
CP:只允许连接到一个数据中心上的客户端读写,另外一个停止服务,直到Replication连接恢复,即牺牲可用性,保证一致性。
具体到NoSQL的范畴,我个人把它叫做“CAP+NoSQL铁三角”,如下。
CP/AP的分类是严谨的么?
CAP的定义太狭窄,如:一致性实际上指的是最强的线性一致性(linearizability);可用性要求所有节点都能做出响应,与real-world可用性差别甚大;分区容错性的真正含义是容忍异步的不可靠网络,名称过于误导。
只考虑了单变量的读写,完全没考虑事务。
除了网络问题之外,没考虑其他很多异常情况,如节点出错、磁盘用尽等,也没有将延迟问题算在内(例如,一般不会认为5分钟才能返回查询结果的系统是“可用”的)。
BASE理论
基本可用(basically available)
软状态(soft state)
最终一致性(eventually consistent)
基本可用
正常情况下,数据库需要在200ms内返回查询结果,但由于故障,使得响应时间延长到了2s,即响应的延迟增加了;
在电商大促高峰(特别是秒杀)时,为了维护整个系统的稳定性,部分订单会不成功,用户会被引导至降级页面,即牺牲部分功能。
软状态
最终一致性
文章不错?点个【在看】吧! 以上是关于从NoSQL运动谈分布式系统的CAPBASE理论的主要内容,如果未能解决你的问题,请参考以下文章