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

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. 响应式布局2--MATE

    随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而,每一款手机有不同的分辨率,不同屏幕 ...

  2. winform插件机制学习

    这两天在看自定义控件,原来有太多知识没有掌握.今天看到插件机制,心里突然一亮,这个东西听了不少次,就是不知道是啥回事.这次有幸书里包含一个案例,我就跟着它一步步来.终于知道是什么回事了.这个应该在软件 ...

  3. s3c2440 移值u-boot-2016.03 第4篇 支持NAND flash 识别

    1, /include/configs/smdk2440.h 中添加 #define CONFIG_CMD_NAND 编译 drivers/mtd/nand/built-in.o: In functi ...

  4. NS_ENUM vs. NS_OPTIONS

    NS_ENUM用于定义普通枚举值,NS_OPTIONS用于定义位移相关操作的枚举值: typedef NS_ENUM(NSUInteger, EOCConnectionState) { EOCConn ...

  5. 转 C# 装箱和拆箱[整理]

    1.      装箱和拆箱是一个抽象的概念 2.      装箱是将值类型转换为引用类型 :拆箱是将引用类型转换为值类型       利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的 ...

  6. SqlCommandBuilder的讨论

    之前也看过别人的解释,总感觉解释的不太理想,当然我自己的解释我尽量解释理想点,SqlCommandBuilder 是提供给外界对数据库的反操作的,如果只是对数据库的一个提取的话,那么用下面的代码足以 ...

  7. tomcat 大并发报错 Maximum number of threads (200) created for connector with address null and port 8080

    1.INFO: Maximum number of threads (200) created for connector with address null and port 8091 说明:最大线 ...

  8. C++头文件的组织

    转自:http://www.cnblogs.com/lidabo/archive/2012/04/17/2454568.html C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件 ...

  9. Cenos(6.6/7.1)下从源码安装Python+Django+uwsgi+nginx到写nginx的环境部署(一)

    梳理下这几个的关系: centos是redhat的社区版操作系统. Python2.7.5是开发语言(centos6.5下自带的python是2.6.6版本,所以需要源码更新,而centos7.1下面 ...

  10. Codeforces Round #356 (Div. 2)

    A. Bear and Five Cards time limit per test 2 seconds memory limit per test 256 megabytes input stand ...