迟来的观后感——伪存储专家谈IOPS

2023-12-03 03:50

本文主要是介绍迟来的观后感——伪存储专家谈IOPS,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


微信号 VMCloud


篇前语:

 

       看到封面,相信参加过在北京举行的2014年亚太区域MVP Open Day的朋友一定不陌生,当时这篇名字为Hyper-V的数学作业的课程震撼了在场的每个人的心,包括笔者跟当时跟我一起前往的领导也深深被贾浩老师这篇既有实例又有数据的公开课所启发并在之后的项目中一直收益。当时听完贾老师的课之后,我甚至直接联系到贾老师本人跟他探讨IOPS之余,还要了课件继续做研究(由于保密协议要求,该课件不方便公开,抱歉抱歉,不过本篇解读将会隐晦地分享该课件的精华之处,虽远不及贾老师现场讲解的万分之一,但权当抛砖引玉),以下是当年跟贾老师的邮件:


   笔者一直忙于应付考试、项目等事没时间整理总结这篇微文,众所周知,目前的虚拟化实际上已经发展到几乎人人皆知的地步,在做虚拟化的过程中,可能很多人或多或少会遇到虚拟机卡、应用莫名访问慢(除开应用本身问题)、数据库死锁多(除开架构优化问题)等情况,而且很多情况下CPU、内存、网络都非常好,甚至占用都不到10%,这到底是为什么?

(免责声明:以下内容由StatLee扮演的StatLee编写,与StatLee本人无关!)


 

正文部分:

    首先,请问下存储相关的参数是什么?在12年前,很多非IT人士可能会回答容量、品牌,IT人士可能会回答容量、转速、读取、写入速度。Ok,容量、转速无可厚非,读取、写入速度这个怎么来衡量呢?很多人可能会回答:可以看拷贝、复制文件的速度嘛,每秒多少兆多少兆嘛。没问题,您这样回答OK的,那么我怎么凭借每秒速率来设计我的的底层架构?怎么考虑并发?是平均吗?

    通过每秒速率然后平均分摊来设计架构,事实上就算是这样简单的算法都很少人这样做,这样做到底可不可以?据我目前了解,大部分设计者都是基于存储容量考虑,以下我列举一个在VMCloud群里曾经有人问过的问题,姑且称呼他为小明吧(小明躺枪):

小明:求助各位大神,我有10300G的盘可不可以放60台虚拟机T T”

大蛇:小伙子,没问题的,每个系统盘40G来算,你3T够的!:)

