要撐過磁碟或伺服器故障,通常的做法是保留多份副本,這意味著要為傳統上以 3 倍複寫的資料支付三倍的儲存空間。對備份服務供應商而言,這是主要的成本。

Reed-Solomon 抹除編碼提供了一種更便宜的取捨。Backblaze 將檔案拆成 17 個等長分片,計算出 3 個同位分片,並將全部 20 個分片分散存放在不同的磁碟上。20 個片段中任 17 個即可還原原始檔案,因此檔案最多可承受 3 個分片遺失。

這正是此設計的重點:它不保留三份完整副本,而是保留一份副本加上少量同位資料,在花費一小部分儲存空間的情況下,達到接近相同的耐久性。

用同位運算而非重複副本來換取耐久性

同位分片的成本遠低於完整的重複副本。

20 個片段中任 17 個即可重建檔案,可容忍多顆磁碟同時故障。

更低的儲存額外開銷直接降低了供應商的單位成本。

當你透過複製資料來換取可靠性時,你是在以昂貴的整份單位購買;編碼數學則讓你以固定的額外開銷,精確地購買所需的份量。

Backblaze 將其 Java Reed-Solomon 函式庫開源,而抹除編碼成為雲端供應商與備份服務以少量 CPU 換取更便宜耐久性的常見做法。

追溯依據

參考來源

  1. Backblaze open-sources Reed-Solomon erasure coding source code Backblaze · backblaze.com ·
  2. Erasure coding OpenStack Wiki · wiki.openstack.org