Microsoft Azure 储存体

Azure 储存服务 (Azure Storage) 是 Microsoft Azure 平台内实作的资料储存服务,目前为 Azure 平台服务的主要资料保存地。

Azure 储存服务提供了四种不同格式的储存体,用来提供给Azure上运行的应用程序储存资料使用。依据不同的储存格式会有不同的限制,因为这些储存服务都是以分散式巨量储存(Distributed Mass Storage)为核心概念所设计出来的,为了要达成快速在分散式储存空间中储存与管理资料(还包含高可用度的赘余储存管理),微软有在资料的储存上做一些限制。

不论是哪一种储存服务,Azure都有REST API[1],并符合Simple Cloud的标准[2]

Azure 储存服务提供 99.9% 的服务水准,而只读式备援的只读端 (备援端) 为 99.99%。

Blob

Blob (大型二进制物件)资料是用来储存像是档案,图片,视讯档,可执行档,压缩档等二进制格式的档案,基本上它的储存单位就是档案,为了要让BLOB的功能应用更宽广,微软也在 Blob 服务上开发了内容传递网络(Content Delivery Network)的服务,让 Blob 可以作为大容量的档案或资料储存与供应的地方,以支持类似YouTube这样的大型Web应用程序的服务。

Blob 依照性质分为两种:

  • Block Blob(区块型 Blob 储存体),这类的储存以4MB为一个区块单位 (可依需调整,范围为 16KB~4MB),单一档案最大可以储存 200GB,且区块不会连续储存,可能会打散到不同的储存服务器中存放,当应用程序要求时,会依照档案的Key以及区块由储存区提取资料。另外,区块在储存时会经过一道认可程序,以让应用程序决定是否要重新传送。
  • Page Blob(分页型 Blob 储存体),它会在储存区中划分一个连续的区域供应用程序存放资料,它本身可以视为一个大型的VHD(虚拟机器磁盘),在Page Blob 的资料写入会直接认可。而基于Page Blob 的特性,微软特别在Page Blob 上提供了一组将Page Blob 虚拟成磁盘的功能,称为Azure Drive(研发代号为XDrive),它能够支援NTFS API,也就是说应用程序可以利用现有的档案管理API(包含System.IO的类别)来存取Azure Drive中的资料夹与档案资料,并且这些资料会保存在Azure资料中心内。

Blob 服务由 Blob 本身以及其收纳容器(Container)构成,容器可视为一般本机上的资料夹。而容器和 Blob 都支援额外的Metadata设定,这些Metadata会附挂在HTTP Header中传输给用户端,每一个Metadata的大小限制为8KB。Blob 也支援权限管理的功能,透过Shared Access Signature可设定 Blob 或Container的存取权限与有效期限等。

private void EnsureContainerExists(
{
    var container = GetContainer();
    container.CreateIfNotExist();

    var permissions = container.GetPermissions();
    permissions.PublicAccess = BlobContainerPublicAccessType.Container;
    container.SetPermissions(permissions);
}

private CloudBlobContainer GetContainer()
{
    var account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
    var client = account.CreateCloudBlobClient();

    return client.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue("ContainerName"));
}

Table

Table(表格)是给具结构化资料的应用程序储存与管理的一种储存服务,它在Azure储存区中会以Key-Value键值对方式储存,并且由Partition来切割在Azure储存区的储存位置,它实际的资料是XML,透过REST API呼叫时,会需要依据SDK上的说明,自行建置XML的要求与解析回应的资料,但若是.NET Framework的开发人员,在Azure SDK中提供的Microsoft.WindowsAzure.StorageClient命名空间就有提供辅助的API以及类别,将这件事在API中处理掉了。SDK提供的辅助组件所应用的技术是WCF Data Services,因此若对WCF Data Services熟悉的开发人员,会很容易的上手Table储存的开发。

namespace TableExample
{
    public class Contact : TableServiceEntity
    {
        public string Name { get; set; }
        public string Address { get; set; }
        public string Phone { get; set; }
        public string Cellphone { get; set; }

