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

标签 django postgresql deployment continuous-integration

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

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

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

问题在于保持数据的一致性。当一对应用程序/数据库服务器正在更新具有旧代码的服务器对时,可以为用户提供服务。但是如果用户写入数据库,我们将在切换到更新对时丢失数据。尤其是当我们插入架构迁移时。

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

最佳答案

如果你没有模式迁移,我给你一个实际的场景:

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

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

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

关于django - 在没有服务中断/没有停机的情况下部署 Django 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14440920/

相关文章:

python - Django - 抽象基类模型破坏 syncdb

css - 在 django-page-CMS 中创建的 View 禁用所有 CSS?包含代码,请修复

sql - 在 SQL 中跨时间线汇总值

sql-server - 数据库引擎在 SQL 级别的兼容性如何?

java - 用于部署的 Maven、Java 和自定义文件

git - Git中如何实现一个部署分支

python - Django 分页对象与 Postgresql QuerySets 有问题

python - 如何使 django-storage 和 django-pipeline 协同工作

postgresql - Removable 在 Postgres 的真空输出中意味着什么?

node.js - Google计算引擎书架教程: npm ERR!网络读取ECONNRESET