这是关于在Google Compute Engine上运行的基于firebase队列的应用关闭期间处理任务的设计问题。
我正在使用的用例是根据任何给定时间的负载自动扩展队列工作者。具体到我们的项目是我们的任务长期运行。
在理想的世界中,队列工作者将有机会在运行工作程序的虚拟机终止之前完成其当前任务。我们正在与Google Compute Engine /实例组合作,以处理我们的队列工作者应用的扩展。 Firebase队列确实提供了一种基于promise的方法来关闭队列工作者(即queue.shutdown())。这将阻止工作人员接受新任务,并允许在解决承诺之前完成运行任务。
我面临的问题是如何允许队列工作程序在实例终止之前正常关闭(在滚动更新期间也会出现此问题)。一种方法是触发工作人员关闭并让工作人员触发实例关闭,但这似乎不是最好的设计,因为控制是从一开始就触发缩小规模的任何服务中取走的。
GCE确实提供了一个服务,它将在实例终止之前运行一个关闭脚本,但是,它将在大约90秒后强制关闭一个实例,这对我们不起作用。
我对此处的设计理念/模式感兴趣。非常感谢任何帮助。