2008-10-21 46 views

回答

5

這不是JavaRebel所做的。 JavaRebel(根據描述)熱替換內存中的類。在現有系統連接的情況下,這是不可接受的,因爲更新後的類可能會破壞客戶端的邏輯。

一旦一家公司,我工作也有類似的問題,它解決了這種方式:

  • 智能路由器用作負載平衡器
  • 新版本部署到50% (新)簇的節點
  • 新的連接被嚴格地傳送到這些更新的節點,舊節點在舊節點之間被平衡
  • 舊節點被脫機(一個接一個地保持數目客戶端節點內的每個節點)
  • 同時,新版本部署到離線「老」的節點,他們被帶到了新的節點
  • 由於EJB集羣,會議和豆類被其他老節點
  • 最終回升(在幾個小時內),只有一箇舊節點左,具有舊版本,並使用舊版本的所有客戶端的情況下被連接到它
  • 當最後一箇舊的客戶端斷開了,這點太放倒

現在,我不是一個網絡人,也不能給你很多細節(比如路由器硬件是什麼等)。我的理解很簡單,除非如果我沒有記錯,我們必須設置一個額外的Weblogic域來部署新版本的應用程序(否則它將與JNDI名稱上的舊版本衝突)。

希望有所幫助。

P.S. Ichorus提供了一條評論,稱應用程序部署在客戶端的服務器上。所以路由器技巧可能不可行。現在,我只看到一個可行的解決方案(現在是21:52,我可能忽略了:)) -

  • 開發帶有「版本化」JNDI名稱的新版本;例如如果Customer bean在版本1中處於ejb/Customer之下,則在版本2中它將位於ejb/Customer2下
  • 在應用程序中具有穩定的基本接口(工廠風格)的業務外觀,當詢問Customer bean時,試圖找到最高版本的JNDI名稱(不是在每次調用時,當然可以緩存一個小時左右)。該外觀可以(也應該)作爲單獨的應用程序進行部署 - 而且從未或很少更新
  • 現在,每個新客戶端都可以訪問部署的最新應用程序,並且應用程序不會發生衝突。

這種方法需要仔細的規劃和測試,但應該工作恕我直言。

我最近修改了幾個應用程序,讓它們在同一個域中共存(在它們爲不同的數據源使用相同的JNDI名稱之前)。

+0

這是有幫助的,一個非常簡單和合理的解決方案。不幸的是,我們的許多客戶端沒有負載均衡器,我們的會話狀態保存的方式只有一點點,並且只保存在本地應用服務器的緩存中(我一直主張對其進行更改)。感謝您的輸入。 – Ichorus 2008-10-21 20:04:01

+0

哦,所以你正在客戶端的服務器上部署你的應用程序?當然,這變化很大。除非在JNDI名稱中實現某種版本控制,否則不可能,我會說... – 2008-10-22 01:50:44

1

據我所知,WebLogic具有一項稱爲並行部署的功能,可消除EAR版本升級期間的停機時間。您可以在不停止現有應用程序的情況下部署新版本,一旦新版本成功部署,您就可以從舊版本透明地切換到新版本。

我不確定其他應用程序服務器是否支持此操作。

編號:http://edocs.bea.com/wls/docs100/deployment/redeploy.html#wp1022490

1

弗拉基米爾周圍使用負載平衡器的建議是實現你想要的東西的一個相當肯定的方式。請記住,它不一定是高端硬件負載平衡器。相反,如果您使用本機Web服務器(Apache或IIS)以及mod_jk或mod_proxy提交您的JBoss服務器,則可以維護一個常見的Web Facade並在EAR升級時實施適用的加載和路由例程。

//尼古拉斯

相關問題