`
m635674608
  • 浏览: 5027914 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

CAP、ACID、BASE理论及NWR实践策略详解

 
阅读更多

【ACID】
      在传统数据库系统中,事务具有 ACID 4 个属性( Jim Gray 在《事务处理:概念与技术》中对事务进行了详尽的讨论)。

  • 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。
  • 一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。
  • 隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。
  • 持久性(Durable):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。

      对于单个节点的事务,数据库都是通过并发控制(两阶段锁 - two phase locking 或者多版本 - multiversioning)和恢复机制(日志技术)保证事务的 ACID 特性。对于跨多个节点的分布式事务,通过两阶段提交协议(two phase commiting)来保证事务的 ACID 。

       可以说,数据库系统是伴随着金融业的需求而快速发展起来。对于金融业,可用性和性能都不是最重要的,而一致性是最重要的,用户可以容忍系统故障而停止服务,但绝不能容忍帐户上的钱无故减少(当然,无故增加是可以的)。而强一致性的事务是这一切的根本保证。


【Data Replication】
       数据复制(data replication)属于分布式计算的范畴,它并不仅仅局限于数据库,但这里主要是指分布式数据库的复制。

       在 多副本构成的分布式数据库系统中, 其事务特性与单个数据库系统的差别主要表现在原子性和一致性两个方面。在原子性方面, 要求同一分布式事务的所有操作在所有相关副本上要么提交, 要么回滚, 即除了保证原有的局部事务的原子性,还需要控制全局事务的原子性; 在一致性方面,多副本之间需要保证单一副本一致性。 

       针对分布式事务的原子性一致性这两个复制协议中的核心问题,经过近20年的研究,人们提出了各种各样的复制协议。这些协议在外在功能和内部实现两方面都有较大的差别。据此,我们可以从这两个大的方面进行分类说明。

       从外在功能的角度看,依据文献[1],可以从事务执行的地点和时间两个方面进行分类。从事务执行的地点,可以分为两类:主从(Priamry / Copy)方式和更新所有(Update-Anywhere)方式。

       前者的处理过程一般是系统中仅仅指定一个 Primary 节点接受更新请求,在事务操作执行完毕后, 在事务提交前或后将操作广播到其他 Copy 节点。

       后者的处理过程稍微复杂,系统中的任何副本具有相同的地位,都可以接收 Update 请求,在检测事务冲突、 事务提交前或后将各个节点的 Update 传播到其他副本节点。

       Primary / Copy 方式并发控制较为简单, 由 Primary 本地的事务控制即可实现, 事务的原子性的实现也较为简单, 一般由 Primary 节点作为协调节点来实现。但是其缺陷也显而易见:仅仅单个节点提供 Update 请求处理能力,对于 Update 密集类型的应用, 如 OLTP,容易形成单点性能瓶颈。Update-Anywhere 方式则与其相辅相成,可以通过多点提高事务吞吐率,但随之而来的是多个分布式事务之间复杂的并发控制和原子性问题。

       从事务提交的时间点看, 可以分为积极(Eager)和消极(Lazy)两类。其区别在于,前者是在事务提交前传播更新,后者则是在提交之后才将事务操作传播到其他副本。实际上, 前者即通常所谓的同步复制(synchronous replication),后者即所谓的异步复制(asynchronous replication)。

       异步复制的优点是可以提高响应速度,但牺牲了一致性,一般实现该类协议的算法需要增加额外的补偿机制。同步复制的优点是可以保证一致性(一般通过两阶段 提交协议),但是开销较大,可用性不好(参见 CAP 部分),带来了更多的冲突和死锁等问题。值得一提的是 Lazy + Primary/Copy 的复制协议在实际生产环境中是非常实用的,MySQL 的复制实际上就属于这种。


【CAP
       在 2000 年的 PODC(Principles of Distributed Computing)会议上,Brewer 提出了著名的 CAP 理论。2002 年,Seth Gilbert 和 Nancy Lynch 证明了这一理论。CAP 指的是:Consistency、Availability 和 Partition Tolerance 。  

  • Consistency(一致性):一致性是说数据的原子性,这种原子性在经典的数据库中是通过事务来保证的,当事务完成时,无论其是成功还是回滚,数据都会处于一致的状态。在分布式环境中,一致性是说多个节点的数据是否一致。
  • Availability(可用性):可用性是说服务能一直保证是可用的状态,当用户发出一个请求,服务能在有限时间内返回结果。
  • Partition Tolerance(分区容错性):Partition 是指网络的分区。可以这样理解,一般来说,关键的数据和服务都会位于不同的 IDC 。

       CAP 理论告诉我们,一个分布式系统不可能同时满足一致性,可用性和分区容错性这三个需求,三个要素中最多只能同时满足两点。三者不可兼顾,此所谓鱼与熊掌不可 兼得也!而对于分布式数据系统而言,分区容错性是基本要求,否则就不称其为分布式系统了。因此架构设计师不要把精力浪费在设计如何能同时满足三者的完美分 布式系统上,而是应该进行权衡取舍。这也意味着分布式系统的设计过程,也就是根据业务特点在C(一致性)和A(可用性)之间寻求平衡的过程,要求架构师真 正理解系统需求,把握业务特点。


【BASE】
        BASE 来自于互联网的电子商务领域的实践,它是基于 CAP 理论逐步演化而来,核心思想是即便不能达到强一致性(Strong consistency),但可以根据应用特点采用适当的方式来达到最终一致性(Eventual consistency)的效果。BASE 是 Basically Available、Soft state、Eventually consistent 三个词组的简写,是对 CAP 中 C & A 的延伸。BASE 的含义:  

  • Basically Available:基本可用;
  • Soft-state:软状态/柔性事务,即状态可以有一段时间的不同步;
  • Eventual consistency:最终一致性;

        BASE 是反 ACID 的,它完全不同于 ACID 模型,牺牲强一致性,获得基本可用性和柔性可靠性并要求达到最终一致性。

       CAP、BASE 理论是当前在互联网领域非常流行的 NoSQL 的理论基础。

 

http://my.oschina.net/moooofly/blog/113790

http://my.oschina.net/tantexian/blog/654112

分享到:
评论

相关推荐

    山东大学nosql期末笔记.pdf

    本文总结了 NoSQL 数据库的核心思想、数据一致性、CAP 定理、BASE 理论、eBay 模式、NWR、两阶段提交协议、时间戳、向量时钟、Paxos 协议、HBase 等相关概念和技术。 数据一致性是分布式系统中的一致性问题的解决...

    关于分布式系统的思考

    谈及一些分布式系统的理论和思想,包括CAP、BASE、NWR等。并简单分析一些主流数据库分布式方案的利弊,以便我们在开发时更深入全面地进行思考、选择和设计。在讨论常见架构前,先简单了解下CAP理论:CAP是...

    分布式数据库和中间件架构设计.pptx

    理解ACID、CAP理论以及如何在实际应用中平衡这些原则,是成功设计和实施分布式解决方案的基础。同时,合理利用数据冗余、备份恢复策略和监控机制,可以有效保障系统的稳定性和业务连续性。在选择和设计分布式系统...

    S参数反演法.rar_NWR_S参数反演法_s参数_s参数反演_电 反演

    这种方法通过构建一个数学模型,将S参数与这些物理参数关联起来,然后通过优化算法寻找最佳的参数组合,使得理论计算的S参数与实际测量值最接近。NWR方法的优点在于其灵活性,可以适应不同结构和材料的模型。 在...

    美团分布式数据库实践.pdf

    分布式数据库的发展历史可以追溯到2010年,阿里巴巴开源的OceanBase引领了这一领域的创新,随后Google的Spanner在2012年的OSDI会议上提出,强调全局一致的时间戳和强一致性。CockroachDB、TiDB、GaussDB等后来者则在...

    山东大学非关系型数据库2017试题押题

    CAP理论是分布式系统领域的一个重要理论,由加州大学伯克利分校的Eric Brewer教授提出,并由Seth Gilbert与Nancy Lynch证明。CAP理论指出,在分布式计算中,一致性(Consistency)、可用性(Availability)和分区...

    mongodb一些笔记

    MongoDB可以通过调整内存大小、预分配数据文件、优化索引策略等方式进行性能优化。 12. 网络接口: MongoDB提供了多种语言的驱动程序,如Python、Java、Node.js等,方便各种编程语言的开发人员与其交互。 这些...

    2018数据管理音频整理1

    大数据领域中,"2018数据管理音频整理1"涵盖了多个关键知识点,包括大数据的四个V(Volume、Variety、Velocity、Value),Memcached的内存替换策略,DynamoDB的高可用性和一致性模型,以及NWR理论和Vector Clock更新...

    山东大学软件学院2017-2018年非关系型数据库题目(回忆版).docx

    BASE理论是针对大规模分布式系统的数据一致性模型,由Basic Availability(基本可用性)、Soft State(软状态)和Eventual Consistency(最终一致性)三个原则组成。基本可用意味着系统允许部分故障,仍能提供服务;...

    分布式协议与算法1

    例如,BASE(Basically Available, Soft state, Eventually consistent)理论就是一种在牺牲强一致性的情况下保证可用性的策略。 不同的分布式协议和算法适用于不同的场景和需求。例如,对于需要强一致性的金融交易...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    基本理论 扩展性设计 可用性设计 可靠性设计 一致性设计 负载均衡设计 过载保护设计 协议设计 二进制协议 文本协议 接入层架构设计 DNS轮询 动静态分离 静态化 反向代理 LVS F5 CDN 逻辑层架构...

    云计算第三版精品课程配套PPT课件含习题(28页)第8章 OpenStack 开源虚拟化平台(四).pptx

    通过NWR策略(N代表副本总数,W代表写操作所需的确认副本数,R代表读操作所需的副本数),Swift确保了数据的一致性和可靠性。在Swift中,N通常设置为3,W和R都设置为2,这样的配置符合NWR策略,保证了系统的稳定性和...

    AT91SAM9261中文_21.pdf

    对于32位设备,则分别提供NWR0、NWR1、NWR2和NWR3信号,用于控制四个字节的写操作。 - **字节选择访问**:在字节选择访问模式下,NWR0至NWR3信号可用于选择特定的字节进行写操作。 ### 产品相关性与外部存储映射 ...

    lan9220笔记

    LAN9220是一款集成化的以太网控制器,主要用于实现10BASE-T和100BASE-TX的网络连接。该芯片集成了IEEE 802.3物理层和数据链路层,提供了完整的网络接口解决方案。以下是关于LAN9220的一些关键知识点: 1. **管脚...

    amazon-dynamo-sosp2007.pdf

    NWR是一种在分布式数据存储中常用的策略,它指的是系统必须确认写操作的N个副本、读取R个副本,并且需要W个副本响应后才认为操作成功。这种策略能够帮助系统在面对节点故障时保持可用性和一致性之间的平衡。 Merkle...

    cyclone4e FPGA设计2.4寸彩屏显示彩条及实现数码相框实验_NIOS实验quartus工程源码+技术文档资料.zip

    cyclone4e FPGA设计2.4寸彩屏显示彩条及实现数码相框实验_NIOS实验quartus工程源码+技术文档资料,可供学习及设计参考。 module lcd_at_nios( input CLOCK_50, input Q_KEY, // ILI9325 Interface output ILI_...

    zOS FTP transfer procedure

    ### z/OS FTP传输流程详解 #### 一、概述 本文档主要介绍如何在IBM z/OS(前称为OS/390)环境下利用FTP(File Transfer Protocol)进行文件格式转换与传输的具体步骤。该过程涉及到将原始的EBCDIC格式文件转换为...

    分布式键值系统-Dynamo1

    这种复制策略被称为NWR,其中N代表副本数量,R表示读操作需要成功的副本数,W表示写操作需要成功的副本数。只要W+R>N,系统就能在单点故障情况下保证数据的可用性。数据回传机制用于处理临时故障,当故障节点恢复时...

Global site tag (gtag.js) - Google Analytics