Windows Azure 除了針對(duì)云計(jì)算基礎(chǔ)建設(shè)、營(yíng)運(yùn)與管理部份特別設(shè)計(jì)并支持外,它也必須要具有應(yīng)用程序及其他為基礎(chǔ)開(kāi)發(fā)服務(wù)的相關(guān)支持,以一個(gè)操作系統(tǒng)來(lái)說(shuō),除了硬件與運(yùn)算資源的分配與控管外,對(duì)軟件最直接最基本的支持,非存儲(chǔ)功能莫屬。本文介紹了Windows Azure存儲(chǔ)服務(wù)的安全和性能指標(biāo)。
性能指標(biāo)
用戶在選擇使用數(shù)據(jù)存儲(chǔ)服務(wù)之前需要關(guān)心的一個(gè)方面是它的性能指標(biāo),也就是說(shuō),該數(shù)據(jù)存儲(chǔ)服務(wù)是否能夠滿足用戶日常的使用需求,同時(shí)是否能夠滿足用戶訪問(wèn)峰值的情況。以下是微軟官方公布的一個(gè)數(shù)據(jù)存儲(chǔ)賬號(hào)最大的性能指標(biāo)。
1、一個(gè)數(shù)據(jù)存儲(chǔ)賬號(hào)的最大數(shù)據(jù)存儲(chǔ)量是100TB。
2、最大的處理交易率是每秒鐘處理5000個(gè)交易(每個(gè)交易可以是對(duì)記錄實(shí)體、消息或Blob的);
3、最大的帶寬是每秒鐘傳輸3GB數(shù)據(jù)。
需要注意的是,以上性能指標(biāo)是當(dāng)前Windows Azure數(shù)據(jù)存儲(chǔ)服務(wù)所能提供的最大性能指標(biāo),所以在應(yīng)用程序運(yùn)行過(guò)程中,用戶實(shí)際上能獲得的性能指標(biāo)會(huì)低于該指標(biāo)。而且由于對(duì)象數(shù)據(jù)大小的不同,應(yīng)用程序設(shè)計(jì)和訪問(wèn)方式的不同,以及實(shí)際網(wǎng)絡(luò)流量的變化,用戶實(shí)際上能獲得的性能指標(biāo)也會(huì)不同。如果應(yīng)用程序已經(jīng)達(dá)到一個(gè)數(shù)據(jù)存儲(chǔ)賬號(hào)的最大性能指標(biāo)了,則需要考慮使用多個(gè)數(shù)據(jù)存儲(chǔ)賬號(hào)以獲得更高的性能指標(biāo)。
IT168相關(guān)技術(shù)文章在前面討論過(guò),Windows Azure使用數(shù)據(jù)劃分來(lái)提高數(shù)據(jù)訪問(wèn)性能和彈性伸縮。所以用戶也應(yīng)該盡量使用數(shù)據(jù)劃分來(lái)把數(shù)據(jù)分散存儲(chǔ)到多個(gè)服務(wù)器上以獲得盡可能高的數(shù)據(jù)訪問(wèn)性能。每個(gè)數(shù)據(jù)劃分的最大性能指標(biāo)如下:
1、對(duì)于Blob,每秒鐘可以傳輸60MB數(shù)據(jù);
2、對(duì)于表格,每秒鐘可以處理500個(gè)實(shí)體記錄;
3、對(duì)于消息隊(duì)列,每秒鐘可以處理500個(gè)消息。
如果應(yīng)用程序已經(jīng)達(dá)到單個(gè)數(shù)據(jù)劃分的最大性能指標(biāo),則可以考慮以下策略來(lái)進(jìn)一步提高性能。
1、對(duì)于Blob,可以考慮使用CDN將最經(jīng)常訪問(wèn)的數(shù)據(jù)緩存到最靠近用戶的地區(qū)來(lái)減少數(shù)據(jù)傳輸?shù)臅r(shí)間;
2、對(duì)于表格,可以考慮更細(xì)化的分區(qū)鍵來(lái)盡量把數(shù)據(jù)分散存儲(chǔ)到多個(gè)地方;
3、對(duì)于消息隊(duì)列,可以考慮把多個(gè)消息集中到一個(gè)消息中或使用多個(gè)消息隊(duì)列。
安全性
Windows Azure數(shù)據(jù)存儲(chǔ)服務(wù)提供了基于云的數(shù)據(jù)存儲(chǔ)服務(wù)系統(tǒng),所以它不僅僅是按需使用、按使用付費(fèi)、彈性伸縮和高可用性的,而且它也支持各種各樣的應(yīng)用程序隨時(shí)隨地訪問(wèn)。應(yīng)用程序可以是運(yùn)行在Windows Azure上的云技術(shù)應(yīng)用程序,也可以是運(yùn)行在用戶公司內(nèi)部的本地應(yīng)用程序,甚至可以是運(yùn)行在用戶移動(dòng)設(shè)備(比如筆記本、智能手機(jī)等)上的應(yīng)用程序。所以在這種情況下,數(shù)據(jù)訪問(wèn)的安全性就尤為重要,以確保只有通過(guò)驗(yàn)證的數(shù)據(jù)訪問(wèn)請(qǐng)求才可以訪問(wèn)數(shù)據(jù)。Windows Azure數(shù)據(jù)存儲(chǔ)服務(wù)使用簡(jiǎn)單但是又非常有效的方式來(lái)保證數(shù)據(jù)的安全性,那就是使用訪問(wèn)密鑰。
我們?cè)谇懊嫔暾?qǐng)存儲(chǔ)賬號(hào)時(shí)提到,Windows Azure數(shù)據(jù)存儲(chǔ)服務(wù)會(huì)分配給用戶兩個(gè)訪問(wèn)密鑰。訪問(wèn)密鑰是256個(gè)字節(jié)的字符串,用戶使用該訪問(wèn)密鑰來(lái)驗(yàn)證每一個(gè)對(duì)Windows Azure 數(shù)據(jù)存儲(chǔ)服務(wù)的數(shù)據(jù)訪問(wèn)請(qǐng)求。它的工作流程如下:
1、用戶首先構(gòu)建數(shù)據(jù)訪問(wèn)請(qǐng)求,該數(shù)據(jù)訪問(wèn)請(qǐng)求可以是讀Blob、寫實(shí)體記錄到表格或者使用消息隊(duì)列等;
2、用戶使用訪問(wèn)密鑰通過(guò)加密算法對(duì)數(shù)據(jù)訪問(wèn)請(qǐng)求進(jìn)行數(shù)字簽名;
3、該數(shù)字簽名包含在數(shù)據(jù)訪問(wèn)請(qǐng)求的標(biāo)頭部分(HTML Header),然后數(shù)據(jù)訪問(wèn)請(qǐng)求發(fā)送到Windows Azure數(shù)據(jù)存儲(chǔ)服務(wù);
Windows Azure數(shù)據(jù)存儲(chǔ)服務(wù)收到數(shù)據(jù)訪問(wèn)請(qǐng)求后進(jìn)行同樣的操作:
它首先使用訪問(wèn)密鑰通過(guò)加密算法對(duì)數(shù)據(jù)訪問(wèn)請(qǐng)求進(jìn)行數(shù)字簽名,然后把該數(shù)字簽名和包含在標(biāo)頭部分的用戶生成的數(shù)字簽名進(jìn)行比對(duì)。如果數(shù)字簽名一致,系統(tǒng)則授權(quán)該訪問(wèn),否則拒絕該訪問(wèn)。所以即使有黑客在網(wǎng)絡(luò)上截獲了用戶的數(shù)據(jù)訪問(wèn)請(qǐng)求并加以修改,但是因?yàn)樯傻臄?shù)字簽名不同從而該訪問(wèn)也會(huì)被拒絕。
訪問(wèn)密鑰對(duì)于存儲(chǔ)的數(shù)據(jù)安全性來(lái)說(shuō)至關(guān)重要,用戶必須非常小心地妥善保管。一旦訪問(wèn)密鑰被泄露給其他人,他就可以使用訪問(wèn)密鑰來(lái)訪問(wèn)用戶數(shù)據(jù)賬號(hào)中的任何數(shù)據(jù),而且因訪問(wèn)而產(chǎn)生的費(fèi)用也記到用戶的賬號(hào)上。確保訪問(wèn)密鑰安全的另外一個(gè)最佳實(shí)踐是定期重新生成一個(gè)新的訪問(wèn)密鑰,同時(shí)把舊的訪問(wèn)密鑰失效。
需要注意的是,我們?cè)谏暾?qǐng)存儲(chǔ)賬號(hào)時(shí)系統(tǒng)生成了兩個(gè)訪問(wèn)密鑰:一個(gè)是主訪問(wèn)密鑰,另一個(gè)是輔訪問(wèn)密鑰。兩個(gè)訪問(wèn)密鑰的功能相同都可以訪問(wèn)數(shù)據(jù)。之所以有兩個(gè)是為了方便用戶切換訪問(wèn)密鑰。比如,在通常情況下用戶使用主訪問(wèn)密鑰,如果一旦主訪問(wèn)密鑰被泄露,用戶可以把主訪問(wèn)密鑰在最短的時(shí)間內(nèi)失效(重新生成一個(gè)新的主訪問(wèn)密鑰),然后切換到使用輔訪問(wèn)密鑰。用戶不需要為此修改代碼,而只需要更改服務(wù)配置文件即可,同時(shí)更新服務(wù)配置文件也沒(méi)有宕機(jī)時(shí)間。此外,另外一種有效的做法是應(yīng)用程序代碼可以先使用主訪問(wèn)密鑰來(lái)訪問(wèn)數(shù)據(jù),如果驗(yàn)證失敗,代碼自動(dòng)使用輔訪問(wèn)密鑰,這樣用戶在切換訪問(wèn)密鑰時(shí)就不會(huì)有宕機(jī)時(shí)間了。
用戶對(duì)表格和消息隊(duì)列的每一個(gè)數(shù)據(jù)訪問(wèn)請(qǐng)求,無(wú)論是讀操作還是寫操作,都必須通過(guò)驗(yàn)證。但是對(duì)Blob的數(shù)據(jù)訪問(wèn)要稍微靈活一些。我們?cè)谇懊娴氖褂肂lob的例子中提到,在創(chuàng)建Blob容器后需要對(duì)Blob容器設(shè)置訪問(wèn)權(quán)限,該訪問(wèn)權(quán)限可以是公有的(Public)或私有的(Private)。如果Blob容器是私有的,則對(duì)該容器內(nèi)所有Blob的任何操作訪問(wèn)請(qǐng)求都必須通過(guò)驗(yàn)證;如果Blob容器是公有的,則對(duì)該容器內(nèi)所有Blob的讀操作數(shù)據(jù)訪問(wèn)請(qǐng)求將不需要通過(guò)驗(yàn)證,可以直接訪問(wèn),但是對(duì)該容器內(nèi)Blob的寫操作訪問(wèn)還是需要通過(guò)驗(yàn)證的。
為了進(jìn)一步提高對(duì)Blob數(shù)據(jù)訪問(wèn)控制的靈活度,Windows Azure數(shù)據(jù)存儲(chǔ)服務(wù)還提供了另外一種叫做Shared Access Signature的數(shù)據(jù)訪問(wèn)控制方式。使用Shared Access Signature,管理員可以為其他用戶生成一個(gè)臨時(shí)的數(shù)據(jù)訪問(wèn)請(qǐng)求,該臨時(shí)數(shù)據(jù)訪問(wèn)請(qǐng)求包含有效的數(shù)字簽名,所以它可以通過(guò)數(shù)據(jù)驗(yàn)證。該臨時(shí)數(shù)據(jù)訪問(wèn)請(qǐng)求也包含該用戶可以訪問(wèn)哪些數(shù)據(jù)和操作權(quán)限等信息,而且該臨時(shí)數(shù)據(jù)訪問(wèn)請(qǐng)求只會(huì)在指定時(shí)間內(nèi)有效。這樣管理員既可以允許其他用戶訪問(wèn)數(shù)據(jù),又不會(huì)泄露訪問(wèn)密鑰。