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

时间:2013-01-21 14:37:32

标签: django postgresql deployment continuous-integration

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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