点击上方“朱小厮的博客”,选择“设为星标”

后台回复"书",获取

后台回复“k8s”,可领取k8s资料

存储系统作为数据的载体,为前端的服务器和应用程序提供读写服务。存储阵列某种意义上来说,是对应用服务器提供数据服务的后端“服务器”。应用服务器对存储系统发送数据的“读”和“写”的请求。然而,不同的应用程序对存储的数据访问类型有所不同。

本文描述典型的不同应用程序的存储IO类型。帮助读者了解不同应用程序存储IO类型的同时,提供的数据也可以为存储模拟和压力测试的数据参考。

IO类型描述:

描述不同应用的存储IO类型之前,先要描述存储中的定义IO的几个术语:

  1. IO大小(IO Size):IO Size是应用程序发起,经过操作系统的磁盘子系统,向存储系统发送的读写请求的单位大小。不同的应用程序所发送的IO大小都不相同,例如对于数据库应用,它在数据读写的时候IO Size是8KB,而在事务日志的写入的时候可能是512Bytes-64KB不等。所以,通常所说的IO Size都是一个平均的概念。即某一款应用在一段时间内的平均IO大小。

  2. 读写比例(Read/Write):读写比例比较容易理解,就是应用程序读数据和写数据分布。这个在规划存储的时候也至关重要,因为存储系统中的保护级别(RAID)的不同,对写有损失。例如RAID-5单次写入需要分别对数据位和校验位进行2次读和2次写。所以说,如果用RAID-5作为写入比例较高的应用,显然会对性能有很大影响。

  3. 顺序与随机读写比例(Random/Sequential):顺序和随机读写取决与应用的获取数据的方式。通常情况下,如果数据的读取和写入是在连续的磁盘空间上,可以认为是顺序读写。如果应用读取的数据分布在不同磁盘空间,且无固定的顺序,则视为随机读写。由于传统的机械磁盘(闪存盘不再讨论之列)读写数据需要盘面的转动和磁头的移动,这使得随机读写的效率在物理磁盘层面要远小于顺序读写。通常存储系统都都会利用缓存来减少这部分的延迟,减缓因为磁头的移动而带来的性能损失。随机读写的代表的是OLTP的数据库文件,顺序读写的代表则是数据的事务日志。

应用程序存储IO类型:

下面的表中描述的不同的应用程序对应的IO大小、读写比例、随机和顺序比例。表中的比例为一个通用的参考值,比例接近真实各种应用的IO类型。当然不能包含全部的应用类型因为根据不同生产环境,数值也会有很大的差异。这里的数据提供一个参考,可以用于使用压力测试工具,例如IOMeter,模拟不同应用的IO负载。

IOmeter是一款用于单系统和集群系统的I/O子系统度量(Measurement)和特征化(Characterization)工具,它是一个负载生成器(Workload Generator),也是一个度量工具(Measurement tool),可用于模拟任何程序或benchmark的磁盘或网络I/O操作,在单个或多个(联网)系统上生成并度量负载。

IOmeter由两个程序组成,Iometer和Dynamo。Iomter是控制程序/GUI,它告诉Dynamo需要做什么,收集数据结果并总结到一个输出文件。一次只应该运行一个Iometer,通常运行在服务器上。

Dynamo是一个负载生成器,它没有GUI,在Iometer的命令下执行I/O操作并记录性能信息,然后返回数据给Iometer。一次可以运行多个Dynamo,通常是一个副本运行在服务器上,另一个副本运行在每一台客户端上。Dynamo是多线程的,每一个副本可以模拟多个客户端程序的工作(Workload),每一个正在运行的Dynamo副本被称为是一个Manager,Dynamo中的每一个线程被称为worker。

不同应用通常具有不同的I/O类型,了解应用的I/O类型是为其设计解决方案、排错性能问题的首要工作。那I/O类型通常包括哪些需要考虑的因素?我们今天就来谈一谈I/O类型的几个重要方面。

读 vs. 写

应用程序的读写请求必须量化,了解他们之间的比列,因为读写对存储系统的资源消耗是不通的。了解读写比率直接关系到如何应用缓存、RAID类型等子系统的最佳实践。写通常需要比读更多的资源,SSD的写操作相对读更是慢得多。

