iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
自我挑戰組

淺入淺出分散式儲存系列 第 22

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內容的實作


上一篇
Day21 Raid原理
下一篇
Day23 Lab 2 - Object storage的RAID實作2
系列文
淺入淺出分散式儲存30

尚未有邦友留言

立即登入留言