在面臨應用程序數據存儲位置這個問題時,大多數開發人員會立即將數據庫視為解決方案。關系 (SQL) 和非關系基于文檔的 (NoSQL) 數據庫是經過驗證的企業解決方案。但是,對于某些類型的數據,還可以選擇其他方案,以相對較低的成本獲得難以置信的益處。云存儲通常比托管數據庫少幾個數量級,并且可以容納各種應用程序體系結構。
各主要云提供程序都提供存儲服務,大多數功能都相似。本文將重點介紹 Azure 存儲,因為該存儲價格低廉、容易入門,并且我最熟悉。您也可以獲得免費的 Azure 帳戶,跟隨并了解如何將云存儲用于您自己的應用程序。
Azure 存儲是一種基于云的存儲服務。您可以在此處閱讀完整文檔:Azure 存儲文檔。Azure 云存儲帳戶具有以下特點:
1. 持久可用
2. 高度安全
3. 具有可擴展性,以滿足您的需求
4. 完全托管
5. 可從任何平臺或使用任何語言訪問
要開始使用存儲,請先創建存儲帳戶。
存儲帳戶是一個錄屬項目,包括您可以使用的各種資源。將存儲帳戶視為資源的比例單位。您確定帳戶層面的策略彈性(即數據是存儲在本地,還是自動復制到遠程區域,以便在數據中心停機時提供數據可用性)。帳戶可提供各種資源,其中包括:
Blob 存儲:非結構化數據(包括文檔、圖像和視頻)的存儲
文件存儲:與服務器消息塊兼容、可安裝在 Windows、Linux 和 macOS 系統上的基于云的文件系統
隊列存儲:可處理數百萬條消息并支持快速查看(查看消息,而不將消息從隊列中刪除)和彈出(查看消息,并將消息從隊列中刪除,以防其他客戶端訪問)操作的消息存儲
這些存儲資源為以下應用場景提供解決方案:
存儲和檢索應用程序的文件、文檔和視頻
維護重要文檔的版本歷史記錄
強制執行文檔不變性(例如,不得修改或刪除與法律案件相關的文檔)
托管靜態網頁
在云中托管旨在與本地文件系統交互的舊版應用程序
提供包含開發人員所用的共有資源和工具的共享文件夾
大規模處理應用程序之間的消息傳遞
存儲帳戶還可用于確定應用程序的復制水平。各水平都是更高的成本和更高的可用性與增強的彈性之間的權衡。可用的存儲復制選項包括:
本地冗余,99.9999999% (11 9) 的可用性,分布在本地副本中。丟失數據中心意味著丟失數據。
區域冗余,12 9 的可用性,區域內有多個群集。在數據中心發生故障時,防止數據丟失,但在整個區域都發生故障時,無法防止數據丟失。
地域冗余,16 9 的可用性,次要區域距離主要區域數百英里。這種冗余可用性最高,成本也最高。
對成本感到困惑或擔心成本?Azure 提供定價計算器,可用于估算帳戶每月的費用。
要查看“真實世界”的實際示例(我使用存儲帳戶來運行鏈接縮短器),請查看此推文:
如果您已準備好開始使用,請參考快速入門:創建 Azure 存儲帳戶。我建議創建一個V2 帳戶。
Blob 是 Binary Large Object(二進制大型對象)的縮寫。Blob 存儲旨在處理少量至大量非結構化數據。非結構化數據的示例如下:
可能直接提供給瀏覽器的圖像或文檔
需要分布式訪問的文件
用于流式處理的視頻和音頻
日志文件
備份和還原(災難恢復和/或存檔)
用于將來分析的數據
在 Azure 中,Blob 存儲被組織到類似于文件夾的容器中。您可以在容器級別控制安全參數以及默認行為。
例如,在存儲帳戶中,我創建了一個可公開訪問的演示文稿容器。此鏈接將下載我上傳到容器中的存儲演示文稿的完整幻燈片版面(采用PowerPoint 格式)。我建議您看一下這篇演示文稿,因為本文基于這篇演示文稿。
Blob 存儲有以下三種主要類型:
塊 Blob 用于存儲大小為幾 TB 的文本或二進制數據
追加 Blob 對追加操作進行優化,即寫出日志
頁面 Blob 被 Azure 內部用于磁盤
Blob 存儲可讓您靈活地控制數據的存儲方式。存儲 Blob 時,設置默認值或重寫,可選擇以下三個訪問層:
熱存儲 適用于頻繁訪問的數據。此訪問層的存儲成本最高,但數據訪問成本最低。頻繁寫入和/或讀取的數據將在此處。
冷存儲 適用于不常訪問的數據。此訪問層的存儲成本最低,但數據訪問成本最高。例如,準備大量數據以供將來處理將是此訪問層的候選項。
存檔存儲 適用于必須保留但不經常訪問的文檔。此訪問層的數據存儲成本最低,但數據訪問成本最高。要對訪問進行存檔,請從存檔切換到熱或冷存儲,并等待 15 小時來處理。醫療記錄和稅務文件是存檔層的兩個典型示例。
您可以進一步優化 Blob 存儲如何與訪問和存儲策略一起使用。例如,您可以指定,在覆蓋 Blob 時,始終保留舊版本的副本。您可以鎖定 Blob,在更新 Blob 時,防止其他客戶端進行修改,甚至可將 Blob 置于合法保留狀態,防止對正在使用的文檔進行任何更改。
Azure 存儲附帶軟件開發工具包,可以更輕松地與代碼中的存儲進行互動。該工具包支持 .NET、Java、Python 和 Node.js 以及其他熱門語言和平臺。
以下是連接到存儲帳戶并訪問容器的示例代碼。若尚不存在容器,該代碼會創建容器。
下一代碼段將文件(傳遞一個包含磁盤上文件字節的流對象)上傳至 Blob 存儲,并檢索URI 以訪問它。
所有 Azure 存儲選項都提供詳細的使用指標。以下是 Blob 存儲指標示例:
Blob 存儲的獨特功能是能夠托管靜態網站。許多前端框架生成通過瀏覽器下載的文件,以運行單頁應用程序。靜態資產包括 HTML 文件、CSS 樣式表和圖像。通過創建一個特殊的$web 容器,您可以上傳靜態資產并在 Web 上訪問這些資產,而無需配置(或支付) Web 服務器。這樣做可以節省大量成本。
以下是我同事發布的一篇博客文章,這篇文章將引導您使用靜態網站創建和托管安全密碼身份驗證應用程序:在 Azure 存儲靜態網站中托管 Blazor 應用程序。Blazor 使用 WebAssembly 在瀏覽器中托管 .NET 應用程序。
通過 Azure 文件,您可以創建可裝入基于云的文件共享,可從 Linux、macOS 和 Windows 訪問這些文件共享。對于開發人員來說,最常見用例是將舊版應用程序遷移到 Web,即使這些應用程序依賴于文件系統訪問。您可以創建文件共享并從運行舊版應用程序的虛擬機安裝文件共享,它甚至不“知道”自己在云中運行。
您可自行確認運行情況,并創建您的第一個 Azure 文件共享。
Azure 隊列提供一種簡單又經濟的方法來處理應用程序的消息。隊列可以所需的任何格式處理最大 64 千字節的單個消息,并可能包含數百萬條消息。常用的方法是將消息存儲為純文本字符串或包含 JSON 格式數據的字符串。默認情況下,消息會在 7 天后自動從隊列中過期。
對于按照先來后到的次序處理的信息積壓,隊列對跟蹤這些信息積壓非常有用。此外,隊列還對在基于云的客戶端之間發送消息非常有用。
有關我如何使用隊列的示例,請參見我的鏈接縮短器工具。當用戶請求短鏈接時,我希望盡快重定向這些鏈接,這樣它們就不會出現任何延遲。應用程序會跟蹤點擊次數,因此我可以運行分析來確定哪些主題更受歡迎,以及人們通常不會點擊哪些鏈接,因為他們對這些鏈接不感興趣。在處理重定向的代碼中,我使用無服務器綁定來訪問隊列:
向隊列添加一個條目需要一行代碼。在本例中,我使用管道 ( | ) 分隔的字符串來存儲短鏈接、長鏈接、時間戳、引用 URL 和用戶代理。
此項目是異步添加的,用戶將立即重定向。然后,隊列中的條目將觸發另一段代碼:
代碼通過隊列消息調用,消息從隊列中自動彈出或刪除,這樣其他客戶端就不會訪問該消息。然后,該代碼在單獨的線程上處理隊列數據,而不會影響用戶體驗。
瀏覽GitHub 上的鏈接縮短器代碼。
數據庫不是存儲數據的唯一地方!云存儲解決方案提供價格低廉的存儲,使用現有的軟件開發工具包和/或 REST API 即可實現輕松編程。您無需觸摸一塊硬件,甚至無需了解復制的工作方式,即可創建分布式群集,并且可以完全控制數據是在數據中心內部,還是在大陸兩端是多余的。最重要的是,您可以獲得開箱即用的持續性、彈性、擴展性和安全性。在下一個應用程序中考慮使用云存儲吧。