CAP理论作为一种理论依据,在不同应用中,对—致性有不同的要求。
CAP理论:对于一个分布式系统,一致性(Consistency)、可用性(Availablity)和分区容忍性(Partition tolerance)三个特点最多只能三选二。
1 | 一致性 | 系统在执行了某些操作后仍处在一个一致的状态 | 所有的结点在同一时刻有相同的数据 |
2 | 可用性 | 对数据的所有操作都应有成功的返回。高可用性则是在系统升级(软件或硬件)或在网络系统中某些结点发生故障时仍可以正常返回。 | 任何请求不管成功或失败都有响应 |
3 | 分区容忍性 | 前提:网络发生故障时。在网络连接上,一些结点出现故障,使得原本连通的网络变成了多个分区,此时允许系统继续工作 |
在数据库系统中,事务的ACID属性保证了数据库的一致性。但是对于大型分布式系统来说,是和高性能不兼容的。
举例:网上买书时会锁住数据库直到买书行为彻底完成(否则库存数可能不一致)。买书完成的瞬间,所有人都能看到库存减少1本(两个人不能同时买书)。
出于系统性能的需求,Amazon也许会用Cache系统,剩余库存数也许是几秒甚至几个小时前的快照,而不非实时库存数,舍弃了一致性。
弱一致性理论BASE (Basically Available, Soft-state, Eventual consistency)
Basically Available | 基本可用 | |
Soft state | 软状态 | 可以理解为“无连接”的 |
Eventual consistency | 最终一致性 | 并不需要每个事务都一致,只需要最终整个系统(时间和系统的要求有关)看到的数据是一致的 Amazon平台卖书过程中,每个用户看到的库存数不一样,但最终卖完后库存数都为0 |
CAP理论三选二
组合 | 说明 |
CP(—致性和分区容忍性) | 考虑ACID理论 |
AP(可用性和分区容忍性) | 考虑BASE系统 |
CA (—致性和可用性) | 网络发生分区时,将不能进行完整操作 |
ACID理论和BASE比较
ACID | BASE |
强一致性 | 弱一致性 |
隔离性 | 优先考虑一致性 |
关注“操作提交” | 尽力服务 |
允许事务嵌套 | 结果对精确度要求不高 |
可用性 | 更简单、更快捷 |
比较“保守” | 比较“激进” |
难于演变 | 易于演变 |