存储培训总结

云计算服务

云计算分为服务和管理两大部分,我们重点说明云计算的服务。

刚开始是本地部署,所谓的本地部署即自己搞机房、买设备、装系统、装服务、开发程序,这样在人力和财力的投入成本较高,在这个阶段卖硬件的比较赚钱,比如联想,当年的联想的营业额可比华为还要厉害!

然后,出现了基础设施即服务lass,就是企业自己不用自己购买硬件了,比如现在云主机,我们无需购买真实的硬件,就买一个虚拟的主机就可以了,这个时期各种云崛起了,比如说亚马逊云、阿里云,百度云、这些云不仅给你提供主机还给你提供操作系统,但是软件还是要自己开发和安装。

再然后,出现了平台即服务pass,所谓的平台即服务就是不仅主机和系统不用亲自购买安装了,连开发环境也不用自己安装了,比如阿里云也提供代码托管的服务,该服务开发环境都已经布置好了,程序员登录之后直接写代码即可。

最后,出现了软件即服务sass,主机、系统、开发环境、甚至是成品的软件企业都不用搞了,比如我想使用一个办公系统,不用买主机、装系统、开发软件、我们直接使用阿里给我们提供的叮叮软件即可,这就是软件即服务,大大方便了用户,用户直接出钱就行了。哦,对了,比如有道云笔记和office online这种服务也算是sass,我们通过浏览器就可以使用有道云笔记和office。

软件即服务是一个趋势,像百度、京东、腾讯、阿里这些一线互联网公网都在搞软件即服务,像阿里面的叮叮就是一个典型的例子,不知道大家注意到了没有,当我们在手机上打开淘宝、京东、亚马逊的时候在第一个界面下面通常都会出现一行小字:“XX提供云计算服务”。

存储的I/O流程

我们就以apache应用为例来理解一下存储的I/O流程。

当用户的GET请求到达服务器之后,首先进入的哪里呢?首先进入的肯定是内核空间当中的TCP/IP协议栈,为什么呢?在GET方法请求到达之前,client与server之间必定建立了虚连接,这个虚连接就是通过三次握手建立的,三次握手发生在传输层、传输层位于TCP/IP协议栈当中,而TCP/IP协议栈位内核空间。

数据包在传输层解封装之后,发现其目标端口是80,那么接下来传输层该怎么办呢?传输层会掏出一个“小本子”,这个小本子上面记录了什么呢?记录了80端口被用户空间的哪个程序给侦听了,小本子上明确记录了目前80端口被apache这个应用给侦听了。那么传输层如何知道80端口被apache给侦听了呢?因为当apache程序启动起来之后必定会侦听某一个端口,至于侦听哪一个端口要看apache配置文件如何定义,apache配置文件有一行是这样的:

Listen:localhost:80

这一行其实会调用某个侦听端口的函数,这个函数会向内核注册一个套接字,所谓的套接字就是IP+端口的形式,应用程序向内核注册一个套接字IP+80,内核会通过“小本子”记录下来,这样的话,当有数据包来连接80套接字的时候内核就知道将数据交给哪一个应用程序了。

好了,http协议报文终于到达用户空间的apache应用程序了,apache通过进一步解封装发现数据包里面是一个GET请求,请求的是index.php这个文件,那么apache应用进程会怎么做呢?apache当然会想要把index.php的文件交给用户了,但是apache进程并不会立刻这么做!它会告诉内核它想要那个文件?为什么它不自己拿呢?因为用户空间的程序没有权利直接调用硬件资源,它要先通过systel call(系统调用接口)告诉内核,它想要使用index.php这个文件。

由文件系统处理系统调用请求。文件系统负责将文件以某种特定的方式存放在磁盘的数据块上。当它收到操作系统发来的文件读写请求时,便将请求转化为对磁盘上数据块的读写操作,需要注意的是,文件系统的磁盘并不真正的磁盘,而是指逻辑卷,所谓的逻辑卷就是将物理存储设备逻辑分区后产生的虚拟磁盘,这块虚拟磁盘上的地址到实际物理设备上的地址映射,是通过逻辑卷管理器来维护的。因此,对逻辑卷上的数据块操作,还要再经过逻辑卷管理器,转化为真实物理设备上的数据块操作。

好了,接下来出场的是驱动程序了,驱动程序负责从物理设备上读写数据。由于真实的物理设备千差万别,操作系统无法预先知道如何操作每个设备,因此,这些设备接入计算机时,需要安装一个特殊的程序---驱动程序,这个程序运行在内核空间里面,专门负责与相应的设备进行交互。当操作系统想要在一个物理存储设备上读写一个数据块时,它将请求交给该设备的驱动程序,由驱动程序来控制存储设备完成剩余的工作,从存储设备指定位置读取数据,或者将数据写入到设备的指定位置。

网络存储技术

在网络存储系统中,通过网络将存储设备与主机连接。根据所用网络的不同,网络存储结构大致分为以下3种类型:

Direct accached storage(DAS),就是直连式存储,存储设备直接通过BUS总线连接到服务器,其实说白了就是磁盘通过数据线连接到主板上这种方式。

