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

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. [Android Tips] 5. INSTALL_PARSE_FAILED_MANIFEST_MALFORMED on Android-2.1

    最近在 http://testin.cn 上的多款 android 2.1 设备上出现安装失败的问题 INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 问题分析 貌似 a ...

  2. 隐藏,显示任务栏,桌面 C++代码

    HWND desktop,task; desktop=FindWindow(L"ProgMan",NULL); task=FindWindow(L"Shell_TrayW ...

  3. 解决img标签间距问题

    解决img标签间距问题 关于img标签间距问题:多个img之间有间距,包含img标签的div之间有间距. 代码如下: 1 <!doctype html> 2 <html lang=& ...

  4. C#.Net 调用方法,给参数赋值的一种技巧

    C#中可以给参数赋值默认值(其实这种写法有点不太好,有时会使方法的功能太复杂了)。 但是往往有多个默认参数时,有的参数需要使用默认值,有的不使用默认值,这时正常的写法就行不通了,解决方法可参照下边的代 ...

  5. JQ 全选、全不选

    $(document).ready(function() { $("#isalldebt").click(function() { if ($(this).attr("c ...

  6. H2.64的远程回放--开篇

    之前有2周一直在研究H.264的远程回放, 不是本机播放哦. 实现的步骤: 1. 先保证解码H.264 2. H2.64文件的解析, 当然是为了回放的速度 3. H.264帧的传输,  我用的是TCP ...

  7. 运行nodejs的blog程序遇见问题

    我是运行这个教程的代码.可以在网上找到相关视频和代码. 第一个问题,数据库中没有创建对应的表就开始运行程序.node app.js 这个错误问题大家可以去重现一下 第二个问题,我也没有看明白,但是我根 ...

  8. android权限使用

    1.拍照权限使用:

  9. java并发编程参考资料

    1.java编程思想 2.java并发编程实战 3.java并发编程的艺术 4.http://www.infoq.com/cn/author/%E7%A8%8B%E6%99%93%E6%98%8E#文 ...

  10. python学习笔记七 初识socket(进阶篇)

    socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...