首页 > 解决方案 > 如何以最低的成本将简单的应用程序部署到 GCP(或如何在部署后禁用自动缩放)?

问题描述

在我第一次尝试使用 Cloud 部署应用程序时...

问题:GCP(谷歌云平台)意外的实例小时使用(前端实例小时)。高流量不是问题,但由于某种原因,它们的自动缩放功能创建了一堆“实例”和“版本”。

他们建议的解决方案:禁用自动缩放并停止提供以前部署的实例版本。我仍然需要一个版本/实例运行,但通过他们的控制台我仍然没有找到它显示我运行了多少版本/实例或在哪里停止它们(同时验证至少 1 个实例仍在工作,以免破坏我的应用程序)

我的应用程序是由 Google 开发人员开发的简单应用程序,并被他们推荐用于动态呈现 JS SPA(允许搜索引擎和爬虫查看完全呈现的 html)。
我的实际网站以及指向 GCP 以供爬虫的节点应用程序托管在其他地方(在 Godaddy 上),并且两者都很好地协同工作。

我部署到 GCP 的应用程序称为 Rendertron ( https://github.com/GoogleChrome/rendertron )

Google 还建议部署到 GCP(大多数文档都涵盖了这种部署形式)。我尝试部署到我的 Godaddy 共享主机,但它并不简单且易于操作,所以我只是尝试创建一个 GCP 项目并尝试在那里部署。一切都很好!

在将应用程序部署到几乎没有流量的 GCP 之后,我预计零成本或最多不到 1 美元。

不幸的是,我收到了本月超过 150 美元的账单,预计下个月的账单大致相同。

在没有额外支付 150 美元的技术支持费用的情况下,我可以通过电话联系 GCP 计费,他们非常棒,因为他们愿意报销费用,但前提是我自己解决了问题。

他们慷慨地向您抛出一组文档链接(意外实例小时使用的常见原因),但除此之外无济于事。

经过多次google搜索,通读文档,付费并通过pluralsight.com观看gcloud教程, 我目前了解或不了解的方向如下:

我可以使用指示继续尝试调查如何解决问题。

  1. 我需要创建一个组实例(这样我可以从那里管理无自动缩放)的方向是要走的路,我应该把我的尝试集中在哪里?

  2. 继续学习如何在 .yaml 文件中简单地更新我的配置以创建不缩放的方向,例如将 min_instances 和 max_instances 设置为 1 以及学习如何手动停止(直接从 GCP 控制台)超过 1 个实例/当前运行的版本是我应该关注的地方?

  3. 第三种选择?

附带说明一下,使用 GCP 进行自动缩放似乎不是很智能。
为什么我几乎没有流量的应用会遇到创建多个实例的问题?

任何见解将不胜感激。


****更新**** 平台信息

我的应用已部署到 Google App Engine (GAE)(部署的代码,而不是容器)

部署步骤:

git clone https://github.com/GoogleChrome/rendertron.git
cd rendertron
npm install && npm run build
gcloud app deploy app.yaml --project MY_PROJECT_ID

我只是按照上面的步骤操作,我的应用程序运行良好,并且自部署以来没有触及任何东西。

最初部署的配置(app.yaml)是:(
我对 Rendertron 存储库没有任何更改)

runtime: nodejs12
instance_class: F4_1G
automatic_scaling:
  min_instances: 1
env_variables:
  DISABLE_LEGACY_METADATA_SERVER_ENDPOINTS: "true"

-- 谷歌云控制台信息

在 App Engine --> Versions
下列出了 1 项,其值如下:

Instances: 1
Runtime: nodejs12

环境:标准

Size: 392.7 MB
Deployed: Feb 23, 2021
Config:
  runtime: nodejs12
  env: standard
  instance_class: F4_1G
  handlers:
    url: .*
    script: auto
  env_variables:
    DISABLE_LEGACY_METADATA_SERVER_ENDPOINTS: 'true'
  automatic_scaling:
    min_idle_instances: automatic
    max_idle_instances: automatic
    min_pending_latency: automatic
    max_pending_latency: automatic
    min_instances: 1
  network: {}


****解决方案****
我上传了一个新的app.yaml文件并更改了:min_instances:1到max_instances:1(必须使用更新的app.yaml重新部署整个项目)

起初,我还将“instance_class”从 F4_1G 更改为 F1 以节省资金,但我的应用程序出现错误,即内存不足,并且我的应用程序因 500 服务器错误而崩溃。(渲染器应用程序出现但在尝试渲染某些内容时崩溃)我再次将其更新回 F4_1G,并且该应用程序似乎工作正常。

如果将来我的流量增加时再次看到收费,我将检查 F1 到 F4_1G 之间是否有一个实例类,它可能有足够的内存供我的应用程序运行,但会累积可能的最低费用。

您可以在下面看到,当我在周五和下周日进行更改时,成本降至 0,但应用程序仍在正常运行:
屏幕截图显示更改后 GCP 计费报告成本下降
****解决方案****

标签: google-cloud-platformgcloudautoscalinggoogle-cloud-billingrendertron

解决方案


automatic_scaling配置,这是一个可选配置。
其他可用选项是basic_scalingmanual_scaling

最便宜的配置可能是manual_scaling单个B1实例:

instance_class: B1
manual_scaling:
  instances: 1

这两个配置参数直接影响定价,即“按配置付费”。

虽然这可能不是建议的生产配置。有关更多信息,
请参阅缩放元素定价。


推荐阅读