解決方案
要撐過磁碟或伺服器故障,通常的做法是保留多份副本,這意味著要為傳統上以 3 倍複寫的資料支付三倍的儲存空間。對備份服務供應商而言,這是主要的成本。
Reed-Solomon 抹除編碼提供了一種更便宜的取捨。Backblaze 將檔案拆成 17 個等長分片,計算出 3 個同位分片,並將全部 20 個分片分散存放在不同的磁碟上。20 個片段中任 17 個即可還原原始檔案,因此檔案最多可承受 3 個分片遺失。
這正是此設計的重點:它不保留三份完整副本,而是保留一份副本加上少量同位資料,在花費一小部分儲存空間的情況下,達到接近相同的耐久性。
達成了什麼
用同位運算而非重複副本來換取耐久性
為何有效
同位分片的成本遠低於完整的重複副本。
20 個片段中任 17 個即可重建檔案,可容忍多顆磁碟同時故障。
更低的儲存額外開銷直接降低了供應商的單位成本。
可套用之處
當你透過複製資料來換取可靠性時,你是在以昂貴的整份單位購買;編碼數學則讓你以固定的額外開銷,精確地購買所需的份量。
後續發展
Backblaze 將其 Java Reed-Solomon 函式庫開源,而抹除編碼成為雲端供應商與備份服務以少量 CPU 換取更便宜耐久性的常見做法。
追溯依據
參考來源
- Backblaze open-sources Reed-Solomon erasure coding source code Backblaze · backblaze.com ·
- Erasure coding OpenStack Wiki · wiki.openstack.org