小明:好的,谢谢大神!:D”

    第一反应我看到这样的问题,我很汗颜,第二反应,看到这样的回答,我更汗颜,当然回答者说的实际上也没有错,确实,40G60台,差不多也是要2400G(约合2.4T)。

    但是!这样的答案真的对吗?这位小伙子以后真的在10300G盘上跑满40台虚拟机会不会有问题呢?

    回答这个问题之前,我先来回答前面所提的按照速率平均分摊设计架构究竟可不可以。可以!人家只计算容量设计都没问题,您连速率都考虑进去了肯定比只考虑容量来得慎重啊!更准确的回答,其实您可以选择比速率更加专业的方式,就是今天所要谈的——IOPS

    IOPS由于最近几年存储的瓶颈越来越突出,越来越多的ITPro都明白这玩意儿的重要性,那么到底IOPS是什么鬼?如何决定存储的性能?

    先上Wiki百科对IOPS的解释(传送门:http://en.wikipedia.org/wiki/IOPS):


       简而言之,IOPS是指存储每秒可接受多少次主机发出的访问,主机的一次IO需要多次访问存储才可以完成的一个指标。以下是IOPS的计算公式:


       看起来蛮复杂的,我要怎么去计算呢?实际上很多时候我们都不需要用到这个公式(如果您真的想纠结下的话,也可以试试,我尝试过,误差不会很大),接下来,咱们来聊聊实战。

实战:

       IOPS的加入,仅仅是为您的规划有一个更加精细,但是再精细的估算,也是估算,再上估算之后的存储环境也会受其他的性能参数(诸如网络、内存、处理器等限制),由于本篇只讨论存储,故不考虑其他性能条件(即默认都是满足要求的),所以请不要纠结于精不精准。废话不多说,那么先上一组数据(相信大家都比较熟悉了):

  • 常见SAS盘可提供的单盘IOPS(可能有不同版本有多多少少的误差,无所谓了)


  • 常见系统的IOPS需求(可以看到最高的要求是50左右,我们按照内存比来计算,8G内存大概需要100+IOPS):


  • 常见Raid级别的IOPS比例与计算方式(可能就比较少人考虑了,并不是叠加计算),我们此篇为能够简单暴力的表达IOPS的规划,暂时不考虑应用的读写比例,就以物理的IOPS读写比例来进行计算:


  • 再来个比较夸张的IOPS例子做对比(当然SharePointExchange诸如此类都是吃IO大户,这里暂且以SQL为吃IO大户吧):


Ok,现在我们可以来回答小明的问题了,到底10300G的盘,能不能撑下60台虚拟机?鉴于小明提的问题实际上也不是特别明确,基于谨慎的原则,我们来设计两个场景:

  1. 101WRPM SAS 300G,无Raid60个虚拟机均为常规系统,且内存、CPU均为4G2 Cores

  2. 101WRPM SAS 300GRaid 1060个虚拟机80%为常规系统,内存为8G2 Cores20%为重型应用(以数据库的2313IOPS为例子),内存为16G2 Cores

     a场景到底IOPS满不满足需求呢?步骤如下:

         :计算无Raid级别的IOPS10 * 140 = 1400

         :计算60个虚拟机的IOPS需求:50 * 60 = 3000

        < 需,而且是远远小于,这里我们是以小明手上是101WRPMSAS,如果连1WRPM都没有呢?明显的,当虚拟机数量达到小明说描述的要60台的时候,整个虚拟化平台基本也就瘫痪了。

       来看看b场景,步骤如下:

         供:计算Raid 10级别的IOPS(读写比2:1):(10*140)*0.7 [2/3]+2*(10*140)*0.3 [1/3] = 1820

         需:计算60个虚拟机的IOPS需求:50 * 60 * 0.8+ 2313 *60 * 0.22W+

     不多说了。

     这么说,小明的虚拟化平台是不是没救了?非也,实际上合理设计,是可以让101WRPM SAS盘顺畅跑60台虚拟机的,我们就说60台虚拟机全部跑常规系统吧:

      首先考虑Raid级别,无Raid下仅有1400 IOPS提供明显不够,且生产环境也不能裸跑,让我们来考虑下如何做Raid,先整理需求:

      IOPS需求: >= 300060*50

      容量需求: >= 2.4T60*40G

     也就是说,我们需要选择这么一个存储方案:

      if 存储方案IOPS >= 3000 then

             print 可以继续考虑容量啦!

              if 存储容量>=2.4T then

                 print 就是这个方案啦!

              else

                 print “IOPS满足,但是容量不满足,弃选!

              end if

         else

                 print IOPS都不满足,不用考虑容量啦!

         end if

     如果有多个存储方案,我们就应该选择一个最具性价比的,Ok,有了需求,咱们来设计下几种Raid方案的所能提供的IOPS与容量:

  •      Raid 0 :生产环境不考虑 ×

  •      Raid 10:可提供1820 IOPS ×

  •      Riad 5:可提供 2100 IOPS ×

  •      Raid 6:可提供 3500 IOPS √ 容量提供(n-2)*300=8*300=2.4T 

           到这里,大家应该明白,要如何考虑存储方案了吧?So,小明的问题答案就是:可以,但是需要做Raid 6才能支撑,且不能有类似SQL一样的重型应用,为保证容量冗余,建议加多两块盘。

           下面再举个例子:

    问:3块15K 1T 容量SAS是否满足 10台8G内存、2 Cores 虚拟机(搭载普通应用)?

    答:首先,10台高性能虚拟机总共需要100*10+(100*10)*20%=1100 IOPS

    而3块15K1T容量 SAS采用无Raid,最大只能540 IOPS,故需要采用Raid 6才足够满足该例中的需求(可提供1296 IOPS,当然需要加多一块盘才可以组成Raid 6)。故3块 15K1T容量的SAS满足10台高性能虚拟机。

           那么究竟这样设计对不对呢?笔者不能说精准,但是误差并不会太大,下面是按照我们设计的方案做成的虚拟化平台设计测试的整体测试的结果:

           

    (上图是前期测试,故未用专业工具测试)

                                           
    (上图是根据业务60%、数据40%的比例,使用IOMeter测试出来的结果,比较精确)

           再举个反例,某一天有位朋友问我,他们的虚拟机异常的卡,性能资源蛮充足的呀,不知道是什么原因:

           

          嗯,后来我丢了个HDPro上去,测试结果:

     


           再后来,这个问题我了解到他们平台有一台SQL数据库一直在读写,而他们的存储实际上并没有那么高的IOPS提供,故建议让他们停止或迁移SQL到别的存储上即可。

           关于IOPS测试工具,除了要快速展现结果之外,我强烈建议用IOMeter,这个工具可以根据业务负载来进行测试,得到数据比较精确,必要时您还可以结合Loadruner进行测试哟:)


    总结:

           讲到这里,基本上对于存储设计这块基本也就讲完了,实际项目中,各位看官还是得根据项目实际来做规划,应当考虑上其他的性能条件,比如贾浩老师在Open Day提到过CPU线程的问题,并且以著名的阿姆达尔定律来做解释:


              或许笔者讲得例子可能是错误的,在这篇文章中,笔者想表达的是一种思考存储的思路。 在设计方案中,特别是虚拟化平台项目中,前期的规划特别重要,CPU、内存、网络固然重要,请千万别忘记存储设计,也不要仅仅对容量进行考虑,否则在日后客户使用过程中肯定也会给您带来麻烦,希望今天的这篇微文能给您以后带来一点点抛砖引玉的启发吧:)

 



