http://blog.csdn.net/u013394982/article/details/18259015

DDP功能,即Dynamic Disk Pool,它是除了现有的RAID0,1,10,5,6这些传统RAID磁盘组以外的,非常有效的存储管理技术。它可以极大地简化对于闲置空间,闲置存储资源的管理,当然对于现有RAID组,它也简化了管理工作。
在讨论DDP功能之前,我们需要理解以下两个基本的概念:
1。D-Piece:D-Piece是在一块物理硬盘上开出的一段连续的,大小为512MB的存储空间。其中,每个D-Piece包含了4096个存储段,通过计算:512MB/4096=128kb,即每个存储段就是128kb大小。在一个虚拟的存储池中,一个存储的volume是由分布在不同的10个物理硬盘上的D-Piece所组成。
2。D-Stripe:它是由10个分布在不同的物理硬盘上的D-Piece所组成的,大小为4GB。在D-Stripe内,存储数据是以类似于RAID6的条带和校验方式存储的,也就是说如果10个D-Piece组成一个Stripe的话,那么Piece的组织方式就是传统的8+2方式,8个Piece(4GB大小)是存储数据的,1个Piece保存校验信息,最后一个Piece保存RAID定义的Q值。

从虚拟磁盘和LUN的维度来理解,DDP就是一个虚拟磁盘池,这个池是由很多个按照用户需求来定义生成的4GB大小的D-Stripe组成的。

如图所示,如果一个DDP包含了12块物理硬盘,其中的任意10块物理盘中的D-Piece可以组成一个D-Stripe用于存储数据。这里需要注意的一点是D-Piece和D-Stripe是近似平均分配在12块硬盘上的,但是视实际使用情况和数据存储量来看,有可能会有一些出入。当系统管理员完成了对于DDP的存储的配置之后,就像传统的RAID6配置一样,存储就会创建相应的D-Piece和D-Stripe。这时候在应用侧,就会看见一个虚拟磁盘被创建了。这个虚拟磁盘的容量是由N个D-Stripe所组成,例如我需要一个大小为32GB的空间,那么包含在这个虚拟磁盘中的D-Stripe数量为 N(D-Stripe)= 定义空间大小/4GB。
例如:一个容量为500GB的虚拟磁盘,会包含500GB/4GB个,即125个D-Stripe,对于一个虚拟磁盘,数据的占用空间会从D-Piece的最低的LBA地址开始使用。

一个DDP磁盘池中,可以包含多个虚拟磁盘,当然在一套存储系统,也允许包含多个DDP磁盘池。对于系统管理员的需求,也可以把传统的RAID磁盘组和DDP磁盘池二者结合来使用。

和传统的RAID组类似,DDP可以通过DCE特性(动态扩容),动态增加硬盘的方式来对存储系统进行扩容,目前可以支持的最大动态扩容量为12块物理硬盘。当DCE功能初始化之后,保存在现有的D-Piece上的数据会有一小部分被迁移到新扩容的磁盘上来。

DDP的另一个优势是区别于传统意义上的RAID原理,它并没有专门指定的热备磁盘,这样当某一块硬盘存在失效风险的时候,它能提供一个所谓的“集成保护能力”这样不仅可以简化存储设备的管理,也能极大地提高重建的性能,节省时间。当DDP中的磁盘有失效的状态发生,类似于RAID6的重建机制是保存在D-Stripe中的,在重建的过程中,它可以保证在任意一块物理磁盘中不会保存同一个D-Stripe上的两个D-Piece。独立的D-Piece机制可以最小化LBA地址范围。

如图所示:6号盘失效,随后,之前保留在这块物理硬盘上的D-Piece数据会在其他的可用硬盘上进行重建。因为是由多块盘在进行写入操作,所以实际的重建时间要大大小于传统的RAID重建时间。当有多块盘失效之后,系统会优先重建那些包含丢失了两个D-Piece的D-Stripe所在的硬盘,以减少数据丢失的风险。当关键数据被重建之后,系统会继续将其他失效的数据进行修复,保证数据的持续可用。从控制器的资源分配角度来看,DDP提供了两种用户可以自由定义的重建优先级配置:

1。降级重建,只有失去一个D-Piece数据的物理硬盘会重建,失去两个的会暂时不可用。这个优先级默认为“高”
2。关键重建,重建失去两个D-Piece数据的物理硬盘,这个优先级默认为“最高”对于超大规模的磁盘池,如果有两块物理硬盘失效,这种情况发生的概率会随着磁盘数量的增大而降低,如之前讨论的内容,按照优先级的配置,关键重建仅仅会持续很小的一个时间窗口,使得数据可用,然后会非常快的进行降级重建,也就是说超大规模的磁盘池场景下,DDP可以保证一定的容错性。

例如,假设我们有一个192块物理硬盘组成的存储系统,当有两块物理硬盘失效之后,在1分钟之内,即可完成关键重建工作,在这1分钟之后,系统都是可以提供容错的工作状态的。从数学角度来看,这样规模的一个存储系统,仅仅有5.2%的概率会发生降级重建,关键重建场景发生的概率仅仅有0.52%,这意味着仅仅有5.2GB的数据会在关键场景下进行重建。

