测试Firebase和Cloud Run花费了$ 72K,几乎破产了

2020-12-10 20:16:05

这是一个故事,我们甚至在推出第一个产品之前就已接近关闭,我们如何生存,并汲取了教训。

2020年3月,当COVID上市时,我们的初创公司Milkie Way也遭受了巨大的打击,几乎倒闭了。在几个小时内使用Firebase探索和内部测试Cloud Run时,我们烧掉了$ 72,000。

在有了想法之后,我于2019年11月开始开发Announce https://announce.today。目标是创建产品的功能性V1“ MVP”,因此,我们的代码基于简单的堆栈。我们使用JS,Python,并将我们的产品部署在Google App引擎上。

在桌面上宣布我们的团队非常小,我们的重点是编写代码,设计UI和准备产品。我花了最少的时间在云管理上,足以让我们投入使用,并拥有基本的开发流程(cicd)。

在V1 Web应用程序中,用户体验并不是最流畅的,但是我们只是想制作一些我们的用户可以尝试的产品,同时我们构建了更好的Announce版本。随着Covid走向世界,我们认为这是做出改变的最佳时机,因为Announce可能会被各国政府用来在全球范围内发布公告。

即使用户没有创建任何内容,在平台上拥有一些丰富的数据不是很酷吗?这种想法导致了另一个名为Announce-AI的项目。目的是为自动发布创建丰富的内容。丰富的数据==事件,地震等安全警告,以及可能的本地相关新闻。

为了开始开发Announce-AI,我们使用了Cloud Functions。由于我们的漫游器抓取网络的年龄还很小,因此我们认为轻量级的Cloud功能是必经之路。但是,当我们决定扩展规模时,我们遇到了麻烦,因为Cloud Functions的超时时间约为9分钟。

目前,我们了解了Cloud Run,它具有大量的免费使用层!在没有完全理解它的情况下,我要求我的团队在Cloud Run上部署“测试”宣布AI功能,并查看其性能。我们的目标是玩转Cloud Run,因此我们可以真正地学习和探索它。

Google Cloud Run为简单起见,因为我们的实验是针对一个很小的站点,所以我们使用Firebase来存储数据库,因为Cloud Run没有任何存储空间,并且部署在SQL Server或其他任何要进行测试的数据库上被杀了。

我创建了一个新的GCP项目ANC-AI Dev,设置了7美元的Cloud Billing预算,将Firebase Project保留在Free(Spark)计划中。如果我们步履蹒跚,我们想象的最坏情况就是超出了每日免费Firestore限制。

在修改了一些代码之后,我们部署了代码,通过在一天中的半天手动发出少量请求来运行它,然后将其保留。

在测试的那天一切都很好,我们回到了开发公告。第二天下班后,我在下午晚些时候小睡了。醒来后,我读了几封来自Google Cloud的电子邮件,它们彼此之间在几分钟之内就发送完了。

第一封电子邮件:我们的Firebase项目的自动升级第二封电子邮件:预算超出幸运的是,我的卡具有预设的100美元的支出限额。这导致收费下降,并且Google暂停了我们的所有帐户。

第三封电子邮件:卡被拒我跳下床,登录Google Cloud Billing,看到一张约5,000美元的账单。超级压力,而且不确定发生了什么,我四处张望,试图找出正在发生的事情。我也开始考虑可能发生的事情,以及我们如何“可能”支付5K美元的账单。

5分钟后,账单显示15,000美元,在20分钟后显示25,000美元。我不确定它会在哪里停下来。也许它不会停止?

到了这个时候,我和我的团队正在通话中,我处于完全震惊的状态,对下一步该怎么做绝对一无所知。我们停用了结算功能,并关闭了所有服务。

由于我们在所有GCP项目中都使用了相同的公司卡,因此我们所有的帐户和项目都已被Google暂停使用。

这发生在3月27日星期五晚上,即我们计划发布Announce V1的三天前。由于Google暂停了所有与同一张信用卡相关联的项目,因此我们的产品开发工作死了。我的士气低落了,我们公司的前途未卜。

我们所有的云项目都已暂停;停止发展一旦我的头脑与这个新现实融洽了,在午夜时分,我坐下来调查发生的事情。我开始写详细介绍所有调查的文件……我称此文件为“第11章”。

我参与此实验的两个团队成员也整夜不眠不休地调查并试图弄清发生了什么。

第二天,即3月28日,星期六,我打电话给十几家律师事务所并通过电子邮件发送了电子邮件,以预约/与一些律师聊天。他们所有人都离开了,但我能够通过电子邮件从其中之一得到回复。因为即使对于工程师来说,事件的细节也是如此复杂,所以用通俗易懂的英语向律师解释这本身就是一个挑战。

作为一家自负盈亏的公司,我们无法拿出$ 72K。

到这个时候,我对破产法的第7章和第11章已经很精通,并且对接下来可能发生的事情已经有了心理准备。

在向律师发送电子邮件之后的星期六,我开始阅读更多内容,并仔细阅读GCP文档中的每一页。我们确实犯了错误,但是Google甚至在没有为该项目付款之前就让我们花费了7.2万美元,这毫无意义!

GCP和Firebase我们从没想到过,也没有在注册Firebase时显示过。我们的GCP项目已连接结算以执行Cloud Run,但Firebase处于免费计划(Spark)下。 GCP突然就对其进行了升级,并向我们收取了所需的费用。

事实证明,这就是他们的过程,因为“ Firebase和GCP深度集成”。

2.帐单“限额”不存在。预算至少要延迟一天。

实际上,GCP帐单至少延迟了一天。 Google在大多数文档中建议使用预算和自动关闭云功能。好吧,猜猜是什么,到切断功能触发或通知云用户时,损坏可能已经完成。

结算大约需要一天的时间,因此这就是我们第二天注意到收费的原因。

由于我们的帐户迄今尚未付款,因此GCP应该先根据帐单信息向您收取$ 100的费用,然后在未付款时停止该服务。但事实并非如此。后来我知道了原因,但这仍然不是用户的错!

我们帐户的第一笔帐单费用约为5,000美元。下一个售价为$ 72,000。

我们帐户的结算起付金额为$ 100。根据Firebase控制台文档,Firebase控制台的信息中心编号与“结算”报告可能略有不同。

在我们的案例中,相差86,585,365.85%,即8600万个百分点。即使将账单通知给我们,Firebase控制台的仪表板仍表示该月有42,000次读写(低于每日限制)。

成为Google员工已有6.5年左右的时间,并撰写了许多项目文档,事件报告等,我知道如何为Google团队提出理由,让他们在两天内恢复工作。

在Google的最后一天,另一项任务是了解我们的错误,并制定我们的产品开发策略。并非团队中的每个人都知道发生了什么,但是很明显我们遇到了一些大麻烦。

作为Google员工,我有经验丰富的团队犯错,给Google造成了数百万美元的损失,但Google的文化可以挽救员工(工程师必须写一份冗长的事件报告除外)。 这次,没有Google。 我们自己的有限资金和我们的辛勤工作正处于危急关头。 这篇文章已经很长了,所以我将继续详细介绍如何使这种错误,我们如何生存以及我们学到了什么。