这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战
1 事务一致性
可靠程度:强一致性 > 顺序一致性 > 因果一致性 > 最终一致性 > 弱一致性。
- 强一致性/线性一致性(Linearizability) :写操作完成后,要求任何读取操作都能读取到最新的值
- 顺序一致性(Sequential Consistency) :不保证操作的全局时序,但保证每个客户端操作能按顺序被执行
- 因果一致性(Causal Consistency) :只对并发访问中具有因果关系的操作保证顺序
- 最终一致性(Eventual Consistency) :不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化
- 弱一致性(Weak Consistency) :数据更新后,能容忍后续的访问只能访问到部分或者全部访问不到
2 ACID特性
ACID
注重一致性,是传统关系型数据库的设计思路。ACID
是数据库(MySQL)事务正确执行所必须满足的四个特性:
- Atomicity(原子性) :事务中的操作要么都做,要么都不做
- Consistency(一致性) :系统必须始终处在强一致状态下
- Isolation(隔离性) :一个事务的执行不能被其它事务所干扰
- Durability(持久性) :一个已提交的事务对数据库中数据的改变是永久性的
3 CAP理论
CAP
理论的核心思想是任何基于网络的数据共享系统最多只能满足数据一致性(Consistency
)、可用性(Availability
)和网络分区容忍(Partition Tolerance
)三个特性中的两个。
- 一致性(Consistency) :在分布式系统中的所有数据备份,在同一时刻是否拥有同样的值
- 可用性(Availability) :在集群中一部分节点故障后,集群整体还能响应客户端的读写请求
- 分区容错性(Partition Tolerance) :系统中任意信息的丢失或失败不会影响系统的继续运作
这三个特性只能满足其中两个,牺牲另一个。大部分系统也都是如此:
- 一般来说分布式集群都会保证P优先。即集群部分节点坏死不影响整个集群的使用,然后再去追求C和A。因为如果放弃P,那不如就直接使用多个传统数据库了。事实上,很多微服务分库分表就是这个道理
- 如果追求强一致性,那么势必会导致可用性下降。比如在Master-Slave的场景中,Master负责数据写入,然后分发给各个节点,所有节点都写入成功,才算写入,这样保证了强一致性,但是延迟也会随之增加,导致可用性降低
4 BASE理论
BASE
关注高可用性。BASE
理论是对CAP
理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency
,CAP
的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency
)。BASE
是分别代表:
- 基本可用(Basically Available) :指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用
- 软状态( Soft State) :指允许系统存在中间状态,而该中间状态不会影响系统整体可用性
- 最终一致性( Eventual Consistency) :指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态
BASE理论是对CAP中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。