Gaurav 的回答很好,但我想添加更多细节,因为我认为 Web 和工作角色可能会有些混乱。每个角色都是一组虚拟机的定义,这些虚拟机执行相同的操作,由您构建(您不处理操作系统 - 您只需启动应用程序,Azure 负责虚拟机本身)。
当云服务运行时,每种角色类型至少有一个实例。因此,在您的情况下,同时运行 Web 角色和辅助角色,您将至少运行两个 VM。
如果您选择将您的 Web 角色扩展到 3 个实例,然后决定将其拨回 2 个实例,则您无法选择关闭哪一个;这由 Azure 的结构负责。请记住,角色的每个实例都运行相同的代码,并且 Azure 将流量负载平衡到您的角色实例(通过您定义的外部终结点)。您唯一需要担心的是关机。你有大约。5 分钟清理所有正在运行的进程(您可以在关闭期间轻松地将特定实例从负载均衡器中取出,因为您收到了一个Stopping()
事件)。
您不能关闭云服务中的整个角色(例如角色的所有实例)(因此......您不能在保持 Web 角色实例运行的同时关闭您的辅助角色实例)。如果这是一项要求,那么您始终可以考虑在一个云服务中运行您的 Web 角色,并在另一个云服务中运行辅助角色。如果他们使用队列来传递数据,那么一切仍然会像以前一样工作。如果 Web 角色实例需要直接访问辅助角色实例,您可以将两个云服务放入虚拟网络。
还要考虑一件事:您不必拥有单独的角色。如果成本是一个因素,您可以在 Web 角色中运行所有代码。在您的 Web 角色中启动额外的进程/线程几乎不需要工作OnStart()
- 请记住角色实例是完整的 Windows Server 虚拟机;随心所欲地运行。使用单一角色定义,扩展有点粗糙:所有东西都一起扩展。使用单独的角色,您可以微调您的扩展(在构建更大的系统时更为重要)。