事务ACID四个特性:
A:原子性(Atomicity)
C:一致性(Consistency)
I:隔离性(Isolation)
D:持久性(Durability)
原子性:语句要么全执行,要么全不执行,是事务最核心的特性;基于redo log undo log实现。
持久性:保证事务提交后不会因为宕机等原因导致数据丢失;基于redo log实现。
隔离性:保证事务执行尽可能不受其他事务影响;通过锁实现,加锁粒度又受隔离级别影响。隔离级别越高锁粒度越大,并发性能越差。InnoDB默认的隔离级别是RR,RR的实现主要基于锁、mvcc和next-key lock算法。
一致性:事务追求的最终目标,原子性、持久性和隔离性,都是为了保证数据库状态的一致性。此外,除了数据库层面的保障,一致性的实现也需要应用层面进行保障。
CAP定理是分布式领域非常著名的定理:
C:一致性 在分布式系统中的所有数据副本,在同一时刻是否同样的值。
A:可用性 在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。
P:分区容错性 能容忍网络分区,在网络断开的情况下,被分隔的节点仍能正常对外提供服务。
CAP理论描述当前不可靠的物理与软件环境下,分布式系统不能同时实现严格的线性一致性与严格的可用性。
分布式系统,无法舍弃P性质,那么就只能在一致性和可用性上做平衡。
ACID 与 CAP 中的一致性的区别
ACID的一致性是逻辑层面数据完整性,而CAP的一致性是分布式多服务器之间复制数据实现多个副本同一时刻数据一致。
Paxos、Raft分布式一致性算法
既然CAP理论在分布式系统中一致性和可用性只能选一个。那Paxos、Raft等分布式一致性算法是如何做到在保证一定的可用性的同时,对外提供强一致性呢。
首先,由于分区很少发生,那么在系统不存在分区的情况下没什么理由牺牲C或A。
其次,C与A之间的取舍可以在同一系统内以非常细小的粒度反复发生,而每一次的决策可能因为具体的操作,乃至因为牵涉到特定的数据或用户而有所不同。
最后,这三种性质都可以在程度上衡量,并不是非黑即白的有或无。可用性显然是在0%到100%之间连续变化的,一致性分很多级别,连分区也可以细分为不同含义,如系统内的不同部分对于是否存在分区可以有不一样的认知。
所以一致性和可用性并不是水火不容,非此即彼的。Paxos、Raft等分布式一致性算法就是在一致性和可用性之间做到了很好的平衡的见证。
拷贝
https://zhuanlan.zhihu.com/p/31727291
https://zhuanlan.zhihu.com/p/32052223