能解决你80%关于存储的疑惑

简介: 在计算机系统中,常用的存储介质包括寄存器、内存、SSD、磁盘等,寄存器的速写速度与CPU相同,一个时钟周期是0.3纳秒,而内存访问需要120纳秒,寄存器的读写速度比内存要快几百倍,固态硬盘访问需要50~150μs,磁盘访问需要一到十几毫秒,磁盘的读写速度比内存慢了几万倍,网络访问则更慢,需要几十到上百毫秒。

概述


在计算机系统中,常用的存储介质包括寄存器、内存、SSD、磁盘等,寄存器的速写速度与CPU相同,一个时钟周期是0.3纳秒,而内存访问需要120纳秒,寄存器的读写速度比内存要快几百倍,固态硬盘访问需要50~150μs,磁盘访问需要一到十几毫秒,磁盘的读写速度比内存慢了几万倍,网络访问则更慢,需要几十到上百毫秒。


如果把CPU的一个时间周期当作一秒,磁盘访问需要几个月才能完成。

1 ns = 10-9 seconds
1 ms = 10-3 seconds
* Assuming ~1GB/sec SSD

磁盘在存储金字塔所处的位置


越是底层存储,容量越大,价格越低,但读写的速度越慢。越是顶端存储,容量越小,价格越高,但性能越好。

b6c100e3f9464b3e9a01fe78a895f6dd.png

从磁盘结构角度理解为何顺序读写比较快?


磁盘的读写速度通常是毫秒级别的


磁盘由很多**盘面(Platter)**组成,我们用运动场的跑道类比,每个盘面上面有很多同心圆磁道,就像运动场里面的跑道一样。


每个磁道(Track)上面又划分了多个扇区(Sector),就像把一个400m的跑道划分成4个100m的跑道。每个扇区大小是相同的,通常是512字节。

01edffcc63144b6e9963ed96fa1f42c5.png

很多盘面堆叠在一起组成磁盘,这些到轴心相同半径的磁道组成一个柱面(Cylinder)。

什么是寻道?


磁头通过在不同的柱面上来回移动读写数据,这个过程称为寻道。

读写耗时的计算公式


磁盘读写的耗时等于寻道时间(找到柱面)+旋转时间(找到扇区)+传送时间(包括数据读写时间)

读写影响因素


寻道时间通常为几毫秒,旋转时间是移动到对应的扇区,最长为“1/转速×60×1000”毫秒,通常磁盘转速在每分钟5400~15000转(RPM),传送时间又等于“1/转速×60×1000/每个磁道扇区数”,主要取决于磁盘转速和每个磁道的扇区数


每次数据读取的速度主要取决于三个方面:寻道时间、磁盘转速和每个磁道扇区数。伴随着磁盘密度不断上升、转速越来越快,寻道时间成为最大的影响因素,所以,为了提高磁盘的读写速度,应该顺序读取,从而降低磁头来回切换的频率

操作系统为此设计了相关的磁盘调度算法,其中,“电梯调度”是最常用的调度算法。

增加磁盘的容量通常有两种方式


  • 增加盘片的尺寸或盘面数量
  • 当前磁盘的规格和服务器插槽大小是统一的,调整盘面数(厚度增加)或者改变盘面大小(增加直径)都会导致兼容问题,而且盘面直径增大还会导致磁头的寻道路径加长

  • 增加存储的密度
  • 提高单位面积的存储容量,这种方案目前比较流行,并且每年保持100%的提升

什么是逻辑块


512个字节的扇区是磁盘的最小管理单元,但这些扇区分布在不同的盘面上,如果每次读写扇区都需要通过柱面(Cylinder)、磁头(Head)、扇区(Sector)三元组去定位数据就太复杂了。所以,集成在存储设备里面的存储控制器抽象了一个简单数据管理单元“逻辑块”,这就是块存储的来历。

什么是LBA?


这些逻辑块通过数组方式暴露给操作系统,每次操作系统需要读取某一个扇区的数据时,发送逻辑块的编号**(LBA,Logical Block Address)**,存储控制器将它翻译成为CHS(柱面、磁头、扇区)三元组,从而读取磁盘的数据。SCSI就是采用了这种寻址方式。


它的优点除了上述的简单管理以外,还能够兼容不同的硬件设备,例如,磁带或网络存储就没有上面的三元组,通过这种抽象能统一管理各种存储


