2011-11-06 27 views
2

我想爲我的生產服務器使用servicemix,不知我是否使用OSGI servlet,這是否意味着我可以在不停機的情況下部署新版本的應用程序?如果沒有,是否有辦法實現零停機服務器?謝謝。如何使用OSGI實現零停機時間?

回答

4

OSGi動態服務可能會幫助您升級服務器而不重新啓動服務器。但是,這表明您的應用程序位於OSGi階梯的頂部。動態獲取服務是不夠的。應用程序應該保持其狀態,同時實現活力。格雷厄姆章程請參閱OSGi成熟度模型。 [1]

在現實世界中,通過複製/集羣實現零停機時間。示例設置就像兩個serviceMix服務器,由負載平衡器提供。當我們升級一臺服務器時,您將負載平衡器指向另一臺服務器,反之亦然。只是一個例子。

[1] http://www.infoq.com/news/2011/09/mmm-osgi

1

無論您使用什麼,零停機時間都是不可能的。現實世界中存在太多的外部因素。 OSGi通過允許不同版本的服務同時運行,允許連接使用較新的服務,並在最後一次活動連接斷開時關閉舊的servlet,從而幫助緩解升級場景中的停機時間。

1

的OSGi可以減少或甚至消除在單個服務器上的計劃停機時間。如果您能夠在部署舊版本之前部署新版本,則該值可以爲零(或接近於零而沒有區別)。

然而,其他評論者暗示的問題是無計劃的停機時間:OSGi無法將您從服務器中的硬件故障中解救出來。

爲了保持韌性,您需要必須有多個服務器,例如,一個集羣。一旦你有了這個,在一臺特定的服務器上升級軟件需要多長時間(只要它不是小時 ...),它確實沒有多大區別。

1

雖然您可以在同一個容器中部署多個版本的OSGi包,但這確實沒有幫助,因爲您的servlet需要綁定到不同的URL以避免端口衝突。然後,客戶需要知道切換到這個新的URL。這可以通過在代理服務器中動態更新路由配置來抽象出來。無論哪種方式,它都會使部署變得複雜,而且您的架構在其他方面(HA等)仍然受到限制。

相反,更好的選擇是在不同的機器上使用Servicemix集羣(和負載平衡器)。然後在每臺服務器上執行標準停止/重新部署/啓動以執行升級。這也解決了高可用性和水平可擴展性需求等。