我們一起聊聊增強(qiáng)數(shù)據(jù)可用性一定要復(fù)制多份嗎?
對(duì)象存儲(chǔ)(如 S3)中常用的一種提高耐用性的技術(shù)叫做糾刪碼(Erasure Coding),可以提高數(shù)據(jù)耐久性并減少存儲(chǔ)開銷。即使發(fā)生硬件故障,也能保證數(shù)據(jù)的可用性和完整性。讓我們來看看它是如何工作的。
糾刪碼處理數(shù)據(jù)持久性的方式與復(fù)制不同。它將數(shù)據(jù)分割成小塊(放在不同的服務(wù)器上),并創(chuàng)建奇偶校驗(yàn)以實(shí)現(xiàn)冗余。發(fā)生故障時(shí),我們可以使用分塊數(shù)據(jù)和奇偶校驗(yàn)來重建數(shù)據(jù)。讓我們來看一個(gè)具體的例子(4 + 2 糾刪碼)。
圖片
1 -數(shù)據(jù)被分成四個(gè)偶數(shù)大小的數(shù)據(jù)塊 d1、d2、d3 和 d4。
2 -數(shù)學(xué)公式用于計(jì)算奇偶校驗(yàn) p1 和 p2。舉一個(gè)簡化得多的例子:p1 = d1 + 2d2 - d3 + 4d4 和 p2 = -d1 + 5d2 + d3 - 3d4。
3 - 由于節(jié)點(diǎn)崩潰,數(shù)據(jù) d3 和 d4 丟失。
4 - 利用已知的 d1、d2、p1 和 p2 值,用數(shù)學(xué)公式重建丟失的數(shù)據(jù) d3 和 d4。
01 糾刪碼的優(yōu)勢
存儲(chǔ)開銷更低
相比復(fù)制(通常需要三份完整副本),糾刪碼只需略高于原始數(shù)據(jù)的存儲(chǔ)量。
每兩塊數(shù)據(jù)需要一個(gè)奇偶校驗(yàn)塊,因此存儲(chǔ)開銷為 50%。而在 3 副本復(fù)制中,存儲(chǔ)開銷為 200%。見下圖。
圖片
高耐久性
假設(shè)節(jié)點(diǎn)的年故障率為 0.81%。根據(jù) Backblaze 的計(jì)算,糾刪碼可實(shí)現(xiàn) 11% 的耐用性,而 3 份復(fù)制可實(shí)現(xiàn) 6% 的耐用性。
效率平衡
糾刪碼在存儲(chǔ)效率和數(shù)據(jù)恢復(fù)能力之間實(shí)現(xiàn)了良好的平衡,非常適合大規(guī)模存儲(chǔ)系統(tǒng)。
02 Amazon S3 的應(yīng)用示例
Amazon S3 在其 Glacier Deep Archive 存儲(chǔ)類別中使用糾刪碼。此類別注重耐久性,同時(shí)希望最大程度降低存儲(chǔ)成本。而 Standard 存儲(chǔ)類別則更多依賴復(fù)制,優(yōu)先考慮數(shù)據(jù)訪問的速度而非成本。