如果知道了LBA地址,对于磁盘来说,可以使用下面公式获取c柱面、h磁头、s扇区的具体值,其中,H代表磁头数,S代表扇区数:


●#c=#lba/(S*H)

●#h=(#lba/S)%H

●#s=(#lba%S)+1


固态硬盘SSD是闪存技术。目前已经出现了全闪存的存储系统,在未来将有可能取代硬盘,目前主要受限于价格和容量,在当前的数据中心内,还是以磁盘为主。由于SSD采用闪存芯片取代了机械臂移动和盘片旋转,读写速度非常快,普通的SSD读写都在500MB/s以上

什么是raid?


RAID(Redundant Array of Independent Disk,独立磁盘冗余阵列),它的基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使得性能达到甚至超过一个价格昂贵、容量巨大的硬盘。RAID技术提供了一种高性能、高可靠的数据存储技术,通过RAID技术组合多个盘,当数据读写时可以分散到多个磁盘,从而提高读写速度。并且配合校验、纠错技术,当有一个磁盘出现故障后,能恢复数据,从而保证数据的高可靠。

RAID核心技术


条带指将数据拆分成多个子块,分别保存到不同的磁盘中。


例如,1GB的数据可以拆分成5个200MB的数据块,分别存储到5个硬盘上面,这样可以并行写入。

分布式存储和RAID有相同的设计思想


分布式存储和RAID有相同的设计思想:数据拆分存储。通过条带极大地提高了I/O的性能,但也存在明显的单点故障,导致数据丢失。

避免单点故障校验码


校验码原理是通过算法结合数据分块得出校验块,然后将数据块和校验块分布到不同磁盘上面,如果某一个或者多个磁盘损坏,通过数据校验算法逆向生产数据块,常用的算法是海明校验和异或校验。异或校验是通过将一个有效信息与一个给定的初始值进行异或运算,得到校验信息。如果有效信息出现错误,通过校验信息与初始值的异或运算还原之前的有效信息。

raid的分类


RAID等级从RAID0~RAID6七个等级。其中,RAID 0只做条带化,没有数据高可用保障

RAID 1通过镜像技术将数据同时原样写入两个磁盘,保障数据高可靠性;而RAID 5通过校验码的方式保存数据

raid1


RAID 1采用的就是镜像技术,它的写入速度会比较慢,但读取速度会比较快,如图所示。读取速度可以接近所有磁盘吞吐量的总和,写入速度受限于最慢的磁盘,没有校验数据。RAID1由于是数据镜像,所以浪费了一组磁盘,并且写性能不好,而读性能提升了。

9ae501e9db0840ac9cbd059c42d5110b.png

raid5


RAID 5是当前最流行的RAID,RAID 5是通过计算数据的校验和,如果图所示数据文件A被拆分成A1、A2、A3三个数据块,通过校验算法计算出校验块Ap,并将这四个数据块保存到四个磁盘上面。无论是哪一个磁盘发生故障,都可以通过逆向生成数据块,从而保障数据的安全,RAID 5可以允许一个磁盘发生故障。cb4388b59a504e67b072dc3c54a859e2.png

什么是存储总线?


总线是贯穿整个计算机系统的一组电子管道,它负责在各个部件之间传输字节信息,通常是8个字节(64位)。当CPU需要读取存储数据的时候,先通过内存总线从内存中获取数据。如果数据不在内存中,则通过主机I/O总线去获取,于是请求便到了I/O控制器,也就是常说的HBA卡(可能是集成在系统主板上面的,也可能是独立的插槽),例如,iSCSI适配卡,接下来我们能看到存储I/O总线,下面连接着物理存储设备

59cd445d0dc7412f90a3a18e23e8aba5.png

如果是网络存储设备,则会进入网络适配器,例如网卡,经过网络传输,连接到存储服务器的网络适配器上,然后经过与上面相似的路径写入存储设备

a936a14b24b04ba6bef993939c26683f.png

iSCSI协议


SCSI(Small Computer System Interface,小型计算机系统接口)是一种用于计算机及其周边设备之间(硬盘、软驱、光驱、打印机、扫描仪等)数据传输和通信的协议。SCSI协议已经被广泛应用到很多高端的SAN存储系统中,但成本很高,需要专用的光纤交换机等设备,而大部分机房的建设都是基于相对廉价的以太网交换设备的。随着软件定义存储被推广,使用TCP/IP去承载SCSI协议的方案逐渐成熟,这就是iSCSI协议又被称为IP-SAN的原因

