监控硬盘的前生今世关于桌面硬盘、企业级近线硬盘(NL-SAS/SATA)和监控硬盘的差别,我们在前文中已经讲得很详细,这里再换一个角度来看看。

“监控硬盘是希捷和西数为视频监控定制的,典型的写多读少,一般读写比例为10:1。假设将读写比例变成1:1,则坏盘速度非常快。(企业级近线硬盘和监控盘的抗振能力)是不一样的,用的RV
Sensor和算法都不一样。”——浙江宇视科技有限公司 数据中心产品部总工 许钟生



这个与监控硬盘的设计思想和定位有关,按照我的理解,是在桌面硬盘的基础上尽量少增加硬件成本的情况下,对固件进行优化,使之在视频监控应用中能够有更好的表现,包括平均无故障时间和抗振能力等。



多年前,希捷只有一款专门定位于视频应用的SV35,就是今天监控硬盘的前身。当时我还曾与硬盘厂商的朋友开玩笑说:“它与桌面硬盘的区别就是写缓存算法吧?”



实际上可能不止于此,我们先来看看官方是怎么说的?



监控优化固件以提升耐用性:● ATA串流指令支持流畅的视频录制和回放,支持从多视频流录制更高分辨率的视频并可以尽可能减少掉帧● 指令完成时间更短,可以提升硬盘吞吐量,支持更多的摄像头、更高的分辨率● 节能模式可以全面减少功耗和发热● 可以在更高的温度下运行,独特的监控搜索配置文件可将发热降至最低● 噪声更低,运行更加安静● 为快速写入而优化的数据高速缓存,支持更多的摄像头且不影响吞吐量和性能

大存储容量:● 存储容量足以应对全天候运行和多摄像头应用● 支持高分辨率视频和存档的监控录像

物理设计改进:● 平衡马达可以将硬盘造成的振动降至最低并且可以降低噪音● 耐用的硬盘元件可以保证写入优化和全天候运行模式下的可靠性

监控存储应用的特点就是流式写入,I/O数据块较大,但不代表就是完全的顺序写入,因为还要考虑多路监控并发写入带来的影响。监控硬盘的最大特点应该是缓存针对写入做最大优化,一旦出现异常断电,丢失个几MB或者几十MB数据对视频监控系统来说没有多大影响。

也就是说,这种硬盘不需要为传统服务器工作负载而考虑;而企业级近线硬盘,需要能适应多种应用场景,会尽可能地保证数据一致性。以前在RAID环境中有专门的缓存保护技术,像数据库等关键应用通常建议关闭硬盘上的写缓存。

在上一篇中,我们提到了“希捷在最新一代Enterprise Capacity 8TB型号上内置了2MB NOR闪存,用于掉电时备份写缓存数据,因此可以打开WCE(Write Cache Enable)提升随机写性能。”这是企业级硬盘为兼顾性能和掉电保护做出的一种改良。

HGST最新的大容量企业级近线充氦硬盘,支持2种写缓存保护机制。除了在SAS接口版本上提供非易失性的NVC Quick Cache之外,还有另一种技术Media Cache——“开辟一小部分磁道作为将随机写I/O变成顺序写入的缓冲区”。

此外还有一个“Rebuild助手”模式。举例来说,在多块硬盘配置RAID+热备盘的情况下,如果故障盘只是某个磁头失效,那么在重建的过程中,其它碟面上的数据就可以从故障盘直接拷贝到热备盘,以减少对整个RAID组中其它硬盘增加的I/O开销,加快Rebuild过程同时减少二次故障风险。据了解,希捷现在也具备类似的技术,该功能需要配合RAID卡/控制器来实现。

监控硬盘显然不愿这样提高成本,加大DRAM写缓存的使用可以减少磁头写操作的次数,在同等硬件条件达到了一定的延长寿命的效果。但事物总是一分为二的,这种优化相应地就会削弱硬盘原本的读缓存,所以如果超出传统监控使用范围,读操作比例增大就会导致坏盘率提高。

