热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RAID技术穷途末路了吗?

自从1988年伯克利大学发明RAID(磁盘阵列)技术以来,RAID一直是存储领域的核心,肩负着保护数据的重任。但是随着磁盘容量的不断增大,

自从1988年伯克利大学发明RAID(磁盘阵列)技术以来,RAID一直是存储领域的核心,肩负着保护数据的重任。但是随着磁盘容量的不断增大,RAID技术遇到了前所未有的新问题。最大的问题在于在数据重构时间过长,延长了系统degraded时间,增加了多个磁盘故障的概率,降低了数据可靠性。并且在RAID数据重构过程中,RAID自身的Rebuild IO对应用IO造成了影响,直接导致应用IOperformance大为降低。更为严重的是,应用IORebuild IO构成了互为影响的关系,大量的应用IO也会导致Rebuild时间进一步延长。

 

目前,在存储系统中,4TB盘即将大面积应用。4TB盘的应用必须要考虑RAID自身存在的问题。在此,我做了一个小小的实验,对一个存储厂商的RAID Rebuild时间进行了评估,在没有应用IO的前提下,对于500GB的盘,需要将近2个小时的Rebuild时间,而对于4TB的盘,Rebuild时间增加到了14小时以上。

 

215300953.jpg

磁盘容量和重构时间之间的关系

 

目前我们常用的RAID算法是RAID-6,即可以最多容忍2块磁盘失效,如果超过两块磁盘失效,那么将会导致整个RAID系统Crash。所以,在14小时之内,如果又存在两块磁盘发生读写错误,那么整个RAID系统将会失效,这是未来RAID需要解决的最大问题。

面对上述问题,业内提出了一些解决方案,基本思路有如下几种:

1,延续RAID5RAID6的技术思路。Rebuild时间可以尽最大努力进行优化,例如采用Copy的方式替代传统Rebuild方法(中科院计算所专利)。另外,如果可以让RAID容忍更多磁盘失效,例如,容忍3快磁盘失效,那么再长的重构时间也不是什么太大的问题。因此,业内很多人开始研究开发可以容忍三块磁盘失效的算法,典型算法是Reed-solumen算法。我们把这种思路的RAID称之为RAID-7RAID-7最大的问题在于需要更强的计算资源,RAID-7计算复杂度比RAID-6高了很多,因此,RAID-7的研发需要硬件厂商一起参与研究、开发。

 

2,De-clustered RAID思想。Declustered RAID的一个思想前提在于:在绝大多数情况下,故障磁盘模型是Partial Failure(局部损坏)而不是整体损坏。为此,Declustered RAID将一个磁盘划分成多个区域,并且基于这些区域构建RAID。如果读写错误发生在一个区域中,那么RAID只需要重构该区域,而不需要重构整个磁盘。这种思想可以降低Rebuild时间,并且可以将Spare空间分散到多个区域的不同磁盘上,可以避免Rebuild过程中Spare盘成为IO瓶颈点。Declustered RAID对大容量磁盘故障模型进行了研究,对现有RAID进行了优化,但是,个人认为灵活度不够,不能有效地分离应用IORebuild IO

 

3,在底层虚拟化(Low Level Virtualization)的基础上构建RAID。由于磁盘容量不断增大,那么我们有必要在RAID的下层增加一个管理物理磁盘的虚拟化层,通过该虚拟化层来管理物理磁盘,并且为RAID提供虚拟磁盘。当遇到读写错误的时候,虚拟化层可以Remap RAID的请求,从而使得很多错误信息对RAID透明,减少RAID数据重构次数。由于有了这个虚拟化层,可以很容易的实现Data Awareness的数据重构方式,进一步降低RAID重构时间。由于虚拟化层可以对底层物理资源进行管理,因此,可以对磁盘健康状态进行监测,从而对存储资源进行合理分配,达到数据可靠存储的目的。最为重要的是,虚拟化层可以对应用IORebuild IO进行分离,在很多情况下,Rebuild IO不会对应用IO造成性能影响。当然,底层虚拟化也会存在一些问题,最为关键的是存储资源如何分配?尽最大可能不浪费存储空间。目前,我正在对该领域进行研究探索。

 

4,在很多集群文件系统中,基本已经放弃了传统RAID技术,并且将数据冗余保护的功能放在了文件系统层面。例如Hadoop文件系统直接在文件系统层面将数据冗余存储三份。

 

RAID技术一直是数据存储的关键,面对磁盘容量不断增加的今天,我们有必要思考RAID技术的未来,今天4TB磁盘即将大面积应用,明天10TB硬盘还会远吗?

 



推荐阅读
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 本文详细介绍如何使用Netzob工具逆向未知通信协议,涵盖从基本安装到高级模糊测试的全过程。通过实例演示,帮助读者掌握Netzob的核心功能。 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 本文介绍了如何使用Visual Studio Code、Sublime Text等编辑器批量删除MATLAB代码中的注释和空行,同时提供了一些高级技巧以确保代码的整洁。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在Linux系统中,通过使用`read`和`write`函数可以实现文件的高效复制操作。`open`函数用于打开或创建文件,其返回值为文件描述符,成功时返回一个有效的文件描述符,失败时返回-1。`path`参数指定了要操作的文件路径,而`oflag`参数则定义了文件的打开模式和属性。此外,为了确保数据的完整性和一致性,还需要合理处理文件读取和写入过程中的错误和异常情况。 ... [详细]
  • Objective-C 中的委托模式详解与应用 ... [详细]
author-avatar
把默认珀尔_430_394
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有