顺序 vs. 随机

传统存储系统通常都是机械硬盘,因此整个系统设计为尽可能顺序化I/O,减少由于磁盘寻道所带来的延迟。所以,顺序I/O相对随机I/O的性能会好很多。随机小I/O消耗比顺序大I/O更多的处理资源。随机小I/O更在意系统处理I/O的数量,即IOPS;而顺序大I/O则更在意带宽,即MB/s。因此,如果系统承载了多种不同的应用,必须了解它们各自的需求,是对IOPS有要求,还是对带宽有要求。这往往需要在两种之间进行折衷考虑。闪盘是一个例外,它没有机械寻道操作,因此对随机小I/O的处理是非常迅速的,由此是读操作。

大I/O vs. 小I/O

我们通常把<=16KB的I/O认为是小I/O,而>=32KB的I/O认为是大I/O。就单个I/O来讲,大I/O从微观的角度相比小I/O会需要更多处理资源,不过对于智能存储系统来说,会尽可能把I/O整理为顺序的,以单个操作执行,如此依赖,将多个小I/O整理成单个大I/O处理后,反而会更快。I/O的大小依然取决于应用程序本身,了解I/O的大小,影响到后期对缓存、RAID类型、LUN的一些属性的调优。

位置引用

数据的位置分布影响到后期对二级缓存或存储分层技术的应用,因为这些技术都会根据I/O的位置分布来判断是否将I/O放置到缓存或快速的层级。位置引用是指那些被频繁的存储位置,我们通常认为最新创建的数据以及最近被访问过的数据,它们周围的数据也同时被访问的可能性会比较大。因此,了解应用程序的I/O位置特性,有助于应用正确的性能优化技术。

稳定 vs. 爆发

I/O数量在一天中的不同时段会有不同的表现。例如,早高峰时段的I/O数量相比下班后的I/O会多出许多。如果能准确预测和估计应用的I/O在不同时间段的稳定性和爆发性,可以正确分配资源,提高资源利用率。在前期的设计阶段,就应该考虑系统是否能够处理I/O高峰期。

多线程 vs. 单线程

多线程是实现并发操作的一种方式,同时也意味着对存储系统的资源消耗更多。这种高IOPS的请求方式,在有些情况下会造成磁盘繁忙,进而导致I/O排队,增加了响应时间。因此,适度的调整线程数量,不仅可以实现并发,而且能在不拖累整个存储系统的情况下,达到最优的响应时间。

想知道更多?描下面的二维码关注我

后台回复"技术",加入技术群

后台回复“k8s”,可领取k8s资料

【精彩推荐】

  • 原创|OpenAPI标准规范

  • 中台不是万能药,关于中台的思考和尝试

  • ClickHouse到底是什么?为什么如此牛逼!

  • 原来ElasticSearch还可以这么理解

  • 面试官:InnoDB中一棵B+树可以存放多少行数据?

  • 微服务下如何解耦?对于已经紧耦合下如何重构?

  • 如何构建一套高性能、高可用、低成本的视频处理系统?

  • 架构之道:分离业务逻辑和技术细节

  • 星巴克不使用两阶段提交

点个赞+在看,少个 bug ????

