我目前托管在 Heroku 上,它处理长时间运行的进程的方式需要显式更改代码才能将内容放入作业队列。我不想进行显式代码更改(例如作业队列),因此我想将这个特定 block 移出。
我有一个Gmail.users.watch
电子邮件观察器在那里运行,我想将其移至 GCP,因为 Heroku 似乎遇到 R15 - Vastly exceeded memory quota
我的代码有错误。我相信这是因为 Heroku 处理的每个请求都会生成一个长期运行的 Gmail.users.watch
的新实例。过程。 (编辑:开玩笑,这是内存泄漏)
const beginWatcher = () => {
gmail.users.watch(
{
auth: authClient,
userId: "me",
requestBody: {
topicName: topicURL,
labelIds: ["INBOX"]
}
},
(error) => {
if (error) {
console.log(error)
return
}
}
)
}
beginWatcher()
我没有太多从头开始使用 GCP 的经验,我想知道;
- 像上面这样的长时间运行的流程适合 GCP 中的什么位置?
- Google App Engine 似乎基本上是 Heroku,但我相信服务器的单个实例就是我所需要的像上面的代码一样永远运行的东西。
- Google 计算引擎似乎是一个启动的单个虚拟机,但似乎也用于处理繁重的计算负载,而不仅仅是电子邮件观察程序,因此它可能有点过头了。
- Google Kubernetes Engine 似乎在处理托管时考虑了 Docker,但对于这样的事情来说,这似乎过于复杂,因为我必须指定几乎所有内容。
- 我是否应该使用除上述三种解决方案之外的其他 GCP 解决方案?
我的直觉告诉我 Google Compute Engine,但我只想有人帮我确认; 到底把这样一个无限生命周期的流程放在 GCP 中的什么地方。
最佳答案
如果您选择 Google 计算引擎,您可能会因管理自己的虚拟机而产生一些不必要的开销。对于您所描述的用例来说,它不应该那么复杂,但它可能会产生一些不必要的惊喜。
使用虚拟机的好处是,您可以通过实现某种垃圾收集器来清理死进程,甚至每隔一段时间重新启动机器来解决内存泄漏问题。
话虽如此,问题的真正解决方案可能是解决您遇到的内存泄漏。在大多数情况下,与将应用程序迁移到新平台相比,这需要更少的精力。
关于heroku - 对于无限生命周期/长期运行的流程,应使用哪种 GCP 解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61217088/