CloudFoundry应用实例-EF Core数据库迁移



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

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

  2. 此外,如何阻止这两个实例更新数据库?我读过关于CF_INSTANCE_INDEX环境变量的文章。只在CF_INSTANCE_INDEX为0时启动数据库迁移可以吗?或者CloudFoundry提供了下一种机制:启动第一个实例,当这个实例启动并运行时,第二个实例就会启动?

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

是的,您的应用程序将停止。新代码将暂存(即运行构建包(并生成一个液滴。然后,系统将使用新液滴调出所有请求的实例。

此外,如何防止这两个实例更新数据库?我已经阅读了有关CF_INSTANCE_INDEX环境变量的内容。只在CF_INSTANCE_INDEX为0时启动数据库迁移可以吗?

你当然可以这样做。实例编号保证是唯一的,并且第零个实例将始终存在,因此,如果限制为第零个,则保证它只运行一次。

另一种选择是将迁移作为任务运行(即cf run-task(。它在自己的容器中运行,因此无论您有多少实例,它都只运行一次。这篇SO文章提供了一些关于将迁移作为任务运行的提示。

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

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

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

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

最新更新