接下來就要講到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內容的實作