【问题标题】:How to prevent downtime in App Engine Flex when instances are automatically restarted实例自动重启时如何防止 App Engine Flex 停机
【发布时间】:2019-11-25 02:08:58
【问题描述】:

情况

  • App Engine Flex 上的自定义运行时(Docker/Node)
  • 在我们自己管理资源时手动扩展为 1 个单实例(2 cpu / 6 gb ram)
  • 配置了活动性和就绪性检查
  • 正如预期的那样,vm 实例是 automatically restarted on a weekly basis 以应用操作系统/系统更新
  • 这是 Google Cloud Console 的 visible in the Activity pane
  • Stackdriver 日志确认此活动(例如 shutdown-script: INFO Starting shutdown scripts.startup-script: INFO Starting startup scripts.
  • 在这些重启期间没有可用的实例,导致访问在实例上运行的应用程序时出现 503 错误

目标

  • 对实例数量进行一些控制以防止停机
  • 例如在 1 个实例重新启动时临时扩展到 2 个实例
  • 保持对可用资源(cpu / ram)的控制

问题

我们曾考虑过让 2 个实例始终可用,但担心这两个实例会同时重新启动,因为它们属于同一实例组。

什么可以让我们保持一切正常运行,同时仍然控制使用的实例/资源的数量?

【问题讨论】:

    标签: google-app-engine google-cloud-platform


    【解决方案1】:

    我有一个带有两个实例的 flex 应用程序,出于类似的原因正在运行。对我来说,实例偶尔会超出内存限制,需要重新启动。因为我有第二个实例,所以应该总是有一个可用的实例。

    我没有考虑 Google 对我的实例的更新。我刚刚检查了我最近的历史记录,谷歌昨天重新启动了我的两个实例。重启相隔 7 分钟,因此,至少在本例中,我的用户始终有一个可用的实例。

    我怀疑 Google 不会同时重新启动您的所有实例。这会给所有弹性客户造成短暂的停机时间,而没有人希望云服务停机。

    更新:

    这是一个猜测,但我希望当 Google 更新一个弹性实例时,它会创建一个新实例,并且只有在新实例可用后才关闭旧实例。至少,如果我在经营谷歌,我会这样做。这样您就有 100% 的正常运行时间,并且您将非常短暂地运行一个额外的实例。这甚至适用于单个 flex 实例。

    【讨论】:

    • 我们采用了相同的解决方案,并且确实有效 - 也适用于更新。如果有可能在更新时自动启动一个新实例以将流量重定向到,那就太好了!
    【解决方案2】:

    也许您应该尝试此处显示的自动缩放:Scaling instances

    这允许您的应用程序根据请求率、响应延迟和其他应用程序指标自动创建实例。当您的一个实例被关闭时,可以创建另一个实例以“覆盖”丢失的实例。因此,您的服务不会中断。

    【讨论】:

    • 我们希望控制确切的可用资源,据我所知,自动扩展是不可能的。
    猜你喜欢
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2020-07-20
    • 2023-03-16
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多