Azure 的储存选项

  • Jonathan Allen
  • 朱永光

2010 年 1 月 11 日

话题:.NET架构云计算AzureDevOps语言 & 开发

首先要了解一些术语。术语Windows Azure Platform涵盖了微软云计算技术的所有方面。在 Windows Azure Platform 里,有 3 个主要技术。虚拟机组件称之为Windows Azure。对于计算而言,它支持Web Roles(用于托管 Web 站点)和Worker Role(用于后端处理)。SQL Azure基于 SQL Server,具有很多相同的特性。最后是Windows Azure Platform AppFabric(不要和Windows Server AppFabric混起来)。Azure AppFabric 是一个消息总线,目标是简化身份验证和消息传递,尤其在跨防火墙的时候使其更容易。

Azure Platform 提供了太多的存储选项,让使用选择可能很困难。在 Windows Azure 的核心中是 Blob 存储。有两种类型的 Blob 存储,block(块)blob 和 page(页)blob。Block blob 能存储最高 200GB 的数据,并针对流处理进行优化。而 page blob 能支持最高 1TB 的数据,主要用于随机访问。除了作为很多其他特性的基础外,blob 存储还用于存储类似图片和视频这样的资源,用户能够通过 REST 风格的 HTTP 请求直接下载这些资源。

运行于 page blob 之上的是Windows Azure XDrive。XDrive 能像一块 NTFS 格式的硬盘那样被挂接,让其能用普通的文件 I/O API 来访问。不过由于它也是 blob,所以能作为一个原子单元进行复制。

如果你打算存储更加结构化的数据,你有一堆选项可用。对于存储大量的非关系型数据,你最好的选择就是当前的表服务(Table Service)。然而在一个 Azure Table 中的实体只能有 1MB 的大小,对于 Table 的总体大小没有一个明确的限制,它应该可以增至 TB 级别的容量。尽管 Table Service 可以支持大容量的数据,但由于只支持少量的数据类型,所以实际上还是有比较严格的限制,这就要求开发人员从一开始就需要考虑如何处理分区问题。

如果你想使用诸如联接(Join)这样的关系概念,那么SQL Azure是比较好的选择。SQL Azure 支持大部分在现代数据库中所具备的特性,包括标准的 ODBC 和 ADO.NET 客户端 API。然而,它在大数据库方面有着严格的大小限制,只能存储 10GB 的容量。由于跨数据库查询不被支持,所以跨多个数据库的分区是个棘手的问题,任何 union 或 join 操作都需要在内存中完成。

最后,还有消息存储的选项。消息存储用于短期队列和存储 - 转发类型的架构当中。Azure 的QueueService支持大小最多为 8K 基于 XML 的消息。如果你需要发送大数据的话,应该存储在别处并通过 URI 或在消息中的主键来引用。队列消息在接收后就被“隐藏”。应用程序倾向于用及时删除的方式来处理已被接收的消息;否则它最终会再次出现,并再次发送。从设计的角度看,这也意味着消息处理的次数会幂等增加。目前,在队列中的消息数目并没有严格的限制。

Azure AppFabric 也提供了消息队列,虽然它们称之为(AppFabric 服务总线消息缓存)AppFabric Service Bus Message Buffer消息缓存默认只支持 10 条消息,不过可配置为最高 50 条。缓存中消息保存在内存中,因此在服务器宕机的时候不能恢复。因而,在不可靠或会离线较长时间的接收端,应该尽量少用这种存储方式。

查看英文原文:Azure Storage Options

.NET架构云计算AzureDevOps语言 & 开发