所以,监控硬盘的应用场景是限定的,而企业级近线硬盘可胜任更广泛的用途。像噪音更低,实现方式就是降低转速和寻道速度,而性能则是“够用就好”的原则。至于物理设计改进,监控盘使用的组件比企业级近线硬盘还是要降低一个等级的。

传统RAID限制及应变之道这里再引用一段许先生给我们的反馈:“不是监控盘的RAID硬盘个数小于等于16个,即使用企业盘一般单阵列内推荐的硬盘数量也不超过16个(实际不超过15个左右),除了你说的共振之外,最主要的是性能,单RAID阵列从3-15块硬盘递增,性能也是递增的,但是超过十五块盘,性能会开始下降。一般的做法是24盘位阵列:11+12+1,性能最高。”

许先生是监控存储方面的专家,考虑问题以及推荐的一般做法,都是以监控用途为出发点。除了性能之外,传统RAID组中磁盘数量越多,Rebuild时要读取的数据量也是成正比的(前面介绍的硬盘快速Rebuild技术目前应用还不普及),出现第2、3坏盘的概率也会增大。

我的另一位朋友杨小雷也曾在微博里面提到,在RAID卡固定条带大小的情况下,参与硬盘数量越多Rebuild速度也会越慢。

因此在RAID卡和一些设计比较传统的磁盘阵列上,硬盘数多了之后一般需要人为分成多个RAID组,在操作系统的卷管理器层面,再根据需要“拼”或者条带化成逻辑卷。在今天看来这样不是太方便,并且对规划人员也会有要求。那么如果我们在底层不愿意分成多个RAID组,解决之道就是宽条带化。

如上图,左边的“传统存储系统”基于磁盘做RAID,当RAID上的LUN映射给某个前端主机时,它的性能会受限于该RAID组的磁盘数量。而像以戴尔SC(Compellent)等为代表的存储系统,先将磁盘切割为数据块(粒度细化的可达到512KB-4MB),然后在这些数据块/页面之间做RAID。也有人后来给宽条带化RAID起了RAID
1.5、RAID2.0… 的叫法。

由于底层虚拟化打散的原因,宽条带化RAID可以在更大的存储池上,保持理想的数据/冗余校验位比例,比如RAID 5 4+1和RAID
6 8+2等。这样单个LUN就能享受到整个磁盘池的性能,同时还不用面对传统RAID组磁盘数量过多所带来的问题。

宽条带化比传统RAID更加智能,而这只是先进的企业级存储系统相对于使用RAID卡或者软RAID搭建廉价存储服务器的优势之一。尽管许多监控存储在成本控制上要求较高,但是“高投入、高回报”的道理仍然适用。除了存储操作系统、硬盘选择之外,一款设计优秀的双控制器阵列还在更多方面保障设备的可靠性和可用性,包括我们前文谈过的共振考虑,以及冗余模块化组件无单点故障等。

