问题:在使用 Django 时,实现 0(或尽可能接近 0)停机时间的好策略是什么?
我读到的大多数答案都是“使用南方”或“使用织物”,但恕我直言,这些答案非常模糊。我实际上两者都用,但我仍然想知道如何尽可能地实现零停机时间。
一些细节:
我在 EC2 上托管了一个大小适中的 Django 应用程序。我使用South 进行模式和数据迁移,并使用带有boto的结构来自动执行通过一组Jenkins(持续集成服务器)任务触发的重复部署/备份任务。我使用的数据库是标准的 PostgreSQL 9.0 实例。
我有一个...
登台服务器由我们的团队不断编辑,包含所有新内容,并加载最新最好的代码和...
实时服务器,随着用户帐户和用户数据而不断变化——所有这些都记录在 PostgreSQL 中。
当前部署策略:
部署新代码和内容时,会创建两台服务器(实时和暂存)的两个 EC2 快照。直播切换到“更新新内容”页面...
停机时间开始。
实时克隆服务器迁移到与登台服务器相同的架构版本(使用南)。只创建了我希望从实时中保留的表和序列的转储(特别是用户帐户及其数据)。完成此操作后,转储将上传到登台克隆服务器。从实时保留的表被截断并插入数据。随着我直播服务器中数据的增长,这个时间显然在不断增加。
加载完成后,活动服务器的弹性 IP 将更改为临时克隆(因此它已被提升为新活动)。实时实例和实时克隆实例被终止。
停机时间结束。
是的,这行得通,但是随着数据的增长,我的“虚拟”零停机时间越来越远。当然,我想到的事情是以某种方式利用复制并开始研究 PostgreSQL 复制和“最终一致”的方法。我知道我可以用负载平衡器做一些魔法,但同时创建的帐户问题使它变得棘手。
你会推荐我看什么?
更新:
我有一个典型的 Django 单节点应用程序。我希望有一个更深入地解决 django 特定问题的解决方案。例如,使用 Django 对具有自定义路由器和复制的多个数据库的支持的想法已经闪过我的脑海。有一些与我希望回答会涉及的问题相关的问题。