成為一個摩登網站開發人員 (Modern Web Developers): 雲端儲存篇

網站開發的過程中經常會處理資料儲存的工作,像是檔案的上傳下載、儲存 session 資料或是工作/訊息佇列等等,在尚未雲端化的網站應用程式中,常會使用伺服器環境的檔案系統 (不論是本地端或是透過網路掛載的磁碟機) 來處理檔案存取,但是這樣的架構某種程度限制了網站應用程式的擴充 (像是要如何讓檔案系統的資料同步、而且能讓不同的伺服器能共同使用等等),雲端儲存服務便成了讓網站應用程式雲端化的第一步。

使用雲端檔案儲存的架構之後,便不必煩惱磁碟機,甚至也毋須擔心檔案資料備份、以及從世界各地存取頻寬的問題。

目錄


雲端檔案儲存

很多雲端平台都提供了檔案存取的服務,一般都會以「Blob Storage」的名稱來提供服務。Windows Azure 也提供了 blob storage 的儲存服務,網站開發人員,不論使用什麼樣的程式語言 (e.g. .NET, PHP, Java, Python, Ruby, NodeJS, ...) 都可以透過 API 的介接來使用 blob storage,而且也提供了下列幾種語言的 SDK 讓你更方便存取 blob storage。

放上 Windows Azure Blob Storage 的檔案,不僅可以設定檔案存取的權限,也可以產生公開的 URL 來直接存取,以下可以一實際的例子來說明。

應用情境

網站若是有提供供人下載的檔案,為了分散網站本身的頻寬 (免得大家都從應用程式的伺服器上下載),可以將檔案放在 blob storage 上,也可以設定是公開或是需要驗證的下載。

或是在網站建置時,可將網站上用到的靜態檔案如:CSS、JavaScript 或是圖檔,都可以放在 blob storage,設成公開的 container ,也可以分散讀取網站的流量,提高讀取效率。

...

使用概念

每個 blob storage 可以建立 container,因為檔案都必須放在 container 底下 (有點像資料夾的概念)。如果一個 container 設為 public (公開),那在該 container 下的檔案都可以透過公開的 URL 來取得,否則就需要透過 API 來完成身份驗證以及取得檔案內容。

但不論 container 是 public 還是 private,要將檔案放到 container 裡面都需要透過 API (或是基於 API 所寫成的應用程式) 來完成。

使用工具存取

Azure Storage Explorer 是一個免費的工具,但它卻能讓你很輕鬆管理放在 Windows Azure 上的檔案,直接安裝就可以使用。

Windows Azure Storage Explorer
Windows Azure Storage Explorer 的操作畫面

若你使用 Windows Azure 的 Storage 服務,你可以建立多個不同的 storage account 來區分用途,每個 storage account 又會配發金鑰 (key) 做為驗證使用,所以在不論是使用 Azure Storage Explorer 這個工具,還是要用 API 來操作都需要 account name 還有 key 來作身份驗證。

Windows Azure Storage Account & Keys
Windows Azure Storage account 的 manage keys 畫面可以取得金鑰,或是重新產生

完成帳號設定之後,就可以在這個 storage 下使用 blob/queues/tables 等儲存服務 (這裡先介紹 blob 的部份),要上傳檔案之前,要先建立一個 container 才能上傳 blob。

建立 container
建立一個 public container

將檔案上傳至 public container 之後,按下方的 View 按鈕就可以看到該檔案的 URL 了,也就能透過這個 URL 來讀取該檔案了。

取得 blob 的 URL
取得一個 blob 的 URL

使用 API 存取檔案

透過 SDK 來存取 blob 也十分容易,以 PHP 為例,裝好 PHP 版的 Windows Azure SDK,便能透過下面的程式碼來完成身份驗證、儲存/讀取檔案:

其它資料

其它語言的 SDK 操作範例可以由上述的 github 網站查詢,若要瞭解完整權限的設定,還有 REST API 的說明,可以至 MSDN 上的 Set Container ACL (REST API) 來學習。

其它雲端儲存

雲端儲存還有很多種其它的形式,以 Windows Azure Storage 為例,也包括了 Table storage (一種 NoSQL 資料儲存服務)還有 Queue service,使用方式與 blob storage 大同小異 (認證方式、使用 API/SDK等),所以這裡介紹它們的概念還有使用情境。

Table storage

Windows Azure Storage 提供的 Table storage 是一種 NoSQL 的資料儲存方式 (與一般關聯式資料庫不同),你可以建立一個 table,然後一筆一筆塞入想儲存的資料,而你不必為這個 table 預先設定 schema (像是資料庫中的資料表欄位),使用上較有彈性 (可以動態在儲存的資料新增或刪除欄位)。

Table storage 儲存資料的方式是 key/value pair,所以每一個儲存的資料都可以透過 key 來取得,而這種儲存的方式雖然不能像關聯式資料庫那樣 join tables,不過卻可以很輕易儲存大量的資料,而且透過唯一的 key 來存取也相當快速。適合用在可能會產生大量資料的環境。

Queue service

Windows Queue service 提供一個簡單的訊息佇列 (message queue),讓你可以依序把資料放進佇列中,要讀取時再依序從佇列中取出。

這樣的環境可以用來把大量的工作 (可能不必立即完成) 訊息放在佇列中,然後再依序完成,以減輕網站程式在一個 request 中的工作量負擔。舉例來說,假設今天要做一個會員註冊的程式,每有一個新會員註冊時就發送確認信到他的信箱中讓它完成身份確認。若是寄送 email 的動作跟註冊的程式綁在一起,若是短時間有大量會員註冊,可能會造送郵件遞送上的問題,甚至是被郵件伺服器視為發送垃圾信的行為。此時就可以利用 queue service,將「要寄 email 給 OOO」的工作依序放在佇列中,然後讓寄送 email 的程式每隔一段時間就去看佇列裡有沒有要寄送的工作,一次消化XX份工作,這樣不但可以減輕註冊程式的工作量 (塞訊息到佇列顯然比寄 email 輕鬆),也可以讓寄信的行為正常化。

結論

善用雲端儲存機制,除了可以確保資料的安全、容易取得、自動備份等等的特性之外,也可以改善網站應用程式的架構,提高網站的效能,若有興趣研究 Windows Azure 所提供的雲端儲存平台服務,可以仔細研究 MSDN 上的Data Management and Business Analytics 這篇文章。

 

免費註冊 Windows Azure 平台服務,目前提供 90 天 (一定額度下) 免費試用的優惠