2013-05-17 76 views
1

在部署期間需要實現零停機時間。情景是我有共6個生產箱,我的代碼將被部署。第一個代碼將被部署在3個框中。在這個時候,我將使我的新代碼和新代碼都能正常運行。我在我的DB表中的一個表中應用加密邏輯,這將僅由我的新代碼處理。當用戶點擊我的舊代碼庫時,我的應用程序將失敗。什麼是可能的解決方案。我的應用程序是Java應用程序和我用戶Oracle 10g。在代碼部署期間實現零停機時間

回答

3

的解決方案是有版本的序列,其允許這一點。假設代碼在更新之前使用名爲A的純文本列。

  • 將另一列A_ENCRYPTED添加到數據庫。舊的代碼仍然採用了和忽略A_ENCRYPTED,所以一切都很好
  • 發佈上三盒第一更新從A讀取,寫入A和也加密值和A_ENCRYPTED結果寫入。舊的代碼和新的代碼讀取和一個寫,所以一切都很好
  • 發行這首更新到其他三盒。現在每個人都寫入A​​和A_ENCRYPTED
  • 執行,在一個加密的一切,將結果存儲在A_ENCRYPTED的腳本。現在A和A_ENCRYPTED對於所有行都是一致的,並且由於所有的框都寫入兩列,所以繼續保持一致。
  • 現在發佈第二次更新,以三盒從A_ENCRYPTED讀取和寫入仍然對A和A_ENCRYPTED。由於A始終與A_ENCRYPTED保持一致,所以其他3個框仍然正常工作。
  • 在其他3個盒子上做同樣的發佈。現在所有的盒子都是從A_ENCRYPTED讀取和寫入的。
  • 現在發佈第三次更新到3個盒子,只讀/從A_ENCRYPTED
  • 在其他3個盒子上做同樣的發佈。現在沒有人再使用A列了。
  • 執行一個腳本用於刪除列A.
+0

我們基於這種方法我們改變工作謝謝。 – Kannappan

0

的故障狀態是舊代碼+新的數據,以便在過渡階段需要是新的代碼+舊數據。您的新代碼需要能夠分辨舊數據和新數據之間的差異,並與兩者一起工作。然後,一旦所有舊代碼都不存在,您可以轉換爲新的數據格式。

  1. 舊代碼+舊數據
  2. 新代碼+舊數據
  3. 新代碼+新數據