        public Contact()
        {
            base.PartitionKey = "ContactTable";
            base.RowKey = Guid.NewGuid().ToString();
        }
    }
}

虽然Table可以储存结构化的资料,但它并不是关联性数据库,所以像是join,汇总函数等都无法使用,要由开发人员另外处理。

Queue

Queue(伫列)是一种先到先服务(First-Come, First-Serve),或称为FIFO(先入先出)的储存服务,它可以允许应用程序将讯息储存到伫列中排队,然后由负责处理的应用程序(通常是Worker)由伫列提取讯息并处理以后,将讯息由伫列中移除。讯息可以是字串或是最长8KB的二进制资料,伫列经常会作为跨执行个体通讯以及工作切割通知的讯息传递之用。

protected void cmdAddQueue_Clickobject sender, EventArgs e
{
    CloudStorageAccount account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString";
    CloudQueueClient queueClient = account.CreateCloudQueueClient();
    CloudQueue queue = queueClient.GetQueueReference("theaterseatorders");

    queue.CreateIfNotExist();

    queue.AddMessage(new CloudQueueMessage("SEATNUM=1-1,[email protected]"));
    queue = null;
}

File

档案服务是 Azure 近期 (2014) 才加入的新规资料储存服务,它也是用来储存二进制档案,但它和 Blob 不同的是 Blob 是 Internet-facing (面向 Internet) 的档案储存服务,档案服务则是给同一区域内的 Azure 服务 (如虚拟机器服务) 共享档案资源的服务,它使用 SMB 2.1 (推出时) 与 SMB 3.0 (GA时) 网络芳邻的方式简化存取档案的工作,同时也可以支援由资料中心外部的网络芳邻连线。

备援

自v1.5版起的 Azure Storage 开始支援异地备援 (Geo-replication)的功能[3],只要应用程序将资料传送到TABLE或BLOB储存,Azure会自动将资料往邻近的资料中心传递,以备援储存服务,当主要的资料中心发生断线或是无法提供服务时,Azure核心中的DNS Service会自动将要求导向到备援的资料中心继续提供服务。

  • 异地备援所产生的网络与储存成本由微软自行吸收,不另计费。
  • 异地备援的工作是异步且自动化,应用程序无需做任何修改。
  • 异地备援可以透过联系Windows Azure支援团队的方式停用。

目前 Azure 储存服务支援下列备援类型:

  • LRS (Local Redundant Service): 在区域内将资料产生三份复本储存。
  • ZRS (Zone Redundant Service): 在区域内除了原本的三份复本之外,再额外产生三份复本,此模式只支援 Blob 格式。
  • GRS (Geo-Replication Service): 在已配对的资料中心间异地备援,两边都产生三份的复本。
  • RA-GRS (Read-Only Geo-Replication Service): 在已配对的资料中心间异地备援,但另一边的储存可读取 (但只读)。

凉储存

凉储存 (Cool Storage) 是微软在 Build 2016 研讨会中所发表的新储存功能,它可以将资料储存在较持久的储存装置,并且利用资料保存技术将储存成本压低,以适用于长时间储存又不需经常存取的资料 (经常存取的称为热资料),凉储存仅适用于区块式 Blob 储存体 (Block Blob),每单位 GB 的储存成本比一般储存功能便宜约 50%,但由凉储存将资料取出或存入时除本身的交易成本外,尚需要支付额外每 GB 单位的取出与写入成本 (Data Retrival/Data Write),取出成本比写入成本要高。

参考

  1. ^ Windows Azure Storage Service REST API References. [2016-03-17]. (原始内容存档于2016-11-13). 
  2. ^ Simple Cloud API. [2016-03-17]. (原始内容存档于2012-02-09). 
  3. ^ Inside Windows Azure storage: what's new and under the hood deep dive @ BUILD WINDOWS. [2016-03-17]. (原始内容存档于2020-11-27).