在Windows Azure中:什么是Web角色、工作角色和虚拟机角色?

118

我所工作的应用程序包含一个Web角色:它是一个简单的Web应用程序。为了在Windows Azure中托管该应用程序,我创建了一个Web角色。实际上,我想知道这些角色的作用是什么。从编码或存储方面来说,它们的重要性是什么?

4个回答

100

编辑于2013年3月3日——更新了对UDP端点、虚拟机和更多编程语言的引用

编辑于2013年6月6日——反映出VM Role停止使用,并将Web/Worker角色基线操作系统映像更新为Windows Server 2012

来自@Vladimir的好链接,需要有些澄清:所有角色(Web角色、Worker角色)本质上都是Windows Server。Web角色和Worker角色几乎相同:

  • Web角色是启用IIS的Windows Server虚拟机
  • Worker角色是禁用IIS的Windows Server虚拟机(你可以手动启用它)
  • VM角色是通过Hyper-V在本地构建的Windows Server 2008映像,上传到Azure中 (已于2013年5月31日停止使用,不再提供)
  • 虚拟机是在Azure中创建的Windows或Linux映像,存储为vhd在你自己的存储中,并且比VM角色具有多个增强功能。例如:由于vhd位于你自己的存储帐户中,因此你可以轻松地从vhd创建映像模板、复制它到新的vhd,甚至将其上传到VM Depot(仅限Linux)。

回答你关于如何使用这些角色的问题:平台培训套件(下面提到)将为你提供许多好的想法和示例,但以下是一些直接的用例:

  • 你可以运行任何公开tcp、http、https或udp端点的代码(Web应用程序、SOAP/REST服务等)。但你需要考虑无状态的处理方式——如果有多个VM实例在运行,用户流量将在这些实例之间分配。平台培训套件将向你展示如何使用存储或缓存来解决这个问题。
  • 您可以运行基于队列或计时器的代码。也许您有像生成缩略图或基于用户输入的计算这样的按需任务。这些不需要外部可用的端点。您可以将请求推送到队列中,然后运行一个任务,该任务仅从此队列提取(并且您可以通过所有实例消耗队列消息来扩展此过程)。
  • 您可以运行.NET、Java、php、python、node、ruby等任何语言。只需要与项目代码一起分发适当的运行时代码。所有语言都可以调用Azure API进行REST调用,并且几种语言(包括上述语言)具有SDK,可以为您处理此操作。所有语言的SDK都在此处,源代码位于github的此处
  • 使用Web和Worker角色,操作系统及相关补丁已经为您管理;您可以构建应用程序组件,而不必管理虚拟机。

    对于VM角色,您需要构建一个完整的Windows Server镜像,添加Azure钩子,并将整个VM推入云中(然后随时间维护VM镜像),但现在除了VM Role之外,还有提供虚拟机构建的Virtual Machines,其中包括Windows和Linux支持。我建议使用Virtual Machines而非VM Role。

    对于Virtual Machines,您只需从库中选择一个操作系统映像即可创建和存储为vhd在Blob存储中。然后RDP/ssh并自定义设置。

    作为架构师,这是有趣和有意义的地方。您可以在Web角色或Worker角色中运行Web服务(并能够在其中打开端口);您可以在Worker角色中托管Tomcat或其他Web服务器。您可以选择将网站和服务组合到单个角色中,也可以将它们拆分为多个角色以满足不同的可伸缩性需求。

    想要开始学习,可以先看看平台培训套件,并开始逐步练习。


    你能在 Web 角色上实际公开 TCP 端点吗?根据 smarx 的说法,它们都必须是 HTTP:https://dev59.com/questions/E07Sa4cB1Zd3GeqP0hQW这为角色之间又带来了一个微妙的差别。 - Richard Astbury
    我已经回答了自己的问题,你可以打开TCP端口,但不能将其绑定到网站。 - Richard Astbury
    2
    Richard - 虽然以前是这样,但现在无论角色类型如何,终结点都可以是tcp、http或https。几个月前,我构建了一个示例应用程序,其中混合了tcp和http,同时演示了新的每个角色25个终结点更新-请参见此处的博客文章-http://www.davidmakogon.com/2011/05/windows-azure-tip-go-beyond-5-endpoints.html - David Makogon
    抱歉 - 我的意思是每个部署演示25个端点。看到你的其他评论,我可能回答了错误的问题。 :) - David Makogon
    @DavidMakogon - Web角色和Worker角色的替代品是什么?我需要部署一个需要GDI+的PhantomJS网站。Web Jobs并不完全支持GDI+。我希望能够使用Web角色。那么Web角色的替代品是什么呢?我喜欢Azure提供的由其维护和修补的VM概念。谢谢! - Martin
    从技术上讲,什么也没有改变:Web 角色和 Worker 角色仍然存在。不需要更改。 - David Makogon

    31
    • Web角色是托管在IIS中的Web应用程序。
    • Worker角色是可以执行一些工作的进程(例如:自动压缩上传的图像,每当数据库发生更改时进行处理,从队列获取新消息并处理等)
    • VM角色主机VMs

    10
    实际上,Web 角色和 Worker 角色是虚拟机(VMs)。 - David Makogon
    这是一个简单得多的答案,很抱歉,它们不是虚拟机...如果它是一个单独的虚拟机,想象一下具有多个后台运行的工作角色的多层解决方案的成本会是多少? https://blogs.msdn.microsoft.com/silverlining/2012/06/27/windows-azure-websites-web-roles-and-vms-when-to-use-which/ - Clarence
    更具体地说,Worker 角色是没有 IIS 的虚拟机。 - dejjub-AIS

    22

    我几天前遇到了这个SO问题/答案,但是我觉得提供的答案有点难以理解(我是Azure和Web的新手)。今晚我在Azure基础知识中发现了这个摘要,我认为这是一个很好的高级概述,阐述了工作角色和Web角色之间的核心区别:

    两者的主要区别在于Web角色的实例运行IIS,而Worker角色的实例则没有。然而,两者都是以相同的方式进行管理,通常应用程序会同时使用两者。例如,Web角色实例可能接受用户请求,然后将它们传递给Worker角色实例进行处理。为了扩展应用程序,您可以请求Windows Azure创建更多的任一角色实例或关闭现有的实例。与Windows Azure虚拟机类似,您只需支付每个Web或Worker角色实例运行的时间。

    如果您是Azure的新开发人员,我强烈建议在此处阅读完整文章:Intro to Windows Azure

    我希望这能像对我有帮助一样帮助到其他人。


    3

    Windows Azure中的Web角色是特殊目的的,为前端Web应用程序提供了一个专用的Internet Information Services (IIS) Web服务器。您可以快速轻松地将Web应用程序部署到Web角色,并根据需求扩展或缩小计算能力。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接