細說 Azure Storage 的冗余策略
當我們想要把應用搬到雲端的時候,首先要關註的便是數據的安全性。當然所有的雲服務廠商都會對用戶數據承諾一個非常高的安全性,但萬一出現意外呢?我們是不是還要有適當的應對方案?比如今年的3月8日晚間,Azure 某個區域中的存儲幾乎全部不能訪問,持續達兩個多小時。當時最擔心的是:用戶的數據萬一丟掉怎麽辦?同時,我們是不是可以根據雲服務提供的數據服務的特點來優化程序的性能呢?基於如此種種的原因,我們需要了解雲端數據服務的一些特性的詳情,這將對我們很有幫助。本文將和大家一起探討 Azure Storage 的冗余策略。
理解 Azure Storage 冗余策略的好處
微軟針對不同的應用場景提供了不同的存儲冗余策略。比如對可靠性要求很高的數據可以選擇多個異地的備份,而對訪問速度要求高的數據則可以使用高速的存儲設備。當然,不同的方案成本也是不一樣的。我們可以針對應用的特點使用不同的存儲策略,這樣可以節省成本。還可以指定對應的容災備份以及災難恢復方案。
Azure Storage Account
需要註意的是,Azure Storage 存儲的冗余策略是綁定在 Azure Storage Account 上的。Azure Storage 當前一共有四種數據的冗余策略,分別是:
Locally Redundant Storage(LRS)
Zone Redundant Storage(ZRS)
Geo Redundant Storage(GRS)
Read-access Geo Redundant Storage(RA-GRS)
當我們創建 Storage Account 的時候就需要指定其對應的存儲的相關類型和策略:
Performance 選項目前有兩種選擇,分別是 "Standard" 和 "Premium"。準確的說,下面的 Replication 選項才是 Storage Account 的冗余策略。可是,冗余策略和性能選項是有關聯性的。比如,當 performance 為 "Standard" 時,Replication 可以選擇 ZRS, LRS, GRS, RA-GRS:
而 performance 為 "Premium" 時,Replication 則只能選擇 LRS:
下面我們將詳細的介紹這四種冗余策略及常見用例。
Locally Redundant Storage
本地冗余存儲(LRS),在單個數據中心裏有多個同步的數據拷貝。數據在彈性存儲單元中被復制三次,該彈性存儲單元托管在創建存儲帳戶的區域中的數據中心內。 僅在寫入所有三個副本後,才成功返回寫入請求。 這三個副本駐留在同一彈性存儲單元中的不同容錯域和升級域中。
彈性存儲單元是存儲節點的機架的集合。 容錯域 (FD) 是一組代表出錯的物理單元的節點,可將其視為屬於同一物理機架的節點。 升級域 (UD) 是一組在服務升級(推出)過程中一起升級的節點。 三個副本將分布在同一彈性存儲單元中的 UD 和 FD 上,以確保即使在硬件故障影響單個機架時,或在推出期間升級節點時,數據也可用。
當看到這裏時,相信你已經感受到了,即便是 Azure Storage 中最基礎的 LRS 數據冗余策略也遠高於我們自己維護的系統了!
LRS 的優點是成本最低,這裏說的低是和其它類型的冗余策略相比。並且可以提高訪問的性能,比如選擇performance 為 “Premium” 時只能使用 LRS 策略。
但是它的缺點也很明顯,就是無法應對整個數據中心都 crash 的情況(火災、洪災、地震、技術故障等)。
Zone Redundant Storage
區域冗余存儲(ZRS),除了存儲類似於 LRS 的三個副本外,還在一個或兩個區域內的數據中心之間異步復制數據,從而提供比 LRS 更高的安全性。 在這種情況下,即使主數據中心不可用或不可恢復,存儲在 ZRS 中的數據也安全的。
需要註意的是,ZRS 僅能應用於 blob 類型的存儲。
Geo Redundant Storage
異地冗余存儲(GRS),將數據復制到距主區域數百英裏以外的輔助區域。如果 Storage Account 啟用了 GRS,即使在遇到區域完全停電或導致主要區域不可恢復的災難時,用戶的數據也是安全的。
對於啟用了 GRS 的 Storage Account,更新將首先提交到主要區域,並在其中復制三份。
然後,更新將異步復制到次要區域(也是在其中復制三份)。
使用 GRS 時,主要和次要區域在一個彈性存儲單元內管理跨單獨容錯域和升級域的副本。
GRS 是一種性價比很高的選擇,對數據安全要求較高的用戶可以選擇這種冗余策略。比如我們在一個 web 應用中保存了用戶上傳的數據(文檔、圖片、視頻等)。為了保護用戶的數據,我們可以把這些文件存放在設置為 GRS 的存儲中。當主區域發生問題時,至少可以把用戶的數據恢復回來。下面是筆者維護的一個使用了 GRS 的項目:
次區域是系統自動設置的,不支持用戶自由選擇。其實我們都沒有必要知道它的存在,只需要知道數據是安全的就可以了。
Read-access Geo Redundant Storage
除了 GRS 所提供的在兩個區域之間進行復制外,讀取訪問異地冗余存儲 (RA-GRS) 還提供對輔助位置中的數據的只讀訪問權限,從而最大限度地提高了 Storage Account 的可用性。
當設置為 RA-GRS 時,除了 Storage Account 的主終結點外,還可以通過訪問輔助終結點獲取數據。輔助終結點與主終結點類似,但會在帳戶名稱後面追加後綴 –secondary。例如,如果 Blob 服務的主終結點是 myaccount.blob.core.windows.net,輔助終結點則是 myaccount-secondary.blob.core.windows.net。 Storage Account 的訪問密鑰對於主終結點和輔助終結點是相同的。
對於 RA-GRS, 看起來可能很高大上,但是我們卻很難把這種能力加以應用。按照 Azure文檔所說,這種策略主要的目的是高可用性。但是用戶又不能自由的指定次區域的位置,所以十分懷疑是否可以達到真正的目的。
總結
數據的安全永遠都是相對的,片面的追求數據安全肯定會為我們帶來不可承受的成本壓力。我們能做的就是針對不同類型的數據,尋找價格上可以接受的冗余方案。而 Azure Storage 提供的豐富選項,則給我們的選擇帶來了很大的靈活性。
細說 Azure Storage 的冗余策略