2013-06-23 9 views
0

基本上我們基於J2EE的應用程序它是運行在全球(多個時區)的小型電子商務應用程序。當我們必須部署修補程序時,需要大約3小時(數據庫備份,數據庫更改,Java更改,QA煙霧測試)。我知道它太高。我想把這個部署時間縮短到不到30分鐘。 現在我將簡要介紹應用程序infra:我們得到了兩個Jboss服務器和單個數據庫,爲兩個jboss服務器配置了負載平衡器。它不是集羣環境。 目前我們做什麼: 我們搞垮都JBoss和DB
採取DB備份 使數據庫的變化,運行一些腳本 製作一個Java的變化,運行補丁 上面的步驟將花費大約2小時,我們 比QA會做一小時的測試。比啓動服務器。爲Java降低時間的部署方法

你能否提出一些更好的方法來實現這一目標?我的主要問題是,當我們有多個jboss和單個數據庫時。如何使部署順利

回答

0

一種方法我聽說Netflix的使用,但還沒有機會使用自己:

  1. 使您的所有數據庫架構的變化向前和向後兼容兼容當前運行的軟件版本以及您即將部署的軟件。使新軟件版本繼續編寫舊版本所需的任何數據。希望這是一個最小的集合。

  2. 備份正在運行的數據庫(大多數數據庫不需要宕機時間進行備份),並在部署軟件之前至少一週部署數據庫模式更新。

  3. 一旦你的數據庫修改已經被燒燬,並且當前運行的版本似乎沒有問題,重新配置你的負載平衡器以指向你的JBoss服務器的一個實例。將更新後的軟件部署到其他實例,並讓QA冒煙測試它,同時其他服務器繼續服務器生產請求。

  4. 當QA對結果滿意時,請將LB指向離線JBoss服務器(使用新軟件)。當它聯機時,更新新離線JBoss服務器上的軟件,並根據需要進行QA抽菸測試。如果成功,將LB指向兩個JBoss實例。

  5. 如果QA發現重大錯誤,並且無法快速修復錯誤並「無法前滾」,請回退到已部署軟件的先前版本。由於您的模式和新代碼向後兼容,您不會丟失數據。

  6. 在您的下一個部署中,從您的模式中刪除任何垃圾(如當前部署未使用的列),使其仍然向後兼容。

雖然比您當前的方法更復雜,但這種方法應該能夠以最小的風險降低部署停機時間。

+0

非常感謝... 明白了我的意思。我剛剛還有兩個問題 1. \t當我們對運行的數據庫進行備份時,我們可能會丟失一些正在進行備份的數據? 2. \t當我們從LB中關閉Jboss時,通過這個Jboss IP登錄的用戶。他們可能會放鬆會議。如何處理? – user2462256

+0

#1 - 如果您不得不從備份進行恢復,則會遭受數據丟失。確保在生產部署之前,使用類似生產環境的所有方面都經過充分測試,以降低需要備份的風險。您必須評估發生這種情況的機會和成本,以及您的客戶偶爾長時間停機的情況。 #2 - 不確定你在JBoss中用於servlet容器的是什麼,但是如果它是Tomcat,你可以在兩個節點之間啓用狀態複製。這會將會話信息複製到所有節點,以便在一個節點發生故障時用戶不會註銷。 – lreeder