分布式架构入门:一文轻松搞懂晦涩的CAP理论!( 三 )


四、BASE是CAP的补偿
为了解决CAP限制,出现了BASE理论,也就是基本可用( )、软状态(Soft state)、最终一致性( )理论 。BASE是对CAP中一致性和可用性权衡的结果,其通过牺牲强一致性来获取高可用性 。
1、基本可用( ):指的是分布式系统在出现故障的情况下,仍然可以提供服务,尽管这个服务可能不完全,或者有降级,这里的关键是部分和核心 。
以电商网站为例,假设一个电商网站有订单服务、商品浏览服务、评论服务、搜索服务等多个服务 。如果因为某种原因(如网络分区、硬件故障等)导致评论服务暂时不可用,但是其他服务,如订单服务、商品浏览服务、搜索服务等仍然可用 。此时,用户仍然可以浏览商品、下订单和搜索,只是不能进行评论 。也就是说,整个系统仍然是"基本可用"的 。
2、软状态(Soft state):允许系统中的数据存在一段时间的不一致 。
例如,当你第一次访问一个网站的时候,你的计算机会向DNS服务器查询这个网站对应的IP地址,然后DNS服务器会返回IP地址,这个IP地址会被你的计算机或者你的网络设备缓存起来,以备下次访问的时候使用,以节省查询时间 。但是,如果在这个缓存期间,网站服务器更换了IP地址,那么你的计算机或者网络设备缓存的DNS解析结果就会过期,这就是一个"软状态" 。
3、最终一致性( ):系统中的所有数据副本经过一定时间后,最终能够达到一致的状态 。这里的关键词是“一定时间”和“最终“,“一定时间”和数据的特性是强关联的,不同的数据能够容忍的不一致时间是不同的 。
例如,在一个社交媒体网站上,当用户发布一条新的状态更新或者照片,他的朋友们可能不能立刻看到这个更新 。这是因为这个新的状态更新需要被复制到数据中心的各个节点,这个过程可能需要一些时间 。在这个场景中,用户通常能接受这种延迟,因此对于最终一致性的时间容忍度相对较大 。但是,当用户在电商网站购买商品时,库存数据的对最终一致性的时间容忍度相对较小,因此,电商网站需要尽快地更新和传播库存变化,以确保所有的用户都能看到准确的库存信息 。
前面讲过,完美的CP是不存在的,即使是几毫秒的数据复制延迟,在这几毫秒的时间间隔内,系统是不符合CP要求的,因此,CAP中的CP方案,实际上也是实现了最终一致性 。AP方案中牺牲一致性,则只是在分区期间,而不是永远放弃一致性,在分区故障恢复后,系统应该达到最终一致性,因此,BASE是CAP理论的延伸 。
五、CAP和ACID的辨析
CAP中的一致性有时会和ACID的一致性产生概念混淆,那么ACID的C到底跟CAP的C有什么区别呢?
ACID是指数据库事务正确执行的四个基本特性:原子性()、一致性()、隔离性()和持久性() 。在这里,一致性的定义是:数据库的状态应该从一个一致的状态转移到另一个一致的状态,即事务执行前后都保持业务规则的一致性,如完整性约束等 。
两者的主要区别在于其应用的范围和关注点不同:
1、CAP中的一致性更多的是从分布式系统的角度考虑,关注的是分布式节点间的数据一致性问题,即所有节点看到的数据是否实时一致 。
2、ACID中的一致性是从单个数据库系统的角度考虑,主要关注的是数据库在进行事务操作后,数据是否满足预定义的业务规则和约束,保证数据的正确性 。
举个具体的例子来说明:
假设你有一个银行应用程序,这个程序有一个简单的业务规则:客户的账户余额不能小于0 。在这个场景下,如果一个客户想要从他们的账户中提取500美元,系统会首先检查账户余额是否满足这个要求 。如果账户余额是600美元,那么提取操作是可以进行的,并且完成后,账户余额将是100美元 。这是一个一致性状态,因为它满足了业务规则 。