1

我使用fabric将我的代码的新版本上传到服务器,然后它运行几个任务以使其服务于新版本而不是旧版本。

在这些任务中还有一个同步数据库,但这意味着有一个窗口,其中我有带有旧数据库表的新代码版本(或带有新同步数据库的旧代码版本)。

问题: 我是否需要手动复制数据库,与副本同步,然后一次性替换旧代码版本和原始数据库?

由于这似乎是一个非常普遍的问题,我认为应该已经有工具或特定的方法来解决这个问题。有人知道吗?

(我的另一个担心是部署期间的某些事情可能会出错,我想回退到以前的状态,而不会出现未与代码同步的损坏数据库)。

4

1 回答 1

1

当您的部署包含数据库模式迁移时,很难实现零停机时间。例如,etsy.com 的人们使用索引的、分片的主-主对、自定义的分片感知 ORM,他们不让数据库生成主键/时间戳等,也不在数据库中强制执行外键。 http://codeascraft.etsy.com/2012/04/20/two-sides-for-salvation/

如果您可以容忍一些计划的部署停机时间,甚至 15 分钟,这会容易得多。(假设您已经使用dbdeploy等工具编写了数据库架构升级脚本)。

于 2012-06-18T03:47:31.897 回答