书接上文。
1.3 Lun2.0/SmartMotion
好,重构问题解决了。那么上文中曾经提到过的另一个可怕问题现在可以拿出来说了。这个问题,便是在大数量级的磁盘范围内的数据布局问题,说白了,也就是类似于在Raid1.0时代的条带宽度对性能影响迥异的问题。
图1-3-1 两种极端的逻辑卷数据布局
如图1-3-1所示,不管是Raid1.0/1.5/2.0时代,逻辑卷,也就是Lun,在整个Raid阵列上的的数据分布是完全没有任何优化的,也没有针对任何场景区分对待。Raid1.0时代,每个Lun之间相互隔离互不影响,而且各自可以通过调节条带宽度来实现不同应用场景,这一点还算合理,但是代价是每个Lun的性能也是受限的,因为一个Lun只能分布在一个Raid组上,那时候一个Raid组最多也就是十几块盘。Raid1.5/2.0,用数百块盘实现一个Pool,所有的逻辑卷全都平均分散在所有盘上,虽然单个Lun看上去性能最大化了,但是多个Lun之间并没有实现隔离机制,这在很多场景中,直接导致了访问冲突。这尤其体现在那些接受大块连续地址IO的逻辑卷上,由于横跨整个阵列,不加节制的大块连续IO将耗费阵列中所有磁盘的磁头为其服务,其他所有共享这个阵列空间的逻辑卷的性能均受到影响。这就是一锅粥乱糟糟带来的后果。
还差一步才能坐化。该有真正的新东西出场了。Raid1.0时代的条带深度这个概念已经变成了Raid2.0下的分块大小,也就是组成条带的Segment的容量了。通过调节这个参数,在数百块盘这么大的范围内已经没有什么用处了。然而存储厂商至今尚未给出任何解决方案。
在这里我不得不分享一下之前个人的一些专利和产品设计的初衷和灵感。如图1-3-2所示,在一个Raid1.0或者2.0阵列中,存在8个逻辑卷,上半部分是当前普遍的布局形式,可以看到没有任何差异化对待。比如说那4个承载视频流的逻辑卷,视频流多数都是大块连续IO,每秒会牵动几乎所有磁盘。
图1-3-2 “应用定义”的资源布局
假设有4台主机各挂载其中一个视频流逻辑卷,或者同一台主机挂载了所有这4个视频流逻辑卷,不管那种形式,对这4个逻辑卷的并发的大块连续IO访问,将会导致底层磁盘不得不来回寻道来兼顾对这4个逻辑卷的读写操作,尤其是读操作,因为写操作可以使用Write Back模式先存入缓存,然后存储控制再对一定时间段内所缓存的所有IO做合并重拍处理,这样下到盘上还是可以达到连续性的。但是读就不行了,我们先忽略缓存预读的优化,假设没有预读。如果没有预读或者预读效率很差或者算法不够讲究,那么底层磁盘不断寻道,每个逻辑卷的性能都会很差劲。有人可能会有疑问,为什么不能先对视频流1逻辑卷IO比如1或者2秒钟,然后所有磁盘(注意是所有磁盘而不是个把磁盘,因为大块连续IO大范围的地址跨度决定了必须牵动了所有盘)再换道到视频流逻辑卷2再IO一两秒钟呢?可以这么做,但是这得问一下应用是否允许,在视频流1顺畅播放的同时,其他视频流就得卡住一两秒,大家轮流卡一两秒,换了谁都不可能接受的。但是如果缩短时隙,比如每个逻辑卷IO比如十毫秒,那么此时你会发现这就像一个十字路口的绿灯每周期只亮3秒钟一样,汽车还没发动,就又得刹车。汽车发动很慢,就好像磁头寻道很慢一样,给一个逻辑卷10ms时隙做IO,做完之后立即切换到下一个逻辑卷,开始计时,你会发现计时之后10ms到点的时候,磁头才刚刚从上一个逻辑卷的物理磁道摆动到下一个逻辑卷的物理磁道上,此时又会发生切换,那么磁头再耗费10ms寻道,总体结果就是,由于切换频率太高,磁头寻道耗费了所有时隙,内耗率100%,没有任何数据读写操作,全都在寻道。所以控制器不可能用这么小的时隙来控制。
凝视一下1-3-2图上半部分,你会发现它对逻辑资源排布的很不讲究。4个视频流逻辑卷竟然被几个其他逻辑卷隔开,这是典型的没事找事,要知道当多路视频流并发访问的时候,磁头就要摆动更远的距离来同时读写这几个逻辑卷,对于这种排布设计,看了很是让人恼火,太不讲究了,粗枝烂叶,不可取。实际上,这种情况是没法用什么算法彻底去解决的,必须从本源上解决。
本源是什么?就是访问冲突,如何不冲突?如果每路视频流的码流要求是50MB/s,这种吞吐量要求,还有必要放到数百块盘上么?根本没必要,一块SATA盘都可以满足了。所以我可以选择把这个视频流逻辑卷就分布到1块盘上,没错,但是都放在一块盘上,一旦这块盘损坏,这个逻辑卷就完蛋了。所以至少要放到2块盘上,也就是组成这个逻辑卷的条带至少应该是1D+1P,2块盘的Raid5实际效果等价于Raid1。其他类似性质的逻辑卷,都按照相同策略,但是保证视频流1逻辑卷放在比如磁盘1和2,那么视频流2逻辑卷就要尽量放到另外2块盘上,同理其他逻辑卷也都尽量避免与其他卷冲突排放。经过这样精心的布局设计,我们既保证了满足每个逻辑卷的IO性能要求,又避免占着资源损人不利己,大家都很爽!为什么爽?因为视频流1逻辑卷读写的同时,其他视频流逻辑卷也可以并发读写,为什么能并发?因为他们占用的磁盘不一样,各读写各的,各寻道各的,互不冲突,不冲突,就能并发,就这么简单。
同样,对于那些要求最大化随机小块IOPS的应用,我们不得不把它平均放置到所有磁盘上。虽然它的IO也会导致其他在这个阵列上共享分布的逻辑卷访问冲突,但由于是小块随机IO,其冲突也都是局部小范围冲突,不至于像大块连续IO那种横扫千军似的彻底冲突。
有了这个思想,我们就可以设计产品了。首先,要做到这种对逻辑资源的灵活布局,我们可以设定一些典型的应用场景模板供用户选择,比如视频环境,OLTP环境等等,其实这些模板到了底层都会被翻译为“该逻辑卷到底跨越多少百分比的盘,跨越在哪些盘上才会尽量与其他逻辑卷不冲突”,也就是首先寻找无人占用或者占用少的盘来分布,然后匹配所给出的百分比算出盘数,然后创建对应的元数据记录。如果你的产品仅仅是做到了这一点,那么不会有什么人喝彩。因为有些传统的Raid卡都会提供这种设置,当然,他们底层基本是翻译成条带深度的不同了。那么如何出彩?我们可以继续考虑用户的感受,找准让用户眼睛一亮的那个点。
继续思考,凝视1-3-2图的下半部分。我们发现应用1和B用户这两个卷占用完全相同的磁盘,他们不会冲突么?如果他们在相同时段都发起大块连续IO访问那必然冲突,但是换一种角度,如果这两个卷,一个在上午是访问高峰期,另一个下午访问高峰期,那么它俩就是好哥俩,互不冲突。我们抓住这一点,在上面的基础上,再额外提供给用户一个配置入口,让用户选择所要创建的逻辑卷的高峰访问时段属性,这样系统就能够更智能的优化布局了。当然,要做的眼前一亮的话,可以发挥各种想象力,提供颇具个性的配置GUI,让用户在配置时感受到的是享受,而不是枯燥和担忧,甚至迷茫不知所措。
好,做到了这一点,你的产品已经有差异化的地方了,但仍然不至于收到喝彩,现在的用户是很苛刻的,好产品很多,用户的审美门槛也越来越高。所以还需要继续往前深入挖掘。我们继续凝视、思考,有时候思维的火花转瞬即逝没有抓住,而有时候却会熊熊燃烧,当然也只有真正爱思考的人才能看到火花。
既然逻辑卷都可以按照任意形状随意摆放了,那么为何不能做到实时的变形呢?什么?变形金刚?对了,你没听错。如图1-3-3所示。业务在不断的变化,举个最简单的例子,平时某业务可能低调的都快被忘了,但是突然到了月底可能就一鸣惊人了,比如月底结账高峰,某数据库可能突然一下子压力就上来,结果弄得措手不及。如果这种变化是颇具规律性的,那么完全可以在其让人措手不及之前就做好准备,比如临时将该业务对应的逻辑卷横跨到阵列中更多的磁盘上,比如,可以设置策略,在每月25号开始,每天凌晨2点,开始把该逻辑卷重新分布,本来跨在30块盘上,目标是要在29号时跨到100块盘上,分4天进行,每天凌晨重分布一部分,这样基本上是个准静态过程,不影响任何在线业务。
图1-3-3 业务是不断变化的
当然,在高峰期结束之后,可以再将该逻辑卷收缩回原有状态。这个变化过程非常符合自然界的运动规律。这些步骤,可以手动触发,也可以设置时间策略自动触发。
图1-3-4 会变形的逻辑资源
俗话说芝麻开花节节高。有了底子和框架,会发现有很多东西可以挖掘。要做到自动触发布局变更,非要根据时间点么?能否可以根据该逻辑卷的性能水平,动态的重新分布呢?比如,当某个逻辑卷性能过剩,比如基本都是大块连续IO,但是每秒上层下发的IO吞吐量只有5MB/s,但是却跨越了很多的盘,因为当初创建的时候根据评估该卷应该配这么多盘,但是现在,业务有变化,根本用不到这么多盘了,那么就没必要让它占这么多盘,因为此时或许还有其他逻辑卷嗷嗷待哺,你不能损人不利己,所以系统可以自动做决定,总之,怎么样资源利用率最大化,系统就怎么放置所有逻辑卷。当然,系统要做这种优化的话,必须经过长期的统计,而不能抖动的太快,如果上层业务变化的过快的话,还是手动重新布局或者按照时间点更靠谱了。
此外,灵活形变,还可以达到降温效果,比如,在图1-3-5左侧,可能这两个逻辑卷的左半部分都是频繁访问的部分,而右半部分却少有访问,他俩恰好产生了热区叠加效应,那么就可以将逻辑卷有的放矢的变形,以避开热区,最终达到均衡效果。变形后可以保持连续,也可以分拆为多个块,因为Raid2.0是可以再条带Segment级别拆分的。
图1-3-5 避开热区
逻辑卷形变技术解决的不仅仅是多个逻辑资源之间的冲突,释放了被禁锢的性能,它其实更解决了一个运维方面的老大难问题,那就是“谁也说不清应用到底需要多少性能”的问题。我相信任何一个IT管理员在部署和维护存储系统的时候都遇到过这种问题。应用管理员懂应用,但是不见得了解这个应用的压力到了底层到底需要多少块盘来承接。而存储管理员的任务就是做Raid然后建逻辑卷,几乎也不会知道每个应用到底给多少盘合适,只能凭经验,于是应用和底层管理员开始扯皮扯来扯去。这几年我倒是发现一个经验,就是越是水平高的越不扯皮,因为都知道问题在哪该怎么做从哪入手,然后各自提供各自的信息;越是水平低的,越不知道问题出在哪该怎么办,不知道该干什么,那就只能先扯扯皮让老板看看自己没闲着。扯到最后了,该出结果了,于是干脆直接所有企业内业务的逻辑卷统统跨所有盘分布一了百了。这样势必导致冲突。当你发现性能冲突的受不了遭到投诉之后,怎么办呢?有个办法是加更多的盘,冲突就冲突把,加到1000块盘,冲突掉500块盘,至少还能体现出500盘的性能,存储厂商乐了,快来买盘吧,一台不够用再买一台吧,发啦!懒人有懒办法,但是我们不能放任之,不能因为你有钱就可以多喘气污染空气了。
图1-3-6 存储系统部署维护时的老大难问题
我们可以看到,这个老大难问题主要是因为两个原因,第一是缺乏高手。第二是存储厂商偷懒,不提供差异化的部署方式,因为与其投入人力研发耗费成本,不如放之任之,这样用户不得不买更多的盘,买更高的配置。有了这个技术,管理员再也不用后怕任何初期的规划失误了,先上线运行着,然后不断的摸索出到底哪个应用需要多少性能,然后手动或者自动的重新布局所有已分配的逻辑卷资源,而且不影响业务运行。岂不快哉?
图1-3-7 提供灵活在线布局变更最大化资源利用率
这项技术根本不复杂,说它复杂的人有两种,一种是根本没了解底层的人,第二种就是懒人。思路不复杂,实现更不复杂,也正是因为有了Raid2.0的底子,这个技术才方便实现,第一,迁移数据,第二,更新数据,就这么简单。你这么想,如果阵列扩容了,是不是也要迁移?那么这个技术,只不过是一种“可控的有道理的有目的的主动的”迁移而已,也就相当于,同样是干活,有人干活时候同时也在思考为什么这么干,那么干行不行,而有些人则基本不思考,而是赶紧干完了活玩某水果机,结果拿起来基本就是划拉几下关屏,然后又拿起来划拉几下再关屏,浪费电。
图1-3-8 无限适配业务
技术讲的差不多了,现在依然欠缺一些东西,那就是一个响亮的名称。什么?“F18800V”?开什么玩笑,你当我这是在做集成电路么?谈到命名,需要仔细思考,既能一针见血的体现这个技术的本质,又能吸引眼球。首先,对于Raid2.0来讲,条带是浮动的,所以可以包装出一个“浮动条带Float Stripe”的概念,其次,由条带组成的逻辑卷也不是固定不变的,而是可以随时跟着业务来变形的,所以可以包装出一个“浮动卷FloatVol”的概念出来。然而这些都是对数据结构的包装,还缺乏一个把它们动起来串起来的包装,这正像把传统Raid2.0上的逻辑卷动起来一样。SmartMotion,智能布局,便是最后包装出来的名词。
SmartMotion 智能布局或者说流动,与动态分层Tier的布局或流动是完全两码事。自动分层是在机械盘和更高速的存储介质之间去冷热分层,直接使用高速介质来存储热点数据,说的不好听一点就是,不思进取研究优化,而是利用更好的硬件从“本质上”解决问题,类似情况一直在发生,比如程序效率再低,用个高速CPU一样运行的流畅,这导致人越来越懒,越来越低效,越来越浪费资源。我始终相信轮回,这个情况一样也会轮回回来,早晚有一天人们不得不回过头来继续用勤奋来求生存。而SmartMotion则是在同一层介质内横向的通过跨越磁盘数量的多少来避免冲突从而达到资源利用最大化。这两种技术直接体现了设计者的性格,自动分层是依赖硬件型的懒人,而SmartMotion是标准物尽其用精细化管理的勤快人。下面这张图很好的给出了两者的区别。
图1-3-9 数据分馏塔模型
大学学的化学专业,一不小心用了个化学实验模型来描述了整个数据存储路径,如图1-3-9所示:
平衡: 数据从前端进入存储系统,如果够勤快,可以做很精细化的QoS控制来均衡多客户端的性能,这一层就相当于化学平衡一样通过精细的配比反应物质的量来影响最终生成物的比例;
分层: 下一层是自动冷热分层层,这一层相当于把试管里的混合液体静置自然分层,热的上升,冷的下降;
离心: Thin 层就是自动精简配置,把垃圾数据块回收,用有限的空间承载更多的数据,这就像离心一样,把混合的沉淀物固实的抽出来;
搅拌: 最后一层便是SmartMotion智能布局层,数据最终从内存存储到磁盘,通过优化布局来达到最佳IO性能,这一层相当于搅拌器,搅拌让反应物混合的更加均匀,大大加速反应速度。图中的水波纹表示不同的逻辑卷拥有不同的布局,完全根据业务来优化布局,而不是清一色不加区别的对待。
你会发现自然界很多东西都是大同的,只要你善于发现和思考。这个图是个很有趣的动态图,《大话存储2》里那个云图也是个动态图,结果被某给变态的低格掉了。吃一堑长一智,这张图是在我自己电脑上先画好的,所以很乐意分享给大家,加我QQ吧(前言里有QQ号)。
思路、实现、名称都有了,还差什么?当然是配置界面了。好马配好鞍,里子面子都很重要,是不是好马当然还得看实际跑的快不快,但是对于产品经理来讲,自己如果不认为自己设计的是好马,那这个产品干脆就不要做。设计一个配置界面,和发明一项技术本质是一样的,讲究两个字“用心”,讲究四个字“用心创新”。配置界面又分两种。第一种是命令行CLI界面,受到相当一部分人的追捧,因为他们在敲命令,而且是手指在以每秒超过24次振动以至于产生停留效应的速度来敲命令的时候,有一种非常大的满足感。第二种是图形化GUI界面,比如下面这张图。能再简陋点么?用这种界面来配置,是一种煎熬。
图1-3-10 无比简陋的GUI
我会在下一节介绍SmartMotion的GUI界面设计思路。还差最后一步。产品出来了,名字也够牛,还需要什么呢?当然是宣传PPT了。做PPT也不简单。做一份恰如其分的PPT,不亚于做一个产品,PPT就是产品。好的PPT,是创意的体现,同样的图形,同样的线条,不同的思维,将他们拼起来之后,效果也很不相同。写书也是一样,有人堆文字,没有任何逻辑性,浪费木材;有人写出来有逻辑性但是可读性太差,故弄玄虚;有人既通俗又有逻辑性但是缺乏线性逻辑;最好的书是线性逻辑尽量少跳跃,加上透彻的理解和通俗的表达。国外的书为什么好,因为多数国外作者实实在在,是真为了传承知识而出书,写作的时候会时刻考虑读者看到这里会想什么,是否感到迷茫,怎么写才会看得更懂,而往往这样的作者,他在写作的时候自己也提高了,因为他几乎走遍了每个角度每个角落,任何一处技术细节,都能搞的清清楚楚,知识体系被梳理的极为扎实,基础扎实了,才能升华,才能创新,否则都是空中楼阁无病呻吟,这就像不让中学生多接触外界就让其坐在教室里写作文一样荒唐。做软件产品、写PPT、写书,都一样。我会在下一节分享一些针对SmartMotion的PPT,下一节你会看到拔高一个档次的SmartMotion。
我们看到,Raid2.0思想的目的很单纯,就是为了解决重构时间问题,如果在Raid2.0基础之上,让本来已经浮动起来但是却原地不动的逻辑资源充分的流动起来,在流动中形变,充分的适应各种业务场景,同时充分榨干所有磁盘性能资源,这个过程符合事物发展的规律,也就是你要松绑,给你松绑,但是你原地不动,我推你一下,你跑起来了,越跑越远,冲向远方寻找你最终的自由。啊!我的SmartMotion,小名Lun2.0,你后爹妈对你还好么?没事来我这坐坐,聊聊人生!
本次分享就到这里,主要介绍了“可视化存储智能”底层的一个主打技术SmartMotion。下一篇将为大家分享”可视化存储智能整体解决方案的全貌。
本文转载请注明出自 “ 大话存储 ” 公众号。长按识别二维码关注 “ 大话存储 ” 获取业界最高逼格的存储知识。 看了好的请点赞/转发/红包,平时群里发红包装逼,不如把红包猛烈的砸向冬瓜哥吧!冬瓜哥后续会有更多高逼格的东西出炉。大话存储,只出精品。
强赠冬瓜哥真容:
6436

被折叠的 条评论
为什么被折叠?



