7

我们还没有持续集成设置(但)。但是要部署的很频繁。一天一次左右。

我们有一个非常标准的 Django 应用程序,带有一个单独的 Postgres 服务器。我们使用普通租用的虚拟机(没有 Amazon 或 Rackspace)。

我们如何才能最大限度地减少应用程序的停机时间?最好是零停机时间。我们考虑了一个具有两个相同的应用程序和两个数据库服务器的设置,并一个接一个地部署一个应用程序/数据库服务器对。

问题是保持数据一致。当一个应用程序/数据库服务器对使用旧代码更新服务器对时,可以为用户提供服务。但是如果用户写入数据库,我们会在切换到更新的对时丢失数据。特别是当我们推动模式迁移时。

我们该如何处理呢?这一定是一个非常普遍的问题,但我找不到好的答案。你如何处理这个问题?

4

1 回答 1

2

如果你没有架构迁移,我会给你一个实际的场景:

保留两个版本的 django 进程( A 和 B ),您可以使用主管来控制它们。在你的 django 进程前面保留一个 nginx 进程,它将所有请求转发给 A。所以,你将版本 B 上传到服务器,用主管启动 django 进程 B,然后将你的 nginx 的 conf 文件更改为指向 B,然后重新加载你的nginx进程..

如果您有模式迁移,事情就会变得复杂。您的选择包括:

  • 您可以考虑使用 NoSQL 解决方案,例如 mongoDB(在这种情况下,您可以保留单个数据库实例)。
  • 弄清楚如何在上传时手动记录所有写入请求,以便稍后将它们推送到新数据库。
于 2013-01-21T15:08:48.060 回答