Spring Cloud foundry updates/upgrade 时启动应用程序自动重启
Spring boot application restart automatically when Cloud foundry updates/upgrade
我正在使用 Cloud Foundry 并且我在云上部署了我的 Spring 启动应用程序。每当 Cloud Foundry 上发生 updates/upgrade 时,我的应用程序都会重新启动,并且某些请求无法到达应用程序,因为应用程序的重新启动需要更多时间才能启动。
在 CF 中有什么方法可以使某些应用程序实例 运行 而 upgrade/restart 应用程序来处理请求。
另外我想知道,如果 CF 提供来自不同 locations/regions 的服务,那么考虑我的应用程序将部署在不同区域可用的 2 个 CF 容器上。只要有一些 updates/upgrade 可用,就在一个区域为 Cf 继续升级,以便来自另一个区域的其他 CF 服务可用,并且一些应用程序实例将 运行 服务于请求,反之亦然。
-谢谢。
您所描述的是 CF 的预期行为。
如果您有两个或多个应用程序实例,它们绝不能同时关闭。即先把一个拿下来,重启成功后再把另一个拿下来重新启动
如果您的运营商为您的目标基础配置了多个可用性区域,那么应用程序实例将分布在这些可用区中,以帮助促进 HA 和最佳可用性。
如果您没有看到此行为,那么您应该查看以下内容,因为这些项目会影响您应用的正常运行时间:
您有多个应用程序实例吗?如果您只有一个应用程序实例,那么在将更新应用于基础和其他情况下时,您可能会看到一些 windows 的停机时间。发生这种情况是因为 Diego 有时需要在 Diego Cell 上驱逐应用程序 运行ning。它会尝试在停止当前实例之前在另一个 Cell 上启动您的应用程序,但对此不提供任何保证。因此,如果您的应用程序启动缓慢或您的应用程序没有配置良好的健康检查(例如它在应用程序真正启动之前通过健康检查),您可能会遇到一些停机时间。
您的运营商是否设置了多个可用区?作为开发人员,您无法真正分辨。这是抽象的,所以你需要询问你的平台运营团队并确认是否有多个,如果有的话有多少。为了获得尽可能多的正常运行时间,应用程序实例的数量至少要与可用区数量相同。
另一件经常被忽视的事情是,您的应用程序是否依赖于任何服务?如果是这样,您也可能会在更新服务时看到停机时间。这一切都取决于您正在使用的服务,以及是否会有相关的停机时间来管理和升级这些服务。当应用程序无法查看是否存在连接失败或类似错误时,您可以通过更仔细地查看应用程序日志来判断是否属于这种情况。您也可以通过查看 CF Marketplace 中定义的计划来判断。通常描述会说是否有关于计划的规定,比如它是或不是集群或 HA。
更新
另一件可能导致停机的事情:
- 如果您的操作员的 "max in flight" 值对于 Diego Cell 的数量而言过高,这也会导致停机。本质上,"max in flight" 决定了在升级过程中有多少 Diego Cells 将停止服务。如果此值太高,您可能 运行 陷入剩余 Cell 中没有足够容量来托管所有应用程序的情况。这最终会导致应用程序实例停机,因为它们无法及时重新安排在另一个 Cell 上。作为开发人员,我认为这不是您可以解决的问题,您需要与您的平台运营商合作进行进一步调查。
这可能是这里的主题。如果您是应用程序开发人员,您应该与您的平台运营团队联系以进行调试。
希望对您有所帮助!
我正在使用 Cloud Foundry 并且我在云上部署了我的 Spring 启动应用程序。每当 Cloud Foundry 上发生 updates/upgrade 时,我的应用程序都会重新启动,并且某些请求无法到达应用程序,因为应用程序的重新启动需要更多时间才能启动。 在 CF 中有什么方法可以使某些应用程序实例 运行 而 upgrade/restart 应用程序来处理请求。 另外我想知道,如果 CF 提供来自不同 locations/regions 的服务,那么考虑我的应用程序将部署在不同区域可用的 2 个 CF 容器上。只要有一些 updates/upgrade 可用,就在一个区域为 Cf 继续升级,以便来自另一个区域的其他 CF 服务可用,并且一些应用程序实例将 运行 服务于请求,反之亦然。 -谢谢。
您所描述的是 CF 的预期行为。
如果您有两个或多个应用程序实例,它们绝不能同时关闭。即先把一个拿下来,重启成功后再把另一个拿下来重新启动
如果您的运营商为您的目标基础配置了多个可用性区域,那么应用程序实例将分布在这些可用区中,以帮助促进 HA 和最佳可用性。
如果您没有看到此行为,那么您应该查看以下内容,因为这些项目会影响您应用的正常运行时间:
您有多个应用程序实例吗?如果您只有一个应用程序实例,那么在将更新应用于基础和其他情况下时,您可能会看到一些 windows 的停机时间。发生这种情况是因为 Diego 有时需要在 Diego Cell 上驱逐应用程序 运行ning。它会尝试在停止当前实例之前在另一个 Cell 上启动您的应用程序,但对此不提供任何保证。因此,如果您的应用程序启动缓慢或您的应用程序没有配置良好的健康检查(例如它在应用程序真正启动之前通过健康检查),您可能会遇到一些停机时间。
您的运营商是否设置了多个可用区?作为开发人员,您无法真正分辨。这是抽象的,所以你需要询问你的平台运营团队并确认是否有多个,如果有的话有多少。为了获得尽可能多的正常运行时间,应用程序实例的数量至少要与可用区数量相同。
另一件经常被忽视的事情是,您的应用程序是否依赖于任何服务?如果是这样,您也可能会在更新服务时看到停机时间。这一切都取决于您正在使用的服务,以及是否会有相关的停机时间来管理和升级这些服务。当应用程序无法查看是否存在连接失败或类似错误时,您可以通过更仔细地查看应用程序日志来判断是否属于这种情况。您也可以通过查看 CF Marketplace 中定义的计划来判断。通常描述会说是否有关于计划的规定,比如它是或不是集群或 HA。
更新
另一件可能导致停机的事情:
- 如果您的操作员的 "max in flight" 值对于 Diego Cell 的数量而言过高,这也会导致停机。本质上,"max in flight" 决定了在升级过程中有多少 Diego Cells 将停止服务。如果此值太高,您可能 运行 陷入剩余 Cell 中没有足够容量来托管所有应用程序的情况。这最终会导致应用程序实例停机,因为它们无法及时重新安排在另一个 Cell 上。作为开发人员,我认为这不是您可以解决的问题,您需要与您的平台运营商合作进行进一步调查。
这可能是这里的主题。如果您是应用程序开发人员,您应该与您的平台运营团队联系以进行调试。
希望对您有所帮助!