注意:我在Azure方面相对缺乏经验。很抱歉,如果我错过了一些明显的观点或选择。
我需要评估如何设置和部署(频繁更新)三个紧密耦合的.NET Web应用程序。
这是系统部件的简化图。有三个Web应用程序:
Web应用程序是独立的应用程序,但它们共享同一个数据库,并在内部使用相同的域逻辑和数据库库。
因此,当有软件更新有时会自动升级数据库的架构时,它必须同时部署到所有三个 Web应用程序(几秒钟内)。
在Azure平台(App Services)上实现此目的的最佳方法是什么?
目前,我正在运行数十个这样的系统(每个系统包含三个应用程序)。有没有办法将运行时文件部署到“Azure-local”位置,然后先将它们分发到第1组,然后再分组到第2组等?
答案 0 :(得分:1)
你看过部署插槽了吗?您可以使用Powershell或Azure CLI自动交换3个App服务,并同时交换所有3个服务。
您还可以自动部署从repo到暂存插槽的所有系统,并使用Powershell或Azure CLI自动进行交换,一次一个系统。
答案 1 :(得分:1)
CSharpRocks的答案非常适合Web Apps。对于数据库部分,我有两个建议:
<强> 1。数据库项目/ DACPAC
通过发布数据库项目进行部署。在幕后,这会将DACPAC部署到目标数据库。这可以通过从Visual Studio发布,通过VSTS部署任务发布来完成,我相信它也可以通过Powershell完成。我个人只阅读了有关通过Powershell部署DACPAC的信息。
根据您描述的方案,听起来您似乎希望将代码更改部署到所有Web应用的暂存插槽。然后,您可以部署数据库项目,然后使用Powershell进行插槽交换。
数据库项目的优势在于,您可以保证目标数据库与数据库项目的状态相匹配。不利的一面是,如果情况横空出手,那么这不是一个超级简单的降级路径。
<强> 2。 EF Code First Migrations
Code First Migration将允许您为数据库指定升级和降级脚本。我只通过包管理器控制台执行了这些操作,但它们也可以从独立的可执行文件执行,允许您编写执行脚本。
Code First Migrations的好处是您可以执行脚本化降级。再加上Web App插槽交换回到之前的应用程序版本,可以让您更加确信如果事情发生在您身上,您可以回滚。
要指出的另一个特性是EF Code First执行您编写的更改,仅此而已。因此,可以进行以下事件交错:
EF Code First Migrations根本不关心第2步,并会留下您的手动更改。部署数据库项目不是这种情况。数据库项目将确保目标数据库与数据库项目定义匹配。
这里有一些实际的考虑因素。如果您正在使用SQL Azure数据库并且正在使用自动性能调整,那么Azure将根据需要推出/删除索引。如果您使用数据库项目并且不包括那些自动索引更新,则部署数据库项目将回滚这些索引更改!