2017-02-16 18 views
1

我有一個正在被數百萬人公開訪問的SQLAlchemy/Flask應用程序。如何壓縮/拆分SQLAlchemy遷移文件以減少服務停機時間?

每兩週我發佈一個新版本的應用程序,並使用python manage.py db upgrade運行數據庫遷移。這將運行自上次遷移文件運行後創建的所有新遷移文件。

這種方法的問題在於,由於我的數據庫表非常大,因此簡單的遷移操作(如添加列)每次可能需要15-20分鐘。因此,停止應用程序,運行遷移,更新應用程序代碼,然後重新啓動應用程序可能會導致漫長的停機時間。我正在儘量減少這種停機時間。

我最小化停機時間的策略是在部署之前運行儘可能多的遷移文件(或遷移文件的小數部分),而不停止服務。顯然有一些操作可以這樣完成。

例如op.create_table()op.add_column()可以在更新代碼之前安全地運行而不會干擾應用程序的運行。 op.delete_column不能。

有沒有分離出可以在不影響應用程序的操作VS那些不影響應用程序的操作運行遷移命令的任何自動化的方式?目前我必須親自手動完成這些移植並對其進行腦部手術。這是痛苦的。但我不能成爲唯一一個經歷過這個問題的人。那麼其他人使用的解決方案是什麼?

回答

0

使用兩個應用程序服務器和兩個數據庫。首先是穩定的當前版本,其次是新部署版本。當新部署版本更新(應用方案遷移和數據遷移)時,將網站流量路由到這個新部署的版本。 (並重用舊的數據庫和應用程序實例/或者只是殺死它並重新創建一個)。

+0

這並不工作,因爲當我們切換到第二DB發生在複製和重新路由之間的第一DB的更改將丟失。 –

相關問題