【问题标题】:Spring boot application restart automatically when Cloud foundry updates/upgradeCloud Foundry 更新/升级时 Spring Boot 应用程序自动重启
【发布时间】:2019-11-26 09:37:55
【问题描述】:

我正在使用 Cloud Foundry,并将我的 Spring Boot 应用程序部署在 Cloud 上。每当 Cloud Foundry 发生一些更新/升级时,我的应用程序都会重新启动,并且某些请求无法到达应用程序,因为重新启动应用程序需要更多时间才能启动。 CF 中是否有任何方法可以在升级/重新启动应用程序以处理请求时运行某些应用程序实例。 另外我想知道,如果 CF 提供来自不同位置/区域的服务,那么考虑我的应用程序将部署在不同区域可用的 2 个 CF 容器上。只要有一些可用的更新/升级,请在一个区域上为 Cf 继续升级,以便来自另一个区域的其他 CF 服务可用,并且一些应用程序实例将运行以服务请求,反之亦然。 -谢谢。

【问题讨论】:

    标签: spring spring-boot cloud-foundry


    【解决方案1】:

    您所描述的是 CF 的预期行为。

    • 如果您有两个或多个应用程序实例,则它们绝不应该同时关闭。即一个会被取下来,然后在它重新启动成功后,另一个会被取下并重新启动。

    • 如果您的运营商为您的目标基础配置了多个可用区,则应用程序实例将分布在这些可用区中,以帮助促进 HA 和最佳可用性。

    如果您没有看到此行为,那么您应该查看以下内容,因为这些项目可能会影响您的应用程序的正常运行时间:

    • 您是否拥有多个应用程序实例?如果您只有一个应用程序实例,那么当更新应用于基础和其他场景时,您可能会看到一些小的停机时间。发生这种情况是因为有时 Diego 需要驱逐在 Diego Cell 上运行的应用程序。在停止当前实例之前,它会尝试在另一个 Cell 上启动您的应用程序,但对此没有提供任何保证。因此,如果您的应用程序启动缓慢或您的应用程序没有配置良好的健康检查(例如它在应用程序真正启动之前通过了健康检查),您最终可能会出现一些停机时间。

      李>
    • 您的运营商是否设置了多个可用区?作为开发人员,您无法真正分辨。这是抽象出来的,因此您需要询问您的平台运营团队并确认是否有多个,如果有,有多少。为了尽可能延长正常运行时间,应用实例的数量至少与可用区的数量一样多。

    • 另一件经常被忽视的事情,您的应用程序是否依赖于任何服务?如果是这样,您也可能会在更新服务时看到停机时间。这一切都取决于您正在使用的服务,以及这些服务的管理和升级是否会有相关的停机时间。当应用程序日志无法查看是否存在连接失败或类似错误时,您可以通过更仔细地查看应用程序日志来判断是否是这种情况。您还可以通过查看 CF 市场中定义的计划来判断。描述中通常会说明是否有关于计划的规定,例如是否是集群或 HA。

    更新

    可能导致停机的另一件事:

    • 如果您的操作员的“最大飞行时间”值对于 Diego Cell 的数量来说太高,这也可能导致停机。从本质上讲,“飞行中的最大值”决定了在升级期间有多少 Diego Cell 将停止服务。如果此值太高,您可能会遇到剩余单元中没有足够容量来托管所有应用程序的情况。这最终导致应用程序实例停机,因为它们无法及时在另一个 Cell 上重新安排。作为开发者,我认为这不是您可以解决的问题,您需要与您的平台运营商合作进行进一步调查。

    这可能是这里的一个主题。如果您是应用程序开发人员,您应该与您的平台运营团队联系以进行调试。

    希望有帮助!

    【讨论】:

    • 是的,我们在部署了应用程序的 CF 上有多个实例。但每当 CF 更新/升级时,所有实例应用程序都会重新启动。
    • 检查更新。想到另一种可能导致停机的情况。我可能想念其他人。您确实需要与您的平台运营团队合作,以查看升级期间发生的情况。变量太多,这里的任何人都无法给你一个准确的答案。
    猜你喜欢
    • 2018-10-31
    • 2017-11-22
    • 2020-04-14
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 2022-01-09
    相关资源
    最近更新 更多