从图中可以看到,对比传统重建方式的持续时间的对比。对比传统的RAID组的工作模式,DDP大大简化了管理工作,从根本上说,对于存储系统的规划,系统管理员仅仅需要做一件事情,就是决定存储系统的硬盘数量。
当然,DDP功能也有一些限制,例如:
1。在虚拟磁盘中的数据段大小是128kb,这是固定的,不可以修改。
2。不支持动态的RAID组迁移功能
3。预读的冗余校验功能是不能基于虚拟磁盘来使用的。
4。DDP的最大容量是64TB
5。不支持SSD硬盘

存储设备的DDP功能详解的更多相关文章

  1. MySQL日志功能详解

    MySQL日志功能详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询日志 它是用来保存所有跟查询相关的日志,这种日志类型默认是关闭状态的,因为MySQL的用户有很多,如果 ...

  2. 【转】 /etc/fstab功能详解

    [转] /etc/fstab功能详解 最近去客户现场时,遇到 了一个关于挂载文件/etc/fstab文件的问题,就写了一下/etc/fstab文件的作用一个文件中各个参数的含义.供大家参考有不正确的地 ...

  3. .NET ORM框架 SqlSuagr4.0 功能详解与实践【开源】

    SqlSugar 4.0 ORM框架的优势 为了未来能够更好的支持多库分布式的存储,并行计算等功能,将SqlSugar3.x全部重写,现有的架构可以轻松扩展多库. 源码下载: https://gith ...

  4. Fiddler抓取https请求 & Fiddler抓包工具常用功能详解

    Fiddler抓取https请求 & Fiddler抓包工具常用功能详解   先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...

  5. Linux命令-自动挂载文件/etc/fstab功能详解

    Linux命令-自动挂载文件etcfstab功能详解 一./etc/fstab文件的作用 磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载. 系 ...

  6. python通过socket实现多个连接并实现ssh功能详解

    python通过socket实现多个连接并实现ssh功能详解 一.前言 上一篇中我们已经知道了客户端通过socket来连接服务端,进行了一次数据传输,那如何实现客户端多次发生数据?而服务端接受多个客户 ...

  7. 【转载】Linux命令-自动挂载文件/etc/fstab功能详解[转]

    博客园 首页 新随笔 联系 订阅 管理 随笔 - 322  文章 - 0  评论 - 19 Linux命令-自动挂载文件/etc/fstab功能详解[转]     一./etc/fstab文件的作用 ...

  8. iOS之UI--使用SWRevealViewController实现侧边菜单功能详解实例

    使用SWRevealViewController实现侧边菜单功能详解 下面通过两种方法详解SWRevealViewController实现侧边菜单功能: 1.使用StoryBoard实现   2.纯代 ...

  9. SVN功能详解

    SVN功能详解   TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. ...

随机推荐

  1. C# 泛型详解---进阶编程(七)

    今天我们来学习在C#的泛型技巧,传统的课本都在讲解什么是泛型,然后列举一大堆代码示例告诉你什么是泛型,今天我们就来聊聊更加本质的东西,我为什么要用泛型?它是来解决什么问题的?底层原理是什么? 简单来说 ...

  2. RabbitMQ在windows下的安装

    RabbitMQ 它依赖于Erlang,需要先安装Erlang.首先确定你的window电脑是32位还是64位,以下的安装以window 64位电脑举例.   运行行Erlang/OTP(otp_wi ...

  3. [LeetCode&Python] Problem 883. Projection Area of 3D Shapes

    On a N * N grid, we place some 1 * 1 * 1 cubes that are axis-aligned with the x, y, and z axes. Each ...

  4. 最优比率生成树 POJ 2728 迭代或者二分

    别人解题报告的链接: http://blog.sina.com.cn/s/blog_691190870101626q.html 说明一下关于精度的问题,当结果是精确到小数点后3为,你自然要把误差定为至 ...

  5. 最短路--spfa+队列优化模板

    spfa普通版就不写了,优化还是要的昂,spfa是可以判负环,接受负权边和重边的,判断负环只需要另开一个数组记录每个结点的入队次数,当有任意一个结点入队大于点数就表明有负环存在 #include< ...

  6. HTML第二课——css

    请关注公众号:自动化测试实战 先给大家提个建议,就是用sublime编辑器来编写.用其他的也无所谓,我只是建议,因为这个会帮你自动补全很多代码. css概念 css叫层叠样式表.意思就是一层一层的叠加 ...

  7. MyBatis 与 Spring Data JPA 选择谁?

    MyBatis 与 Spring Data JPA 选择谁? https://www.v2ex.com/t/285081 jpa predicate优缺点 https://blog.csdn.net/ ...

  8. WPF中使用BitmapImage处理图片文件(转)

    (1)图片从文件导入 BitmapImage image = new BitmapImage(); image.BeginInit(); image.UriSource = new Uri(filen ...

  9. benthos 通过rest api 配置 stream 说明

    stream 模式,我们可以通过rest api 进行控制 使用方法 启动 benthos --streams 进行流的配置(rest api) curl http://localhost:4195/ ...

  10. [unity3d]角色控制器组件相互间不碰撞

    RPG游戏会有这种需求. 队友之间,玩家之间.玩家与怪物之间,都有可能须要不能碰撞.怎样实现?这个问题困恼了一段时间,昨天在网上看到解答的方法: 这里举例玩家和怪物之间: 1,填加2个不同的层级mon ...