| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 分布式从ACID、CAP、BASE的理论推 -> 正文阅读 |
|
[大数据]分布式从ACID、CAP、BASE的理论推 |
一、从本地事务到分布式理论 理解第一个问题就是"事务" 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。 简单地说,事务提供一种“?要么什么都不做,要么做全套(All or Nothing)?”机制。 二、ACID理论? 事务是基于数据进行操作,需要保证事务的数据通常存储在?数据库?中,所以介绍到事务,就不得不介绍数据库事务的?
(1)原子性(Atomicity)? 整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。 例如:银行转账,从A账户转100元至B账户: A、从A账户取100元 B、存入100元至B账户。 这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。 (2)一致性(Consistency)在事务开始之前和事务结束以后,数据库数据的一致性约束没有被破坏。 例如:现有完整性约束A+B=100,如果一个事务改变了A,那么必须得改变B,使得事务结束后依然满足A+B=100,否则事务失败。 (3)隔离性(Isolation)? 数据库允许多个并发事务同时对数据进行读写和修改的能力,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。 例如:现有有个交易是从A账户转100元至B账户,在这个交易事务还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。 (4)持久性(Durability)? 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 ? 本地事务ACID实际上可用”统一提交,失败回滚“几个字总结,严格保证了同一事务内数据的一致性! 而分布式事务不能实现这种? 三、CAP理论? 在设计一个大规模可扩放的网络服务时候会遇到三个特性:一致性(consistency)、可用性(Availability)、分区容错(partition-tolerance)都需要的情景. ? CAP定律说的是在一个分布式计算机系统中,一致性,可用性和分区容错性这三种保证无法同时得到满足,最多满足两个。 如上图,CAP的三种特性只能同时满足两个。而且在不同的两两组合,也有一些成熟的分布式产品。 接下来,我们来介绍一下CAP的三种特性,我们采用一个应用场景来分析CAP中的每个特点的含义。 该场景整体分为5个流程: 流程一、客户端发送请求(如:添加订单、修改订单、删除订单) 流程二、Web业务层处理业务,并修改存储成数据信息 流程三、存储层内部Master与Backup的数据同步 流程四、Web业务层从存储层取出数据 流程五、Web业务层返回数据给客户端 (1) 一致性Consistency“? 一旦数据更新完成并成功返回客户端后,那么分布式系统中所有节点在同一时间的数据完全一致。 在CAP的一致性中还包括强一致性、弱一致性、最终一致性等级别,稍后我们在后续章节介绍。 一致性是指写操作后的读操作可以读取到最新的数据状态,当数据分布在多个节点上,从任意结点读取到的数据都是最新的状态。 一致性实现目标:
必要实现流程:写入主数据库后,在向从数据库同步期间要将从数据库锁定,待同步完成后再释放锁,以免在新数据写入成功后,向从数据库查询到旧的数据。 分布式一致性特点:
(2) 可用性(Availability)“? 服务一直可用,而且是正常响应时间。 对于可用性的衡量标准如下:
可用性实现目标:
必要实现流程:
分布式可用性特点:所有请求都有响应,且不会出现响应超时或响应错误。 (3) 分区容错性(Partition tolerance)“? 分布式系统中,尽管部分节点出现任何消息丢失或者故障,系统应继续运行。 通常分布式系统的各各结点部署在不同的子网,这就是网络分区,不可避免的会出现由于网络问题而导致结点之间通信失败,此时仍可对外提供服务。 分区容错性实现目标:
必要实现流程:
分区容错性特点:分区容忍性分是布式系统具备的基本能力。 四、CAP的”3选2“证明 (1) 基本场景在小结中,我们主要介绍CAP的理论为什么不能够3个特性同时满足。 如上图,是我们证明CAP的基本场景,分布式网络中有两个节点Host1和Host2,他们之间网络可以连通,Host1中运行Process1程序和对应的数据库Data,Host2中运行Process2程序和对应数据库Data。 (2) CAP特性
(3) 分布式系统正常运行流程如上图,是分布式系统正常运转的流程。 A、用户向? B、分布式系统将数据进行同步操作,将? C、当用户请求主机? 根据CAP的特性:
当前是一个正常运作的流程,目前CAP三个特性可以同时满足,也是一个? (4) 分布式系统异常运行流程假设? 假设在N1和N2之间网络断开的时候, A、用户向? B、弱此时? C、有用户向? 第一,牺牲? 第二,牺牲? 这个过程,证明了要满足? (5) "3选2"的必然性通过CAP理论,我们知道无法同时满足? CA 放弃 P:一个分布式系统中,不可能存在不满足P,放弃? 主数据库和从数据库中间不再进行数据同步,数据库可以响应每次的查询请求,通过事务(原子性操作)隔离级别实现每个查询请求都可以返回最新的数据。 注意: 对于一个分布式系统来说。P是一个基本要求,CAP三者中,只能在CA两者之间做权衡,并且要想尽办法提升P。 CP 放弃 A如果一个分布式系统不要求强的可用性,即容许系统停机或者长时间无响应的话,就可以在CAP三者中保障CP而舍弃A。 放弃可用性,追求一致性和分区容错性,如?Redis?、HBase等,还有分布式系统中常用的Zookeeper也是在CAP三者之中选择优先保证CP的。 场景: 跨行转账,一次转账请求要等待双方银行系统都完成整个事务才算完成。 AP 放弃 C放弃一致性,追求分区容忍性和可用性。这是很多分布式系统设计时的选择。实现AP,前提是只要用户可以接受所查询的到数据在一定时间内不是最新的即可。 通常实现AP都会保证最终一致性,后面讲的BASE理论就是根据AP来扩展的。 场景1 淘宝订单退款。今日退款成功,明日账户到账,只要用户可以接受在一定时间内到账即可。 场景2: 12306的买票。都是在可用性和一致性之间舍弃了一致性而选择可用性。 在12306买票的时候提示有票(但是可能实际已经没票了),用户正常去输入验证码,下单。但是过了一会系统提示下单失败,余票不足。这其实就是先在可用性方面保证系统可以正常的服务,然后在数据的一致性方面做了些牺牲,会影响一些用户体验,但是也不至于造成用户流程的严重阻塞。 但是,我们说很多网站牺牲了一致性,选择了可用性,这其实也不准确的。就比如上面的买票的例子,其实舍弃的只是强一致性。退而求其次保证了最终一致性。也就是说,虽然下单的瞬间,关于车票的库存可能存在数据不一致的情况,但是过了一段时间,还是要保证最终一致性的。 (6) 总结:CP 放弃 A:如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。 AP 放弃 C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。 五、思考思考:按照CAP理论如何设计一个电商系统?
1、对于用户模块,包括登录,个人设置,个人订单,购物车,收藏夹等,这些模块保证AP,数据短时间不一致不影响使用。 2、订单模块的下单付款扣减库存操作是整个系统的核心,CA都需要保证,极端情况下面牺牲A保证C 3、商品模块的商品上下架和库存管理保证CP 4、搜索功能因为本身就不是实时性非常高的模块,所以保证AP就可以了。 5、促销是短时间的数据不一致,结果就是优惠信息看不到,但是已有的优惠要保证可用,而且优惠可以提前预计算,所以可以保证AP。 6、支付这一块是独立的系统,或者使用第三方的支付宝,微信。其实CAP是由第三方来保证的,支付系统是一个对CAP要求极高的系统,C是必须要保证的,AP中A相对更重要,不能因为分区,导致所有人都不能支付 六、分布式BASE理论? CAP 不可能同时满足,而? (1) BASE理论通用定义 BASE是?Basically Available(基本可用)?、?Soft state(软状态)?和?Eventually consistent(最终一致性)?三个短语的简写。 BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是?基于CAP定理逐步演化?而来的,其核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方法来使系统达到?最终一致性?。 两个对冲理念:ACID和BASE
(2) Basically Available(基本可用)实际上就是两个妥协。
(3) Soft state(软状态)
(4) Eventually consistent(最终一致性)上面说软状态,然后不可能一直是软状态,必须有个时间期限。在期限过后,应当保证所有副本保持数据一致性。从而达到数据的最终一致性。这个时间期限取决于网络延时,系统负载,数据复制方案设计等等因素。 稍微官方一点的说法就是: 系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问最终都能够获取到最新的值。 (5) BASE总结总的来说,BASE 理论面向的是大型高可用可扩展的分布式系统,和传统事务的 ACID 是?相反的?,它完全不同于 ACID 的强一致性模型,而是?通过牺牲强一致性?来获得可用性,并允许数据在一段时间是不一致的。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 8:45:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |