在没有服务中断的情况下部署Django应用程序/无需停机

j7n*_*n7k 7 deployment django postgresql continuous-integration

我们还没有持续的集成设置().但是想要非常频繁地部署.每天一次左右.

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

我们如何最大限度地减少应用程序的停机时间?最好是零停机时间.我们考虑使用两个相同的应用程序和两个数据库服务器进行设置,并逐个部署一个app/db服务器对.

问题是保持数据一致.当一个app/db服务器对正在使用旧代码更新服务器对时,可以为用户提供服务.但是如果用户写入数据库,我们会在切换到更新的对时丢失数据.特别是当我们推送架构迁移时.

我们怎么办呢?这一定是一个非常普遍的问题,但我找不到好的答案.你怎么处理这个问题?

hym*_*oth 2

如果您没有架构迁移,我将给您一个实际场景:

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

如果您进行架构迁移,事情就会变得复杂。您的选择包括:

  • 您可以考虑使用 NoSQL 解决方案,例如 mongoDB(在这种情况下您可以保留单个数据库实例)。
  • 了解如何在上传时手动记录所有写入请求,以便稍后将它们推送到新数据库。

  • 我投了赞成票,但仅仅因为您进行了架构迁移并不能立即成为迁移到 MongoDB 的理由。只需编写您的架构迁移,以便您可以执行以下操作:升级架构,部署新应用程序,再次升级架构以添加与旧版本应用程序不兼容的任何约束。现在您最关心的是锁定:您不希望应用程序在迁移运行时无响应。进行一些测试通常会判断这是否是一个问题(长时间运行的迁移意味着可能会出现问题)。如果是这样,您需要复制... (2认同)