08799e14ae844a999dee8a00a6c2f7ea.png

文件系统


分散的数据块不能直接被程序读写,还需要一种更加直观的管理方式。文件系统是一种存储和组织计算机数据的方法,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据,不必关心数据实际保存在硬盘(或者光盘)地址为多少,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的哪个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写到了哪个文件中895531b223454606a9b34759bd8ef41f.png

0b12bc251fd0404086a7d42843d57028.png895531b223454606a9b34759bd8ef41f.png

整个存储I/O从上到下主要分为:

VFS、Block层、I/O调度层、SCSI驱动层。

其中VFS为了兼容各种文件系统,例如:ext4、xfs、proc等,对上层提供统一的open、write、read等接口。对文件的读写最终都会转化为Block层的数据库的读写,在Block层,可以对多个读写请求进行合并,从而降低读写次数。I/O调度层通过I/O调度算法(电梯算法、NOOP等)控制读取顺序。最终将请求发送到SCSI驱动。如果底层是磁盘设备,那么将会通过控制磁头移动来读写数据。

目录
相关文章
|
10月前
|
人工智能 自然语言处理 自动驾驶
超越文本:多模态大语言模型如何让AI“看世界
超越文本:多模态大语言模型如何让AI“看世界
|
人工智能 并行计算 算法
基于 MATLAB 的电力系统动态分析研究【IEEE9、IEEE68系节点】​
基于 MATLAB 的电力系统动态分析研究【IEEE9、IEEE68系节点】​
939 1
|
人工智能 双11
阿里云华中大区合作伙伴年会成功举办,共绘数字化新蓝图
近日,阿里云华中大区合作伙伴年会成功举办,近百名来自湖北、湖南、江西等地的伙伴齐聚一堂,回顾过去一年的生态发展并展望未来。
|
人工智能 自然语言处理 程序员
5个小妙招,通义灵码“一键治愈”你的代码问题
目前通义灵码支持 DeepSeek 满血版 V3 和 R1 模型,并内置 Qwen2.5-max 以及 QwQ-plus 模型,让研发体验焕新升级。
|
设计模式 架构师 Java
2024到来!一到五年Java工程师想跳槽,大环境不好,怎么破?
会不会因为裁员潮,市场上工作机会比往年跳槽季更少,同时求职者因为失业或裁员潮带来的恐慌心理,很多人在找工作时更怕错过机会而不做过多思考和选择就入职。这样的形势下跳槽或者求职时,该如何判断和做出选择?
ly~
|
开发框架 小程序 前端开发
抖音小程序的开发难度大吗?
抖音小程序的开发难度因人而异,主要取决于开发者经验、技能及功能需求。技术上需掌握前端技术及抖音开发框架,了解平台生态与规则;设计上需符合用户审美和习惯,具备创新性和实用性。此外,严格的审核标准和激烈的市场竞争增加了开发难度,开发者需制定有效推广策略并持续优化小程序以保持竞争力。
ly~
759 4
|
人工智能 自然语言处理 数据可视化
通义灵码上新功能:用代码画流程图
不想读前人“骨灰级”代码,不想当“牛马”程序员,想像看图片一样快速读复杂代码和架构。通义灵码刚刚支持代码逻辑可视化,可以把你的每段代码画成流程图。像个脑图工具一样帮你图文并茂画出代码逻辑和框架,再也不用迷失在代码迷宫啦!
|
分布式计算 资源调度 NoSQL
|
iOS开发 测试技术 MacOS
Appium-处理系统弹窗
前言: 最近在搞appium自动化,iOS的系统弹窗是大家都会遇到的,本文来总结处理这种弹窗的用法。 环境: MacOS:10.13.4 Appium-desktop:1.6.1 Xcode:9.3.1 一、使用switch_to.alert处理弹窗 #所有弹窗默认允许 self.driver.switch_to.alert.accept() 首先推荐这种方式,几乎不会失败。
3442 0
|
存储 缓存 算法
这些年背过的面试题——Netty篇
本文是技术人面试系列Netty篇,面试中关于Netty都需要了解哪些基础?一文带你详细了解,欢迎收藏!