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