(手机微信长按二维码可自动识别)


关注方式

① 复制『微信号或ID』,在『添加朋友』中粘贴搜索号码关注。
② 点击微信右上角的『+』,会出现『添加朋友』,进入『查找公众号』,输入 VMCloud ,即可找到。
③ 红字ID部分长按均可复制。



这篇关于迟来的观后感——伪存储专家谈IOPS的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/447976

相关文章

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

ORACLE语法-包(package)、存储过程(procedure)、游标(cursor)以及java对Result结果集的处理

陈科肇 示例: 包规范 CREATE OR REPLACE PACKAGE PACK_WMS_YX IS-- Author : CKZ-- Created : 2015/8/28 9:52:29-- Purpose : 同步数据-- Public type declarations,游标 退休订单TYPE retCursor IS REF CURSOR;-- RETURN vi_co_co

OpenStack离线Train版安装系列—11.5实例使用-Cinder存储服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

多云架构下大模型训练的存储稳定性探索

一、多云架构与大模型训练的融合 (一)多云架构的优势与挑战 多云架构为大模型训练带来了诸多优势。首先,资源灵活性显著提高,不同的云平台可以提供不同类型的计算资源和存储服务,满足大模型训练在不同阶段的需求。例如,某些云平台可能在 GPU 计算资源上具有优势,而另一些则在存储成本或性能上表现出色,企业可以根据实际情况进行选择和组合。其次,扩展性得以增强,当大模型的规模不断扩大时,单一云平

MySQL技术内幕_innodb存储引擎

MySQL技术内幕_innodb存储引擎 INNODB innodb中如果表没有主键 表是否由 非空唯一键,有则该字段为主键没有,则自动创建一个6字节大小的指针 innodb存储引擎的所有数据都存储在表空间中,表空间由段,区,页(块)组成。 如果启用了 innodb_file_per_table, 则每张表内的数据可以单独放在一个表空间中即使启用了上面参数,共享表空间也会因为 系统事务信息

单精度浮点数按存储格式转为整数的程序

///#include<cstdio>//-----------------union int_char{unsigned char ch[4];float i;};void out_put(union int_char x)//x86是小端对其模式,即最数据的最低位存储在地址的最低位上。{printf("单精度浮点数值为:%f\n",x.i,x.i);printf("存储位置从左到右

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客  这节就是真正的存储数据了   理清一下思路: 1.存储路径并检查 //2进制文件类存储private static string Data_Binary_Pa

C语言-数据结构 克鲁斯卡尔算法(Kruskal)邻接矩阵存储

相比普里姆算法来说,克鲁斯卡尔的想法是从边出发,不管是理解上还是实现上都更简单,实现思路:我们先把找到所有边存到一个边集数组里面,并进行升序排序,然后依次从里面取出每一条边,如果不存在回路,就说明可以取,否则就跳过去看下一条边。其中看是否是回路这个操作利用到了并查集,就是判断新加入的这条边的两个顶点是否在同一个集合中,如果在就说明产生回路,如果没在同一个集合那么说明没有回路可以加入