【问题标题】:How to stop Google AppEngine instances when not being used?不使用时如何停止 Google AppEngine 实例?
【发布时间】:2018-04-25 01:21:54
【问题描述】:

We 正在开发一个小型电子商务项目,我们使用GAE 作为我们的 Web 服务后端,但它正在耗尽我们的财务资源。我们研究了我们当前的基础设施以及它是如何计费的。这向我们表明,这是因为我们正在使用的实例。

我们正在运行 7 services,它使用 12 instances 作为一个整体。

想了解如何在不使用 Google App Engine 实例时停止它,因为它是我们计费的主要来源。

服务

UpdateFeed.yaml

application: ...
module: updatecategoryfeed
version: uno
runtime: python27
api_version: 1
instance_class: F1
threadsafe: true

automatic_scaling:
  min_idle_instances: 6
  max_idle_instances: automatic  # default value
  min_pending_latency: 30ms  # default value
  max_pending_latency: automatic
  max_concurrent_requests: 50

handlers:
- url: /.*
  script: FeedModule.FeedBuilder.update_category_feed



libraries:

- name: endpoints
  version: 1.0
- name: webapp2
  version: "latest"
- name: ssl
  version: latest

所有其他服务都遵循相同的结构。我们共有 7 项有效服务。

更新 2

我们根据项目要求降低了自动缩放值,min idle instances 为 0,max idle instance 为 1。价格急剧下降。但是我们仍在寻找如何在不使用时停止实例的答案。例如。下图显示了一个在没有任何活动的情况下自行启动并正在计费的实例。

【问题讨论】:

  • 你的服务配置是什么?
  • @DanCornilescu 请关注更新后的查询
  • 旁注:您将app.yaml 放在Services 之前的方式似乎表明您可能假设app.yaml 具有更重要的作用。它没有,充其量只是默认服务的配置文件。除非您已经单独拥有它,否则它实际上可能未被使用。见stackoverflow.com/questions/34110178/…。如果我误解了,请忽略。

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


【解决方案1】:

将您的 min_idle_instances 配置放到 automatic_scaling 部分 - 这些配置实际上代表了始终运行的实例 - 因此也称为常驻实例。

他们的角色不是定期处理流量。它们仅在流量超过正在运行的动态实例的容量以保持低延迟时短时间处理 溢出 流量,而 GAE 会启动额外的动态实例(实际上是处理大量的动态实例)流量)。

以防万一 - 常驻实例不会消失 - 即使站点上没有任何活动,它们的工作也是保持活力。

【讨论】:

  • 这是否意味着如果没有活动,如果不需要,将min_idle_instances 保持在低级别将停止单独创建实例(即上面共享的图像显示每小时创建 12 个实例将下降如果没有活动,则降至 0/1)?此外,如果某些服务消耗更多实例(即 5/6)并且我们已将 min_idle_instances 分配为 1/2 是否会发生冲突?
  • 我认为您误读了图表 - 您没有每小时创建 12 个实例,您只有 12 个实例正在运行。他们中的大多数(如果不是全部)没有做任何事情 - 他们是空闲的 - 你配置的那些min_idle_instances。无论服务消耗什么,都可以转换为动态实例,根据需要启动和停止 - 但这是除了这些空闲实例之外的。
  • 感谢您的回复。我相信我们与图表不同步。我们将按照您的建议运行此测试用例。 1. 我们是否需要定义自动缩放参数,因为我们从上面的评论中了解到dynamic instances 正在处理所有请求和主要流量? 2. 如果服务的空闲实例为 6(min) 不应该有全部服务*6 instances 在运行吗?
  • 1.您不必必须,但这样做可能是个好主意 - 为您的特定应用程序获得最佳性价比。但是你应该明白你在做什么。请参阅stackoverflow.com/questions/40924353/… 2。是的,每个服务应该有 6 个常驻实例,加上当时处于活动状态的任何动态实例。这些图表只是一些摘要表示,不是很精确,尤其是对于小数字。
  • 添加了对答案的说明。您似乎仍然有一个常驻实例 - 您将 max_idle_instances 从其默认值更改为 1。如果不接受 0,我会将其设置为 0 或将其完全删除。
【解决方案2】:

您可以启动和停止 GAE 服务,配置为手动缩放并使用 GAE API 启动和停止。

const proj = ''        // project id here
const serv = 'default' // or your service id
const vers = ''        // version id here

const {google} = require('googleapis')
const appengine = google.appengine ({version: 'v1', auth: auth})

// To retrieve Status:
appengine.apps.services.versions.get ({
            appsId: proj,
            servicesId: serv,
            versionsId: vers,
            view: 'BASIC',
        })
.then ()
.catch ()

// To Change Status:

newStatus = 'STOPPED' // or 'SERVING'
appengine.apps.services.versions.patch ({
            appsId: proj,
            servicesId: serv,
            versionsId: vers,
            updateMask: 'serving_status',
            requestBody: {
                serving_status: newStatus
            }
        })
.then ()
.catch ()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 2013-07-22
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    相关资源
    最近更新 更多