使用Windows Azure 虚拟机预览版,我们有两个新特殊类型的blob 存储在Windows Azure 存储器上: Windows Azure 虚拟机磁盘和Windows Azure 虚拟机镜像。当然,我们也有Windows Azure 驱动器预览版。在这篇文章的以下余部分,我们会参考这些存储器、 磁盘、 镜像和驱动器。本文探讨了什么是驱动器、 磁盘和镜像以及如何与存储进行交互。
虚拟硬盘 (VHDs)
驱动器,磁盘和镜像都是作为页blobs(BLOB(binary large object),二进制大对象)存储在您存储账户里的虚拟硬盘。其实有几个稍有不同的VHD 格式: 固定、 动态和差异比较。目前,Windows Azure 仅支持命名为“固定”的格式。这种格式的逻辑磁盘进行线性文件格式内布局,这样磁盘偏移X 存储在blob 偏移X 处。Blob的一端,有一个小的页脚描述的VHD 属性。所有这些存储在页blob 中遵守VHD的标准格式,以便您可以使用此VHD 以及在非云端服务器上装载,如果您选择使用的话。通常情况下,固定格式会浪费空间,因为大多数磁盘有大量的未使用的范围。然而,我们将我们的“固定”VHDs存储为页 blob,这是一种稀疏的格式,所以我们就能同一时间获得“固定”和“膨胀”磁盘的好处。
上传虚拟硬盘到 Windows Azure存储器
您可以将您 VHD 上传到您的存储帐户,用它做 PaaS(平台即服务) 或 IaaS(基础设施即服务)。当您要上传您VHD到存储器 时,要使用一个了解页 blob 是稀疏并且仅上传的部分具有实际数据 VHD 的工具。此外,如果您有动态VHDs,要使用一个工具,在进行上传时,将转换您动态VHD成固定VHD。CSUpload将为你执行这两个操作,并且它是作为Windows Azure SDK的一部分.
持久性和耐用性
由于驱动器、 磁盘和镜像都存储在存储器中,即使您的虚拟机已移动到另一台物理计算机,您的数据也会持久保存。这意味着您的数据利用了Windows Azure 存储体系结构提供的耐久性,您非缓冲和写入硬盘的数据在成功返回到您的应用程序之前复制3 次并存储,以使它持久返回。
驱动器 (PaaS(平台即服务))
驱动器被 PaaS 角色 (工作者角色、Web 角色,和VM角色)用于装载VHD 并指派一个驱动器号。有关您如何使用这些驱动器有许多细节在这里。实现了内核模式的驱动器是在您的VM 内 运行,因此您的磁盘 IO 到虚拟机的驱动器将引发Windows Azure 存储器中的网络IO 和从vm到您的页blob。下图显示驱动程序运行在VM,通过虚拟机的虚拟网络适配器与存储器进行通信。
PaaS 每个角色允许装载到 16 个驱动器。
磁盘 (IaaS(基础设施即服务))
当您创建一个 Windows Azure 虚拟机时,平台将为您的操作系统连接至少一个磁盘到VM 。此磁盘也将作为页blob 存储在中存储器VHD。当你写到VM磁盘中,对磁盘的更改将会更改内存储页blob。您还可以将附加其他磁盘给您的 VM 作为数据磁盘,这些也将存储在存储器中作为页blob。
与驱动器不同,代表您的磁盘存储与进行通信的代码不在您的 VM中,这样做对磁盘IO不会导致VM的网络活动,尽管它将导致该物理节点上���网络活动。下面的关系图显示了该驱动程序在主机操作系统中的运行方式和VM 通过磁盘接口与驱动通信,然后通过主机网络适配器于存储器进行通信。
有的一台虚拟机可以装载,从 16 个数据磁盘的特大的虚拟机,到一个数据磁盘,额外小的虚拟机的磁盘数的限制。详细信息在这里.
重要:Windows Azure平台上在所有页 blob持有无限期的租约,它认为您存储的帐户中的磁盘以便你不意外删除了基础页blob,容器,以及存储帐户当虚拟机使用VHD时。如果您想要删除基础页blob、 容器内或存储帐户,需要如下所示的第一次分离从虚拟机磁盘:
然后选择您想要断开的磁盘,然后删除:
然后您需要从用户界面删除磁盘:
然后您可以选择从窗口的底部的删除磁盘:
注: 当您删除该磁盘时您没有删除在存储帐户的磁盘(VHD 页blob)。你只可以取消关联用于Windows Azure 虚拟机镜像。您完成上述所有操作后,您将能够从您的存储帐户,使用 Windows Azure 存储REST API或存储explorers删除磁盘。
镜像 (IaaS)
Windows Azure 使用"镜像"的概念来描述可用于创建一个或多个虚拟机的VHD模板。WindowsAzure 和一些合作伙伴提供了可用于创建虚拟机的镜像。您还可以为自己所捕获镜像的现有Windows Azure 虚拟机创建镜像,或者您可以上传sysprep镜像到您的存储帐户。镜像也是VHD 格式,但该平台不会写入该镜像。相反,当您从镜像创建一个虚拟机,系统将在您的存储帐户,创建该镜像页blob 的副本,该副本将用于虚拟机的操作系统磁盘。
重要:Windows Azure 持有无限期租约上所有页 blob、 blob 容器和审查您账户中的镜像的存储帐户。因此,若要删除基础页blob,您需要从用户界面中,通过转到"虚拟机"部分中,单击"镜像"删除镜像
然后您选择您的镜像,然后按屏幕底部的"删除镜像"。这将断开从您的注册的镜像的关联VHD,但它不会从您的存储帐户删除页blob。在这一点上,您将能够从您的存储帐户中删除该镜像。.
临时磁盘
这里还有是存在于所有 web 角色、 工作者角色、VM 角色和Windows Azure 虚拟机中的另一磁盘,称之为临时磁盘。这是可用于临时空间的节点上的物理磁盘。这个磁盘上的数据将会丢失,当VM 移动到另一个物理机器,当Windows Azure 检测到该节点的毛病时,您正在其上运行,升级,修补程序,在这期间可能会发生。提供的临时磁盘的大小定义在这里.
临时磁盘是理想的地方来存储您的操作系统的页面文件。
重要:临时磁盘不是持久的。您应该只写入你愿意在任何时间丢失的磁盘的数据。
计费
带宽、 事务和存储容量的 Windows Azure 存储收费。可以找到的每个单位成本的在这里.
带宽
我们建议在相同的位置 (例如,美国东)内从安装驱动器作为它们存储在中,这提供了最佳的性能,以及还不会招致的带宽费用。使用磁盘,您需要在磁盘存储的同一位置使用它们。
事务
当连接到一个虚拟机,来自驱动器和磁盘的IO都是会跟storage交互,(除非一层用于缓存如下所述的第一次可以满足请求)。小磁盘Io 将承担每个IO 一个Windows Azure 存储事务。较大的磁盘 Io 将分成更小的 IOs,所以他们将会招致更多的事务费用。为此细分为:
- 驱动器
- IO
< 2 兆字节将 1 宗事务 - IO
> = 2 兆字节会将分成 2MBs 或规模较小的事务
- IO
- 磁盘
- IO
< 128 kb 为单位) 将会是 1 宗事务 - IO
> = 128 kb 为单位会将分成 128KBs 或规模较小的事务
- IO
此外,操作系统的系统通常执行有点预读小序贯 IOs (通常少于 64千字节),这可能会导致更大的中小型IOs 中对驱动器/磁盘比由应用程序发出的IO 大小。如果使用预取的数据,然后这可能导致您存储的帐户比由您的应用程序发出的IOs 的数目较少。
存储容量
Windows Azure 存储器存储页 blob,以及 Vhd 稀疏的格式,因此只收费实际上的VHD 期间已写入的VHD 内的数据。因此,我们建议使用快速格式化,因为这将避免存储的零页blob 内大范围。创建VHD 时您可以选择快速格式化选项,通过指定如下:
它也是重要的是要注意当您删除文件使用的 VHD 文件系统中,大多数操作系统不清除或清零这些范围,因此您可以仍要支付能力收费内blob 数据已经通过的硬盘中删除了。
缓存,高速缓存和更多的缓存
驱动器和磁盘都支持磁盘缓存和一些有限的内存中缓存。在内存中缓存以及多层的操作系统以及应用程序库?本节重点介绍一些你所拥有的应用程序开发人员的缓存选项。
高速缓存可用于提高性能,并降低事务成本。下表列出了一些可供使用的磁盘和驱动器的缓存。每个所述表下面的更多详细信息。
类型 |
目的 |
数据持久性 |
|
文件流 |
内存 |
提高了性能,并减少 IOs 的按序读取和写入。 |
写入操作不会自动保存。调用"刷新"以坚持写操作。 |
操作系统缓存 |
内存 |
提高了性能和降低 IOs 的随机和顺序读取和写入。 |
写入操作不会自动保存。使用"通过写"的文件句柄,或者"冲洗"要坚持写道。 |
Windows Azure 驱动器高速缓存 |
内存和磁盘 |
减少了存储读取的事务。可以连续 IO,根据工作负荷的性能提高。 |
写操作将自动保留。通过使用"写入"文件句柄,或"刷新",知道写操作将保留。 |
Windows Azure虚拟机磁盘缓存 |
内存和磁盘 |
减少了存储的事务。可以连续 IO,根据工作负荷的性能提高。缩短启动时间。 |
写操作将自动保留。通过使用"写入"文件句柄,或"刷新",知道写操作将保留。 |
没有可用的硬盘或硬盘缓存 |
不适用 |
可提高随机和顺序的 IO,根据工作负载的性能。 |
写操作将自动保留。通过使用"写入"文件句柄,或"刷新",知道写操作将保留。 |
文件流(适用于磁盘和驱动器)
.NET框架的FileStream类将缓存在内存中读取和写入,以减少IOS到磁盘。一些采取的FileStream构造的缓存大小,其他将默认选择8K缓存。你不能指定类不使用内存缓存,最小高速缓存大小为8个字节。你可以强制向磁盘缓冲区写入FileStream.Flush(bool)API调用。
操作系统缓存(适用于磁盘和驱动器)
操作系统本身会做读取和写入内存中的缓冲,除非你明确地将其关闭,当你使用FILE_FLAG_WRITE_THROUGH与/或FILE_FLAG_NO_BUFFERING打开文件。更深入的讨论内存中缓存的窗口的行为点击这里。
Windows Azure的驱动器缓存
驱动器允许您选择是否使用一个本地临时磁盘读取缓存节点的,或不使用缓存。从您的网络角色或工作者角色的临时磁盘驱动器的高速缓存空间分配。这个缓存是直接写入型的,这样的方式总是立即提交到存储器中。既可以从本地磁盘读取,可以从存储器中读取。
使用本地缓存的驱动器读取“hit”缓存,可以改善顺序IO读取性能时。如果是以下情况将连续读取hit缓存:
1。已读取数据之前。数据缓存上的第一次,它是只读的,而不是在第一次写入。
2。缓存大到足以容纳所有的数据。
访问的BLOB往往可以实现比在本地磁盘更高的随机IO速率。然而,这些随机的IOS将提高存储的成本。为了减少存储事务的数量,您可以使用随机的IO以及本地磁盘高速缓存。以取得最佳效果,确保您的随机写入到磁盘8KB一致,IO的大小是8KB的倍数。
Windows Azure的虚拟机磁盘高速缓存
当部署虚拟机时,操作系统磁盘有两个主机缓存选择:
1。读/写(默认) - 回写高速缓存
2。读 - 写通过缓存
当你在虚拟机上设置一个数据磁盘,你会得到三个主机缓存的选择:
1。读/写 - 写回缓存
2。读 - 写通过缓存
3。无(默认)
用于数据磁盘和操作系统磁盘高速缓存的类型是通过用户界面目前尚未暴露。要设置主机缓存的类型,你必须使用服务管理API(要么是添加数据磁盘或是更新的数据磁盘)或PowerShell命令(add-AzureDataDisk或set-AzureDataDisk的)。
可读高速缓存存储在磁盘和操作系统内存中。写入缓存存储在操作系统内存中。
警告:如果您的应用程序不使用的FILE_FLAG_WRITE_THROUGH,写入缓存可能导致数据丢失,因为数据可能存在操作系统内存中,在等待被写入物理机器时意外崩溃。
使用读取高速缓存将提高连续IO读取性能,如果是以下情况将连续读取hit缓存:
1。已读取数据之前。
2。缓存是大到足以容纳所有的数据。
磁盘缓存的大小会有所不同,基于实例的大小和安装的磁盘的数量。缓存只能被启用了四个数据磁盘。
没有缓存的虚拟磁盘和Windows Azure驱动器
Windows Azure存储可以提供用于缓存的比随机的IO节点更高速率的本地磁盘。如果你的应用需要做大量随机IO的吞吐量计算,那么你可能要考虑不使用上述缓存。然而,Windows Azure存储产生事务成本,而本地缓存IO则不需要。
要禁用Windows Azure的驱动器高速缓存,调用Mount()API,使高速缓存的大小为'0'。
虚拟机的数据磁盘的默认行为是不使用缓存。如果您已启用数据磁盘高速缓存,你可以禁用它使用更新数据的磁盘服务管理API,或在的设置AzureDataDisk PowerShell的命令。
虚拟机的操作系统磁盘的默认行为是使用缓存。如果您的应用程序会做大量的随机IO的数据文件,你可能要考虑这些文件移动到一个数据磁盘缓存关闭。
Andrew Edwards 和Brad Calder