【问题标题】:How to use OSGI to achieve zero down time?如何使用 OSGI 实现零停机?
【发布时间】:2011-12-22 21:10:41
【问题描述】:

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

【问题讨论】:

    标签: osgi apache-servicemix


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2017-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-18
            • 1970-01-01
            • 1970-01-01
            • 2016-03-30
            • 1970-01-01
            相关资源
            最近更新 更多