【问题标题】:Azure Roles and InstancesAzure 角色和实例
【发布时间】:2012-03-03 10:18:15
【问题描述】:
我可以在同一个实例上运行一个 Web 角色和一个 Worker 角色,还是我必须获得 2 个单独的托管实例并支付两倍的费用?
我有一个想在 Azure 上托管的 WCF Web API。我还有一个 Worker 角色,用于侦听 Azure 存储中的队列。每次将消息添加到队列时,它都会获取该消息并根据消息运行一个小任务。
我想知道是否可以在同一个实例上运行这两个。
【问题讨论】:
标签:
azure
azure-worker-roles
azure-web-roles
【解决方案1】:
这完全取决于您的要求。您可以像here 所述那样简单地拥有一个公开外部端点的工作人员角色并公开 WCF 服务。您还可以拥有作为 WCF 服务的 Web 角色,并启动一个检查队列的后台线程。 Worker 对消息做了什么?执行什么过程?这也会对解决方案产生影响。
您需要考虑的一个关键问题是您的 WCF 服务和队列检索任务之间的扩展要求是否相同。如果他们是一个单一的角色应该足够好开始。
【解决方案2】:
“工作者角色”和“Web 角色”只是“运行 IIS 的 Windows Server 2008”和“未运行 IIS 的 Windows Server 2008”的简单模板。关键是“角色”是 Windows Server 虚拟机的定义。对于每个“角色”,您都有一个或多个实例。
在 Windows Azure 中,这两种角色类型都可以在启动脚本或 OnStart() 处理程序中安装软件、修改注册表设置等,并且都允许您在 Run() 方法中运行代码。
在您的情况下,您可以在 Web 角色中运行您的 WCF Web 服务,然后在您的 Run() 方法中(在同一角色中)启动一个进程来侦听 WCF Web 服务发布的队列消息。无需担任新角色。
现在:一旦进入大容量情况,您可能希望将代码拆分为不同的角色,以便您可以独立扩展它们(包括 VM 大小和 VM 数量)。
我发布了关于此here 的另一个答案。