前言
本文主要讲述关于分布式项目中对CAP理论与BASE理论的理解
一、CAP理论
CAP理论作为分布式系统的基础理论,他描述的是一个分布式系统在以下三个特性中:
一致性(Consistency)
可用性(Availability)
分区容错性(Partition tolerance)
最多只能满足两个特性
三个特性分别是什么
一致性:在分布式系统完成某些写操作后任何操作,都应该获取到该写皂搓写入的那个最新的值。各个节点应该保持一致性
可用性:可以一直正常的进行读写操作。客户端不会出现超时,操作失败或者其他异常画面。能够一直得到服务端的响应并正常访问系统
分区容错性:在分布式系统中某个节点或者网络分区出现了故障的时候,整个系统仍然能够对外提供满足可用性和一致性的服务,也就是说部分故障不考虑使用,事实在设计分布式系统时都会考虑到Bug,硬件,网络等各种不可抗原因造成的故障,所以即使某些节点出错时,但是并不影响全局的使用
总结
CAP如何取舍:
CA:优先保证一致性和可用性,放弃分区容错。这也意味着放弃系统的扩展性,系统不再是分布式的,有违背设计原理的初衷
CP:优先保证一致性和分区容错性,放弃可用性。在数据一致性要求比较高的场合,如:zookeeper,Hbase是比较常用的做法,一旦发生网络故障或者消息丢失,就会牺牲用户体验,等系统恢复后才能让用户访问
AP:优先保证可用性和分区容错性,放弃一致性,NoSQL中的Cassandra就是这种架构。与CP一样,放弃一致性不是说一致性就不保证了,而是逐渐变得一致
BASE理论
BASE是对CAP中一致性和可用性权衡的结果,其来源于大规模的互联网分布式系统实践的总结,是基于CAP定律逐步演化而来,其核心思想:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来达到最终一致性
BASE理论简介
- 基本可用(Basically Available)
- 软状态(Soft State)
- 最终一致性(Eventually Consistent)
基本可用
什么是基本可用,如果系统部分功能出现不可预知的故障,但还是能够使用,与完全正常的系统而言
4. 5. 响应时间上的损失
正常情况下,搜索引擎0.5秒将结果返回给用户,而基本可用的搜索引擎可以在2s内将结果返回给用户
6. 功能上的损失
在一些特定的情况下,为保护系统的稳定性,将部分用户引导至一个降级页面
软状态
什么是软状态?相对于原子性而言,要求多个节点的数据副本都是一致的,这是一种“硬状态”
软状态指:允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同的节点上数据副本存在数据延时
最终一致性
软状态不可能一直是软状态,必须要有一个时间限制,期限过后所有数据应该保持一致,这个期限区别于各个方面,如网络延时,系统负载,数据复制方案设计等因素
而实际工程实践中,最终一致性分为5种:
- 因果一致性
如节点A与B存在联系,那么节点A进行了数据的更新后,节点B对数据的访问则是基于节点A的更新后的值,于此同时,节点C与A没有联系,则节点C的数据访问则没有这样的限制 - 读已之所写
节点A更新数据后,访问的总是自身更新后的最新值,而不会看到旧值。 - 会话一致性
会话一致性将系统访问数据的过程框定在一个会话当中,系统保证在同一个有效的会话当中实现“读已之所写”的一致性。也就是说,执行完更新操作过后,客户端能在同一个会话当中总是访问到数据的最新值 - 单调读一致性
如果一个节点从系统当中获取到某一数据项的一个值之后,那么系统对于该节点的后续任何数据访问都不应该返回更旧的值 - 单调写一致性
一个系统要保证来着同一个节点的写操作被顺序的执行
总结
BASE理论面向的是大型高可用可拓展的分布式系统。与传统ACID特性相关,不同于ACID的强一致性模型,BASE通过牺牲强一致性来获得可用性,并允许数据在一段时间内不一致而最终达到一致状态。
同时,在实际分布式场景中,不同业务对数据一致性的要求也不尽相同,因此ACID与BASE理论往往又会结合起来一起使用