Azure:不通过配置部署角色

Azure: Do not deploy a role by configuration

我们为 MS Azure 编写了一个高度可扩展的云服务,具有两个角色:"WebsiteRole" 和 "WebsiteWorkerRole"。为了获得更好的性能,我们在多个区域(2 个美国、2 个欧盟、1 个日本)部署了这个云服务。我们为每个区域(EuWestProductive.azurePubxml、ServiceConfiguration.CloudEuWest.cscfg、Web.ReleaseEuWest.config)提供了不同的配置文件。

现在的问题是:在每个区域中,我们有 运行、"WebsiteRole" 和 "WebsiteWorkerRole"。但是"WebsiteWorkerRole"只有非常小的tasks,一个region多一个小的instance就绰绰有余了。

我们尝试将角色实例计数设置为零 (ServiceConfiguration.CloudEuWest.cscfg)。但这是不允许的: Azure Feedback: Allow a Role instance count of 0

部署云服务时是否有其他方法删除角色?

不,正如您所发现的,云服务不允许缩放到零。您必须有效地删除部署。要对您已有的内容进行最少的更改,您可以将这两个角色分成两个不同的部署。然后在其他地方有一个 Azure 自动化脚本或一组脚本 运行,用于在需要时处理辅助角色的部署,在不需要时处理角色的退役。

根据工作人员正在执行的工作负载类型,您还可以考虑采取另一种途径,即使用 Azure 自动化之类的工具来执行工作。如果是每天只发生几次的少量处理,则尤其如此。自动化脚本按分钟收费,因此只需确保它比实际当前实例少 运行。

这实际上归结为该工作人员在做什么,它真正需要做多少处理,它需要多少资源以及它需要 运行宁的频率。有很多选择,例如 Azure 自动化、网络角色上的另一个线程、单独的云服务部署等。每个都有自己的优缺点。一种选择甚至可能是查看他们刚刚宣布的新 Azure Functions(在预览中并由执行收费)。

简短的回答是将工作人员与 WebSiteRole 部署分开,然后为该工作人员角色确定最佳托管机制,确保该选项包含仅在需要时 运行 的能力。

感谢@MikeWo,您分离部署的想法很棒! 我已经用一个小示例项目验证了这一点,它工作得很好。现在还可以更改每个区域的 VM 大小和其他配置。

(评论不允许图片)