我熟悉Heroku的policy on dyno restarts(每24小时一次,如果基础硬件出现故障等)。
我还在Stackoverflow上的其他地方查看过,发现了类似的问题 Controlling Heroku's random dyno restarts。
从Web角度来看,我们的应用程序非常好-会话通过外部数据库处理,并且多个dynos可以完美平衡负载。重新启动不是那里的问题。问题是工人。例如,我们的工人收到一条消息并开始处理工作。它完成了99%,等待一些最终的异步请求返回,并收到SIGTERM。在清理工作之前,该过程已被终止。该代码可以处理需要重新启动的作业的本地清理,但是外部服务实际上并不是事务的一部分。
例如,如果构建了一个报告并发送了一封电子邮件,但是在SIGTERM之前某些第三次异步操作未完成,则我无法真正回滚该事务。对于硬件故障或其他罕见事件,可以理解的是,多步事务可能会被截断,但是按照Heroku的政策,看来我需要假设这种情况每天至少发生一次。谁能帮助我更好地解决这个问题?