单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2,数据复制与一致性,2.2,一致性模型分类,2.3,副本更新策略,2.4,一致性协议,2.2,一致性模型分类,1.,一致性模型关系图,2.,定义以下场景及术语来说明各种一致性的具体含义:,A,B,C,:代表,3,个独立的进程,这些进程会对,NoSQL,数据库里的数据进行读,/,写操作。,x,:,NoSQL,数据库中的某条数据。,v1,v2,v3,:数据,x,的不同取值。,Write(Item,Value):,代表某进程的一次写操作,将,Item,的值更新为,Value,。,Read(Item,Value):,代表某进程的一次读操作,即读出,Item,的值为,Value,。,Notify(p1,p2,Item,Value):,代表进程,p1,通知进程,p2,将,Item,的值更新为,Value,。,2.2.1,强一致性,在数据库的所有进程中,当更新完成,后续所有访问都将获得更新值。,弱一致性:即系统不能保证后续访问都将获得更新值。,2.2.2,最终一致性,在对,x,做出操作后,与最终看到新数值之前,存在一个时间片段,在这个时间片段内,数据也许是不一致的,即,“,不一致窗口,”,。,2.2.3,因果一致性,因果一致性发生在进程之间有因果依赖关系的情形下。,进程,A,与进程,C,没有因果依赖关系,则遵循最终一致性。,2.2.4“,读你所写,”,一致性,“,读你所写,”,一致性是因果一致性的特例。更新操作后,进程,A,后续访问到的都是新数值,其他进程并未受影响。,2.2.5,会话一致性,“,会话一致性,”,是,“,读你所写,”,一致性的变体。当进程,A,通过会话与数据库系统连接,同一个会话内,可以保证,“,读你所写,”,一致性,若会话终止,进程,A,的数值则会不一定。,2.2.6,单调读一致性,最终一致性的另一种变体。如果某个进程读取到数据,x,的一个数值,那么后续所有访问将不会返回任何之前的值。,2.2.7,单调写一致性,另外一种最终一致性的变体。对于某个进程来说,单调写一致性可以保证其多次写操作的序列化,同时也保证了应用开发者的顺利开发。,在实际的存储系统中,可以综合使用以上的一致性模型。,2.3,副本更新策略,2.3.1,同时更新,类型,A,B,有无一致性协议,没有任何,直接更新,有,是否有执行顺序,无,多个节点交叉,有,唯一确定,数据是否一致,不一致,一致,2.3.2,主从式更新,类型,A,:同步方式,B,:异步方式,C,:混合方式,含义,主副本等待所有从副本更新完成后才确认更新操作完成,主副本在通知从副本更新之前即可确认更新操作,主副本首先同步更新从副本数据,然后确认更新操作完成,其他副本通过异步方式获得更新,异步方式根据读操作的响应方式,可分为两种情形,根据读操作的响应方式,可分为两种情形,任意一个副本接收到读请求后,将其转发给主副本,任意一个副本都可响应读请求,同时更新了好多节点,至少要读出一个新数值,对读出的数值没有要求,优点,强一致性,保证了强一致性,请求延时大大降低,强一致性,-,缺点,请求延时较大,请求延时增加,结果不一致问题,请求延时增大,读不一致问题,2.3.3,任意节点更新,数据更新请求可能发给多副本中的任意一个节点,然后由这个节点来负责通知其他副本进行数据更新。,请求延时和一致性权衡有以下两种情形:,类型,A,:,同步通知其他副本,B,:,异步通知其他副本,特点,与,“,主从式更新,”,类型,A,类似,存在和,“,同时更新,”,及,“,主从式更新,”,策略类型,B,类似的问题,2.4,一致性协议,2.4.1,两阶段提交协议(,Two-Phrase Commit,2PC,),含义:,在大数据环境下,代表要么所有备份数据同时更改某个数值,要么都不更改。,两类实体:,唯一的协调者,众多的参与者。,两阶段提交过程:,协调者的有限状态机:,参与者的有限状态机:,从刚才的状态机中可以看出,协调者的等待状态,参与者的初始状态和准备状态都需要等待对方的反馈信息,进入了阻塞状态,而且很可能因有进程陷入崩溃而导致处于阻塞态的对象进入长时间的等待。为了解决这种情况,引入:超时判断机制和参与者互询机制。,进程,Q,状态,处于困境的参与者,P,的动作,COMMIT,COMMIT,ABORT,ABORT,INIT,ABORT,READY,与其他参与者联系,为了解决长时阻塞,提出了三阶段提交协议(,3PC,):,2.4.2,向量时钟(,Vector Clock,),向量时钟的作用,Alice、Ben、Cat,h,y和Dave四人约定下周一起聚餐,四个人通过邮件商量,聚餐的时间。,Alice首先建议周三聚餐。,之后Dave和Catby商量觉得周四更合适。,后来Dave又和Ben商量之后觉得周二也行。,最后Alice要汇总大家的意见,得到的反馈如下:,Cathy说,他和Dave商量的时间是周四,Ben说,他和Dave商量的时间是周三,此时恰好联系不上Dave,而且不知道Cathy和Ben分别与Dave确定时间的,先后顺序,Alice就不能确定到底该定在哪天了。,简单地说,就是为每个商议结果加上一个时间戳,当结果改变时,更新时间戳,向量时钟的更新规则,1.,每次修改数据,本节点的版本号加,1;,2.,当进程发送消息时,会将自己的向量时钟和消息,m,同时发送出,;,3.每次同步数据(,同步和修改是不一样的写操作哦,),会有三种情况:,本,节点的向量版本与消息携带过来的向量版本关系,操作,直接丢弃要同步的版本,出现冲突,有的分量版本大,有的分量版本小,冲突仲裁,2.4.3RWN,协议,这是对多备份数据如何读写成功进行灵活配置,达到数据一致性。,说明成功写入的备份集合和成功读取的备份集合一定会存在交集,保证了读取操作一定可以读到最新的数据版本。,字母,N,W,R,含义,在分布式存储系统中,有多少份备份数据,代表一次成功的更新操作要求至少有,W,份数据写入成功,代表一次成功的读数据操作至少有,r,份数据成功读取,若,R+WN,,则可称为满足,“,数据一致性协议,”,2.4.4Paxos,协议,1.,副本状态机模型,在实现副本状态机中的一致性协议时,追求以下特性:,安全性保证:即非拜占庭模型下,状态机从不返回错误的结果,多个提议中只有一个被选中。,可用性保证:只要大多数服务器正常,则整个服务保持可用。,一般情况下,大多数状态机维护,log,一致,即可快速通知客户端操作成功。,2.Paxos,一致性协议,2.4.5Raft,协议,1.,基本概念,服务器状态,Term,序列,1.,领导者选举,2.Log,复制,3.,安全性,