note:写这个或许算是翻译,又或算是对这个论文[1]的理解,又或者仅仅是我的看法。



        这篇论文和IOFlow相比較,更加注重软件定义存储的框架(利用已有的框架来创建新的框架,然后使用已有的协议),而不是像IOFlow那样注重通信的协议。而且,这个框架还是软件定义环境的框架,而不不过存储的框架,不过全文注重说了存储(更有挑战性)。特别地。关于可软件定义的存储逻辑。从这里能够管中窥豹。





SDE软件定义环境


数据中心的环境包含Compute、Network和Storage资源。

数据中心对(flex)灵活性和rapid的需求越来越大。而数据中心应用程序性能和计算、网络和存储这些资源息息相关。

一个总体的对数据中心的smart的组织和安排方案(global view)肯定能打破计算,网络和存储的限制,明显的添加QoS和用户体验。

Objective of SDS


SDS的目标和软件定义网络的目标是一样的,SDN的目标能够分为两个维度。从横向上来说。是全局的优化能力;从纵向上来说。是控制平面和数据平面的软件集成。

从高层应用程序的角度来看(和低层的LUN和RAID比較),应用程序的部署要求storage provision和一定的性能(从整个系统的角度看),系统将所需的逻辑卷分配给应用程序。

然而,应用程序的生命周期是动态变化的,须要的资源不停地在动态变化着(存储需求。性能需求,数据保护要求,拷贝政策,恢复点目标和恢复点时间的改变)等,所以上面提到的这些变化假设能够显示的去配置。那么对于应用程序来说,就太有效了。

总之,SDS的总目标就是使得需求和下层的infrastucture解耦。

这篇文章最基本的贡献是一个叫做IBM Open Platform的SDS解决方式。基于OpenStack(使用了它的扩展接口)。

已有的存储方案


企业级的解决方式


存储企业界提出了一个叫做SMI-S(存储管理首创说明)的草案来作为管理不同存储设备的统一接口。

可是这个和SDS是有差别的,也不能达到在前面提出的SDS的目标。为了减小它和SDS的差别,达到更好的用户级需求和体验。IBM的存储管理方案VSC做了非常多事情,其它的企业级存储还包含RMC,NetAPP等等。

开源社区的解决方式


Openstack是一个来源的云管理系统,这个开源项目如今由许很多多的vendor在參与,已经取得了非常大的成就。Openstack中提供了SDS的平台,他的存储部分主要是包含了swift(给应用程序和虚拟机提供了对象存储)和Cinder(给虚拟机提供了块存储)。

Swift

Swift管理和提供对象存储,提供对应的API给client。swift的一个非常重要的能力就是在可用的磁盘和nodes中间自己主动的复制数据。自己主动的来提供可扩展性,有效性和数据保护的能力(这些都是隐藏的功能。swift有一套嘛)。然后swift的目标是更小的存储开销。由于集群中的机器都是有大容量存储的商品机。如今的新的应用程序中非常流行使用对象存储,尤其是web程序(由于swift的 REST API 在http上面非常盛行)。

比起文件存储和块存储来说,对象存储更加有扩展性,也更加灵活。

cinder

它是一个块管理组件,提供了块存储管理的功能,比方给server创建。添加块设备,或者删除某个server的块设备。(这些server不再使用简单的linuxserver的存储,而是使用统一的存储支持,(向上甚至支持ceph和netapp))。

如今cinder能够管理非常多的存储系统,比方GBFS(IBM的分布式并行文件系统,属于底层的一个文件系统)和lvm(卷管理器)。cinder包含一个scheduler(plugged。所以能够採用第三方的)来为server选择最佳的块设备(依据需求。可能包含volume
type(也是存储资源的一种抽象吧))。很多其它学习cinder,点击这里

openstack的这些存储机制是在一定程度上支持软件定义的概念的,可是对那些详细的支持还不够。假设说是SDS应该还算不上。


框架架构


这篇文章提出了一个叫做IBM Open Platform的平台(例如以下图所看到的)。主要包含了对工作负载的抽象,对资源的抽象。以及负载到资源的映射。以及相关的优化。要让这个框架发挥作用,对workload和对资源的抽象都非常重要。对workload的抽象就是把各种各样不同的workload通过一种抽象方式(比方说JSON或者XML)表述,然后抓取出当中的与应用相关的需求,比方说基础架构和操作流。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWluX3d1emhl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

而资源的抽象就是提供一个统一的接口来提供、管理和监控下层的计算、存储和网络资源。

所以复杂的设备对于用户来说就是透明的了,而那个核心的SDE统一控制平面就翻译workload的抽象表示,也翻译来自下层资源的抽象表示,然后组织sdc、sdn和sds的组件(为了灵活而有效的管理)。

工作负载的抽象

比方说,一个简单的三层的web程序一般包含一个webserver,包含一个数据库,还要一个应用server。这样的软件模式能够被一个描写叙述性的语言格式来描写叙述,比方JSON。然后中间的unifiedcontrol plane的engine解析这样的语言,之后为这个workload组织安排底层的资源。

