正确使用Windows Azure 中的VM Role

在2010 PDC大会上,我们介绍了Windows Azure中一个新增的Computational Role- VM Role。这一特性极大的提高了我们对于应用的掌控性,但是可能会和我们Windows Hyper-V中的全基础设施方案有所混淆。它们都有独有的架构模式。

虚拟化

虚拟化是一个接管物理电脑的所有硬件并以软件呈现硬件功能的过程。这意味着单台电脑可以"托管"或者运行多个"虚拟"电脑。这些虚拟电脑可以位于任何地方-包括运行在供应商处。因为在别处管理和维护这些硬件,所以一些公司将其称为云计算。

基础设施即服务

对上文更具体的定义应该称为基础设施即服务 (Iaas) ,因为它移除了在自己公司中管理维护硬件的需求。操作系统,驱动,或者运行应用所需的所有软件都仍在你的掌控中,你只需购买授权,升级,以及拓展。微软在这方面的方案称为Hyper-V,它运行在Windows操作系统之上。结合硬件托管供应商以及 System Center 软件来创建和部署虚拟机(可以称其为一个提供服务的过程),你对于这些机器仍然拥有完全的控制权,如果愿意,甚至包括运行多操作系统。在自己公司内托管机器,并提供服务,我们称其为私有云。而在别处托管这些机器,则称之为公有云。

有状态和无状态编程

该模式并不是创建新的可拓展的计算方式。它只是简单的移除了硬件的需求。理由便是当你将云计算限定于虚拟机时,你便限制了单个系统所能提供的计算资源。这是因为在此环境下开发的许多软件都会维护 "状态" - 我会对此进一步的解释。

"有状态编程" 意味着计算环境的所有部分在计算周期内始终相互保持连接。 系统会期望内存,CPU,存储和网络在整个过程中都保持始终一致。您可以想象我们日常打电话-你希望对方接起电话、听你说话,之后他开始回话,这些都发生在同个时间单元内。

在 "无状态" 计算模式内,系统可以允许代码的不同部分的相互独立的运行。你可以将其想象为电子邮件,你写了了一封邮件 (当然,你在写邮件时是有状态的。) ,之后你可能走开去喝了一杯咖啡。几分钟之后,你回来点击了"发送"按钮, (网络是有状态的) ,之后你便去开会了。服务器收到邮件,将其存储在邮件数据库内。(邮件服务器有状态) ,之后继续接受其他的邮件。 最后,另一用户登陆邮件客户端,读取邮件 (用户是有状态的) ,回复邮件等等。这些时间可能相隔几毫秒到几天,但是系统仍然可以继续运行。整个过程都没有维护状态,每一个组件也是。这便是Windows Azure代码背后的概念。

无状态编程模式使得惊人的拓展能力称为可能。因为消息(参考上述的邮件例子),可以被多个程序独立开来,且并行运行。 (邮件发送给数百用户),唯一需要考虑的便是工作重新组织的顺序。基于相同的理由,如果系统像Windows Azure那样运行这些程序,你便会拥有内建的冗余和恢复功能。这些都是放置于设计之内的。

基础设施设计和平台设计的区别

当你只是简单以私有或者公有的方式虚拟化物理服务器,你并不能让代码拥有拓展或者恢复的能力。必须通过增加更多的代码以及更多的虚拟机来处理,这会在运行或维护有状态系统内引入轻微的延迟。增加更多机器会引入更多的延迟,所以并不能无限的拓展。这便是IaaS最主要的限制。同样部署这些虚拟机并不容易,更为重要的是移除它们更加繁琐。IaaS的敏捷性就会受到限制

Windows Azure 是一个平台 - 这意味着你可以通过代码来进行控制操作。代码会以多个拷贝运行在多个节点上,因为神器的无状态编程模式,它们都会运行。你不必关心底下到底运行的是什么。它可能是Windows (实际上是某种Windows Server),Linux,或者其他任何系统- 但是这些都不是你需要管理,监控维护或者购买授权的。你不会希望部署一个操作系统,而是部署一个应用。你希望代码能够正常运行,而不关心是如何运行的。

PaaS的另一个优势你可以请求成千上万的计算节点。你也可以随时的停止使用这些节点,且你应用中无需编写这些控制代码。

Windows Azure Roles 以及它们的用途

如果希望应用有一个用户界面,那么想项目中添加一个 Web Role ,如果代码无需包括用户界面则添加一个Worker Role。它们仅仅是具有特定行为的容器。

我们回来讨论VM Role,用户可能因为其名称而误以为它是一个虚拟机,例如运行着Linux系统,可以部署至Windows Azure。很遗憾,事实并非如此。如果你确实需要此类部署,考虑Hyper-V 和 System Center来创建私有或公有 IaaS 。VM Role 允许用户对其代码所运行的系统拥有相当高的控制权。

如果你听说过Windows Azure 以及 平台编程,你一定坚信它是一个绝佳的编程范式。但是在公司中,你已经是以其他方式编写了大量代码。如果为了利用Windows Azure的优势,而重写代码会需要很长的时间周期。又或者你的代码依赖于一个特定版本的Apache Web 服务器。这些情况下,你应该考虑将这些软件改写为 "无状态"的,那么你只需在代码运行之处拥有更多的控制便可以。那么这些情况下, VM Role 便能发挥其作用了。

回顾

仅仅虚拟服务器会有拓展,可用性和恢复能力的限制。微软在这方面的方案是Hyper-V 和 System Center,并不是 VM Role。 VM Role 还只是用于运行无状态代码,除了它允许您对环境拥有更多的控制权之外,它们和Web Role和 Worker Role是一模一样的。

 

本文翻译自:https://sqlblog.com/blogs/buck_woody/archive/2010/12/28/the-proper-use-of-the-vm-role-in-windows-azure.aspx