##转载请注明

  CAP理论(98年秋提出,99年正式发表):

  • C( Consistency)一致性:在分布式系统中,数据一致更新,所有数据变动都是同步的;
  • A( Availability)可用性:分布式系统中,部分节点故障,系统是否依然可响应客户端请求(对数据更新具备高可用性);
  • P( Partition tolerance)分区容错性:分区是相对于通信的时延要求来讲,指在时延要求内部分节点与其它节点联系不可达,在该情况下系统是否依然可用(可靠性)。该场景下不同于节点宕机情况,可能由于网络交换器故障,使形成不同分区,分区不可达,或者是当前延迟过大,超过了设定的值。
  • 点对点的网络上,复杂的拓扑结构和独立的路由选择可能使连接具有非对称(asymmetric)、非传递的特性,使进程间不可以通信。
  • 由于网络存在延迟和丢包等问题,P性质相对必须满足,所以常在C和A之间进行权衡。CAP理论说明系统的架构只能满足三点中的二点,无法设计出满足三点的完美的系统。可理解为:网络环境是不可靠的,因此会存在分区的发生,如果数据仅单点存储,那么其余分区的节点无法访问,因此分区无法容错。可以增加该数据项的备份,这样发生分区后各分区仍有该数据,分区容错性P满足,这在大多数系统中都会保证。但是一致性和可用性无法同时保证。多个节点上的数据可能是不一致的,如果保证强一致性,更新所有节点的数据项所用时间会增加,带来可用性问题。
  • 一般来说跨区域的系统,设计师无法舍弃P性质,那么就只能在数据一致性和可用性上做一个艰难选择。三选二,怎么选择合理。其实三选二的公式具有一定误导性,三个指标按照程度来衡量,而不是有/没有。另外,分区并不是经常发生,那么在系统不存在分区的情况下有什么理由来牺牲C或者A。当分区存在或可感知其影响的情况下,就要预备一种策略去探知分区并显式处理其影响。这样的策略应分为三个步骤:探知分区发生,进入显式的分区模式以限制某些操作,启动恢复过程以恢复数据一致性并补偿分区期间发生的错误。

  一致性C可依据程度分为:

  • 强一致性(即时一致性):所有的副本更新成功才返回;
  • 弱一致性:不能保证即时,存在一个“不一致性窗口”;
  • 最终一致性:是弱一致性的一种特例。经过一个不一致窗口然后到达一致状态。不一致窗口的大小可能依赖于这些因素:交互延迟、系统的负载、以及复制技术中副本的个数。几种方式可简单实现,比如增加update节点来以binlog方式更新,为防止单一节点失效,可以设置多个update节点,然后update节点将会以binlog更新所有节点。例如比特币系统,共识算法即采用的是最终一致性,为了保证其可用性。

  A与C之间的选择引出了两种模型:BASE和ACID。

  BASE的三个性质如下:

  • Basically Available:基本可用,支持分区失败,例如sharding碎片划分数据库;
  • Soft state:软状态,状态可以有一段时间不同步;
  • Eventually consistent:最终一致性
  • BASE采用的是弱一致性,来提升C与P上的保证。NoSQL运动的主题其实是创造各种可用性优先、数据一致性其次的方案。

  ACID的四个性质如下:

  • Atomicity(原子性):一个事务中所有操作都必须全部完成,要么全部不完成。高层次的原子操作实际上可以简化分区的恢复;
  • Consistency(一致性):相比如CAP中的C更宽泛,指事务不能破坏任何数据库规则,要保持某些不变性约束,如键的唯一性;
  • Isolation(隔离性):事务将假定只有它自己在操作数据库,彼此不知晓;
  • Durability(持久性): 在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
  • 传统数据库采用这种强事务模型。