从存储的角度来说,这个框架能够创造灵活的存储语义。比方说,应用程序能够指定存储卷的大小,存储服务类型和相关的其它的政策等。因此,这个框架使得程序开发人员和系统管理者显式的指定他们对底层存储的需求。这样的用户级的存储需求也能够在用户程序的生命周期中发生改变,带来了更大的灵活性。

资源的抽象

那么资源的抽象是怎么做的呢?

IBM的开放平台支持的底层平台不不过企业级的存储子系统,也包含商业存储设备,比方GBFS。资源抽象就是将存储资源(无论是SAN,还是NAS或者是DAS)抽象为一个资源池。然后再依据workload的需求去管理和分配。

比方说这个框架能够在GBFS中利用底层的存储设备创建一个文件,然后把这个文件作为一个块设备分配给虚拟机去使用,也能够使用GBFS的快照和文件迁移的功能去管理虚拟块设备。关于底层的特殊的设备,有的设备可能是企业级的,会提供一些高级的功能,比方固件级的压缩和去重能力。

这个时候,就能够使用这些功能。可是假设底层的存储设备没有这些功能。就须要调用软件的方法来达到这个目的。

总之这个框架提供了一个存储资源的抽象,可以达到非常好的存储资源利用率,而且提高操作性能。降低了存储系统的复杂度。

资源的映射


从上面的描写叙述我们看到,这个框架中 unified control plane的功能就是利用上面的请求,组织安排以下的资源。

对于存储请求。那就是解析存储请求的要求并传给sds模块来达到资源映射的目的。

从以下的样例能够非常好的了解有关存储资源的映射过程。

performance-aware存储配置

形象一点来说,对于每一个存储资源创建请求,都须要一个“服务类型”的标签。代表着特殊的对(storage provisioning)的需求。比方说RAID的级别或者是错误恢复特性(resiliency profile)。每一个服务类型代表一组存储的配置。比方说对于“白金”级别的服务类型。那可能就是要求低延迟,这种workload创建的存储卷更有可能放在ssd中。而不是普通的磁盘。另外,假设可用的ssd有非常多。组成一个资源池。这个框架还会分析ssd资源池中设备的利用率情况。然后将新创建的存储卷放在当中一个SSD(会产生最小的性能影响的)。

存储fabric管理

当存储单元创建好了之后,也就是创建好了workloadserver和存储卷之间的联系。

然后对于以下的存储网络技术,比方fc,iscsi,infiniband和fcoe都提供了统一的接口。然后这个框架提供一个最好的zone管理和fabric 分析来确定server和存储卷之间的最好的storage fabric。(比方说,通过分析存储设备的利用率,然后在多个port之间进行负载平衡)(也能够使用爬山算法来找到最好的路径)

存储恢复

还原能力是数据保护的一个重要的特性。

在这平台上,有两种形式的resiliency。

一种是fabric resiliency,应用程序能够选择一条IO路径,保证路径上的每个节点都是好的(不会failue,就像fcoe存储节点上面的需求那样);对于存储设备级的数据保护措施,这个框架能够让应用程序选择一种复制策略。比方point-in-time快照,同步的镜像或者异步的镜像。存储恢复还能够利用sde的总体功能。包含计算,来实现更加总体的数据还原功能。

连续模式优化ILM

这里有一个非常重要的概念。叫做存储信息生命周期管理(ILM)。

这是由于数据的价值在它的生命周期中是动态变化的,比方邮件数据在刚開始的时候价值是最高的,后来随着时间这个邮件越来越没有价值了。所以ILM的目标就是在正确的时间把正确的数据放在正确的storage tier上面。

