本文来自网易云社区

作者:孙建良

在分布式存储系统 中说明了,在一定情况下,copyset的数量不是越多越好,在恢复时间确定的情况下,找到合适的copyset的数量可以降低数据丢失的概率。

在分布式存储系统可靠性系列文章分布式存储系统可靠性-设计模式一文中也总结道:

为了提高存储系统数据可靠性,首先在系统允许的成本范围内选择合适的副本数,再次在系统设计中我们首先优先考虑加快数据恢复时间,在此基础上减小系统的copyset数量。使得在既定的成本下达到尽可能高的可靠性。

其实在业界也已经有团队在这方面有过实践和经营总结。《Copysets: Reducing the
Frequency of Data Loss in Cloud Storage》
,这篇paper是斯坦福大学的学生在facebook HDFS集群上作实验,为了有效降低数据丢失概率,数据放置算法,从原来的Random Replicaiton更改为copyset Replication 算法,实验结果说明可以将FaceBook HDFS集群1%节点故障时的数据丢失概率从22.8%降低道0.78%

  • Motivation: 降低数据丢失概率

  • Innovation: 减少copyset数量可以降低数据丢失概率

  • Implementation: copyset Replication

  • Evaluation: 在Facebook HDFS集群1%节点故障时,22.8% to 0.78%

以下总结分析3种较为典型的副本分布策略,即 Random Replication、Randon Relication With Failure Domain、CopySet Replication,并简单分析这些策略情况下的数据丢失概率。

1 Random Replication

如上为典型的副本随机放置策略,1个大文件分为很多chunk(或称为block),chunk的大小比如64M, chunk的放置并没有什么限制,每个chunk数据的放置基本是按照随机策略进行,当然也可能会考虑容量的均衡,但是基本上是属于一种随机策略。