从硬盘设计思想到RAID改良之道的更多相关文章

  1. 关于硬盘和几种RAID

    1 硬盘的基本工作原理 1.1 硬盘部件结构图 1.2 主要参数术语解释 磁头:在与硬盘交换数据的过程 中,读操作远远快于写操作,硬盘厂商开发一种读/写分离磁头. 转速(Rotationl Speed ...

  2. 转:android异步任务设计思详解(AsyncTask)

    这里说有设计思想是我根据查看Android源代码提炼出来的代码逻辑,所以不会跟Google工程师的原始设计思想100%符合(也有可能是0%),但是本文一定可以帮助你理解AsyncTask,也可能有一些 ...

  3. 浅谈由管理者角色引出的B端产品设计思考点

    本文来自网易云社区 作者:任琼瑶 最近一直都在持续跟进云课堂B端的交互设计,在此期间,多多少少遇到了一些不曾遇到过的问题,虽然同是做产品设计,但B端和C端产品的确存在很多不同之处. 首先,当我们在做C ...

  4. Balanced Lineup 倍增思想到ST表RMQ

      Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 36864   Accepted: 172 ...

  5. 读<<领域驱动设计-软件核心复杂性应对之道>>有感

    道可道,非常道. 名可名,非常名. 无名天地之始,有名万物之母. ---老子 关于标题 好久没写东西了,动笔的动机是看完了一本书,想写点总结性的东西,一是为了回顾一下梳理知识点,二是为了日后遗忘时能有 ...

  6. 硬盘-RAID 5组建

    没发正文之前本人先声明一下----本文是转载 这篇文章简直是太精彩了,呵呵 ,实在是忍不住了,一定要贴出来,让大家分享! 原作者:唐华 责任编辑:xiexiaojin 我们生活在一个历史记录在硬盘上的 ...

  7. 【linux相识相知】独立硬盘冗余阵列-RAID

    独立硬盘冗余阵列(RAID,Redundant Array of Independant Disks),旧称为廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks ...

  8. 什么是RAID

    RAID 维基百科,自由的百科全书 关于与「 RAID 」同名的其他主题,详见「 RAID (消歧义) 」. 独立硬盘冗余阵列 ( RAID , R edundant A rray of I ndep ...

  9. 独立硬盘冗余阵列与HDFS

    http://zh.wikipedia.org/wiki/RAID 独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Re ...

随机推荐

  1. 自动化统一安装部署tomcat

    背景:多台服务器来回切换,安装部署tomcat,浪费时间 目的: 一次修改,统一安装,统一部署. 进程:ps -ef|grep tomcat|grep -v 'grep'|awk '{print $2 ...

  2. Nigix加入Hello World模块

    详细资料:<深入理解Nginx> 1.编写第三方模块 建立文件夹hello,里面有两个文件: ngx_http_mytest_module.c #include <ngx_confi ...

  3. TCP/IP详解 卷一(第二十章 TCP的成块数据流)

    本章将介绍TCP所使用的被称为滑动窗口协议的一种流量控制方法. 该协议允许发送方在停止并等待确认前可以连续发送多个分组,这样就可以加速数据的传输. 滑动窗口 下图用可视化的方法显示了滑动窗口协议 我们 ...

  4. 正则表达式Pattern ,Matcher

    正则表达式:符合一定规则的表达式 作用:用于专门操作字符串 特点:用于一些特定的符号来表示一些代码的操作,这样就简化代码的书写 学习正则表达式就是要学习一些特殊符号的使用 好处:简化对字符串复杂的操作 ...

  5. 基于React的PC网站前端架构分析

    代码地址如下:http://www.demodashi.com/demo/12252.html 本文适合对象 有过一定开发经验的初级前端工程师: 有过完整项目的开发经验,不论大小: 对node有所了解 ...

  6. Github上的PHP开源资源汇总

    依赖管理 ——用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers:  一个多框架Composer库安装器 Pickle: 可以 ...

  7. HTTP ----通信机制

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: (1)    建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立 ...

  8. HTML5 2D平台游戏开发#9蓄力技

    在很多动作游戏中,玩家操控的角色可以施放出比普通攻击更强力的蓄力技,一般操作为按住攻击键一段时间然后松开,具体效果像下面这张图: 要实现这个操作首先要记录下按键被按住的时间,初始是0: this.sa ...

  9. spark 的一些常用函数 filter,map,flatMap,lookup ,reduce,groupByKey

    定义不带参数也不带返回值的函数(def :定义函数的关键字  printz:方法名称) scala> def printz = print("scala hello")   ...

  10. mock测试类的时候,添加@InjectMocks

    1.在单元测试某个类的时候,引入该类的时,添加注解@InjectMocks 2.该类的变量,需要添加注解:@Mock 3.类中需要第三方协作者时,通常会用到get和set方法注入.通过spring框架 ...