2012-01-14 43 views
1

我們有一個多租戶系統,每個租戶有一個單獨的數據庫(但具有相同的模式和應用程序代碼)。我們如何才能最好地向租戶推出更新?部署過程是自動化的,但我並不特別喜歡在每個租戶數據庫運行任何更新腳本的同時讓整個系統脫機? (特別是如果一個租戶由於其系統中的數據而出現一些意想不到的問題 - 顯然是我們旨在避免的)。多租戶網站,單獨的數據庫 - 如何推出模式/共享數據更新?

有什麼策略讓人們成功使用這個策略?如果我要在單獨的網站實例上運行每個租戶,並單獨升級 - 那麼會有更多的維護開銷,但是在升級時可能會遇到更多的靈活性問題?不知道從長遠來看哪個可能會更不痛苦?謝謝。

+0

從您的問題描述看來,您似乎有一個_single-tenant_設置,而不是[_multi-tenant_ setup](http://whatis.techtarget.com/definition/multi-tenancy)。 – Gruber 2012-10-08 12:46:35

+0

@Gruber數據庫實例是獨立的,但只有一個應用程序實例 - 可能只是進入語義,以確定它是否是真正的多租戶? – 2012-10-08 16:26:23

回答

2

我們的方式來處理正是這個問題:

  • 有兩種情況,一種運行舊的代碼,一個新的代碼
  • 啓動(顯然)與所有租戶網站指向舊版本
  • 週期租戶(也許自動)
  • ....數據庫複製到臨時
  • ....運行更新OND DB複製
  • .... WA SH,沖洗,重複,直到數據成功轉換
  • ....臨時轉換的DB
  • 測試新代碼....刪除臨時DB
  • ....採取租戶網站離線
  • ... 。真實DB運行更新(這應該工作,除非最後一分鐘的變化推出新的問題)
  • ....點租戶網站的新代碼組合/轉換的DB
  • 結束週期

氏直到現在,它的工作還是很好的,事實上,它經常保存我們的培根:前幾名租戶面臨問題,這可能會在新代碼中提示一兩個錯誤。

+0

如何處理切換過程中發生的數據庫更新?複製數據庫需要時間。我們通常在升級過程中將應用程序設置爲只讀模式 – 2012-01-14 15:14:11

+0

第一次(複製到臨時數據庫)我們只複製(mysqldump和好友),任何不一致都將被視爲更新/檢查腳本的一部分。第二次(真正的切換),我們讓這個租戶離線。 – 2012-01-14 15:39:38

+0

如何將用戶路由到新實例? – 2015-01-24 20:16:25

相關問題