转自http://mp.weixin.qq.com/s?__biz= ... NTYzMw==&scene=6#rd
本文只是我自己的个人想法,不代表任何公司的意见,也不一定正确。 今天存储有很多新名词,比如:软件定义存储、流动数据、数据分层、对象存储、全闪存阵列等等,而各种存储品牌也层出不穷,尤其是在软件定义存储。一个十几个人的公司就可以做出以前高大上的存储,而且还有着这样或者那样的优势。大家都在预言大象的倒下,无数的软件定义存储公司期待着可以从中分得一杯羹。 下面的叙述省略了一些细节,有些用词没有严格按照定义,一些疏漏的地方还请大家多谅解。 存储的三种阶段存储的第一阶段“服务器内部存储”
这里说到的服务器内部存储指的是服务器里面的硬盘,从机械磁盘到SSD,从SATA到NVMe。通常被本服务器的操作系统所使用,包括物理机和虚拟机,数据流向也很简单,从存储块到总线再到CPU再交付给操作系统和应用程序。 于是各种应用对存储的要求不同,从典型DELL第十一代服务器R510开始(大致),各个服务器厂家开始争相为同样的CPU搭配不同的硬盘组合,从2个2.5寸到超过60个3.5寸,,甚至有1.8寸的SSD和3.5寸机械盘的组合等等,各个厂家脑洞大开,仿佛同样的尺寸多塞2块盘就可以逆转市场。 但是,每一代CPU的升级都带来了一堆的服务器型号,就那么2个CPU加上12到24条内存。然后服务器厂家基于市场、客户、应用、竞争等想法造出数十种服务器。
存储的第二阶段“服务器外部存储,SAN存储”
在服务器还采用PATA硬盘和SCSI硬盘的时候,想要拓展硬盘数量是一件很困难的事情,FC协议的出现可以说在一定程度上解决了这个问题,虽然价格不菲。SAN的出现可能是基于以下几种原因。 扩展存储容量的需求,在SCSI协议的时代,一个SCSI卡可以挂12个盘(SCSI identify0-15),当时一个盘146G,要一台服务器想要扩展足够数量的存储空间是很痛苦的事情。 交换式数据网络的需求,SCSI是并行总线,很难延伸到机箱外部,更不可能造出一个交换式的Fabric。 数据共享的需要,多主机需要共享一份数据,共享一份数据以后,可以提高数据的处理能力,提高计算的冗余。原有的SCSI协议不能很好的解决数据共享。 当时以太网是千兆,小于SCSI协议的带宽,而且要把SCSI协议封装到Eth协议里需要消耗大量CPU运算,不可能实现。 通过存储控制器把硬盘存储组合在一起再以LUN的形式向服务器提供需要的存储空间。从FCSAN存储的出现到现在,存储软件功能、前端协议、控制器互联、后端硬盘协议等等一直在慢慢的进行着变化。不变的是结构基本上没有变化。成本也一直比较高,比如每GB机械硬盘的成本、每GBSSD的成本、每IOPS的成本、每个服务器的连接成本、软件成本、运维成本等。 存储的第三个阶段“软件定义存储”
随着虚拟化技术的进一步发展,10Gb网络的普及,可不可以把每一个服务器内部的硬盘组合在一起,然后按照需要分配给每个物理机的客户机(guestOS)或者应用呢(无法按需分配给物理机)?然后有了Nutanix,VSAN等产品出现了。 它们的缺点
服务器内部存储
服务器内部存储是目前速度最快的存储结构,从介质到CPU之间距离短,响应速度快,带宽高,基本没有瓶颈,但是它的局限性也是显而易见的: 1. 数据不易被其它物理机上的应用使用(SDS在一定程度上解决这个问题),存储和CPU紧密耦合在一起,如果需要访问数据就需要通过上层文件系统来访问(典型的是NAS)。 2. 单主机限制了数据的可用性,比如该主机需要关机,那么这些数据是否也离线呢? 3. 前面我们说过同样的CPU有这十几种机箱来满足各种应用需求,如果用户今天买的是2个硬盘的高密度计算型服务器,如果2年后想改变服务器角色,比如改成存储型服务器,但是只能通过外挂JBOD来实现。
SAN存储
协议上主要有FCSAN ,IPSAN等,FC SAN的好处我就不多说了,但是缺点呢?大概有以下几点。 1. 首先是成本高,这几年大家头破血流的要做存储系统,很大的原因是利润高,随着国内的存储公司越来越多,成本也在不断的下降。新的缺点却出现了。 2. SAN存储成为整个方案的性能瓶颈。以前SAN主要安装机械硬盘,控制器性能有足够的余地,现在随着SSD越来越普及,SAN控制器和存储软件成为整个存储的最大的瓶颈。 为什么说SAN存储有性能瓶颈呢?如下图(图中每一个绿色代表一个主机) 我们用最简单的方式描述一个4台服务器共享一个FCSAN存储的环境,在这个结构里面,从CPU到FC交换机基本上没有瓶颈,FC交换机也是无阻塞的交换网络,也可以理解为没有瓶颈。但是在控制器开始,控制器所能提供的IO能力是基于存储软件的性能和控制器硬件的能力。毫无疑问的是,控制器无论如何也无法突破自己CPU的带宽。在机械硬盘的时代,由于机械硬盘很慢,控制器并不是一个瓶颈。可以随着SSD的普及。控制器成为一个不可逾越的障碍,如下图 只要有控制器,就没有办法绕过这个瓶颈。 软件定义存储
软件定义存储中常说的一句话是把“服务器内部的硬盘整合在一起,形成资源池”但是请大家想一想,服务器内部一定要有硬盘么?谁规定了服务器内一定要有硬盘?把硬盘资源整合成资源池是谁来做的,维持这个池子需要消耗多少资源?这个池子的效率和稳定性如何?目前的软件定义存储可能有以下几个缺点: 1. 长延时、低IOPS,软件定义存储在数据写盘的过程较长,其中经历若干次协议转换,和若干层数据处理。不可避免产生较长的延时。 2. 计算资源消耗,每次IO都需要多层次的OS以上层面的软件参与处理,不可避免的消耗大量的CPU资源,试想一下,100台服务器的SDS环境,50台服务器的计算资源用来维持这个池子。 3. 高负载下的稳定性,由于软件定义存储的结构,比如Nutanix用一个guestOS来维持所有其他guestOS存储的IO。一旦负载增大,最有可能的就是争抢CPU资源,结果可能是灾难。 4. 软件自身的稳定性对数据一致性、完整性可能带来一系列潜在的风险。 也许大家会说,在给它们一些时间,产品会慢慢成熟,其实是不会的,软件定义存储是没有错的,错误在于现在的软件定义存储不是软件定义,而是软件来处理存储数据。举一个简单的小例子,如下图: 实际上搬运工就是底层的存储硬件,BOSS就是文件系统(此处是统称)。不能因为存储硬件不够智能就让文件系统来处理所有的IO。我相信大家会说,软件定义存储应该不会那么傻吧。 以nutanix为例,我们来看看软件定义存储在弄啥呢? 实际上该图应该改成,ControllerVM和UserVM 并列,User将数据通过Hypervisor交给Controller,Controller在通过Hypervisor将数据向底层写3次,1次给本地,2次给远端。
数据流简化如下:
|