揭秘大数据 | 19、软件定义的世界-CSDN博客
揭秘大数据 | 20、软件定义数据中心-CSDN博客
揭秘大数据 | 21、软件定义计算-CSDN博客
老规矩,先把这个小系列的前三篇奉上。今天书接上文,接着叙软件定义存储的那些事儿。
软件定义存储源于VMware公司于2012年提出的软件定义数据中心。存储作为软件定义数据中心不可或缺的一部分,其以虚拟化为基础,但又不仅限于虚拟化。
存储虚拟化一般只能在专门的硬件设备上应用,很多设备都是经过专门的定制才能够进行存储虚拟化。而软件定义存储没有设备限制,可以简单地被理解为存储的管理程序(类似于软件定义计算中虚拟机管理程序VMM)。
软件定义存储是对现有操作系统和管理软件的一种结合,能够完全满足我们对存储系统的部署、管理、监控、调整等多种要求,可以令我们的存储系统具有敏捷、高可用、跨数据中心支持等特点。
软件定义存储通常具有如下几大特性:
(1)开放性;
(2)简单化;
(3)可扩展性。
软件定义存储开放性主要指两个维度:API的标准化、对可编程平台的支持。通过标准的开放的API,任何人都可以基于此来构建数据服务。这一点不仅有利于大企业,对于创业公司而言更加方便,因为它为客户提供一个可以利用的开放式底层的存储平台。
开放的API必然是用于支撑一套可编程架构,实现一次编程、多次运行、无处不在的数据服务。此二者结合起来可促进开放式开发社区的全局数据和自动化服务的交付。
简单化是所有存储应用与用户追求的目标,包括统一的管理接口与界面、自动化的存储配置与部署,便捷的存储扩展、升级及优化。
现代存储系统自诞生以来一直是一个非常专业化的领域,它的复杂性与挑战性令很多人望而却步,但是软件定义存储的出现在逐渐颠覆这一现象,使存储变得更容易被管理、更容易满足客户与应用的需求。
可扩展性指的是存储系统中对同构或异构存储解决方案、服务的可接入性,它在一定程度上与系统的开放性类似,允许对存储系统实施动态的升级、扩展,以及接入第三方存储服务或设备。
作为软件定义存储核心技术,我们先聚焦存储虚拟化,它可以在计算层、网络层和存储层进行实施。
在计算层,虚拟机管理程序为虚拟机分配存储空间,屏蔽了(不暴露)物理存储的复杂性。
在网络层,数据块和文件级别的虚拟化是基于网络的虚拟化技术,这两项技术在网络层中嵌入虚拟化存储资源的智能,我们常见的NFS/CIFS协议正是这些存储虚拟化技术在网络层面的体现。事实上从操作系统技术栈角度来看,数据块与文件类型的存储通常是在不同层实现的。以Linux为例,文件系统通常在块设备之上实现(每多一层抽象、虚拟化,效率就会降低一点),这也解释了为什么通常基于块设备的解决方案的效率(数据吞吐量)高于基于文件系统的效率。Linux内核系统调用接口如图1所示:

在存储层,虚拟资源调配和自动存储分层一起简化存储管理,并帮助优化存储基础架构。虚拟化的存储如图2所示:

下面,我们以虚拟机为例,详细介绍虚拟化计算、存储与网络是如何整合工作的。
虚拟机通常是作为一组文件存储于分配给虚拟机管理程序的存储设备上,其中一个名为“虚拟磁盘文件”的文件表示虚拟机用来存储其数据的虚拟磁盘。
虚拟磁盘对于虚拟机而言显示为本地物理磁盘驱动器。虚拟磁盘文件的大小表示分配给虚拟磁盘的存储空间。
虚拟机管理程序可以访问光纤通道存储设备或IP存储设备,例如互联网SCSI(Internet SCSI,iSCSI)和网络连接存储设备。
虚拟机一直察觉不到可用于虚拟机管理程序的总存储空间和底层存储技术。虚拟机文件可以由虚拟机管理程序的本机文件系统(也被称为虚拟机文件系统)或网络文件系统(如网络连接存储文件系统)来管理。
主流的软件定义存储技术方案通常对数据管理与数据读写进行分离,由统一的管理接口与上层管理软件交互,而在数据交互方面可以兼容各种不同的连接方式,这种方式可以很好地与传统的软硬件环境兼容,从而避免“破坏性”的改造。
如何合理利用各级存储资源,在数据中心的级别上提供分层、缓存也是需要特别考虑的,因此,软件定义存储中的控制层通常提供如系统配置、自动化、自服务、管控中心等服务,在数据层则暴露给应用不同类型的存储服务,如对象存储、HDFS、文件或块存储。软件定义存储系统的逻辑组件与分层如图3所示:

软件定义存储将抽象的控制层与数据层进行分离,并提供接口给用户。
用户可以使用接口定义自己的数据控制策略。为什么要将抽象的控制层与数据层分离,并且提供接口给用户调用?软件定义存储系统的控制层和数据层见图/表4,其中控制层是指对数据的管理策略。控制层不需要知道数据具体的存储方式,如块、文件或者对象存储,它的时间损耗(时延)级别是毫秒级。数据层则是指具体读写硬件方式,如块、文件或者对象,它的时间时延级别是微秒级。

用户在使用存储时,着重关注数据服务的策略,而这些策略与具体的数据存储方式无关。
当今的存储虚拟化产品将控制层和数据层结合,即数据服务的策略紧密依赖于数据存储的方式,事实上,数据存储速度是微秒级,而数据存储控制较慢。
实现数据服务策略主要的时间开销在控制层,而传统的存储虚拟化技术不能灵活配置存储控制,因此针对某个服务的变化,响应时间主要是控制开销。
再者,用户在存储数据时,必须对数据的控制和存储方式要有足够的了解,这增加了使用存储资源的难度,而且存储资源的可扩展性不高。
此外,由于传统的存储虚拟化技术缺少标准的存储数据监控功能,当某个设备出现问题时,用户只能依赖底层的一些存储机制(如日志)进行问题的发现和定位。图/表5中描述了存储虚拟化与软件定义存储之间的异同。

从软件定义数据中心的角度看,软件定义存储形成了一个统一的虚拟存储池,该存储池提供了标准化接口的存储应用服务,例如典型的企业级Exchange(邮件)、Hadoop(大数据分析)、虚拟桌面基础设施(Virtual Desktop Infrastructure,VDI,如远程桌面、瘦客户端后台)、数据库等存储服务,这些服务的等级、特性、优先级等可以通过软件定义数据中心的SLA策略来规范与定制。图6 形象地展示了软件定义存储与软件定义数据中心的逻辑关系。

换一个角度,我们从技术栈视角来看软件定义存储、网络与计算。结合OpenStack平台组件,我们可以把一个软件定义数据中心从功能上自上而下地分为4层,如图7所示:

在图7中,基础架构层由典型的计算虚拟化组件、网络虚拟化以及存储虚拟化构成;云管理层则可被视为对基础架构层的封装、标准化并向上层提供统一可编程与管理接口;云服务层向其上的管理界面层提供标准化服务接口,如计费、日志、数据库服务、数据备份与恢复等服务。
图7中的软件定义数据中心依旧缺失了另外两个主要的组件:安全、管理与编排。
随着数据中心系统的规模与复杂度呈指数级提高,管理这样一个庞大的系统需要高度的自动化以及与之匹配的安全保障,因此,对硬件与软件的综合管理与编排,以及安全管理变得越来越重要,例如VMware公司的vCenter、微软公司的System Center、开源OpenStack项目都提供了各自的软件定义数据中心管理与编排组件。
安全组件则通常会以系统安全分析、入侵预防与报警、漏洞检测、事件流分析等功能组件的形式和管理与编排系统对接。图8展示了软件定义数据中心组件的逻辑、分层关系。

需要指出的是,无论是安全还是管理与编排,它们整体的发展都是朝着大数据、快数据、流数据的方向进行,相关系统的体系架构也一定是朝着分布式、并行式的云计算架构方向前进,这其中对网络(负责数据的迁移)、计算(负责通过对数据的计算、分析得出信息与智能)以及存储(负责数据最终的存储与管理)具有天然的需求。因此,我们在看待其中任何一个环节、部件或组件的时候,都需要有一个全局观,这样才能避免片面、孤立或过度微观。
企业级存储变革的四大关键技术分别是闪存、软件定义、融合存储和云。闪存与融合存储指的是硬件层面设备的迭代更新,而软件定义与云是通过软件化、虚拟化(抽象化)把硬件接入云化的软件系统架构,以更好地满足用户需求。
几年过去了,我们发现这四大变革技术还在不断向前发展——全闪存、软件定义、超融合、混合云(或上云)。在云计算的三大要素中,存储是最后才被软件定义的,也是最难被定义的,这是由它的底层性决定的。我们常说的十年磨一剑非常适合致力于在存储领域创新、变革的人们。
(文/Ricky - HPC高性能计算与存储专家、大数据专家、数据库专家及学者)
· END ·