干货:如何正确描述存储IO类型?相关推荐

  1. 什么是正确的JSON内容类型?

    我一直在弄乱JSON一段时间,只是将其作为文本推出,并没有伤害任何人(据我所知),但是我想正确地做事. 我见过这么多的所谓的"标准"为JSON内容类型: application/j ...

  2. 【HCIA-cloud】【4】服务器虚拟化之存储资源管理:存储资源类型说明、存储配置模式说明【普通、精简、延迟置零】、虚拟机磁盘类型说明、FusionCompute中操作添加存储

    目录一览 说明 存储资源类型 存储虚拟化与华为云计算存储对比 FusionCompute存储资源与存储资源使用对比 FusionCompute中的存储资源类型 物理磁盘 SATA盘 SAS盘 NL-S ...

  3. Linux存储IO栈(4)-- SCSI子系统之概述

    概述 Linux SCSI子系统的分层架构: 低层:代表与SCSI的物理接口的实际驱动器,例如各个厂商为其特定的主机适配器(Host Bus Adapter, HBA)开发的驱动,低层驱动主要作用是发 ...

  4. 主流存储网络类型分析

    根据IT领域的摩尔定律:在当今的信息环境下,数据将随着时间的推移而呈几何级数增长.庞大的信息使得人们在信息存储方面所花费的管理和维护开销大大增加,如何合理安全的保存这些新增的数据,又如何从浩瀚如海的信 ...

  5. Spring Boot干货系列:数据存储篇-SQL关系型数据库之MyBatis的使用

    Spring Boot干货系列:数据存储篇-SQL关系型数据库之MyBatis的使用 前言 上篇我们介绍了Spring Boot对传统JdbcTemplate的集成,这次换一下,介绍下Spring B ...

  6. Qt/C++ 借助QVariant实现可存储通用类型的容器

    1. 背景 在项目开发过程中,我们可能会遇到这么一种场景:某个或某几个软件组件可以产生许多不同类型的数据,无论是出于性能的考虑,或者是接口简洁性的考虑,这些数据需要被一次性塞到一个类似于数据库的数据容 ...

  7. 单片机_CT107D训练平台电路原理图\蓝桥杯训练板\ 存储/IO 扩展模块\ 8255 扩展芯片\EEPROM 芯片 AT24C02\

    存储/IO 扩展 8255 扩展芯片原理图: 8255芯片是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口.具有3个通道3种工作方式的可编程并行接口芯片(40引脚). 其各口功能 ...

  8. GreenDao存储自定义类型对象解决方案(转)

    最近公司项目选用GreenDao作为Android客户端本地数据库的对象关系映射框架.对于GreenDao虽然以往也有简单用过,但这还是笔者第一次在实际业务中使用.碰到了题目所述的两个问题,虽然在Tu ...

  9. 如果有一个类是 myClass , 关于下面代码正确描述的是?

    如果有一个类是 myClass , 关于下面代码正确描述的是: myClass::~myClass(){ delete this; this = NULL; } 答案:无法编译通过 解析: 1.在类A ...

最新文章

  1. 如何让自己时刻冷静的方法_4个方法,教你如何真正爱自己
  2. 透明大页相关内核参数_Linux7.4 关闭透明大页
  3. boost::phoenix::val相关的测试程序
  4. 解决Oracle 11gR2 空闲连接过多,导致连接数满的问题
  5. 容器编排技术 -- Kubernetes kubectl create poddisruptionbudget 命令详解
  6. 【c语言】调整数组使奇数所有都位于偶数前面
  7. 吴恩达(Andrew Ng)——机器学习笔记1
  8. 阶段3 1.Mybatis_07.Mybatis的连接池及事务_6 mybatis中的事务原理和自动提交设置
  9. 平凡而又神奇的贝叶斯方法(转)
  10. 视频教程-汇编语言程序设计VI-其他
  11. 解决 IDEA 导入项目 中文乱码
  12. 入行网络工程师一年的心得体会
  13. 基础概念 | 公约数、公倍数、互质数
  14. arcgis 10 扩展模块授权无效的解决方法
  15. 【2019.06.21】基于Airtest的微信朋友圈自动点赞脚本设计与实现 2019.06.21脚本正常运行
  16. 什么是面向对象?面向对象的特征?面向对象和面向过程的区别?
  17. 微信小程序开发多少钱 怎么看价格成本
  18. Python开发-- Lesson 1--Python介绍和入门(2016/07/23)
  19. matlab的spm,医学图像的批量配准(Matlab,SPM),医学影像,matlabSPM
  20. 重塑价值:新一代ITSM平台的建设、咨询与实施

热门文章

  1. c语言语法分析源程序,深入浅出编译原理-5-一个简单语法分析器的C语言实现
  2. C运算符解析及优先级
  3. 常用LINQ关键字用法汇总
  4. SQL Server表结构和数据导入到MySQL
  5. 过来人经验!聊聊前端工程师的职业规划
  6. mysql数据库引擎调优
  7. Gearman 异步处理委派任务
  8. linux常用的脚本、命令
  9. 剑指-顺时针打印矩阵
  10. 洛谷 - P4013 数字梯形问题(最大费用最大流+举一反三)