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_Click(object 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),取出成本比写入成本要高。
参考
[编辑]- ^ Windows Azure Storage Service REST API References. [2016-03-17]. (原始内容存档于2016-11-13).
- ^ Simple Cloud API. [2016-03-17]. (原始内容存档于2012-02-09).
- ^ Inside Windows Azure storage: what's new and under the hood deep dive @ BUILD WINDOWS. [2016-03-17]. (原始内容存档于2020-11-27).