分布式系统种的强一致性、弱一致性是什么?
在分布式系统中,一致性是指多个节点之间数据同步的保证程度。根据对数据实时性和一致性的要求不同,主要分为强制性和弱一致性两大类,并进一步细分为多种模型。强一致性
强一致性是指任何时刻所有节点的数据完全一致,读写操作都能立即获得最新值。强一致性要求系统表现得像单一节点,所有操作按全局顺序执行。
强一致性按照“全局时钟是否有序”分为两个模型:
●顺序一致性
指不同进程内部的读写操作相互隔离,只在进程内部有序,而非全局时钟下的有序。
举个例子,如下图(a)所示,进程P2先启动,进行了Write(y,2)的操作,而进程P1在P2开始Write(y,2)不久后启动,并进行了Write(x,4),虽然该写操作在进程P2开始Read(x,0)前完成,但由于P1与P2遵循顺序一致性,两个进程之间的操作相互隔离,所以P2进行读操作时,读取到的x是0,仍然是旧值。两个进程按进程间的执行顺序结果为:
Write(y,2)-->Read(x,0)-->Write(x,4)-->Read(y,2)
●线性一致性:
指不同进程之间的读写操作遵循全局时钟有序性。
举个例子,如下图(b)所示,进程P2先启动,进行了Write(y,2)的操作,而进程P1在P2开始Write(y,2)不久后启动,并进行了Write(x,4),在P1对x进行写操作时,进程P2启动了对x的读操作,此时能读取到进程P1更新了x的最新值4。且随后P1进行了对y的读操作,读取到P2更新后的y最新值2。两个进程的所有读写操作按全局时钟排序是:
Write(y,2)-->Write(x,4)-->Read(x,4)-->Read(y,2)
弱一致性
弱一致性是指允许数据在短期内不一致,但最终会达到一致状态。弱一致性优先保证系统可用性和性能,弱一致性又可称为最终一致性。
按照常见的划分,弱一致性总共有5种模型:因果一致性、读己之所写一致性、会话一致性、单调读一致性、单调写一致性。
●因果一致性:
是指保证有因果关系的操作保持顺序,而没有因果关系的操作之间则没有此约束。
举个例子,节点A更新了某项数据之后通知节点B,那么节点B对该数据的访问和修改都是基于节点A更新后的值。与此同时,与节点A无因果关系的节点C的数据访问则没有此限制。
●读己之所写一致性:
是指节点自身更新了某项数据,则该节点后续的访问和修改都是基于更新后的数据进行。从某种程度上来说,也属于因果一致性。
●会话一致性:
是指一个会话中,一个线程对某项数据的写操作之后,后续的读线程读取到的都是该项数据的最新值。该模型把访问存储系统的进程放到会话上下文中。
●单调读一致性:
如果进程已经看到节点的某个数据项的值,则在后续访问均不会看到比该值更早的值。
●单调写一致性:
系统保证同一进程的写操作顺序一致性。
弱一致性本质上是通过牺牲一定的时间窗口内整个分布式系统所有节点数据的一致性,来提高系统的可用性。如何降低达到整体一致性的时间窗口是分布式核心关注的问题。
参考
https://zhuanlan.zhihu.com/p/618127949
设计数据密集型应用.
https://blog.csdn.net/weixin_45863010/article/details/143569985
Top 收藏 关注 评论
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]