面向数据可靠性存储系统设计思想探讨

简介:

存储系统的设计门槛是比较高的,和计算系统存在的最大区别在于存储系统所承载的是数据,一旦系统出现故障,不仅业务的连续性得不到保障,更为重要的是用户数据将会造成丢失。计算节点发生故障,最多造成业务连续性中断,这是与存储系统相比在可靠性要求方面最大的区别。

 

十几年前刚刚接触存储系统的研发,当时没有觉得存储有多复杂,不就是把数据按照一定规则存放在磁盘中,并且实现一定的功能,例如数据保护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,在各个层次都引入额外的数据校验、保护机制,保证数据可靠性。

 

wKioL1hFKWHANDtnAACn3aPNBjg811.jpg


当然,DD-RAID的性能不是最完美的,尤其是随机写性能很一般。但是,他的可靠性是最高的,并且在极端情况下都可以恢复数据。这就是在面向数据可靠性设计原则指导之下的技术选择,这也是存储系统设计颇具挑战的地方。如果没有全局视野,没有对存储系统、应用场景、技术细节的深入理解,是很难做出判断的。

 

如果具备面向数据可靠性设计的思想,那么我们在进行存储系统软件栈架构选择的时候比较容易的进行选择。存储软件是存储系统的核心,软件栈架构的优劣决定了这个存储系统的成败。一个优秀的存储软件架构可以进行长期持续演进、功能增强,并且保证数据的可靠性,遇到问题可以快速收敛,为公司沉淀核心价值;一个拙劣的软件架构,最终将会绑架整个产品,使得系统不收敛,数据可靠性遇到挑战,客户问题的解决要调整架构,公司得不到长期技术沉淀。其实,面向数据可靠性设计思想不仅仅在存储软件研发方面,而是融入到了存储产品研制的各个环节,包括软件架构的选择、代码编写、算法的选择、功能的定义、测试方法的定义、测试项目的定义、流程的定义、发布的方式,甚至包括售后处理、技术支持、问题解决方式等等各个方面。如果具备面向数据可靠性设计的思路,在产品研制的各个环节思路将会非常清晰,目标也会非常一致。

 

大家都说系统设计能力在硅谷。要具备这种能力不是简单的技术突破,不是对产品的了解多少,不是功能实现的突破,不是管理流程的掌握,更为重要的是设计思路的维度与高度。存储系统最底层的需求是数据可靠性,不具备面向数据可靠性的设计能力的团队只会让作战团队陷入沼泽。思路决定出路,为可靠存储而战,这才是存储之道。



本文转自 wuzhongjie 51CTO博客,原文链接:http://blog.51cto.com/alanwu/1879634,如需转载请自行联系原作者

相关文章
|
存储 缓存 安全
几种分布式存储系统的分析【转】
转自:http://blog.csdn.net/stanjiang2010/article/details/6108502 分布式文件系统设计主要关注几个方面: 设计特点、分布式能力、性能、容灾、维护和扩展、成本   分布式文件系统主要关键技术: 全局名字空间、缓存一致性、安全性、可用性、...
1500 0
|
存储 监控 算法
|
4月前
|
存储 缓存 监控
如何设计一个高可靠性的分布式缓存系统?
如何设计一个高可靠性的分布式缓存系统?
|
6月前
|
存储 缓存 负载均衡
基于C++的高性能分布式缓存系统设计
基于C++的高性能分布式缓存系统设计
189 1
|
存储 SQL 监控
【可靠性架构】可靠性架构第3部分:高可用性体系结构
在本节中,我们将回顾一个示例应用程序,并阐述部署架构如何因不同的可用性目标而变化。示例应用程序是一个典型的web应用程序,它具有反向代理、S3中的静态内容、应用程序服务器和SQL数据库。无论我们在容器还是虚拟机中部署它们,可用性设计都保持不变。
|
存储 设计模式 弹性计算
【可靠性架构】可靠性架构第1部分:概念
本故事的目标是提供可靠性的最佳实践来管理您的云环境。尽管它引用了AWS和Cloud,但这些原则同样适用于其他云提供商和内部环境。
|
存储 缓存 算法
提高存储系统性能的技术
提高存储系统性能的技术
159 0
|
存储 消息中间件 缓存
分布式系统中数据存储方案实践
在项目研发的过程中,对于数据存储能力的依赖无处不在,项目初期,相比系统层面的组件选型与框架设计,由于数据体量不大,在存储管理方面通常容易被轻视,当项目发展进入到中后期阶段,系统的复杂性很大程度来源于数据层面;
321 0
分布式系统中数据存储方案实践
|
存储 弹性计算 人工智能
集中式架构和分布式架构哪种更好?
集中式架构的优势主要是设备数量少,架构设计简单、通用与应用耦合度低,资源可以灵活调度,部署容易。数据集中存储和处理,无需多个节点之间分布式协作,所以具有系统响应快,数据可靠性和一致性好的优点。由于架构简单,设备少,所以在系统运维,容灾设计,空间用电等方面都具有较大优势。稳健、可靠、易维护管理是集中式架构的特点,所以集中式架构多用于传统的银行、电信、交通、医疗等行业。数据显示,2019年,仍有92%的银行选择购买集中式架构的服务器,以确保关键业务稳定运行。 而分布式架构的优势主要是灵活、性价比高,同时也安全自主,其弹性伸缩能力优势明显。所以随着时下数据量的剧增,分布式架构在这方面的能力展露锋芒
635 0
|
OceanBase 数据库 关系型数据库
在「不可靠」硬件上,分布式数据库如何保证数据可靠性和服务可用性?
“数据不能丢,服务不能停”,OceanBase作为一款成熟的企业级分布式数据库,基于普通PC服务器,就能够做到传统高端硬件环境下的数据可靠性和服务可用性,而且还能做得更好。
1622 0
在「不可靠」硬件上,分布式数据库如何保证数据可靠性和服务可用性?