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