QQ:122567712 msn:myprotein0007@hotmail.com 敝人专著《大话存储》终于出版了!2008年10月中旬全面上市!

《存储秘史》之七星北斗阵(续2)

上一篇 / 下一篇  2006-12-28 09:12:34 / 个人分类:我的原创文章

 

大家好,我是冬瓜头(QQ122567712)。email: myprotein@sina.com

msn myprotein0007@hotmail.com 

 

 



raid5也不是那么完美无缺的,可以说raid5是继raid1之后,第一个能实现并发IO的阵法,但是他又比raid1更加划算,raid5浪费的资源,在2块盘系统中,合raid1是一样的,都是二分之一,但是随着磁盘数量的增加,raid5浪费的容量比例越来越小,N分之一,而raid1则永远是二分之一。raid5相比raid0来说,都是利用条带来提升性能,但是又克服了raid0的鲁莽急躁,对数据用校验的方式来保护。但是raid5的设计思想,注定了他的连续读性能不如raid3raid3由于block很小,每次IO总是能牵动所有磁盘为他服务,这样速度很快,但是raid5block比较大,每次IO一般只使用了一块数据盘,而且raid5被设计为数据块都是先放满一个segment,再去下一个extentsegment存放,也就是小范围连续,那么如果象大文件ftp,视频文件等等这种应用,raid5就要弱很多。raid5在随机读方面,确实是首屈一指的,这要归功于他的多IO并发的实现,这里指的是随机IO,因为连续IO都要使用同一块盘,造成等待。也就是说raid3SPI值大的时候具有高性能,raid5在随机IOPS大的时候具有高性能其次,raid5的另一大缺点,就是写性能太差。写性能差是中庸派的通病,其根本原因在于他们每写一位数据就要产生其校验位,一并写入校验盘。尤其是更改数据的时候,这种效应的影响尤其严重,我们来看一下:
raid5写的基本过程是这样的:新数据过来之后,控制器立即读取待更新扇区的原数据,同时也要读取这个条带上的校验数据。三者按照下列公式运算,便可得出新数据的校验数据,然后将新数据和新数据的校验数据写到磁盘。

新数据的校验数据=(老数据EOR新数据)EOR老校验数据
我们分析发现,raid5一次写的动作,其实要浪费掉3个其他动作,也就是他要先读出老数据,读出老校验数据,然后写新数据,写新校验数据,这样只有其中“写新数据”是要完成的目的,而捎带了三个额外操作。纵观raid0raid1此二者,raid0鲁莽,写就是写,不带任何考虑,所以速度最快,raid1自保,但是他每次也只要写两次即可,只是额外多了一个操作。所以raid5在处理写方面是失败的。就连raid2raid3都比raid5写性能强,因为raid2一个条带上只有8位、32位、64位诸如此类的数据,而任何一次正常的IO,几乎均会大于8字节,均会将这整个条带上的位都改变,所以raid2不用顾忌条带上是否还有未被更新的数据,所以他不管老数据如何,只管从新数据计算出新校验数据,然后同时将数据位和校验位分别写到数据盘和校验盘,这样只用了2个操作,比raid5少了两次读的过程。同样raid3也一样,只不过raid3整个条带上的数据比raid2多而已,可能是几K字节,根据设置来看。

最后七星也总结了一句话:

鱼和熊掌不可兼得!也就是说随机并发IO和写性能,二者取其一。



