我处理的应用程序包含一个 Web 角色:它是一个简单的 Web 应用程序。我需要在 Windows Azure 中托管应用程序,因此我创建了一个 Web 角色。我其实很想知道这些角色是干什么用的。它们在编码或存储方面的意义是什么?

最佳答案

EDIT 3/3/2013 - 更新以引用 UDP 端点、虚拟机和更多语言

EDIT 6/6/2013 - 更新以反射(reflect) VM 角色的终止,并将 Web/ worker 角色基线操作系统镜像更新为 Windows Server 2012

@Vladimir 提供的良好链接。再澄清一点:所有角色(web、worker)本质上都是 Windows Server。 Web 和 Worker 角色几乎相同:

  • Web 角色是启用了 IIS 的 Windows Server VM
  • 辅助角色是禁用 IIS 的 Windows Server VM(您可以手动启用它)
  • VM 角色是您通过 Hyper-V 在本地构建并上传到 Azure 的 Windows Server 2008 镜像 (现已停产,自 2013 年 5 月 31 日起不再可用 0x2518192113402121439
  • 虚拟机是在 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 为 here ,github 上的源代码为 here
  • 使用 VM 角色,您可以安装和运行具有非常复杂/耗时的安装、需要手动干预的安装以及无法可靠自动化的安装的软件。在这种情况下,您必须处理操作系统维护。除了 VM 角色之外,现在还有虚拟机,提供基于云的 VM 构建以及 Windows 和 Linux 支持。我建议使用虚拟机而不是 VM 角色。

  • 通过 Web 和 Worker 角色,为您处理操作系统和相关补丁;您无需管理虚拟机即可构建应用程序的组件。

    使用 VM 角色,您可以构建完整的 Windows Server 镜像,向其添加 Azure Hook ,并将整个 VM 推送到云中(然后随着时间的推移维护 VM 镜像)。

    使用虚拟机,您只需从库中选择一个操作系统镜像,该镜像会为您创建并作为 vhd 存储在 blob 存储中。然后,您可以使用 RDP/ssh 并按照自己的喜好进行设置。

    戴着建筑师的帽子,这就是它变得有趣和有趣的地方。您可以在 Web 角色或辅助角色中运行 Web 服务(并且能够在任一角色中打开端口);您可以以 Worker 角色托管 Tomcat 或其他 Web 服务器。您可以选择将网站和服务组合在一个角色中,或者将它们拆分为多个角色以满足不同的可扩展性需求。

    作为一个好的开始,请查看 Platform Training Kit 并开始逐步完成练习。

    关于azure - 在 Windows Azure : What are web role, 辅助角色和 VM 角色中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7118942/

    10-16 12:50