在面临应用程序数据存储位置这个问题时,大多数开发人员会立即将数据库视为解决方案。关系 (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 即可实现轻松编程。您无需触摸一块硬件,甚至无需了解复制的工作方式,即可创建分布式群集,并且可以完全控制数据是在数据中心内部,还是在大陆两端是多余的。最重要的是,您可以获得开箱即用的持续性、弹性、扩展性和安全性。在下一个应用程序中考虑使用云存储吧。