Storage area network(SAN),存储区域网络,它是一种通过光纤交换机设备将磁盘阵列、磁带等存储设备与相关的服务器连接起来的高速专用子网,在这种方式下,文件系统依然是存在于服务器上的。

Network attached storage(NAS),网络附加存储,将存储设备通过以太网拓扑结构连接到服务器,实现文件级别的共享,NAS存储的文件系统并不是在服务器上,而是在存储上,比如samba、ftp这些都属于是NAS存储。

硬盘接口

机械硬盘的性能不仅取决于磁盘的转速、还的接口类型,接口类型决定了磁盘的数据传输方式。

ATA&SATA

我们首先从ATA开始讲起,ATA的全称是advanced technology attachment(高级技术附件),好奇怪的名字!ATA接口就是我们经常说的IDE(integrated drive electronics集成电路驱动)接口,随时时代的发展,其速度过慢,现在都已经不用了。

SATA,即串行的ATA,串行ATA之前的ATA接口速度上肯定是提高了,我们只需要记得串行比并行快就行了!还需要记得其速率,STAT3.0的速率是6Gbit/s。

SCSI和SAS

SCSI的全称是小型计算机系统接口,SCSI也是并行传输数据,而且有一个缺点就是SCSI设备只能支持8个或者16个设备,后来又发展出来串行的SCSI,即SAS,SAS的速率可达6Gbit/s。

SAS向下兼容SATA,也就是说SAS控制器可以与STAT硬盘连接。

FC接口

高端应用、快和贵就是它的特点。

硬盘缓存

面试的时候经常会问到buffer和cache这类的SB问题,我也是够够的,好了,不扯淡了,我们现在来说一下硬盘的缓存。缓存在IT领域的很多地方都会用到,我们将其用到我们生活当中也是可以加快效率的,我们从一个比较高的角度来讲。

硬盘的缓存是实实在在的硬件,是一个芯片,这个芯片就位于磁盘里面,它的作用是什么呢?作用就是buffer和cache,即能当buffer,也能当cache,这个芯片的主要作用就是做一个缓冲,举一个例子吧!

水库里面存了大量的水,现在下游的农田想要通过水渠使用水库里面的水,但是水库里面的水量太大了,水库一旦直接对水渠放水的话,容易把水渠给冲毁,怎么办呢?就在水库和水渠之间再挖一个小水库,先将大水库的水暂时放到小水库里面,然后通过小水库将水引到水渠里面,这样水渠就不容易被冲坏了,这个小水库对于水渠来说就叫缓冲,减缓了大水库到水渠的冲击;这个小水库对于大水库来说就是缓存,暂时把水存一下,当水位到了一定的程度再向下面的水渠放水。

我们可以将上面的缓冲与缓存的概念类比到存储领域。由于磁盘的读写速度远远比不上计算机内存的读写速度,因此让数据直接在磁盘与内存之间传输,会让内存长时间处于低效状态,拖累其效率。这时候,缓存可以发挥作用:当操作系统给硬盘读取指令后,硬盘便开始将数据存入缓存,等存到一定量数据时,再通过操作系统从缓存中读取。而对于写操作,则可以让操作系统直接将数据写入到缓存,之后再逐步从缓存迁移到磁盘上。由于缓存的读写速度和内存接近,远比磁盘要快,从而使计算机能用最少的时间与硬盘进行交互,而数据在缓存与磁盘之间传输时,操作系统完全可以切换到其他任务,从而提高整个系统的效率。

数据局部性

数据局部性是一个很好的概念,在IT的多个领域之内也都有应用,我们也经常在使用,只不过我们没有发觉罢了,比如我们在linux运维的时候把vim /etc/sysconfig/network-script/ifcfg-eth0定义一个别名叫vnet,这其实就是空间的局部性的应用;我经常使用剪刀,所以我会把剪刀放到我随手可拿的地方,而不是抽屉里面,这就是时间的局部性。

计算机中普通存在数据局部性现象,这种局部性现在使得缓存用了更好的用武之地,可以大大提高硬盘的响应速度,数据局部性主要体现在以下两个方面。

时间局部性:一个被访问的数据,在短时间内会有较大可能被访问,比如DNS缓存、apache的index。

空间局部性:一个被访问的数据,其周围的数据在短时间内有较大的可能性访问。

利用数据局部性,可以采用两种策略来提高性能。一种是将最近被读取的数据尽可能的留在缓存当中,在再次访问的相同的地址时,便可以直接在缓存中读取。另一种是当访问一个数据块时,将其周国的数据块也一并载入缓存,这称为预读取。这样,之后如果访问临近的数据块便可以直接在缓存当中找到。通过这两种策略,应用程序可以更快地从硬盘获取到所需的数据,从而提高运行效率。

通常来说,采用更大的缓存可以提高硬盘的访问速度,但是采用优秀的缓存替换算法同样重要,因为缓存的空间相比于硬盘来说非常有限,好的算法可以让更常用的数据留在缓存中,使尽可能多的硬盘访问直接在缓存当中找到数据。

猜你喜欢

转载自www.cnblogs.com/yizhangheka/p/11376259.html