17 | 存储篇:如何根据性能优缺点选择最合适的存储系统?
庄振运
该思维导图由 AI 生成,仅供参考
你好,我是庄振运。
前面两讲我们讨论了 CPU 和内存,今天我们讨论第三个重要的主题:存储系统。现在是大数据时代,这些数据终归要保存到各种存储系统里面,以供读写和分析,因此讨论存储系统的性能问题就很有必要了。
狭义上的存储往往是硬件,比如磁盘、磁带还有固态硬盘。而广义上的存储系统除了指硬件的硬盘,还包括基于网络的存储系统,比如 SAN(Storage Area Network, 存储区域网络)和 NAS 存储(Network Attached Storage,网络接入存储)。
各种存储系统各有优缺点,尤其是性能和成本,所以对不同的需求,我们要选择最合适的存储系统。
我们首先讲存储系统最重要的三大性能指标:IOPS、访问延迟和带宽,然后讲传统硬盘 HDD(Hard Disk Drive)的性能。因为传统硬盘的特性相对简单直白(毕竟业界已经用了几十年了)。这之后再讲固态硬盘的性能(固态硬盘就是 SSD,也叫 Flash)。相对于传统硬盘,SSD 的内部工作原理很不一样,这也就导致它们的性能特性大相径庭。 最后,我们再延伸到基于网络的存储系统,并且介绍几个常用的和存储相关的工具。
存储系统的三大性能指标
一个存储系统的性能最主要的是三个:IOPS、访问延迟、吞吐率 / 带宽。这三个指标其实是互相关联和影响的,但是我们一般还是分开来衡量。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
存储系统的性能对于数据处理至关重要。本文介绍了存储系统的三大性能指标:IOPS、访问延迟和带宽,并对传统硬盘(HDD)和固态硬盘(SSD)的性能特点进行了详细讨论。传统硬盘的性能受到机械运动的影响,而固态硬盘则基于NAND技术,具有单元、页面和块的存储结构。文章强调了不同存储系统的优缺点,以及如何根据性能指标选择最合适的存储系统。对于读者来说,本文提供了深入了解存储系统性能的基础知识,有助于他们在实际应用中做出明智的选择。 SSD的性能相对于HDD有显著提升,但也存在写入放大和耗损平衡等问题。文章指出,应用程序设计需要充分考虑SSD的内部机制,以充分发挥其潜力,提高性能并延长寿命。此外,基于网络的存储系统如DAS、NAS和SAN也得到了介绍,为读者提供了更多选择和理解。 最后,文章列举了常用的存储系统性能监测和测试工具,为读者提供了实用的工具参考。总的来说,本文全面介绍了存储系统的性能特点、优缺点以及相关工具,对读者了解存储系统提供了全面的视角和实用的指导。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能工程高手课》,新⼈⾸单¥59
《性能工程高手课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- 我来也基础知识也看的得很过瘾。 虽然之前也了解一些,但还没细化到平均延迟是哪个级别,相差多少倍。 就像cpu的各级缓存是几个时钟周期一样,之前可能只是感性的认识。 现在虽然也并没完全准确的记下来,但大致的毫秒和纳秒级别还是知道的。 等有必要深究了,再回过头来看,也是很好的。 感谢老师的整理。
作者回复: 很高兴对你能有帮助。
2020-01-035 - 丁丁历险记我是来赏下诗的,就硬盘而言,目前我们只用ssd “梅须逊雪三分白,雪却输梅一段香。”
作者回复: 哈哈,你们公司有矿。
2020-01-1523 - Linuxer有一个问题想请教如果是磁盘空间较宽裕,每次都是小数据量写入,是不是就不存在写入放大的问题了呢?因为现在很多方案都是元数据放在SSD(随机小数据量写入),其他数据放在HDD(大量顺序数据写入)
作者回复: 得看多小,如果小于4KB,那么有点太小(因为最小写入单位就是4KB)。大于4KB还行。
2020-01-031 - 森森不息讲的都太基础,最好有深入案例
作者回复: 现在的模块还处于理论和分析阶段;偏基础,主要是照顾不太懂性能的同学。 后面的模块(优化和实践的模块)有比较多的“偏高深”的实践。 :)
2020-01-0321 - 子荣“IO 带宽大约每秒 100MB,而随机 IOPS 一般是 100 左右”,上文不是说IOPS一般是针对4KB的IO而言吗,那100的IOPS,对应的是400KB,这和IO带宽100MB/s也差太远了吧?
作者回复: 讲IO带宽的时候一般是挑有利环境:就是顺序IO。 随机IO的话,主要受限于磁头旋转,所以100左右。
2020-06-15 - 搬砖人测试案例1: 1. 启动一个FIO跑顺序写:fio -filename=/dev/sdg -direct=1 -iodepth=1 -rw=write -ioengine=libaio --bs=8k -numjobs=1 -name=mytest 2. 启动一个FIO跑随机读:fio -filename=/dev/sdg -direct=1 -iodepth=1 -rw=randread -ioengine=libaio --bs=8k -numjobs=1 -name=mytest 发现读的时延非常不稳定,每秒读IOPS平均只有10以下,读时延经常抖动至几百ms,如果顺序写的深度再加高一些,则读就会出现秒级时延 测试案例2: 1. 启动一个FIO跑随机写:fio -filename=/dev/sdg -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio --bs=8k -numjobs=1 -name=mytest 2. 启动一个FIO跑随机读:fio -filename=/dev/sdg -direct=1 -iodepth=1 -rw=randread -ioengine=libaio --bs=8k -numjobs=1 -name=mytest 发现读时延相对稳定,读写IOPS均可以达50左右,时延平均保持在20ms左右 机械盘的ioscheduler配置成deadline,none都有尝试过,发现对结果没什么改变 从测试结果来看,机械盘对于顺序写的行为是非常友好的,在这种情况,对于读的调度则变得非常不友好了,导致读的时延非常不稳定 所以我们想咨询一下:一边顺序写,一边随机读的场景下,有没有办法让读的性能保持跟稳定一些?或者有没有办法提升读的优先级?希望可以达到测试案例2的效果
作者回复: 比较困难,因为计算机领域的特点是分层,底层存储和上层应用是尽量互不干涉的。不过真要做的话,也有些招数,比如用Cgroup把不同的IO分开。
2020-03-06 - 张开元v2022-10-16归属地:北京
收起评论