Day22 Lab 2 - Object storage的RAID实作1

接下来就要讲到Object storage的重头戏了 - 如何分散式的储存一个Object,达到安全的目的

由於Object被存放在一个大平面上,所以他没有什麽束缚,被分割後容易存放在不同Server上

所以这里谈到的问题是,怎麽分割?

根据昨天讲的Raid原理,我们希望能把Raid5的演算法应用在我们的Lab里,所以使用一个奇偶校验演算法,然後把他模拟均摊在六台机器上,可以支持两台机器挂了(1/3)也不会影响资料丢失

奇偶校验的演算法很多,我们使用RSCode做为我们的演算法,他的使用也非常简单

>>> from reedsolo import RSCodec, ReedSolomonError
>>> rsc = RSCodec(6)
>>> res = rsc.encode(b'helloworld')
>>> res
bytearray(b'helloworld\xc0`~\x03_\x82')
>>> rsc.decode(res)
(bytearray(b'helloworld'), bytearray(b'helloworld\xc0`~\x03_\x82'), bytearray(b''))
>>> rsc.decode(b'xxxloworld\xc0`~\x03_\x82')
(bytearray(b'helloworld'), bytearray(b'helloworld\xc0`~\x03_\x82'), bytearray(b'\x02\x01\x00'))

有了三个错误,还是能复原string helloworld

不过他的冗余度的200%,不像RAID5极限可以到133%,不过我找不到其他奇偶校验的Python library,所以就将就着用吧

不过可以看到的是,输入输出非常单纯,都是bytes,所以大致的思路是,把object content转成bytes後,encode出更长的string,然後根据我们的Partition数量(6个),平均的把这个很长的bytearray分散在不同的机器

明天我会介绍我们的Lab是如何利用这个演算法去分割object内容的实作


<<:  用 watch 搭配服用 immutable

>>:  DAY30 AI好难,但很好玩

学习笔记:一起进入 PixiJS 的世界 (五)

目前已接触的DisplayObject包含了PIXI.Graphics()的图像绘制、PIXI.Te...

Day 28 shared_preferences本机存放区

(一)介绍 Flutter推荐使用者使用shared_prederences储存资料,可以存取少量资...

android studio 30天学习笔记-day 14-databinding 单向绑定

之前了解了UI的元件跟data之间是如何进行绑定的,那麽在当data发生改变时,又该如何及时让dat...

Day 14 Decorator Part - 2

今天要来介绍 Decorator Factory,它可以让 Decorator 有更多的可能性,撰写...

WordPress 增加热门文章外挂 - WP-PostViews

当 WordPress 的文章流量开始出现的时候,这时候就会想要在侧边栏增加一个热门文章的连结,不止...