2

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

4

4 回答 4

4

OSGi 动态服务可能会帮助您升级服务器而无需重新启动它。然而,这表明您的应用程序位于 OSGi 阶梯的顶部。动态获取服务是不够的。应用程序应在获得活力的同时保持其状态。参考 graham Charters 的 OSGi 成熟度模型。[1]

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

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

于 2011-11-06T20:19:39.120 回答
1

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

于 2011-11-06T00:40:49.360 回答
1

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

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

为了弹性,您必须拥有多个服务器,例如集群。一旦你有了这个,在一台特定的服务器上升级软件需要多长时间并没有太大的区别(只要不是几小时几天......)。

于 2011-11-08T16:53:45.203 回答
1

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

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

于 2011-11-16T01:05:36.220 回答