分布式系统中一些主要的副本更新策略。

1、同时更新

  • 类型A:没有任何协议,可能出现多个节点执行顺序交叉导致数据不一致情况。

  • 类型B:通过一致性协议唯一确定不同更新操作的执行顺序,从而保证数据一致性

2、主从式更新

多个副本之间存在一个主副本(Master Replica),其他副本为从副本,这种称为主从更新策略。所有对数据的更新首先提交到主副本,再由主副本通知从副本进行数据更新。如果同时产生多个数据更新操作,由主副本决定不同更新操作的顺序。

类型A:同步方式

主副本等待所有从副本更新完成之后才确认更新操作完成,这样确保数据的强一致性,但是会存在较大的请求延时,尤其是在多副本跨数据中心的情形下,因为请求延时取决于最慢的那个副本的更新速度。

类型B:异步方式

主副本在通知从副本更新之前即可确认更新操作。假设主副本还没有通知任何其他从副本就发生崩溃,那么数据一致性可能会出现问题,一般首先在另外的可靠存储位置将这次更新操作记录下来,以防这种情况发生。

  • 1)所有读请求都通过主副本来响应,任意一个副本接收到读请求后转发为主副本,可以保证强一致,但是本来可以由距离近的副本响应的操作又得转发给距离较远的主副本,增加了请求延时,Google的Chubby采用这种方式。

  • 2)任意一个副本都可以响应读请求,请求延时大大降低,但是可能导致读不一致,因为有些副本可能还存在旧版本的数据,Zookeeper就是采用这种方法获得低延时,但牺牲了一致性。

类型C:混合方式

同步混合异步,主副本首先同步更新部分从副本,然后确认更新操作完成,其他副本通关异步方式获得更新,Kafka就是采用这种混合方式来维护数据副本的不一致性。

  • 1)读操作至少要从一个同步更新的节点读出,类似RWN协议的R+W>N,可保证强一致性,但是请求延时加大

  • 2)读操作不要求一定从至少一个同步更新节点读出,那么会出现类型B的第2种不一致性情形。

3、任意节点更新

不区分主从副本,任意节点都可以接收请求,然后又它去通知其他副本进行更新。

类型A:同步通知其他副本

存在和主从更新的类型A的情况,除此之外,为了识别出是否存在不同客户端向不同副本发送对同一数据的更新操作,还需要额外付出更多的请求延时

类型B:异步通知其他副本

存在主从更新的B方式问题。

Dynamo/Cassandra/Riak同时采取了主从式更新的类型C(同步+异步),以及任意节点更新的策略。

分布式系统中一些主要的副本更新策略——Dynamo/Cassandra/Riak同时采取了主从式更新的同步+异步类型,以及任意节点更新的策略。的更多相关文章

  1. 多图预警——从 RAID 到分布式系统中的副本分布

    原文首发于个人博客「tobe的呓语」欢迎大家的访问收藏啊~ 我们知道,在面对大规模数据的计算和存储时,有两种处理思路: 垂直扩展(scale up):通过升级单机的硬件,如 CPU.内存.磁盘等,提高 ...

  2. 菜鸟到大神之多图预警——从 RAID 到分布式系统中的副本分布

    我们知道,在面对大规模数据的计算和存储时,有两种处理思路: 垂直扩展(scale up):通过升级单机的硬件,如 CPU.内存.磁盘等,提高计算机的处理能力. 水平扩展(scale out):通过添加 ...

  3. 【分布式】Zookeeper在大型分布式系统中的应用

    一.前言 上一篇博文讲解了Zookeeper的典型应用场景,在大数据时代,各种分布式系统层出不穷,其中,有很多系统都直接或间接使用了Zookeeper,用来解决诸如配置管理.分布式通知/协调.集群管理 ...

  4. 解析Java分布式系统中的缓存架构(上)

    作者 陈彩华 文章转载交流请联系 caison@aliyun.com 本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景. 1 缓存概述 2 缓存的分类 缓存主要分为以下四类 2. ...

  5. <zk在大型分布式系统中的应用>

    Hadoop 在hadoop中,zk主要用来实现HA(High Availability).这部分逻辑主要集中在hadoop common的HA模块中,HDFS的NameNode和Yarn的Resou ...

  6. Netflix Hystrix — 应对复杂分布式系统中的延时和故障容错 转

    转自 https://segmentfault.com/a/1190000005988895 前言 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为 ...

  7. 分布式系统中我们会对一些数据量大的业务进行分拆,分布式系统中唯一主键ID的生成问题

    分布式全局唯一ID生成策略​ https://www.cnblogs.com/vandusty/p/11462585.html 一.背景 分布式系统中我们会对一些数据量大的业务进行分拆,如:用户表,订 ...

  8. zookeeper系列(五)zookeeper在大型分布式系统中的应用

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6063694.html 尊重原创感谢博主公开这么好的博文, ...

  9. 如何在高并发分布式系统中生成全局唯一Id

    月整理出来,有兴趣的园友可以关注下我的博客. 分享原由,最近公司用到,并且在找最合适的方案,希望大家多参与讨论和提出新方案.我和我的小伙伴们也讨论了这个主题,我受益匪浅啊…… 博文示例: 1.     ...

随机推荐

  1. for循环使用详解(c语言版)

    说明:c语言的很多语法部分都和JAVA,AS等相同 特别是for的用法. c语言中的for循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况 ...

  2. linux服务器性能优化

    1.这里的吞吐率特指Web服务器单位时间内处理的请求.       2.压力测试的前提:1>并发用户数 2>总请求数 3>请求资源描述       3.用户平均请求等待时间主要用户衡 ...

  3. 关于ClassLoader的一点小问题

    今天在看某框架的源码的时候,遇到一个使用URLClassLoader加载Servlet类的问题,当自己在eclipse里面做试验的时候,始终无法把Class加载成功.比如: ClassLoader c ...

  4. 原生JS--COOKIE

    原生JS--COOKIE: COOKIE基础及应用:1.什么是COOKIE==>页面用来保存信息,比如:自动登录,记住用户名2.COOKIE的特性:  --同一个网站中,所有的页面共享同一套co ...

  5. JS事件整理

    onclick 鼠标点击事件 ondblclick 鼠标双击事件 onmouseover 鼠标移入事件 onmouseout 鼠标移出事件 onmousedown 鼠标按下事件 onmousemove ...

  6. WEB前端的原理及组成

    1:认识WEB前端的组成部分和相关专业术语!具体的总结如下:

  7. mac攻略(一) -- git使用

    1.首先在官网下载 https://git-scm.com/download/mac   2.然后安装git(mac自带git)   3设置Git的user name和email:   $ git c ...

  8. Editplus配置VC++(1) 及相关注意事项

    下篇文章:Editplus配置VC++(2) 与/d1reportSingleClassLayout 原本用的是VC++2010 现在换成了Visual Studio 2013,editplus相关配 ...

  9. LPCTSTR 用法

    L表示long指针       这是为了兼容Windows  3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中,  long指针和near指针及far修饰符都是为了兼容的作用 ...

  10. WPFの三种方式实现快捷键

    最近,对wpf添加快捷键的方式进行了整理.主要用到的三种方式如下: 一.wpf命令: 资源中添加命令 <Window.Resources> <RoutedUICommand x:Ke ...