ACID、CAP、BASE简单介绍

1.ACID

ACID是传统的单机事务模型,已经很难胜任现代高访问、高并发的分布式互联网系统。

  • A-原子性

原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做;如果事务中一个sql语句执行失败,则已执行的 语句也必须回滚,数据库退回到事务前的状态。

InnoDB实现原子性的关键——undo log(回滚日志):当事务对数据库进行修改时,InnoDB会生成对应的undo log;如果事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。

  • C-一致性

一致性是指事务执行结束后,数据库的完整性约束没有被破坏,事务执行的前后都是合法的数据状态。数据库的完整性约束包括但不限于:实体完整性(如行的主键存在且唯一)、列完整性(如字段的类型、大小、长度要符合要求)、外键约束、用户自定义完整性(如转账前后,两个账户余额的和应该不变)。

  • I-隔离性

隔离性是指,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。严格的隔离性,对应了事务隔离级别中的Serializable (可串行化),但实际应用中出于性能方面的考虑很少会使用可串行化。

与原子性、持久性侧重于研究事务本身不同,隔离性研究的是不同事务之间的相互影响。

  • 考虑最简单的读操作和写操作:
  • 写操作(一个事务)对写操作(另一个事务)的影响:锁机制保证隔离性
  • 写操作(一个事务)对读操作(另一个事务)的影响:MVCC保证隔离性
  • D-持久性

持久性是指事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

InnoDB实现持久性的关键——redo log(重做日志):当数据修改时,除了修改缓存中的数据,还会在redo log记录这次操作;当事务提交时,会调用fsync接口对redo log进行刷盘。如果MySQL宕机,重启时可以读取redo log中的数据,对数据库进行恢复。redo log采用的是WAL(Write-ahead logging,预写式日志),所有修改先写入日志,再更新到Buffer Pool,保证了数据不会因MySQL宕机而丢失,从而满足了持久性要求。

redo log是写磁盘操作,但其实很快,主要两个原因:

  • 写redo log是追加操作,属于顺序IO。
  • redo log中只包含真正需要写入的部分,无效IO大大减少。

2.CAP

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

  • C-一致性

一致性是指数据在多个副本中能保持一致的状态。

  • 强一致性:要求任何读取操作都能读取到最新的值,也就是要求任何写入操作立即同步给所有进程。
  • 弱一致性:这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不久承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态。
  • 最终一致性:最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。​​ ​​​​​  

 

  • A-可用性

整个系统在任何时刻都能提供可用的服务,在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。

  • P-分区容错性

大多数分布式系统都存在多个子网络,每个子网络就叫做一个区(partition),分区容错的意思是,区间通信可能会失败。比如机器A和机器B在不同的机房,这就是两个区,它们之间可能无法通信。一般来说,分区容错无法避免,因此可以认为 CAP 的 P 总是成立。CAP 定理告诉我们,剩下的 C 和 A 无法同时做到。

一般来说分布式集群都会保证P优先,即集群部分节点坏死不影响整个集群的使用,然后再去追求C和A。因为如果放弃P——分区可用性,那不如就直接使用多个传统数据库了。事实上,很多微服务分库分表就是这个道理。

3.BASE

BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。BASE是包括:基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。

  • 基本可用(Basically Available)

分布式系统在出现故障的时候,允许损失部分可用性,但保证核心可用。

电商活动促销时,应对激增的用户量,系统无法完全正常响应,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务,这就是损失部分可用性的体现。

  • 软状态(Soft State)

允许分布式系统存在中间状态,而该中间状态不会影响系统整体可用性。

分布式存储中一般数据至少保存三个副本,允许不同节点间副本同步的延时,这其实就是软状态的体现。mysql replication的异步复制也是软状态的一种体现。

  • 最终一致性(Eventually Consistent)

最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

4.总结

ACID和BASE代表两种截然相反的思想理念,ACID注重一致性,是传统关系型数据库如MySQL的设计思路;BASE关注高可用性。

参考

https://www.cnblogs.com/xiaozhaung/p/11083028.html

https://www.toutiao.com/a6642620032205455885/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值