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