raid5E阵势


  七星大侠推出raid5之后,受到了极为广泛得应用,江湖上得武林人士都在修炼,有些练成的大侠各自创办了数据库,网站等生意,得益于raid5的随机IO并发特性,这些人赚了一大比,生意火的一塌糊涂。然而,七星还是那个要饭的七星,剑还是那把剑。依然终日以钻研为乐,为生。

  话说有一天,有个侠客专门找到了七星大侠,侠客请他到“纵横斋”煮酒畅饮,酒过三巡,菜过五味,侠客进入了正题,向七星叙述了一件事情。他说他已经修炼成了raid5阵法,但是在使用的时候,总是心里没底。其原因就是一旦一块磁盘损坏,虽然此时不影响使用,但是总有顾虑,不敢全力出招,就怕此时再坏一块磁盘,整个阵就崩溃了。他请求七星能解决这个问题,临走的时候,留下了几块市面上品质最好的硬盘,和一些银子,供七星研究使用。七星煞是感动,几十年来,从来没有一位江湖人士和他交流切磋过,也从来没有一个人来帮助过他。此景让他再次泪流满面,感动的不知说什么好。他向那位侠客道:“能交您这位豪杰人士,我七星此生无撼!”。随后,七星又开始终日研究。

  七星分析这个问题,那位为什么会有这个顾虑,从何而来?嗯,是因为,一旦一块磁盘损坏,此时这块盘上的数据已经不复存在,但是如果一旦此时没有IO请求到这块磁盘上的数据,则以,一旦有IO请求到这块坏盘上的数据,那么立即用还存在的数据,校验出这块损坏的数据,传送出去,也就是说,损坏的数据是边校验边传送,现生成现传送,此时如果再有一块磁盘损坏,那么无疑阵法就要崩溃。那么解决这个问题的直接办法,理所当然的要找一块备用的磁盘,一旦有磁盘损坏,其他磁盘立即校验出损坏的数据,立即写到备用磁盘上,写完之后,阵形就恢复原样了,就没有顾虑了,但是必须保证在其他磁盘齐力校验恢复数据的过程中,切不可再有第二块磁盘损坏,不然便会玉石具焚!想到这里,七星开始他的实验,并且取得了成功,也就是再整个阵形中,增加一块热备盘,平时这块磁盘不参与组阵,只是在旁边观战,什么也不干,一旦阵中某个人受伤不能参战,这个热备盘立即顶替,其他人把功力传授给他,传授完毕后,就像原来的阵一样。如果在大家传授功力的时候,有IO请求这块损坏磁盘上的数据,那么大家就暂停传授,先应付外来的敌人,当没有来针对这块损坏磁盘的挑衅的时候,大家再继续传授。

  七星随着年龄的增长,经验不断丰富,他知道,不能急躁,所以实验成功之后,七星并没有马上通知那位大侠,而是继续再想有没有可以改进的地方。他想,热备盘平时不参与组阵,那就不能称作阵列的一部分,而是被排斥在外,这样可能造成他和组阵磁盘之间的不协调,是不是考虑也让他参与到阵形中来呢?如果要参与进来,那让他担任什么角色呢?热备角色?如果没有人受伤,这个角色在阵中只会是个累缀。怎么办好呢?七星忽然掠过一丝想法,是否可以让阵中各个角色担待一下,从各自的领地保留出一块空间,用作热备盘的角色?这样把热备盘分布在各个磁盘上,都有一份,就不会形成累追,并且同时解决了热备盘和大家不协调的问题。说干就干,七星给那大侠写了一封信,信中称这种阵法为“raid5E”。七星继续琢磨raid5E,让阵中每个人都保留一块领地,只是竖割,而不横割,虽然可以做到数据的及时备份,但是这块领地总显得不伦不类,不合大体。七星突然想到了他看到被撕碎的纸片飘然落下时候的情景,忽然计上心头!既然校验盘都可以横分竖割的融合到数据盘,为什么热备盘不能呢?一样可以!于是七星想到这里,又给那位侠客去了一封信,信中描述这种新的阵法为“raid5EE”。raid5消除了“热点盘”。看ppt
那位侠客给七星回了一封信:

七星转,北斗移,

英雄无谓千万里。

待到再次相见时,

白发苍,叙知己!


七星看后是老泪纵横,颇为感动,相见恨晚啊,已到晚年才遇到人生知己!


侠客姓字名谁?张三丰是也




   七星从一个壮年小伙,到如今,已成了个孤苦伶仃的老头。回想他的一生,从raid0一直到raid5EEE)创立了6种阵法,各种阵法各有所长。令他最得意的恐怕要属中庸派的,中庸之乐,中庸之道。可是就是这个中庸之道,却有一个一直也未能解决的问题,那就是:其中任何一种阵法,都最多同时允许损坏一块磁盘,如果同时损坏多块,整个阵不攻自破!七星想到这里就一阵阵的酸楚。已经是白发苍苍的七星老侠,决定要用他晚年最后一点精力,来攻破这个难题。
   
   七星老侠一生精研阵法,有很多宝贵的经验。他这次采用了逆向思维,假设这个模型已经做好,然后从逆向分析他是怎么作用的,描绘出多种模型,然后一个一个的去攻破,找出最适模型。
   七星描绘了这么一个模型:假设有4块盘组成一个阵,3块数据盘,一块校验盘(当然应该是分布式的校验,只是说校验容量是相当于一块盘),那么同一时刻,突然3块数据盘中的两块,损坏,作废。好,那么现在只剩下两块数据盘,和分布在他上面的那两块校验盘残体。就是这么一个模型,我们怎么从
