Base理论由CAP定理在工程中演化而来,是对 CAP 理论的实际应用,也就是在分区和副本存在的前提下,通过一定的系统设计方案,放弃强一致性,实现基本可用,这是大部分分布式系统的选择
Base理论内容:
- 基本可用
- 软状态
- 最终一致性(核心)
基本可用
不追求 “任何时候,读写都是成功的”
允许分布式系统出现不可预知故障时损失部分可用性,表现可能是响应时间延长。
简单理解为不追求性能,保证系统能够一直提供服务。
软转态
允许系统中数据存在中间状态,并认为该状态不影响系统的整体可用性。也就是允许系统在多个不同节点的数据副本存在数据延时。
最终一致性
数据不能一直是软状态,必须在一段时间后达到各个节点一致性,使得所有副本的数据达到最终一致性。只要这个缓冲时间最终在用户可以接受的范围内即可。
最终一致性是一种弱一致性,弱一致性表示系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。用户读到某一操作对系统数据的更新需要一段时间,我们称这段时间为“不一致性窗口”。
与弱一致性对应的是强一致性:当更新操作完成之后,任何多个后续进程的访问都会返回最新的更新过的值,这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论,这种实现需要牺牲可用性。ACID 是一种强一致性模型,强调原子性、一致性、隔离性和持久性,主要用于在数据库实现中。适合传统金融等业务,在实际场景中,不同业务对数据的一致性要求不一样,ACID 和 Base 理论往往会结合使用。
最终一致性模型根据提供的不同保证可以划分为因果一致性和会话一致性等
因果一致性
有因果关系的操作顺序得到保证,非因果关系的操作顺序则无所谓。
在微博或者微信进行评论的时候,比如你在朋友圈发了一张照片,朋友给你评论了,而你对朋友的评论进行了回复,这条朋友圈的显示中,你的回复必须在朋友之后,这是一个因果关系,而其他没有因果关系的数据,可以允许不一致。
会话一致性
将对系统数据的访问过程框定在了一个会话当中,约定了系统能保证在同一个有效的会话中实现“读己之所写”的一致性,就是在你的一次访问中,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值。