谈谈ACID以及CAP/BASE理论
Posted Justin的后端书架
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谈谈ACID以及CAP/BASE理论相关的知识,希望对你有一定的参考价值。
谈谈ACID以及CAP/BASE
前言
好久没有给大家分享文章了,可能大家已经不记得这个书架了,让大家久等了,今天开始呢,我将继续为大家分享文章,首先我们今天先来聊一聊什么叫ACID以及CAP和BASE理论,相信这几个名词在大家耳边应该不会太陌生,不管是在学习或者面试中经常会碰到。我们就来对这几个东西有个深入的了解吧。
01
什么是ACID?
ACID在数据库事务中我们就有接触过,当然它也就是泛指事务中的四大属性,不管是分布式事务,还是数据库事务,ACID分别代表下面几个意思:
A(Atomicity):原子性
C(Consistency):一致性
I(Isolation):隔离性
D(Durability):持久性
原子性
事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程中,只允许全部执行成功,或者全部不执行两种结果,任何一项操作执行失败都将导致整个事务回滚,只有所有的操作都全部成功,整个事务才算是成功完成。
一致性
事务的一致性是指事务的操作不能破坏数据库的完整性和一致性,一个事务在执行之前和之后数据库都必须处于一致性状态,也就是说事务的执行结果必须是使数据库从一个一致性状态转变到另一个一致性状态。
隔离性
事务的隔离性是指在并发环境下,并发的事务之间是相互隔离无感知的,一个事务的执行不会被其他事务干扰,也就是说,不同的事务并发操作相同数据时,每个事务都有各自完整的数据,每个事务对该数据的操作不会影响其他事务对该数据的操作有点类似于ThreadLocal的感觉。
在SQL规范中,事务隔离性又被定义了4个级别:
未授权读取:读未提交,允许脏读,隔离级别最低,意思是如果一个事务正在处理某个数据,并对其进行了更新,但是还未提交完成事务,此时,是允许另一个事务访问该数据的,因此会出现脏数据读取;
授权读取:读已提交,跟读未提交类似,唯一的区别就是一个事务只允许读取另一个事务已经完成提交的数据;
可重复读:保证在事务处理过程中,多次读取同一个数据时,其值都和事务开始时候是一致的。可能会出现幻读,幻读指的是,同样的事务操作时,在前后两个时间段内执行对同一个数据的读取,可能出现不一致的结果。
串行化:隔离级别最高,要求所有的事务被串行执行,即事务只能一个接一个的进行处理,不能并发的执行。
持久性
事务的持久性指的是一个事务一旦被提交,它对数据库中对应数据的状态变更就应该是永久性的,也就是说,一旦某个事务成功结束,那么他对数据库的更新就必须被永久保存下来。
02
什么是CAP?
CAP理论指的是一个分布式系统中不可能同时满足一致性
(C:Consistency),可用性(A:Availability)和分区容错性
(P:Partition tolerance),最多只能同时满足其中的两项。
一致性:在分布式系统中,一致性指的是数据在多个副本之间是否能够保持一致的特性,在分布式系统环境下,对一个数据执行更新操作之后,应该保证整个系统环境下,数据仍然是一致性的。如果能保证一个数据的更新,对所有用户获取到的都是更新后的数据,那么这个分布式系统就可以称为具有强一致性。
可用性:可用性指的是系统提供的服务必须一直处于可用状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。
分区容错性:分布式系统在遇到任何网络分区故障时,仍然需要能够保证对外提供满足一致性和可用性的服务;
网络分区指的是在分布式系统中不同的节点被分布在不同的子网络中,由于一些特殊的原因导致这些子网络之间出现网络不连通的状况,但是每个子网络自身是正常的,所以多个节点就被分区孤立的一个个区域了。
03
什么是BASE?
BASE也是分布式系统中三个约定的,通过对CAP中的一致性和可用性的权衡得出的结果,主要是指BA(Basically Available)基本可用性,S(Soft state)软状态和E(Eventually consistent)最终一致性。
基本可用性
指在分布式系统中当出现不可预计的故障时,允许损失部分可用性(注意不代表系统不可用),主要体现在下面2个方面:
响应时间上的损失:当出现故障时,可以允许用户的响应时间延迟,例如正常情况下用户下订单,0.5秒就能返回下单成功,而在故障时允许3秒甚至5秒等待时间才完成下单成功;
功能上的损失:这个要注意并不是代表这个功能不能用了,只是通过一种服务降级的手段来保证功能的可用性,例如正常情况下用户下完单之后,跳转订单详情,当出现订单模块故障时,可以通过降级,引导部分流量到一个新的下单成功界面,从而保证下单流程的稳定性;
软状态
软状态又被称为弱状态,允许在分布式系统节点之间数据存在中间状态,并且该状态的存在,不会影响整个系统数据的整体可用性,就是说在节点数据同步的过程中,允许数据状态存在延迟同步;
最终一致性
最终一致性强调的是系统中所有的数据副本,在经过一段时间之后,最终达到数据一致性的状态,因此最终一致性不保证数据实时的状态一致,只需要最终系统将会保证数据达到一个一致状态即可;
以上是关于谈谈ACID以及CAP/BASE理论的主要内容,如果未能解决你的问题,请参考以下文章