这个模型推断出,他是怎么把丢失的两块盘数据都恢复出来的?七星冥思苦想。。。。七星在幼年学习方程的时候,知道,要求解一个未知数,只需知道包含这个未知数的一个等式即可逆向求解。就像布尔的逻辑算式用在raid3阵法时候一样,各个数据盘上的数据,互相xor之后就等于校验盘上的校验数据,这就是一个等式,即:
D1 xor D2 xor D3Parity
如果此时D1未知,而其他三个值都已知,那么就可以逆向解出未知数,而这也是raid3校验恢复的时候所做的。那么此时如果D1D2都未知,也就是1号盘和2号盘都损坏,还能解出这两个值么?数学告诉七星,这是不可能的,除非。。。。。除非除了这个等式,还额外存在一个和这个等式不相关的另一个等式!
要求解两个未知数,只要知道关于这两个未知数的不相关的两个关系方程即可。比如D1D2D3*。联立以上两个等式,即可求出D1D2!七星开始寻觅这个等式。这个等式,是已经存在?还是需要自己去发明呢?七星一开始打算从布尔等式找寻出第二个等式的蛛丝马迹,但是后来他根据因果率,知道如果从布尔等式推出其他某些等式,那么推出的等式和布尔等式就是相关的,互相相关的两个等式,数学上是等价的,无法得出2个未知数。七星有所察觉,他认为,要想得出第二个等式,必须由自己发明一套算法,和布尔等式不相关的算法!他开始在纸上演义算法,首先他开始从算术的加减方程开始着手,他写出了一个可以求解两个未知数的二元方程:
X+Y=10
2X+3Y=20
这算是最简单的算术方程了。可以求得:x10y0
以上是对于加减乘除算术运算的方程,那么布尔逻辑运算是否也可以有方程?七星写下如下的式子:
x xor y1
Ax xor By0
第一个方程,已经存在了,也就是用在raid3上的校验方程。那么第二个方程,七星是模仿加减方程来写的,也就是给xy两个值分别加上一个系数,而这两个系数不能和第一个等式相关,也就是说,不能是从第一个等式推得得,比如将第一个等式未知数得系数同乘或同除以某个数得出来,这样就是相关等价得了。七星立即找来布尔逻辑运算方面得书,深入学习,终于得到了印证,这种方程确实存在!!太好了,七星激动得跳了起来!他立即投入到研发当中。过了两个月,终于得出了结果!大获成功!
   七星对一份数据,使用两套算法各算出一个等式,1号等式右边得结果写入校验盘12号等式得右边值写入校验盘2。这样,只要使用中有任何两个值发生丢失,就可以通过这两个等式联立,解出丢失得两个值,不管这两个值是等式左边得值还是等式右边得,只要代入这两个等式中,就可以求出解。
   数学得力量是伟大得,任何东西,只要通过了数学得验证,就是永恒得!

   同样,七星将用在raid5中得方法,用在新创立得阵法中,就是将校验盘分布到数据盘中,不同得是新阵法得校验盘有两块,那么照葫芦画瓢,那就每块磁盘上放置两个等式需要得校验值
七星给这种阵法取名:raid6
  raid6相对其他各种中庸派的阵法,安全多了,但同时,他的写性能更差了,因为他要多读出一个校验数据,而且计算后,还要写入一次,这就比raid5每次写耗费多了2个操作,变成了6次操作,所谓的“写惩罚”更大了。确实是鱼于熊掌不能兼得啊!!
ppt
正可谓:

寻寻觅觅终冷清,

七星北斗伴我行。

世间万物皆规律,

求得心法谋太平!


七星在创立raid6阵法之后,已经是老态龙钟,疾病缠身,所剩时日已不多。而江湖上可是一派热闹,修炼得修炼,修炼好得就立门派,开设数据库,网站等服务,大赚钱财。而打着七星大侠旗号到处招摇撞骗得人也不在少数。张三丰年轻气盛,路见不平把刀相助,他召开武林大会,表彰七星的功绩,指出真正的七星,现在早已归隐,那些招摇撞骗的人也就没有容身之地了。他还提议将七星所创立的7种阵法命名为“七星北斗阵”,以纪念他和七星之间的北斗之豪情!

  张三丰亲自到深山来探望已经是下不了床的七星,并将武林中的事情告诉了他。此后没几天,七星无撼的离开了人世,化作了七星北斗,永远在天上洒下无限的光芒照耀世间!张三丰给老人办了后事,送了终。将七星过世的消息宣布出去。没想到第二天,七星,星七,北斗,斗北,七星北斗,北斗七星,星七北斗,星七斗北等等等等的商标就被抢注了!大批的商人在发着横财。。。。
正可谓:

七星阵里论七星,

北斗光前参北斗。

不知天上七星侠,

如今过活要饭否?

<SPAN lang=EN-US style="FONT-


TAG: 我的原创文章

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar