架构师入门学习之感悟六
Question
请简述 CAP 原理
一致性Consistency
每次读取的数据都应该保证是最近写入的数据或者返回一个错误,而不是过期数据,也就是说,数据是一致的。
可用性Avaiability
每次请求都应该得到一个响应,而不是返回一个错误或失去响应,但该响应不需要保证数据是最近写入的。也就是说,系统需要一直都可以正常使用,不会引起调用者异常,但不保证响应的数据是最新的。
分区耐受性Partition tolerance
即使网络原因导致部分服务器之间消息丢失或者延迟,系统依然应该是可操作的。
概述
当网络分区失效发生的时候,我们要么取消操作,这样数据就是一致性的,但系统却不可用;要么我们继续写入数据,但数据一致性就无法保证。
对于分布式系统而言,网络失效一定会发生,也就说,分区耐受性必须保证,那么必须在可用性、一致性之间二选一。
当网络分区失效,也就是网络不可用时,如皋选择了一致性,系统可能返回一个错误码,或者干脆超时,即系统不可用。如果选择了可用性,那么系统总是返回一个数据,但并不能保证这个数据是最新的。
所以,关于CAP原理,在分布式系统必须要满足分区耐受性前提下,可用性、一致性无法同时满足。
Summary
ACID与BASE
ACID
原子性Atomicity
事务要么全部完成,要么全部取消。如果事务崩溃,状态回到事务之前(事务回滚)。
隔离性Isolation
如果2个事务T1、T2同时运行,事务T1、T2的最终结果是相同的,无论T1、T2谁先结束。隔离性依赖锁实现。
一致性Consistency
只有合法的数据才能写入数据库。遵守关系约束、函数约束的数据就是合法数据。
持久性Durability
一旦事务提交,无论发生什么(崩溃或出错),数据要保存在数据库中。
BASE
基本可用(Basically Avalible)
系统出现不可预知的故障时,允许损失部分可用性,如响应时间的损失或功能上的损失。
弱状态(Soft state)
允许系统数据存在中间状态,并认为该中间状态的存在不会影响系统整体的可用性。即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
最终一致性(Eventually Consistent)
系统中所有数据的副本,在经过一段时间同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证数据能够达到一致性,而不需要实时保证系统数据的强一致性。
版权声明: 本文为 InfoQ 作者【莫问】的原创文章。
原文链接:【http://xie.infoq.cn/article/9c191c727c58fb35fcff92c9e】。未经作者许可,禁止转载。
评论