前言
当我看到"根据CAP理论,由于分布式系统必须保证分区容错性,所以只能选择AP原则或者CP原则"这种结论时,我感到很疑惑:
- 什么是分区容错性?
- 为什么分布式系统必须保证分区容错性?
- 为什么说Eureka这样的分布式系统属于AP原则,它明明没有完全放弃一致性啊?
- 真的存在不用考虑数据一致性的系统吗?AP和BASE有严格的区别吗?
为了解决上面的疑惑,我查了很多资料,在下面的文章中,我会一一回答上面提出的问题。
事务和ACID
ACID是传统关系型数据库事务的四个特性,其中的四个字母分别代表以下单词:
Atomicity, Consistency, Isolation, Durability
- 原子性(Atomicity): 指所有在事务中的操作要么都成功,要么都不成功,所有的操作都不可分割,没有中间状态。一旦某一步执行失败,就会全部回滚到初始状态。
- 一致性(Consistency): 在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等
- 隔离性(Isolation):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括未提交读(Read uncommitted)、提交读(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- 持久性(Durability):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
具有ACID特性的数据库系统,可以保证在写入或更新数据时,事务是正确可靠的。ACID的目标是保证数据的正确性和一致性。
从ACID到BASE
1997 年,Brewer提出BASE,他们的服务集群在架构上放弃了关系型数据库的 ACID 特性而使用BASE原则
BASE的四个字母分别代表以下单词:
Basically Available, Soft State, Eventual Consistency
- 基本可用(Basically Available):分布式系统在出现不可预知故障的时候,允许损失部分可用性
- 软状态(Soft State):允许系统中的数据存在中间状态,即不同节点上的数据不一致
- 最终一致性(Eventually Consistent):软状态不能一直持续,在一定期限过后,应当保证所有副本保持数据一致性,从而达到数据的最终一致性
BASE的思想是,为了提高系统的可用性,允许在某些时候,某个节点返回的不是最新的数据,但是在一段时间之后,系统中的数据最终会达到一致。这种做法可以在系统访问高峰时牺牲一定的一致性,保证可用性,在高峰过后又恢复数据的一致性。
可以