存储系统的设计门槛是比较高的,和计算系统存在的最大区别在于存储系统所承载的是数据,一旦系统出现故障,不仅业务的连续性得不到保障,更为重要的是用户数据将会造成丢失。计算节点发生故障,最多造成业务连续性中断,这是与存储系统相比在可靠性要求方面最大的区别。
十几年前刚刚接触存储系统的研发,当时没有觉得存储有多复杂,不就是把数据按照一定规则存放在磁盘中,并且实现一定的功能,例如数据保护RAID、数据复制Replication、数据快照Snapshot以及文件系统嘛。感觉存储系统中最复杂的是各种功能,设计重点就是在于这些存储软件功能的研发。在那一段研发经历的过程中,困扰我们最大的问题是经过长时间测试之后出现一个小概率的系统Panic问题;异常断电之后出现了不应该出现的数据一致性问题;出现问题之后很难去定位,需要通过不断的故障再现。总之,复杂庞大的存储软件栈很难收敛,甚至影响到了产品的推广。
经历国际一线存储大公司的洗礼之后,我发现以前研发的存储软件功能甚至比一线厂商的更加先进和酷炫。代码的风格和软件的层次化、灵活性一点都不比一线厂商的软件来的差。但是,一线厂商的存储产品就是特别稳定,尤其是一旦出现问题之后,可以通过很多方式尽快将问题收敛。很多人可能认为大公司在流程建设、项目管理、研发管理等方面更加健全,更加专业,可以更好的保证产品质量。通过长期总结,我领悟到其实事情并没有我们想象的那么简单,好的流程建设、项目管理以及研发管理是要建立在一支优秀团队基础之上的。这支优秀团队在设计存储系统时需要具备深入骨髓的面向数据可靠性设计的思想。而不是简单的具备面向功能设计的能力。面向数据可靠性设计其实要求架构师具备更高的、系统的全局能力,而不再局限于一个功能与子系统。对于存储系统来说,数据可靠性是底线,在整个系统设计过程中如果触碰了底线,那么再好的设计都将会埋入隐患,都将会对系统、对客户造成伤害。
存储系统的设计门槛就在这儿,如果要做到面向数据可靠性的设计,在这个底线基础上再做到超高的性能、极高的系统可扩展性、完备的功能、低廉的价格,的确对设计人员来说提出了不小的挑战。
说到面向数据可靠性的存储系统设计原则,我想举一个例子来详细探讨一下。大家都非常熟悉数据保护子系统RAID,并且很多人在选择RAID的时候只会考虑是用软件实现的?还是采用硬件实现的这个层面的问题。软RAID与硬RAID的问题讨论很多。在面向数据备份的重复数据删除系统中,很多设计者会将重点放在数据去重算法上,这是一个非常重要的软件功能,对于磁盘后端的存储,通常会采用高性能RAID6来搞定。并且对后端RAID的评价指标是高带宽或者很好的IOPS性能就可以了。市场上很多备份去重设备都是这样的设计思路。如果采用面向数据可靠性的设计思路,那么这种产品设计是不完美的,并且不是最佳的备份存储产品。大家知道数据备份往往是数据可靠性的最后的几个环节,如果备份系统都出现了问题,那么用户的数据从哪里恢复呢?在采用RAID6配置的备份系统中,如果出现了三盘同时故障的情况,用户的数据怎么办呢?这才是面向数据可靠性设计需要考虑的问题。
EMC著名的去重备份产品DataDomain在设计的时候就没有采用第三方的RAID卡,甚至都没有采用第三方的盘阵。原因很简单,RAID卡或者第三方盘阵在出现多个磁盘发生故障的情况下,没有办法提供极佳的数据恢复支持,而备份系统对数据可靠性的要求要高于应用与主存储业务中的盘阵或者RAID卡。所以,DataDomain在技术决策的时候选择研制面向备份领域的数据保护子系统DD-RAID。如果从功能的角度来讲,DD-RAID和普通RAID没有什么本质上的区别,只是具有更高级别的数据保护机制,在多盘发生故障的情况下,也可以通过额外的元数据信息恢复和抢救数据。在产品宣传方面DataDomain将一系列这样的技术都归纳为DIA,在各个层次都引入额外的数据校验、保护机制,保证数据可靠性。
当然,DD-RAID的性能不是最完美的,尤其是随机写性能很一般。但是,他的可靠性是最高的,并且在极端情况下都可以恢复数据。这就是在面向数据可靠性设计原则指导之下的技术选择,这也是存储系统设计颇具挑战的地方。如果没有全局视野,没有对存储系统、应用场景、技术细节的深入理解,是很难做出判断的。
如果具备面向数据可靠性设计的思想,那么我们在进行存储系统软件栈架构选择的时候比较容易的进行选择。存储软件是存储系统的核心,软件栈架构的优劣决定了这个存储系统的成败。一个优秀的存储软件架构可以进行长期持续演进、功能增强,并且保证数据的可靠性,遇到问题可以快速收敛,为公司沉淀核心价值;一个拙劣的软件架构,最终将会绑架整个产品,使得系统不收敛,数据可靠性遇到挑战,客户问题的解决要调整架构,公司得不到长期技术沉淀。其实,面向数据可靠性设计思想不仅仅在存储软件研发方面,而是融入到了存储产品研制的各个环节,包括软件架构的选择、代码编写、算法的选择、功能的定义、测试方法的定义、测试项目的定义、流程的定义、发布的方式,甚至包括售后处理、技术支持、问题解决方式等等各个方面。如果具备面向数据可靠性设计的思路,在产品研制的各个环节思路将会非常清晰,目标也会非常一致。
大家都说系统设计能力在硅谷。要具备这种能力不是简单的技术突破,不是对产品的了解多少,不是功能实现的突破,不是管理流程的掌握,更为重要的是设计思路的维度与高度。存储系统最底层的需求是数据可靠性,不具备面向数据可靠性的设计能力的团队只会让作战团队陷入沼泽。思路决定出路,为可靠存储而战,这才是存储之道。
本文转自 wuzhongjie 51CTO博客,原文链接:http://blog.51cto.com/alanwu/1879634,如需转载请自行联系原作者