【问题标题】:CloudFoundry App instances - EF Core database migrationCloudFoundry 应用程序实例 - EF Core 数据库迁移
【发布时间】:2021-07-08 20:29:37
【问题描述】:

我编写了一个 .NET Core Rest API,它可以迁移/更新Startup.cs 中的数据库(使用 Entity Framework Core)。目前,只有一个实例在生产环境中运行。似乎建议在生产中运行 2 个实例

  1. 执行cf push 命令时会发生什么?两个实例都自动停止还是我需要执行cf stop

  2. 此外,如何防止两个实例都更新数据库? 我已阅读有关 CF_INSTANCE_INDEX 环境变量的信息。只有CF_INSTANCE_INDEX为0时才开始数据库迁移可以吗?或者 CloudFoundry 是否提供了下一个机制:启动第一个实例,当这个实例启动并运行时,将启动第二个实例?

【问题讨论】:

    标签: .net-core vmware cloud-foundry


    【解决方案1】:

    执行 cf push 命令时会发生什么?两个实例都自动停止还是我需要执行 cf stop?

    是的,您的应用将停止。新代码将暂存(即 buildpack 运行)并生成一个 droplet。然后系统将使用新的 droplet 调出所有请求的实例。

    此外,如何防止两个实例都更新数据库?我已经阅读了 CF_INSTANCE_INDEX 环境变量。 CF_INSTANCE_INDEX 为 0 时才开始数据库迁移可以吗?

    您当然可以这样做。实例号保证是唯一的,第零个实例永远存在,所以如果你限制到第零个实例,那么它保证只运行一次。

    另一种选择是将迁移作为任务运行(即cf run-task)。它在自己的容器中运行,因此无论您拥有多少实例,它都只会运行一次。这个SO post has some tips about running a migration as a task

    或者 CloudFoundry 是否提供了下一个机制:启动第一个实例,当这个实例启动并运行时,将启动第二个实例?

    确实如此,这是cf push--strategy=rolling 标志。

    https://docs.cloudfoundry.org/devguide/deploy-apps/rolling-deploy.html

    我不确定此功能是否能确保您的迁移只运行一次。根据文档(请参阅上面链接中的“工作原理”部分),您的新容器和旧容器可能会在短时间内重叠。如果是这种情况,运行迁移可能会破坏旧实例。这将是一段很短的时间,直到它们被新实例取代,但也许需要考虑一些事情。

    猜你喜欢
    • 2022-09-29
    • 2018-06-19
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2020-07-09
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多