一、副本模式
這裡的副本模式不同於簡單的資料複製,複製是有源和目標,把源的資料再複製一份到目標空間,這裡指的是同時雙寫或多寫,也就是一份資料塊同時寫了兩份或者多份,當其中一份資料塊出現了故障,還有另外的一份或者多份中的一份可以立即使用,並且可以恢復損壞的資料塊,對使用者是透明的。在節點冗餘情況下,任一臺資料節點故障後,立即將該資料節點中丟失的資料塊在其它節點中進行重構恢復,如果該故障節點恢復正常執行狀態或加入了新的替代節點,再將新的資料節點加入到可均衡分佈的儲存資源池當中。
由於副本模式能夠支援更多併發訪問,無論是多個應用併發訪問還是單個訪問,資料可以從最快響應的節點中獲得,因此係統會提供更好的效能響應,另外因為該模式不涉及額外的運算,所以裝置的CPU 開銷較低。
在I/O方面,以2副本或者2個以上的多副本節點級冗餘為例,1個節點中的資料塊故障,資料恢復需要從另外一個節點的副本中讀取一次,然後寫入一次恢復的資料塊,需要開銷1個節點的1次讀取I/O以及1個節點的1次資料寫入I/O,需要2個節點參與,除非在多副本中有2個節點同時損壞時會增加I/O開銷,但這種情況機率非常小。
二、糾刪碼模式
糾刪碼Erasure Coding(簡稱EC)的原理與RAID5/6的原理類似,將實際資料以條帶的方式寫入,條帶由資料條帶與校驗條帶組成,所以EC不需要完整寫入真實資料的副本,而是透過引入校驗資料塊保障資料冗餘,從而獲得了更多的儲存空間。EC相對RAID技術而言更加靈活,條帶由M個數據塊和N個校驗資料塊組成,而且M和N是可以根據需求來進行調整的,校驗位也就是N的值越高冗餘性就越強,但相應重建的時候的計算開銷也就越大,重建時也是無需任何人工干預的。
糾刪碼方式在讀或寫的時候都分別需要讀取或寫入資料塊和校驗資料塊,在發生故障的時候需要先讀取其他的沒有損壞的資料塊和校驗資料塊,然後再做計算,再寫入到某個節點的硬碟中,所以由於EC讀寫都需要計算校驗值,那麼就需要額外的CPU資源開銷。如果是校驗資料塊損壞,資料重構流程是一樣的,讀取資料塊再重新計算即可,也可以理解為互為校驗。
在I/O方面,假如糾刪碼EC設定為2+1(2個數據塊1個校驗資料塊),做節點冗餘時,隨機的1個節點故障,資料重建需要讀取1個數據塊和1個校驗資料塊,需要開銷2個節點的共2次讀取I/O操作,然後透過運算後再寫入一次恢復的資料塊到某個節點,實際這個過程需要3個節點的參與。
以節點級冗餘為例,EC配置1個校驗位(FT=1)與2副本(RF=2)的可靠性相當,允許任意1個節點損壞。EC配置2個校驗位(FT=2)與3副本(RF=3)的可靠性相當,允許任意2個節點同時損壞。整體效率副本模式要好一些,而糾刪碼的可用空間要多一些。
三、總結
拋開成本因素,個人覺得副本模式適合線上的對效能要求相對比較高一些的讀寫都很繁忙的應用、小檔案應用,資料庫等等,具體的小檔案處理前面寫過這裡就不多說了,這種模式可用空間利用率雖然相比糾刪碼模式要小,但是用空間換取安全性或者效率是業內長期以來比較普遍的做法。糾刪碼模式適合於對效能要求不是那麼高的但可用空間容量要求比較大的應用比如備份容災資料,影片監控儲存、媒體資源庫,資料歸檔儲存空間等等。
一、副本模式
這裡的副本模式不同於簡單的資料複製,複製是有源和目標,把源的資料再複製一份到目標空間,這裡指的是同時雙寫或多寫,也就是一份資料塊同時寫了兩份或者多份,當其中一份資料塊出現了故障,還有另外的一份或者多份中的一份可以立即使用,並且可以恢復損壞的資料塊,對使用者是透明的。在節點冗餘情況下,任一臺資料節點故障後,立即將該資料節點中丟失的資料塊在其它節點中進行重構恢復,如果該故障節點恢復正常執行狀態或加入了新的替代節點,再將新的資料節點加入到可均衡分佈的儲存資源池當中。
由於副本模式能夠支援更多併發訪問,無論是多個應用併發訪問還是單個訪問,資料可以從最快響應的節點中獲得,因此係統會提供更好的效能響應,另外因為該模式不涉及額外的運算,所以裝置的CPU 開銷較低。
在I/O方面,以2副本或者2個以上的多副本節點級冗餘為例,1個節點中的資料塊故障,資料恢復需要從另外一個節點的副本中讀取一次,然後寫入一次恢復的資料塊,需要開銷1個節點的1次讀取I/O以及1個節點的1次資料寫入I/O,需要2個節點參與,除非在多副本中有2個節點同時損壞時會增加I/O開銷,但這種情況機率非常小。
二、糾刪碼模式
糾刪碼Erasure Coding(簡稱EC)的原理與RAID5/6的原理類似,將實際資料以條帶的方式寫入,條帶由資料條帶與校驗條帶組成,所以EC不需要完整寫入真實資料的副本,而是透過引入校驗資料塊保障資料冗餘,從而獲得了更多的儲存空間。EC相對RAID技術而言更加靈活,條帶由M個數據塊和N個校驗資料塊組成,而且M和N是可以根據需求來進行調整的,校驗位也就是N的值越高冗餘性就越強,但相應重建的時候的計算開銷也就越大,重建時也是無需任何人工干預的。
糾刪碼方式在讀或寫的時候都分別需要讀取或寫入資料塊和校驗資料塊,在發生故障的時候需要先讀取其他的沒有損壞的資料塊和校驗資料塊,然後再做計算,再寫入到某個節點的硬碟中,所以由於EC讀寫都需要計算校驗值,那麼就需要額外的CPU資源開銷。如果是校驗資料塊損壞,資料重構流程是一樣的,讀取資料塊再重新計算即可,也可以理解為互為校驗。
在I/O方面,假如糾刪碼EC設定為2+1(2個數據塊1個校驗資料塊),做節點冗餘時,隨機的1個節點故障,資料重建需要讀取1個數據塊和1個校驗資料塊,需要開銷2個節點的共2次讀取I/O操作,然後透過運算後再寫入一次恢復的資料塊到某個節點,實際這個過程需要3個節點的參與。
以節點級冗餘為例,EC配置1個校驗位(FT=1)與2副本(RF=2)的可靠性相當,允許任意1個節點損壞。EC配置2個校驗位(FT=2)與3副本(RF=3)的可靠性相當,允許任意2個節點同時損壞。整體效率副本模式要好一些,而糾刪碼的可用空間要多一些。
三、總結
拋開成本因素,個人覺得副本模式適合線上的對效能要求相對比較高一些的讀寫都很繁忙的應用、小檔案應用,資料庫等等,具體的小檔案處理前面寫過這裡就不多說了,這種模式可用空間利用率雖然相比糾刪碼模式要小,但是用空間換取安全性或者效率是業內長期以來比較普遍的做法。糾刪碼模式適合於對效能要求不是那麼高的但可用空間容量要求比較大的應用比如備份容災資料,影片監控儲存、媒體資源庫,資料歸檔儲存空間等等。