将单个 Windows Azure 云服务应用程序部署到多个数据中心的推荐方法是什么?
我是否应该在所有数据中心暂停现有应用程序,然后在部署完成后重新启用它们?或者有更好的方法来做到这一点?
理想情况下,我希望能够在 Windows Azure 云项目的配置文件中设置数据中心列表,以便在单个发布操作期间,应用程序将同时上传到多个数据中心(例如美国中北部、西欧和东亚数据中心)。
您所描述的将需要一些自定义部署逻辑。我建议您熟悉 PowerShell 和Windows Azure 管理 Cmdlet。Github上提供了一堆关于如何使用 PowerShell 打包部署的示例。
我会使用相同的 PowerShell 脚本将您的 Azure 包和服务配置文件上传到您在每个数据中心(即您的多个数据中心)中拥有的每个主机服务的暂存槽,每个托管服务具有不同的参数。您需要有一些自定义等待逻辑来轮询暂存槽部署的状态并等待 READY 状态。一旦完成,您就知道您的 VM 已准备就绪,如果您的应用程序加载速度很快,您也可以使用 PowerShell 执行 VIP 交换。
完成此操作所需的 PowerShell 命令如下:
请注意,即使您构建了它,也有可能事情最多会不同步几秒钟,最坏的情况是几分钟,因此您的新部署将始终需要与您的底层数据存储系统/架构倒退。
我建议为此使用Windows Azure 服务管理 REST API。对于多个部署,PowerShell 往往是重复且缓慢的(即,每个部署都将包上传到存储,即使它是同一个包)。在Windows Azure ServiceManagement Sample中有一个关于使用 REST API 的出色且完整的示例。我们针对类似情况扩展了此示例:我们有 45 多个微型站点使用相同的代码库,并使用 REST API 异步部署到每个服务实例。我们将包上传到 Azure Blob,然后使用 Blob URL 触发每个服务的异步更新。使用 REST API,您可以从生成服务器或 Azure 辅助角色运行更新。