ACID
Atomic原子性:
一个事务的所有系列操作步骤被看成是一个动作,所有的步骤要么全部完成要么一个也不会完成,如果事务过程中任何一点失败,将要被改变的数据库记录就不会被真正被改变。
Consistent一致性:
数据库的约束 级联和触发机制Trigger都必须满足事务的一致性。也就是说,通过各种途径包括外键约束等任何写入数据库的数据都是有效的,不能发生表与表之间存在外键约束,但是有数据却违背这种约束性。所有改变数据库数据的动作事务必须完成,没有事务会创建一个无效数据状态,这是不同于CAP理论的一致性"consistency".
Isolated隔离性:
主要用于实现并发控制, 隔离能够确保并发执行的事务能够顺序一个接一个执行,通过隔离,一个未完成事务不会影响另外一个未完成事务。
Durable持久性:
一旦一个事务被提交,它应该持久保存,不会因为和其他操作冲突而取消这个事务。很多人认为这意味着事务是持久在磁盘上,但是规范没有特别定义这点。
CAP原则
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
一致性
在分布式系统中,所有节点在同一时刻的数据都是一致的。
可用性
在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。即每个请求不管成功与否都能得到响应。
分区容错性
在大规模分布式数据系统中,网络分区现象,即分区间的机器无法进行网络通信的情况是必然发生的,所以系统应该能够在这种情况下仍然继续工作。(注意是服务器节点之间的通讯中断,而不是与客户端之间的通信)
CAP一般三选二
一般情况下CAP只能三选二,当是分布式系统时,不可能有完美的一致性又有完全的可用性。
CA
满足一致性,可用性的系统,一般可延展性较差。例如传统的Mysql,Oracle但并不是分布式系统。
CP
满足一致性,分区容错性的系统,一般性能不高。例如Redis,MongoDB
AP
满足可用性,分区容错性的系统,一致性较差。像我们在抢演唱会门票时,购买时,可以下单。但过了一会系统提示余票不足。这样可以保证系统可以正常运行,但会牺牲一点用户体验。
在分布式系统中,分区容错性必须实现,我们只能在一致性与可用性之间权衡。
BASE
而BASE是对CAP中一致性和可用性权衡的结果。
- **基本可用(Basically Available)**当出现故障时,允许损失部分功能
- **软状态(Soft state) **允许系统中的数据存在中间状态 ,并且中间状态不影响用户使用。
- **最终一致(Eventually consistent) **允许系统不同数据副本之间的同步存在延时
它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。