我正在我的小型azure虚拟机上运行一些启动脚本(cmd/bat),其中包括从安装的VHD进行的文件传输操作,通常大约3分钟内完成(使用命令行7z复制文件并提取约500Mb的zip文件)。
当我扩展到大约150个实例时,相同的操作非常缓慢(总共长达15分钟,其中大部分由7z使用)。此外,最初使用mstsc很难访问完成启动过程最慢的节点(动画滞后,登录需要很长时间),但这可能无关。
可能是什么问题?
我们有检查缓存的想法,但最好知道在以下情况下可能存在的任何其他潜在瓶颈。
更新:我试着在D:\驱动器上提取,而不是在C:\驱动器上提取。当扩展到200时,解压缩大约需要一分钟!所以问题似乎是C:\可能在blob上。但是,我在40个文件中有3GB的数据,所以每个blob 60MB/s应该足以处理它。或者,我们可以为所有blob设置上限吗?
每个VM大小都有自己的带宽限制。
| VM Size | Bandwidth |
| ------------- |:-------------:|
| Extra Small | 5 (Mbps) |
| Small | 100 (Mbps) |
| Medium | 200 (Mbps) |
| Large | 400 (Mbps) |
| Extra Large | 800 (Mbps) |
我怀疑你总是有一个安装的VHD副本,并且有大约150个实例命中它。增加承载VHD的VM的VM大小是一个很好的测试,但却是一个昂贵的解决方案。长期将文件放在blob存储中。这意味着修改脚本以访问RESTful端点。
在2-3个不同的虚拟机上创建2-3个驱动器并编写一个确保它们具有相同文件的脚本可能是最简单的。您的脚本可以随机命中2-3个安装的VHD中的一个,以分散负载。
以下是每个虚拟机大小的最新限制。遗憾的是,此表不包括网络带宽:http://msdn.microsoft.com/en-us/library/windowsazure/dn197896.aspx
-富
p.s.我从2013年1月微软提供的Azure培训工具包中的PowerPoint幻灯片中获得了带宽。
需要考虑的一件事是存储帐户的每个存储帐户的可伸缩性目标。启用地理复制后,您可以拥有10Gbps的出口和每秒2万个事务,这可能会让您遇到麻烦。图中有150个实例,当所有实例都在启动时,您可能会获得150 x 100Mbps或15Gbps的吞吐量。
不确定您问题中的"已安装VHD"部分。通过Azure的驱动器装载,在任何给定时间只有一个虚拟机实例可以装载到驱动器。对于这种类型的文件复制操作,通常您会直接从存储blob中获取文件,而不是存储在vhd中的文件(反过来存储在页面blob中)。
EDIT:我只想提到一个单独的blob被限制在60MB/秒(我在引用的博客文章中也提到过)。这也可能与您的节流有关。