这也就是Storage tiering技术(依据历史io行为,来决定io tier)。而我们的这个框架使得能够应用程序依据独特的需求来控制存储的tier。比方说给一个服务类型指定是(higher
tier和lower tier的类型,然后自己主动的在某些io阈值的时候运行某些tier policy。

       note:就比方说应用程序编程的时候就能够指定在将来某个时候把数据存放在哪块盘上面~~~

SDE的集成

数据中心对(flex)灵活性和rapid的需求越来越大。而数据中心应用程序性能和计算、网络和存储这些资源息息相关。一个总体的对数据中心的smart的组织和安排方案(global view)肯定能打破计算,网络和存储的限制。明显的添加QoS和用户体验。

这个sde框架中的存储部分和其它的部件比方sdc和sdn都合作良好,而且整个框架有着丰富的api,还能够在这个框架上做各种各样的优化。比方说VM的安放问题。

storage-aware VM placement

VM的放置关系到cpu,内存和vdisk。

对于一个io密集型的vm来说,它的vdisk放在SAN中的某个位置是相当重要的(延迟和带宽)。对于一个计算密集型的VM来说。cpu和内存的分配就更加重要。所以vm的放置往往也须要考虑到cpu,存储和vdisk的问题。

这个框架的逻辑能提供一个灵活的vm存储放置方案。

LAB

IBM的研究人员创建了一个小型的实验环境,这个框架得到了非常好的应用。效果也非常好。

參考文献

[1]Alba, A., et al. "Efficient and agile storage management insoftware defined environments." IBM Journal of Research and Development 58.2
(2014): 1-12.

可软件定义的存储逻辑——Efficient and agile storage management in software defined environments的更多相关文章

  1. Mysql+innodb数据存储逻辑

    Mysql+innodb数据存储逻辑. 表空间由段,区,页组成 ibdata1:共享表空间.即所有的数据都存放在这个表空间内.如果用户启用了innodb_file_per_table,则每张表内的数据 ...

  2. SDN(Software Defined Network):软件定义网络----转载

    SDN(Software Defined Network):软件定义网络 传统的网络转发行为: 1)逐设备单独控制,纯分布式控制. 2)控制面和转发面在同一个设备中,耦合紧密. 管理员无法直接操控转发 ...

  3. IOS 区分缓存 内存 物理存储 逻辑存储

    1. 存储器分为内部存储器(内存)和外部存储器(外存). ①内存 内存是电脑内部临时存放数据的地方,供CPU直接读取,存放在其中的数据要靠电来维持,一旦断电就会丢失.因此,在操作电脑时,应及时地将需要 ...

  4. inndo 表与存储逻辑_1

    ------------------------------------------2015-03-03--------------------------------------- 表 : inno ...

  5. 软件定义网络(Software Defined Network,SDN)简介

    SDN的三大关键要素 第一关键要素是转发与控制分离,这使得网络交换机的数据转发变得更加简单.快速:同时,控制变成了网络操作系统中一个相对集中的逻辑功能. 第二个关键要素是OpenFlow协议,它向交换 ...

  6. OSX: 逻辑卷管理系统Core Storage(1)

    Mac高大上嘛? Mac由于贵就高大上了?Mac由于没有这个哪个就不高大上了?本文没有结论,仅仅是回归技术本源,是不是高大上还要大家自己评说. 大多数Mac用户可能并不在乎苹果的OS X操作系统缺少一 ...

  7. 数据存储之Cookie和Web Storage。

    Cookie Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).接下来就谈谈cookie的一些利弊,coo ...

  8. Web持久化存储Web SQL、Local Storage、Cookies(常用)

    在浏览器客户端记录一些信息,有三种常用的Web数据持久化存储的方式,分别是Web SQL.Local Storage.Cookies. Web SQL 作为html5本地数据库,可通过一套API来操纵 ...

  9. html5存储相关 coookie localstorage session storage

    html5存储 coookie  localstorage   session storage

随机推荐

  1. 第六篇:python基础_6 内置函数与常用模块(一)

    本篇内容 内置函数 匿名函数 re模块 time模块 random模块 os模块 sys模块 json与pickle模块 shelve模块 一. 内置函数 1.定义 内置函数又被称为工厂函数. 2.常 ...

  2. kubeadm安装k8s测试环境

    目标是搭建一个可测试的k8s环境,使用的工具 kubeadm, 最终一个master节点(非高可用),2个node节点. 环境以及版本 Centos7.3 kubeadm 1.11.1 kubelet ...

  3. sql 学习相关问题

    ---恢复内容开始--- 1.sql上面改变列的数据类型是 ALTER TABLE table_nameALTER COLUMN column_name datatype mysql上面是ALTER ...

  4. 四则运算出题系统,java

    程序设计思想: 首先通过判断选择计算的范围,然后用随机数生成两个随机数,定义另一个数,将两个随机数计算得到的值赋给定义的数 程序代码: package Kaos1; import java.util. ...

  5. java读取文件的基本操作

    import java.io.FileInputStream; /** * 使用FileInputStream读取文件 */ public class FileRead { /** * @param ...

  6. 转:Java 动态代理的内部实现机制(大体意思正确,写的还行的一篇文章)

    转:Java动态绑定的内部实现机制 JAVA虚拟机调用一个类方法时,它会基于对象引用的类型(通常在编译时可知)来选择所调用的方法.相反,当虚拟机调用一个实例方法时,它会基于对象实际 的类型(只能在运行 ...

  7. 最长k可重区间集(cogs 743)

    «问题描述:«编程任务:对于给定的开区间集合I和正整数k,计算开区间集合I的最长k可重区间集的长度.«数据输入:由文件interv.in提供输入数据.文件的第1 行有2 个正整数n和k,分别表示开区间 ...

  8. ext4向后兼容代码

    ext.h: #define EXT4_GOOD_OLD_INODE_SIZE 128 ... #define EXT4_GOOD_OLD_REV 0 /* The good old (origina ...

  9. Jumpserver0.5使用说明

    1.系统设置 a.基本设置,这里的ip是jumpserver所在的地址 b.邮件设置,得在qq邮箱中启用授权码 可参考:https://service.mail.qq.com/cgi-bin/help ...

  10. Find Median from Data Stream - LeetCode

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...