分布式基础理论
分布式基础理论
CAP理论基本概念
- 数据一致性(consistency):若系统更新操作成功,则它之后的读请求都必须读到这个新数据;若失败,则所有读请求都不能读到这个新数据,对调用者而言数据具有强一致性(strong consistency)
- 服务可用性(availability):所有请求在一定时间内得到响应,可终止,不会一直等待
- 分区容错性(partition-tolerance):在网络分区的情况下,被分隔的节点仍能正常对外服务
CAP三者不空兼得
若放弃P,即系统称为传统的单服务器模式;而分布式必然不能放弃P;
实现P就允许网络存在异常。若实现CP,向一个分区的更新操作因一致性要求,必然导致网络恢复前,其他分区不能满足可用性。若实现AP,存在不同分区因网络异常,无法保证强一致性。
因此,分布式系统理论上不可能选择CA架构,只能选择CP或AP架构。
Base理论
CAP理论的一种妥协,由于CAP只能二取一,Base理论降低了发生分区容错时对可用性和一致性的要求。
- 基本可用:允许可用性降低(可能响应延长、可能服务降级)
- 软状态:指允许系统中的数据存在中间状态,并任务该中间状态不会影响系统整体可用性(比如支付完成前的支付中)
- 最终一致性:节点数据同步可能存在时延,但在一定的期限后必须达成数据的一致,状态变为最终状态
数据一致性模型
强一致性:当更新操作完成后,任何多个后续进程的访问都会返回更新后的数据。根据CAP理论,这种实现需要牺牲可用性。
弱一致性:当更新操作完成后,不承诺立即可以读到更新后的数据,而这段时间存在“不一致性窗口”。
最终一致性:是弱一致性的特例,强调的是所有的数据副本,在经过一定时间的同步后,最终能够达到一个一致的状态。达到最终一致性的时间,就是不一致窗口时间。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。
最终一致性模型根据其提供的不同保证可以划分为因果一致性和会话一致性等等模型。
因果一致性:要求有因果关系的操作顺序要得到保证,非因果关系的操作顺序则无所谓。
会话一致性:将对系统数据的访问过程框定在了一个会话当中,约定了系统保证在同一个有效的会话中实现“读己之所写”的一致性。
Quorum、WARO机制
WARO:一种简单的副本控制协议,写操作时,只有当所有副本都成功更新之后,这次写操作才算成功,否则视为失败。优先保证读、任何节点读到的数据都是最新数据,牺牲了更新服务的可用性。但只要有一个节点存活,任然能够提供读服务。
选举算法Quorum机制:如,10个副本,一次成功更新了三个,那么需要读取八个副本的数据,可以保证读到最新数据。无法保证强一致性,也就是无法实现任何时刻或节点都可以读到最近一次成功提交的副本数据。需要配合一个获取最新成功提交的版本号的metadata服务,这样可以确定最新成功提交的版本号,然后从已经读到的数据中就可以确认最新写入的数据。