以自定义的方式对Windows Azure资源进行控制,例如基于预设条件或者基于性能监控结果的自动伸缩管理,将更有效地对Azure资源/服务进行管理。Windows Azure SDK提供了全套API,特别是服务管理的REST API方式,使得这一想法成为可能。
对于Windows Azure Service Management REST API,可以参考以下网址:
http://msdn.microsoft.com/en-us/library/ee460799.aspx
Windows Azure Service Management REST API的功能支持,与通过其他方式,例如通过Windows Azure Management Portal的交互方式和Windows Azure PowerShell 的命令行方式,是一致的。但不同的是,通过Windows Azure Service Management REST API,可以在自己的应用里、通过程序的方式对Windows Azure服务进行控制。
对于Windows Azure Management Portal的交互方式和Windows Azure PowerShell 的命令行方式,可以参考:
http://blogs.technet.com/b/nevin_dongs_blog/archive/2013/02/24/windows-azure-management-portal-windows-azure-powershell.aspx
针对计算实例的增加或减少的情景,一些关键的API包括:
. Get Deployment,见:http://msdn.microsoft.com/en-us/library/ee460804.aspx
. Change Deployment Configuration,见:http://msdn.microsoft.com/en-us/library/ee460809.aspx
通过REST API可以获得及设置相关的实例配置,例如RoleInstanceList,InstanceSize等。
此外,针对IaaS,例如Windows Azure Virtual Machine,也可以通过增加/减少VM,或者改变VM的配置,例如将尺寸由“小(Small)”改成“大(Large)”的方式,实现Scale-Out或者Scale-Up,一些关键的API包括:
. Add Role,见:http://msdn.microsoft.com/en-us/library/jj157186.aspx
. Delete Role,见:http://msdn.microsoft.com/en-us/library/jj157184.aspx
. Update Role,见:http://msdn.microsoft.com/en-us/library/jj157187.aspx
之前,Joseph Fultz发过一篇很不错的文章:Performance-Based Scaling in Windows Azure,文章给出了一个基于运行性能来进行伸缩的例子,非常有借鉴价值。具体网址如下:
http://msdn.microsoft.com/en-us/magazine/gg232759.aspx
可以将性能计数器收集的功能放在一个Worker Role中,并将收集的性能数据存储在Windows Azure Storage中,然后根据性能是否达到条件来确定是否增加或减少实例数量,如下图所示:
当通过代码来实现自动伸缩的时候,有些因素需要考虑到,例如:
· 伸缩性操作提交后需要时间来完成,例如增加1个实例的操作,在提交后可能需要15到20分钟才能完成。
· 伸缩性操作提交的时机,因为目前Windows Azure是按照完整小时来计费的,当花费不足1小时也是按照1小时来计费的,考虑到上面提到的时间差,所以提交伸缩性请求的时候需要考虑到这一点,可以更好地节省成本。 最新的报价和付费细节可访问:http://www.windowsazure.com/en-us/pricing/details/
· 并不是所有的应用/服务都适合进行自动伸缩,例如最好是采用无状态设计的。