浅谈分布式一致性与CAP/BASE/ACID理论的更多相关文章

  1. [转帖]浅谈分布式一致性与CAP/BASE/ACID理论

    浅谈分布式一致性与CAP/BASE/ACID理论 https://www.cnblogs.com/zhang-qc/p/6783657.html ##转载请注明 CAP理论(98年秋提出,99年正式发 ...

  2. 分布式中 CAP BASE ACID 理解(转载)

    概念理解(CAP,BASE, ACID) CAP CAP:  Consistency, Availability, Partition-tolerance 强一致性(Consistency).系统在执 ...

  3. 【转】浅谈分布式服务协调技术 Zookeeper

    非常好介绍Zookeeper的文章, Google的三篇论文影响了很多很多人,也影响了很多很多系统.这三篇论文一直是分布式领域传阅的经典.根据MapReduce,于是我们有了Hadoop:根据GFS, ...

  4. 浅谈分布式消息技术 Kafka(转)

    一只神秘的程序猿. Kafka的基本介绍 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可 ...

  5. 浅谈分布式消息技术 Kafka

    Kafka的基本介绍Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/ngin ...

  6. 搞懂分布式技术21:浅谈分布式消息技术 Kafka

    搞懂分布式技术21:浅谈分布式消息技术 Kafka 浅谈分布式消息技术 Kafka 本文主要介绍了这几部分内容: 1基本介绍和架构概览 2kafka事务传输的特点 3kafka的消息存储格式:topi ...

  7. 浅谈分布式共识算法raft

    前言:在分布式的系统中,存在很多的节点,节点之间如何进行协作运行.高效流转.主节点挂了怎么办.如何选主.各节点之间如何保持一致,这都是不可不面对的问题,此时raft算法应运而生,专门 用来解决上述问题 ...

  8. 浅谈分布式事务与TX-LCN

    最近做项目使用到了分布式事务,下面这篇文章将给大家介绍一下对分布式事务的一些见解,并讲解分布式事务处理框架TX-LCN的执行原理,初学入门,错误之处望各位不吝指正. 什么情况下需要使用分布式事务? 使 ...

  9. 浅谈分布式CAP定理

    互联网发展到现在,由于数据量大.操作并发高等问题,大部分网站项目都采用分布式的架构.而分布式系统最大的特点数据分散,在不同网络节点在某些时刻(数据未同步完,数据丢失),数据会不一致. 在2000年,E ...

随机推荐

  1. XML-RPC协议学习

    XML-RPC调用包括2部分:客户端client(调用线程).服务器端server(被调用的线程).服务端是通过特定的URL获得的,调用过程如下: 1.客户端程序使用XML-RPC客户端发出作业请求, ...

  2. hdu 3015 Disharmony Trees (离散化+树状数组)

    Disharmony Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. html的body内标签之超链接

    一,先来个简单的练练手,target="_blank" 的作用是在新的tab中打开页面.href 是超链接的意思. <!DOCTYPE html> <html l ...

  4. JS执行上下文(执行环境)详细图解

    JS执行上下文(执行环境)详细图解 先随便放张图 我们在JS学习初期或者面试的时候常常会遇到考核变量提升的思考题.比如先来一个简单一点的. console.log(a); // 这里会打印出什么? v ...

  5. [洛谷P4111][HEOI2015]小Z的房间

    题目大意:有一个$n\times m$的房间,一些位置是房间,另一些位置是柱子,相邻两个房间之间有墙,问有多少种方案可以打通一些墙把所有房间连成一棵树,柱子不可以打通 题解:矩阵树定理,把房间当点,墙 ...

  6. lamp 源码安装

    #!/bin/bash #description:mysql-.tar apache2.4.23 php5.6.27 function check_ok(){ ] then echo "-- ...

  7. cmder 添加到右键菜单

    管理员权限打开cmde 输入: cmder /register all 回车,OK

  8. JavaScript中进制之间的转换

    JavaScript中进制之间的转换 //十进制转其他 var x = 100; alert(x); alert(x.toString(2)); //转2进制 alert(x.toString(8)) ...

  9. Indexing GROUP BY

    SQL databases use two entirely different group by algorithms. The first one, the hash algorithm, agg ...

  10. HDU 2094 拓扑排序

    产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...