架构设计:系统存储(1)——块存储⽅案(1)
mysql下载哪个盘1、概述
在“系统存储”专题中,我们将按照“从上⾄下”的顺序向读者介绍整个“系统存储”体系。在这个专题中我们将⾄少介绍机械硬盘的主要结构、磁盘阵列的分类、操作系统的EXT⽂件系统、NAS⽂件共享存储⽅案、分布式⽂件系统重要技术点和分布式⽂件系统⽰例。最后如果有时间我们将⾃⾏设计⼀款分布式⽂件系统。下图可以⼤致描述笔者的写作思路:
本专题⾸先会花费⼏篇⽂章向读者介绍块存储的知识,包括最底层机械硬盘、固态硬盘的构造结构和⼯作过程。块存储的知识中我们还将介绍磁盘阵列技术,包括磁盘阵列的组织⽅式和设备类型。最后块存储知识中我们介绍操作系统中的⽂件系统,包括EXT系列⽂件系统和XFS ⽂件系统(会顺带提到Windows操作系统使⽤的NTFS⽂件系统)。接下来的⼏篇⽂章我们会介绍搭建在块存储⽅案上的关系型数据库,⽂章会主要讲解Mysql数据库,包括MySQL数据库中最常被使⽤的InnerDB存储引擎、索引构造⽅式以及MySQL数据库集的⼏种构造⽅式。
由于在《》这篇⽂章中,笔者已经⼤致说明了系统存储专题的写作过程,所以本⽂就直接开始块存储技术的介绍了。笔者计划花费两到三篇⽂章的篇幅,向⼤家介绍块存储技术的主要知识点。
2、块存储⽅案基本构成
块存储技术的构成基础是最下层的硬件存储设备,这些硬件存储设备可能是机械硬盘也可能是固态硬盘。⼀个操作系统下可以独⽴控制多个硬件存储设备,但是这些硬件存储设备的⼯作相对独⽴,通过Centos操作系统的df命令看到的也是⼏个独⽴的设备⽂件。通过阵列控制层的设备可以在同⼀个操作系统下协同控制多个存储设备,让后者在操作系统层被视为同⼀个存储设备。
操作系统控制多个独⽴的存储设备。下图表⽰的三个硬盘设备在操作系统下独⽴⼯作,在操作系统下显⽰了三个设备⽂件:
操作系统通过阵列控制设备控制多个存储设备。阵列控制设备在市场上从低端到⾼端有很多选择。⽬前市场上的⼀些主板就⾃⼰集成了阵列控制芯⽚,如果中⼩企业需要硬盘阵列设备可以购买民⽤级产品,市场价格普遍在⼏千块左右。⾼端设备可以购买IBM/EMC提供的商业级/⼯业级设备,市场价格从⼏万到⼏千万不等。笔者将在本专题中详细介绍硬盘阵列的重要技术知识点。
为什么操作系统层可以做到以上两种存储设备的组织⽅案同时兼容呢?因为操作系统层通过各种⽂件系统规则,可以过滤掉各种存储设备的不同硬件特性。EXT1、EXT2、EXT3、EXT4系列⽂件系统和XFS⽂件系统都是Linux操作系统下常⽤的⽂件系统,Btrfs⽂件系统是最近今年Linux操作系统下越来越流⾏的新⼀代操作系统。这些⽂件系统的共同特点是:通过⽂件系统内部能够辨识的⼀个⽂件索引结构规范对下层的硬件设备结构进⾏封装,以便起到屏蔽和代理操作下层硬件结构的⽬的。 那么当下层存储设备不是机械硬盘⽽是固态硬盘⼜或者是阵列控制设备时,⼜是怎样的⼯作原理呢?本专题中将会⼀⼀解答这些问题。对于操作系统中的⽂件系统,我们将着重介绍EXT系列⽂件系统的结构。
3、机械硬盘
3-1、机械硬盘结构
现在的机械硬盘技术都⾮常成熟了,存储容量也出现了⼏何级增长。但是机械硬盘的基本结构却⼀直没有太⼤的变化:它基本上是由机械臂(磁头臂)、主轴、多个成对的磁头和磁⾯构成。在每个磁⾯上被分成多个磁道、多个扇⾯和多个扇区,它们的具体存在形式如下:
磁⾯上会有多个磁道,它们在⼀个磁⾯上拥有不同的磁道编号。从磁⾯最外围离主轴最远的磁道到磁⾯最内侧离主轴最近的磁道,它们的编号从0开始,分别是0、1、2、3、4…….N(N⼤于等于10000,依据硬盘制作⼯艺不同⽽不同)。磁头将会顺着磁道基于磁⾯的转动读取数据,并且可以在各个磁道间切换位置。
实际情况下,外部将要存储到硬盘上的数据不会⼀次性写满整个磁道,读取数据到外部时也不需要读取整个磁道的数据。这是因为⼀个磁道被分为多个弧段,这些弧段称之为扇区。扇区是硬盘上存储数据的最基本物理单元。注意,⽬前市场上⽆论哪个供应商提供的机械硬盘产品,每个物理扇区单元固定的存储容量都是512字节。只是根据硬盘密度不⼀样,单位磁⾯下的扇区数量也不⼀样。既然扇区是数据存储的基本单元,就意味着⼀次硬盘读写操作的最⼩数据量就是512字节。
那么问题来了,是不是觉得512字节太⼩了点?是的,很多时候操作系统层⾯请求读写操作的⽂件都会⼤于⼀个扇区的单位容量。那么在物理层⾯上就需要两个甚⾄更多个扇区来存储这个⽂件,那么怎样来规划存储⼀个⽂件的若⼲扇区在磁⾯上的分布,从⽽达到减少读取时间的⽬的呢?
操作系统层⾯会将物理硬盘上两个或者多个能够连续读取的扇区组成合并成⼀个区域,称之为“簇”。注意,这两个或者多个能够连续读取的扇区不⼀定在物理上是连续的。这是什么原因呢?这是因为硬盘转动的速度很快(标准速度为7200转/分),当磁头完成⼀个“扇区1”的读写后还来不及读取下⼀个连续的“扇区2”相邻的扇区就“飞”过去了,要等磁⾯再转动⼀圈到预定“扇区2”的位置才能继续进⾏读写。
所以⼀个簇在物理磁⾯的分布可能是不连续的。实际上各个硬盘⽣产商都会设置⼀个“跳跃因⼦”来确定能够连续读取的扇区。如下图所⽰,四个不存在于连续物理位置的扇区构成⼀个簇。这样保证了磁⾯在旋转⼀圈的情况下就可以完成⼀个簇的全部读写。
最后说明⼀点,虽然扇⾯是硬件层⾯上机械磁盘读取数据的最⼩单元,但是“簇”才是操作系统层⾯上读
取磁盘数据的最⼩单元。我们后⽂将讲解EXT⽂件系统和Btrfs⽂件系统,这两种⽂件系统定义的簇⼤⼩是不⼀样的。例如EXT⽂件系统的族⼤⼩可以有1KB(两个扇区)、2KB(四个扇区)、4KB(⼋个扇区)等多种选择。那么如果⼀个⽂件太⼩,不需要⽤完⼀个簇怎么办呢?没办法,它有需要使⽤⾄少⼀个簇的硬盘空间。也就是说,在操作系统存储⼀个⽂件时,即使⼀个簇没有占满,剩下的簇空间也不能再使⽤了。这就是为什么⼀个⽂件在操作系统上有两个⼤⼩:⼀个是⽂件的实际⼤⼩、另⼀个是⽂件占⽤硬盘空间的⼤⼩。
3-2、机械硬盘性能瓶颈
3-2-1、影响机械硬盘性能的因素
当需要从硬盘上读取⼀个⽂件是,⾸先会要求磁头定位到这个⽂件的起始扇区。这个定位过程包括两个步骤:⼀个是磁头定位到对应的磁道,然后等待主轴马达带动盘⽚转动到正确的位置,这个过程所花费的时间被称为寻址时间。也就是说寻址时间实际上包含两部分:磁头定位到磁道的时间为寻道时间,等待盘⽚转动到正确位置的时间称为旋转等待时间。
硬盘寻址的⽬的是为了到将要读取的⽂件的起始扇区,并开始去取数据。这就可以解释为什么硬盘上读取⼀个100MB⼤⼩的⽂件和读取1000个100KB⼤⼩的⽂件时间是完全不⼀样的现象了:通常来说⼀个100MB的⽂件是存储在硬盘上可以连续读取的扇区上的,也就是说当硬盘需要读取这个⽂件时只
需要进⾏⼀次寻址(为什么说是“通常”呢?因为前提是硬盘上⾄少要有⼀端连续空⽩的扇区,如果此时硬盘上碎⽚太多可能就不到这样的连续空⽩区域了);⽽读取1000个⽂件时,由于这些⽂件的起始存储位不连续,所以每次都要进⾏寻址操作。寻址时间是评价机械硬盘性能的重要指标,这个指标和硬盘转数、磁头数有直接关系:
硬盘转速越快的硬盘,在同样的寻址算法控制条件下将能够更快的将正确的扇区转动到磁头下⽅。但是硬盘转速也不能做得⽆限快,因为硬盘转速越快要求的磁⾯⼯艺、主马达⼯艺也就越⾼,并且产⽣的噪⾳、温度也会成⼏何级增加。现在民⽤级、商⽤级和⼯业级硬盘上最常采⽤三种转速选择:5400转/分、7200转/分和10000转/分。
磁头数,现在的机械硬盘中⼀般都包含了多个盘⽚并且分别使⽤独⽴的磁头。这样做的主要作⽤是在硬盘密度不变的情况下增加机械硬盘的容量。实际上这样的做法也可以增加⼀定的硬盘性能,因为读取存储在不同磁⾯上的⽂件时,它们的寻道时间可以相对独⽴。但是其对性能的提⽰只能是有限的,因为这些盘⽚共享同⼀个主轴马达。
机械硬盘的⼯作原理导致了它的⼯作性能会远逊于内存,现在主流的7200转硬盘外部传输速度的理论峰值⼤概也就是200MB/s。那么问题⼜来了,天才的硬件⼯程师难道就没有办法增加机械硬盘读写性能了吗?
答案是否定的,硬件⼯程师为机械硬盘集成了缓存,并采⽤预读机制读取当前扇区的临近扇区。举个例⼦,当硬盘读取⼀个⽂件所在扇区时,会将这个扇区临近的若⼲扇区上的数据⼀同读取出来并存储到硬盘缓存中。这样做的原因是依据计算机科学中得⼀个著名原理:局部性原理。
局部性原理包括三层含义。时间局部性,如果⼀个信息项正在被访问,那么在近期它很可能被再次访问。空间局部性,在近期将要被使⽤的信息很可能与现在正在使⽤的信息在空间地址上是临近的。顺序局部性,在典型程序中,除转移类指令外,⼤部分指令是顺序进⾏的。局部性是所有⾼速缓存设计的基本原理依据。
说⼈话,局部性原理在硬盘硬件设备设计中被应⽤的依据是:当⼀个⽂件被读取时,在它临近扇区所存储的⽂件数据也将在近期被读取。所以硬盘会预先读取后者到缓存中,以便在不久的将来,这些数据被请求读取时直接从缓存中向外部设备输出⽂件数据。
局部性原理不⽌适合⾼速缓存这样的硬件设计,它也适⽤于软件设计:⼀个程序90%的时间运⾏在10%的代码上。
3-2-2、顺序读写和随机读写
上⼀⼩节已经提到硬盘的顺序读写和随机读写有⾮常⼤的性能差异,其中主要的原因是两者寻址操作
上所耗费的时间存在巨⼤差异。那么顺序读写和随机读写的差异到底有多⼤呢?仅仅是靠上⼀⼩节的⽂字描述显然不能给读者数值化的认识,所以在本⼩节中我们将使⽤⼀款名叫CrystalDiskMark的测试软件,让读者具体体会⼀下两者的巨⼤区别:
以上是笔者编写⽂稿使⽤的某品牌笔记本上5400转机械硬盘的测试截图(题外话,这款笔记本⽤起来真想骂⼈),这个机械硬盘属于中低端硬盘,但是相同级别的硬盘在万元级以下的笔记本上却被⼤量使⽤,所以这个测试结果很能说明⼀些问题。⾸先解释⼀下以上截图中的⼏个主要项⽬:
在测试结果的上⽅写明了这是⼀个针对E盘符的测试,每⼀单项所测试的读写数据总量为500MB,并且每个单项测试分别执⾏5次。执⾏5次后综合每次的测试结果取平均值,最终形成这个单项的测试结果。
“Seq”和“Seq Q32T1”这两个选项分别代表没有IO队列的单线程顺序读写和⼀个深度为32的IO队列的单线程顺序读写,其中Q32代表队列深度为32,T1表⽰IO线程数为1。这个队列长度和IO线程数量都可以在CrystalDiskMark进⾏调整。
4K表⽰进⾏⼩⽂件读写测试时这些⼩⽂件的⼤⼩,这些4K⽂件将进⾏随机读和随机写测试。4K测试项是衡量固态硬盘性能的重要测试项,直接描述了固态硬盘的性能,这个我们将在下⽂进⾏说明。
从上图的测试结果来看,顺序读写的性能远远⾼于随机读写的性能,使⽤了IO队列的读性能⼜远远⾼于没有使⽤IO队列的读性能(且写性能基本持平)。当然以上的测试数值和选⽤的机械硬盘型号是密切相关的,但⽆论数值结果如何变化,最后都会符合以上所描述的性能规则。
例如如果您对7200转企业级硬盘进⾏测试,那么所有测试项的横向数值会⾼出很多;如果您的INTEL SSD 企业级固态硬盘卡进⾏测试,那么横向数值⼜会再⾼出很多倍。下图展⽰了INTEL SSD 750 企业级固态硬盘卡的测试结果(截图来源于⽹络):
4、固态硬盘
看了以上来源于⽹络的截图后,是不是感觉整个世界瞬间清爽了。⽬前固态硬盘的⽣产⼯艺⽇趋成熟,单位容量价格也趋于下降通道。固态硬盘替代机械硬盘是⼀个必然趋势,迟早有⼀天后者将被完全替换。本节向读者介绍固态硬盘⼤致的构成结构和⼯作过程。
4-1、固态硬盘结构
固态硬盘的结构和⼯作原理和机械硬盘⼤不⼀样。它主要由⼤量NAND Flash颗粒、Flash存储芯⽚、S
SD控制器控制芯⽚构成。他们三者的关系通过下图进⾏表⽰:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。