深入理解分布式系统第三章(3)

CAP定理:

        指出在一个异步网络环境中,对于一个分布式读写存储(Read-WriteStorage)系统来说,只能满足以下三项中的两项,而不可能满足全部三项:

        一致性(Consistency):客户端访问所有节点,返回的都是同一份最新的数据。

        可用性(Availability):每次请求都能够获取非错误响应,但不保证最新数据。

        分区容错性(Partition Tolerance):节点之间因为网络波动导致信息丢失,系统仍能继续正常工作。

        例如,对于需要强一致性的金融交易系统,可能会选择CP模型;而对于需要高可用性的社交媒体平台,则可能选择AP模型。

        一致性,这里指线性一致性

PACELC定理:

        此定理是对cap定理的扩展,CAP定理忽略分布式系统中的延迟影响是一个重大疏忽,因为延迟在系统运行过程中时刻存在,而网络分区不会一直存在。

        PACELC定理指出,当存在网络分区(P)时,系统必须在可用性(A)和一致性(C)之间做出选择。当系统没有分区(E),即正常运行时,系统需要在延迟(Latency)和一致性(C)之间做出权衡。

BASE:

        BasicallyAvailable, SoftState, Eventually Consistent

        BASE即基本可用、软状态和最终一致性的首字母缩写,目的是抓住当时逐渐成型的一些针对高可用性的设计思路,其中的软状态和最终一致性主要指存在网络分区的情况,为了高可用性,舍弃强一致性,选择一致性更弱的最终一致性。

一致性模型

        线性一致性

        cap中的一致性指线性一致性,线性一致性也称为强一致性,(强一致性:所有节点在同一时间看到的数据都是相同的。)

        作者给出严格定义是:给定一个执行历史,执行历史根据并发操作可以扩展为多个顺序历史(SequentialHistory),只要从中找到一个合法的顺序历史,那么该执行历史就是线性一致性的。

        就是,当write(1)和write(3)并发时,后面要read(1),那么就要保证write(3),write(1)然后read(1)这样是合法的。

        顺序一致性

        只要求同一个客户端(或进程)的操作在排序后保持先后顺序不变,但不同客户端(或进程)之间的先后顺序是可以任意改变的。

        

        因果一致性

        最终一致性

        只要系统最终能够达到一个稳定的状态。

隔离级别

        

读未提交(Read Uncommitted)

        在这个级别上,事务可以读取到其他未提交事务的修改。这意味着可能会读到脏数据,因为这些修改可能会被回滚。

        脏读:一个事务读取到另一个事务未提交的数据。

读已提交(Read Committed)

        事务只能读取到其他事务已经提交的修改。这是大多数数据库系统的默认隔离级别。

        脏读被解决,但仍然存在不可重复读和幻读的问题。

        不可重复读:一个事务在两次执行相同的查询时,可能会得到不同的结果,因为其他事务的提交改变了数据。

        幻读:在同一个事务中,相同条件下的查询可能会得到不同的记录数,因为其他事务插入或删除了记录。

可重复读(Repeatable Read)

        事务在整个过程中可以重复读取到相同的数据行,即使其他事务提交了新的数据修改。这通常通过锁定读取的数据行来实现。

        解决了脏读和不可重复读的问题,但幻读仍然可能发生。

        注意:在某些数据库系统中,如MySQL的InnoDB引擎,可重复读隔离级别实际上也解决了幻读的问题。

串行化(Serializable)

        最高的隔离级别,事务会依次逐个执行,模拟了没有并发执行的环境。这样可以避免脏读、不可重复读和幻读,但会大幅降低并发性能。

        事务在执行过程中会锁定涉及的所有数据,直到事务完成。

一致性和隔离级别对比

        一致性模型和隔离级别的相同点是,它们本质上都是用来描述系统能够容忍哪些行为,不能容忍哪些异常行为,更严格的一致性模型或隔离级别意味着更少的异常行为,但以降低系统性能和可用性为代价。

        一致性模型和隔离级别的一个主要区别是,一致性模型适用于单个操作对象,比如单个数据项或单个变量的读写,该数据可能存在多个副本;而隔离级别通常涉及多个操作对象,比如在并发事务中修改多个数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值