跨AZ數據複製方案中的EC與XOR技術
在雲服務中, 為了提高數據的持久性和可用性,通常將數據存儲在多個AZ(Availability Zone)之中,每一個AZ擁有獨立的供電系統和網路設備,這樣,單AZ的故障並不會導致數據的丟失或服務的不可用。 對於雲服務而言,如果擁有了跨AZ 的數據同步和業務多活能力,就可以宣稱,該服務按年計算可以達到4個9的可用性和11個9的持久性。本文主要介紹跨AZ數據複製方案中所涉及的EC與XOR技術。
跨AZ數據複製
如何將數據同步到多個AZ中,有多種做法,一種比較流行的方案,就是將數據的多個副本放置在不同的AZ中,如下圖所示:
至於如何實現數據複製,有兩種方式:
Master-Slave複製
Quorum複製
這兩種方式均能達成跨AZ的數據同步複製能力以及數據的強一致性語義保障,只是在架構上存在比較大的差異。但無論哪個方案,在網路帶寬上,都存在一個比較顯著的問題:如果進行全量數據的複製,對帶寬的擠占就非常嚴重,儘管AZ之間會設有專線連接,帶寬也很大。因此,如何縮減同步的數據量,減少對網路帶寬的擠占,就顯得至關重要。另外,如何降低整體的存儲空間佔用,也是一個非常重要的問題。
常用的方法有如下兩種:
壓縮數據傳輸
網路優化中的位元組重刪技術
但如果碰到圖片和視頻數據,上面兩種方法就基本失效了,這時,需要引入另外兩種技術:EC與XOR。
EC技術
EC(英文全稱為"Erasure Code")本質上是一種編碼技術,它在n份原始數據的基礎上,增加m份數據,並能通過n+m份中的任意n份數據,還原為原始數據。即如果有任意小於等於m份的數據失效,仍然能通過剩下的數據還原出來。
舉例:
Data 首先被均分成 ,計算出 兩個校驗分片。 將6份分片數據存儲在不同的地方, 即使任意兩個分片數據被損壞了,都可以還原出原始數據Data。 假設共有三個AZ,那麼,每一個AZ中只需要存儲2個分片的數據即可:
這樣就可以顯著減少跨AZ數據傳輸,降低數據複製對帶寬的佔用(AZ的出口帶寬減少了一半)。
但EC會帶來如下問題:
增加了CPU消耗,用於計算校驗分片
讀取時需要從多個AZ中獲取數據,時延敏感型業務將會受到明顯的影響。
一個數據分片出現問題時,需要跨AZ讀取數據進行修復。
下圖簡單描述了如何進行數據修復的原理:
關於對EC的改進,業界也有一些解決方案, 如LRC碼和蝴蝶碼。EC可以有效減少跨AZ之間的網路帶寬佔用,對於很多應用場景,它的缺點其實也是完全可以容忍的。
但在真正實現該方案的時候,在架構、組網、安全方面會有很大的挑戰。因為每一個AZ都是獨立的存在,他們之間除了在大二層網路上互通以外,在四層網路上通常是隔離的,因此需要打通不同AZ的數據存儲伺服器之間的網路。至於EC的分片如何進行合理放置,也需要設計合理的布局和分配演算法。在工程實現上,會有很大的挑戰。
XOR技術
XOR的含義,等同於我們所理解的同名位操作符,即,異或操作。
EMC第一次將XOR應用在了"消減"跨AZ間的多副本數據,它的原理分步介紹如下:
Step 1
AZ1中的主副本1與AZ2中的主副本2(主副本1與主副本2不相關),在AZ3中分別擁有一個備副本1、備副本2。
Step 2
將AZ3中的備副本1與備副本2進行XOR操作後,得到副本3。
Step 3
清除備副本1與備副本2的數據,僅保留異或後的副本3。
故障後恢複數據的方法
如果AZ1中的主副本1發生故障,將AZ2中的主副本2與AZ3中的副本3進行XOR操作,即可還原出AZ1中的主副本1。
可以看出來,XOR主要用來減少備副本所佔用的存儲空間,而不是減少網路傳輸的數據量。對於跨Region間的數據複製,它是非常適用的。
總結
本文簡單討論了跨AZ數據複製方案中的EC與XOR技術,EC技術不僅可以有效減少網路傳輸數據量,也能夠有效降低因為多副本帶來的存儲空間冗餘,而XOR技術則主要為了減少存儲空間冗餘。
TAG:NoSQL漫談 |