Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 谷歌应用程序引擎Flexible env的定价,500美元一课_Node.js_Google App Engine_Google Cloud Platform - Fatal编程技术网

Node.js 谷歌应用程序引擎Flexible env的定价,500美元一课

Node.js 谷歌应用程序引擎Flexible env的定价,500美元一课,node.js,google-app-engine,google-cloud-platform,Node.js,Google App Engine,Google Cloud Platform,我遵循了App Engine Flexible env教程@上的节点: 在成功地部署和测试了教程之后,我对代码进行了一些更改,并成功地部署了它。。。然后让它运行,因为这是一个测试环境(不是公共的) 一个月后,我收到一张来自谷歌的账单,金额超过370美元 在交易详情中,我看到以下内容: 2017年10月1日至31日App Engine Flex实例RAM:5948.774千兆字节小时 ([MYPROJECT])42.24美元 2017年10月1日至31日App Engine Flex实例核心小时

我遵循了App Engine Flexible env教程@上的节点:

在成功地部署和测试了教程之后,我对代码进行了一些更改,并成功地部署了它。。。然后让它运行,因为这是一个测试环境(不是公共的)

一个月后,我收到一张来自谷歌的账单,金额超过370美元

在交易详情中,我看到以下内容:

2017年10月1日至31日App Engine Flex实例RAM:5948.774千兆字节小时 ([MYPROJECT])42.24美元

2017年10月1日至31日App Engine Flex实例核心小时数:5948.774小时([MYPROJECT])312.91美元

这个几乎为0个请求的测试环境如何需要大约6000小时的资源?在最坏的情况下,我会假设一个月720小时的全职工作——每小时0.05美元将花费我约40美元。

有人能帮忙解释一下吗?我不知道为什么需要这么多资源

谢谢你的帮助

关于更多数据,这是上个月的流量(基本上为0):

和实例数据

更新: 请注意,我确实对package.json进行了一次修改:我添加了nodemon作为依赖项,并将其作为“nmp start”脚本的一部分添加。尽管我怀疑这能否解释6000小时的资源:

  "scripts": {
    "deploy": "gcloud app deploy",
    "start": "nodemon app.js",
    "dev": "nodemon app js",
    "lint": "samples lint",
    "pretest": "npm run lint",
    "system-test": "samples test app",
    "test": "npm run system-test",
    "e2e-test": "samples test deploy"
  },
App.yaml(默认不更改教程)


在与谷歌进行了多次交流,阅读了数小时的博客和报告后,我终于(多少)找到了对所发生事情的解释。我会把我的建议贴在这里,这样其他人就不会成为这个问题的受害者

注意,这对一些人来说似乎很明显,但作为一个新的GAE用户,所有这些对我来说都是全新的

简言之,当部署到GAE并使用以下命令“$gcloud app deploy”时,它会创建一个新版本并将其设置为默认版本,但更重要的是,它不会删除已部署的先前版本

有关版本和实例的更多信息,请参见此处:

所以在我的例子中,我在不知情的情况下创建了我的简单节点应用程序的多个版本。这些版本仍在运行,以防出现错误后需要切换。但这些版本也需要实例,默认值是2个实例,除非app.yaml中有说明

谷歌表示:

默认情况下,App Engine会缩放正在运行和正在运行的实例数 向下调整以匹配负载,从而为用户提供一致的性能 在最大限度地减少空闲实例的同时,始终使用应用程序,从而减少 成本

然而,根据我的经验,情况并非如此。如前所述,我用nodemon推送了我的节点应用程序,它似乎导致了错误

最后,在完成了教程并且没有关闭项目之后,我有了4个版本,每个版本有2个实例全职运行1.5个月,服务0个请求并生成大量错误消息,花费了我500美元

如果您仍然想使用GAE FLEX ENV,建议:

  • 首先也是最重要的一点是,设置账单预算和提醒,这样您就不会对自动计入您的CC的昂贵发票感到惊讶:

  • 在测试环境中,您很可能不需要多个版本,因此在部署时使用以下命令:
    $gcloud应用程序部署--版本v1

  • 更新你的app.yaml以使用最少的资源仅强制1个实例:

  •   "scripts": {
        "deploy": "gcloud app deploy",
        "start": "nodemon app.js",
        "dev": "nodemon app js",
        "lint": "samples lint",
        "pretest": "npm run lint",
        "system-test": "samples test app",
        "test": "npm run system-test",
        "e2e-test": "samples test deploy"
      },
    
  • 设定每日开支限额
  • 有关更多信息,请参阅此博客帖子:

    我希望这些步骤中的一些已经包含在教程中,以保护那些试图学习和实验的人,但事实并非如此

    如果不知道所有这些细节,谷歌应用引擎Flex env可能会很棘手。一位朋友给我指了指Heroku,它既有定价,也有免费/业余活动。我能够在那里快速推送一个新的节点应用程序,它工作得很有魅力!


    学习这一课“只”花了我500美元,但我希望这能帮助其他人了解Google App Engine Flex Env。

    还要注意的是,如果你仍然希望你的应用程序具有自动缩放功能,但你不希望默认的最少2个实例始终运行,你可以配置你的应用程序。yaml如下所示:

    runtime: nodejs
    env: flex
    automatic_scaling:
      min_num_instances: 1
    

    由于级联、指数故障(反弹电子邮件生成反弹电子邮件等),我们将代码部署到GAE FE,使其完全失控,并且我们无法关闭被窃听的GAE实例。4个多小时后,发送了超过100万封电子邮件(Mailgun只是不允许我们禁用该帐户。它说“请等待24小时,密码更改才能生效”,而撤销API密钥没有任何作用),redis虚拟机停止运行,数据库关闭,所有站点代码缩减为一个“关闭维护”的静态503页),电子邮件一直在发送

    我确定GAE FE只是不终止CPU负载下的docker VM或云计算VM(redis)。也许永远不会!一旦我们真的删除了ComputeVM(而不是“仅仅”停止它),电子邮件就会立即停止

    但是,尽管GAE应用程序报告100%的版本和实例被“停止”,但我们的DB在接下来的2个小时内仍然充斥着“无法发送电子邮件”的通知。我最终不得不更改谷歌云SQL密码

    我们一直在检查账单,7个流氓实例一直在使用CPU,因此我们取消了该帐户上使用的卡,事实上,当账单过期时,该站点确实出现了故障,但流氓实例也出现了故障。我们一直无法通过GAE电子邮件支持解决这种情况



    更新(2020年9月30日):这仍然是我22年职业生涯中最糟糕的时刻!!一个由15名精锐天才开发人员组成的整个公司都不知道如何关闭GAE。我们知道,当我的一个开发人员无法访问她的GMail帐户时,客户会收到数百万封电子邮件。无法拔下电源插头,无法关闭电源。真是太棒了
    runtime: nodejs
    env: flex
    automatic_scaling:
      min_num_instances: 1
    
    manual_scaling:
      instances: 1
    resources:
      cpu: 1
      memory_gb: 0.5
      disk_size_gb: 10
    
    instance_class: F1
    automatic_scaling:
      max_instances: 1 (--> you can adjust this as you wish)
      min_instances: 0 (--> will scale to 0 when there is no traffic so won't incur costs)
    
    instance_class: B1
    basic_scaling:
      max_instances: 1
      idle_timeout: 1m
    
    instance_class: F1
    automatic_scaling:
      max_instances: 1