在R副本,节点数为N的集群中:

  • 集群放置方式(即最大copyset数量) K = C(N, R)

  • R个节点故障:C(N, R)

  • R个节点故障时,丢数据概率:Min(K, #chunk) / C(N, R) = 1

  • 如果chunk很多,概率接近于1

2 Random Replication With Failure Domain

如上这种机架感知的副本放置策略情况下,主要的设计原因为保障数据可用性,在一个机架端点或者故障情况下,还有其他机架上的数据还是可用的。如图中所述,放置策略为:

  • 一个副本放置在本节点

  • 第二个副本放置在remote Rack的 节点上

  • 第三个副本放置哎remote Rack 的另外一个节点上

  • 如果还有其他副本,其他副本随机放置

在R副本,节点数为N,故障域数量为N的集群中:

  • 集群放置方式(即最大copyset数量):K = C(Z, 2)  C(N/Z, 1)  C(N/Z, R-3)

  • R个节点故障:C(N, R)

  • R个节点故障时,丢数据概率:Min(K,#chunk) / C(N, R)

3 CopySet Replicaitions

从上面2中放置策略可以基本得出较为单一的结论:

  • 放置方式越多,数据越分散,发生R节点故障时,数据丢失概率越大。

当然并不是说放置方式越少越好,最小的方式直接组织磁盘为RAID 0 mirror 方式,但是这种情况下数据恢复时间较长,从而会进一步加大数据丢失概率。

这里先不讨论,恢复时间和数据分散 在什么样子的搭配情况下会得到最优的情况。只探讨在固定恢复时间情况下,如何有效控制数据打散程度,得到最好的可靠性。

恢复速度与scatter width成正相关,所谓scatter width:

scatter width: 一块盘上的数据所对应的副本数据会打散到其他盘上,所谓scatter,就是所有这些副本数据所对应的盘的数量。scatter width 越大,参与进行数据恢复的节点越多,恢复速度越快,所以固定恢复速度情况下,是可以算出究竟需要多大的scatter width。

scatter width 确定情况下,如何副本放置算法如何确保磁盘的scatter width?

接下来就是轮到CopySet Replication 算法出场了。

其实算法原理很节点,看下下面这张图就成,算法根据系统节点数,和副本数量,进行多个轮次的计算,每一轮次把所有节点按照副本数划分为 N/R 个copyset。每次确保其中的copyset 不与当前和之前所有轮次中已经产生的copyset相同,最后数据写入的时候,选择一个copyset 写入即可。 由于每个排列会吧S(Scatter Width)  增加R-1,所以
算法执行P = S/(R-1) 次, K(CopySet数量) = P  (N/R) = S/(R-1) (N/R)

显然相比前两种策略,CopySet Replication在保障恢复时间的基础上能够得到最佳的数据分布策略。

另外在随机放置情况下,其实如果使用小文件合并成大文件的存储策略,可以通过控制大文件的大小,从而控制每个磁盘上大文件的数量,比如100G一个文件,8T盘上的最大文件存储数量也就是8T/100G = 80个文件,显然也就是能够很好的控制一个数据盘的数据打散程度,但是相对而言CopySet Replication 更多的是一种较为通用的算法,而这种算法更多的是适用于特定构架的分布式存储系统,即小文件合并成大文件。

4 参考文献

云硬盘是网易云提供的数据持久化服务,为云服务器和容器服务提供弹性块存储设备。

网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区。

相关文章:
【推荐】 试水新的Angular4 HTTP API
【推荐】 如何从“点子”落地到“执行”?—完整解析1个手游传播类mini项目的进化

分布式存储系统可靠性系列五:副本放置算法 & CopySet Replication的更多相关文章

  1. 系列五AnkhSvn

    原文:系列五AnkhSvn AnkhSvn介绍 AnkhSVN是一款在VS中管理Subversion的插件,您可以在VS中轻松的提交.更新.添加文件,而不用在命令行或资源管理器中提交.而且该插件属于开 ...

  2. java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别

    java基础解析系列(五)---HashMap并发下的问题以及HashTable和CurrentHashMap的区别 目录 java基础解析系列(一)---String.StringBuffer.St ...

  3. CSS 魔法系列:纯 CSS 绘制各种图形《系列五》

    我们的网页因为 CSS 而呈现千变万化的风格.这一看似简单的样式语言在使用中非常灵活,只要你发挥创意就能实现很多比人想象不到的效果.特别是随着 CSS3 的广泛使用,更多新奇的 CSS 作品涌现出来. ...

  4. Netty4.x中文教程系列(五)编解码器Codec

    Netty4.x中文教程系列(五)编解码器Codec 上一篇文章详细解释了ChannelHandler的相关构架设计,版本和设计逻辑变更等等. 这篇文章主要在于讲述Handler里面的Codec,也就 ...

  5. WCF编程系列(五)元数据

    WCF编程系列(五)元数据   示例一中我们使用了scvutil命令自动生成了服务的客户端代理类: svcutil http://localhost:8000/?wsdl /o:FirstServic ...

  6. JVM系列五:JVM监测&工具

    JVM系列五:JVM监测&工具[整理中]  http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介 ...

  7. SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型

    原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测 ...

  8. VSTO之旅系列(五):创建Outlook解决方案

    原文:VSTO之旅系列(五):创建Outlook解决方案 本专题概要 引言 Outlook对象模型 自定义Outlook窗体 小结 一.引言 在上一个专题中,为大家简单介绍了下如何创建Word解决方案 ...

  9. HDFS副本放置策略和机架感知

    副本放置策略 的副本放置策略的基本思想是: 第一block在复制和client哪里node于(假设client它不是群集的范围内,则这第一个node是随机选取的.当然系统会尝试不选择哪些太满或者太忙的 ...

随机推荐

  1. Miner3D Developer 开发工具

    ——可视化的数据挖掘整合工具 在开发项目中,客户的要求多种多样.当开发者面临高挑战的工作时,完全可以选择Miner3D这样的软件,依赖其强大的数据可视化的特点,以及其他的明显的技术优势,提供给最终用户 ...

  2. spring 中使用quartz实现定时任务

    一般开发系统,使用定时任务非常常见.当然也可以用Java实现.比如定时器.大致如下: 1: public static void main(String[] args) { 2: Timer time ...

  3. Q9400为何难以100%全速运行

    采用基于正域的约简. 数据:Ticdata2000 记录数:5822 条件属性:85 结果: 1. Core i7 3632QM 4四核八线程 2.2G 动态加速3.2G 0.516s 2. Core ...

  4. CVE-2018-4878

    0x00前言 该漏洞影响 Flash Player 版本28.0.0.137以及之前的所有版本 0x01 poc Poc 这里只列出关键代码 public function triggeruaf() ...

  5. 阿里云服务器下安装LAMP环境(CentOS Linux 6.3) 安装与配置 Apache 服务

    想让我们的阿里云服务器成为一台 Web 服务器,我们需要安装一个 Web 服务器软件,比如 Apache ,或者 Nginx 等等.下面我们就一起来安装一个 Apache 服务. 我们可以使用 yum ...

  6. LigerUi中表(Grid)控件的相关属性笔记

    http://blog.csdn.net/dxnn520/article/details/8216560 // ========================================= [每 ...

  7. quartz调度

    http://www.cnblogs.com/lzrabbit/archive/2012/04/14/2446942.html

  8. node第一天

    一.主要执行的文件命名一般为main.js var aModule =require('./a.js');//相对路径 var aModule =require('a.js');//专门从node_m ...

  9. 如何在vue项目中使用md5加密

    npm安装: npm install --save js-md5 1.在需要使用的项目文件中引入: import md5 from 'js-md5'; 使用: md5('hello world') / ...

  10. MySQL数据库的下载安装

    目录 一.概述 二.MySQL安装 三.安装成功验证 四.NavicatforMySQL下载及使用 一.MySQL下载 MySQL版本:5.7.17 下载地址:https://dev.mysql.co ...