我们还没有持续的集成设置()。但是想要非常频繁地部署。每天一次。
我们有一个非常标准的Django应用程序,带有一个单独的Postgres服务器。我们使用普通租用的虚拟机(NO Amazon或Rackspace)。
我们如何最大限度地减少应用程序的停机时间?最好是零停机时间。我们考虑使用两个相同的应用程序和两个数据库服务器进行设置,并逐个部署一个app / db服务器对。
问题是保持数据一致。当一个app / db服务器对正在使用旧代码更新服务器对时,可以为用户提供服务。但是如果用户写入数据库,我们会在切换到更新的对时丢失数据。特别是当我们推动架构迁移时。
我们如何处理这个问题?这一定是一个非常普遍的问题,但我找不到好的答案。你是如何处理这个问题的?
答案 0 :(得分:1)
如果您没有架构迁移,我会给您一个实际的场景:
保留两个版本的django进程(A和B),您可以控制它们,例如,主管。在你的django进程前面保留一个nginx进程,将所有请求转发给A.所以,你将版本B上传到服务器,用supervisor启动django进程B,然后将你的nginx的conf文件更改为指向B,然后重新加载你的nginx进程..
如果您有架构迁移,事情会变得复杂。您的选择包括: