如何使用OSGI实现零停机时间?

时间:2011-11-06 00:09:34

标签: osgi apache-servicemix

我正在考虑将servicemix用于我的生产服务器,我想知道我是否使用OSGI servlet这是否意味着我可以在不停机的情况下部署我的应用程序的新版本?如果没有,有没有办法实现零停机服务器?感谢。

4 个答案:

答案 0 :(得分:4)

OSGi动态服务可以帮助您升级服务器而无需重新启动它。但是,这表明您的应用程序位于OSGi阶梯的顶部。动态获取服务是不够的。应用程序应保持其状态,同时实现活力。请参阅格雷厄姆章程的OSGi成熟度模型。 [1]

在现实世界中,通过复制/群集实现零停机。示例设置类似于两个serviceMix服务器,由负载均衡器提供。当我们升级一台服务器时,您将负载均衡器指向其他服务器,反之亦然。只是一个例子。

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

答案 1 :(得分:1)

无论您使用什么,零停机都是不可能的。在现实世界中,有太多外部因素在起作用。 OSGi通过允许不同版本的服务同时运行,允许连接使用较新的服务,然后在最后一次活动连接丢弃时,旧的servlet将被关闭,有助于减少升级方案中的停机时间。

答案 2 :(得分:1)

OSGi可以减少甚至消除单个服务器上的计划停机时间。如果您能够在取消部署旧版本之前部署新版本,则它可以为零(或接近零,因为没有区别)。

然而,其他评论者暗示的问题是意外停机:OSGi无法使您免于服务器中的硬件故障。

对于弹性,您必须拥有多个服务器,例如一个集群。一旦你有这个,在一个特定的服务器上升级软件需要多长时间(只要它不是小时)真的没什么区别...)。

答案 3 :(得分:1)

虽然您可以在同一容器中部署多个版本的OSGi包,但这实际上没有用,因为您的servlet需要绑定到不同的URL以避免端口冲突。然后,客户端需要知道切换到这个新URL。这可以通过在代理服务器等中动态更新路由配置来抽象。无论哪种方式,它都会使部署复杂化,并且您的架构仍然受到其他方面的限制(HA等)。

相反,更好的选择是在不同的计算机上使用Servicemix实例集群(和负载均衡器)。然后在每台服务器上执行标准停止/重新部署/启动以执行升级。这也解决了高可用性和水平可扩展性需求等问题。