在Azure中设置和部署多部分Web应用程序

时间:2018-01-08 14:23:13

标签: azure web-applications deployment

注意:我在Azure方面相对缺乏经验。很抱歉,如果我错过了一些明显的观点或选择。

我需要评估如何设置和部署(频繁更新)三个紧密耦合的.NET Web应用程序。

这是系统部件的简化图。有三个Web应用程序:

  • 后端
  • 前端
  • API

Architecture

Web应用程序是独立的应用程序,但它们共享同一个数据库,并在内部使用相同的域逻辑和数据库库。

因此,当有软件更新有时会自动升级数据库的架构时,它必须同时部署到所有三个 Web应用程序(几秒钟内)。

在Azure平台(App Services)上实现此目的的最佳方法是什么?

奖金问题

目前,我正在运行数十个这样的系统(每个系统包含三个应用程序)。有没有办法将运行时文件部署到“Azure-local”位置,然后先将它们分发到第1组,然后再分组到第2组等?

Instance Groups

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执行您编写的更改,仅此而已。因此,可以进行以下事件交错:

  1. 部署代码首次迁移。
  2. 在数据库中手动更改架构
  3. 部署第二个代码首次迁移。
  4. EF Code First Migrations根本不关心第2步,并会留下您的手动更改。部署数据库项目不是这种情况。数据库项目将确保目标数据库与数据库项目定义匹配。

    这里有一些实际的考虑因素。如果您正在使用SQL Azure数据库并且正在使用自动性能调整,那么Azure将根据需要推出/删除索引。如果您使用数据库项目并且不包括那些自动索引更新,则部署数据库项目将回滚这些索引更改!