【发布时间】:2016-04-04 05:50:02
【问题描述】:
早安,
我正在将应用程序的后端作为应用程序引擎 (Java) 运行。 使用端点,我收到请求。问题是,我需要计算一些大的东西,但我需要前端的快速响应时间。因此,作为一种解决方案,我想预先计算一些东西,并将其存储在专用的内存缓存中。
我这样做的方式是添加一个静态块,然后在默认队列上运行一个延迟任务。 有没有更好的方法在启动时进行计算?
现在,此延迟任务执行大量数据存储操作。有时,它们会超时。所以我创建了一个系统,它会在超时重试直到成功。但是,当我启动应用程序引擎时,它会立即创建两个延迟任务。尽管我设置了 DeferredTaskContext.setDoNotRetry(true);,但它也会在任务失败时继续重试任务。
老实说,延迟的任务感觉非常挑剔。
我只想运行一个需要 5 分钟以上的方法(随着数据集的增长可能会更长)。我想在启动时运行此方法,然后定期运行。您将如何建模?我的第一个想法是 cron 工作,但时间有限。我需要一个运行延迟任务的 cron 作业,希望它们不会以某种方式堆积或产生重复项或开始重试。
感谢您的帮助和美好的一天。
干燥
【问题讨论】:
-
cron 作业与延期任务的截止日期相同
-
您将如何跨实例共享/访问此数据(分类器)。请记住,每个实例都有自己的内存。所以目前我想你每次实例启动时都会启动这个构建。一旦处理完毕,可以将其序列化为
-
这是我的主要问题,它不能轻易地在数据存储中的单个块中序列化。所以无论哪种方式,我都必须进行某种批处理操作。
-
为了避免“batch-y”操作(通常是 cron 任务,但也有排队任务)的严格期限,请考虑使用手动缩放(或基本缩放)将它们分派到模块,请参阅 cloud.google.com/appengine/docs/java/modules 。
标签: google-app-engine cron google-cloud-datastore task-queue