Java中Google计算引擎的批处理

Java中Google计算引擎的批处理,java,google-app-engine,batch-processing,google-compute-engine,Java,Google App Engine,Batch Processing,Google Compute Engine,如何开始使用Compute Engine并设置一个Java批处理作业;以非常小的间隔(持续)连续运行,从Google数据存储读取、处理数据并写入Google数据存储 现在我有一个在GAE上运行的游戏应用程序。当用户启动游戏时,一个实体存储在数据存储中。游戏是基于时间的,我希望能够经常有效地检查游戏,并在必要时发出通知。目前,这是由一个任务队列完成的,该任务队列运行10分钟,并在完成时将其调度为selves。然而,我不认为这是正确的处理方法,因此将迁移到GCE以获得更好的性能和扩展机会 我已经阅读

如何开始使用Compute Engine并设置一个Java批处理作业;以非常小的间隔(持续)连续运行,从Google数据存储读取、处理数据并写入Google数据存储

现在我有一个在GAE上运行的游戏应用程序。当用户启动游戏时,一个实体存储在数据存储中。游戏是基于时间的,我希望能够经常有效地检查游戏,并在必要时发出通知。目前,这是由一个任务队列完成的,该任务队列运行10分钟,并在完成时将其调度为selves。然而,我不认为这是正确的处理方法,因此将迁移到GCE以获得更好的性能和扩展机会


我已经阅读了GCE的“入门指南”,但这只是告诉如何通过SSH连接和安装程序,以及如何创建一个非常简单的网站。我在哪里可以找到一个指南,解释如何创建一个针对GCE的初始Java项目,并使用一些Google API,如数据存储等。非常感谢关于如何开始的任何建议,但是Java将在几个月内完成

如果你喜欢完全控制你的基础设施,你肯定可以使用GCE,但如果我是你,我会坚持使用AppEngine,因为它自动化了你必须手动进行的大量扩展。GCE提供自动缩放功能,但它们比应用程序引擎更复杂。但是,如果您想查看它们的外观,Python GCE部分并不是专门针对Python的:

如果您发现App Engine存在局限性,可以考虑迁移到,这与App Engine类似,但允许您使用Dockerfile安装自定义库

就任务队列而言,它们仍然受到官方支持,但如果您对大规模可伸缩性感兴趣,您也可以检查一下,看看它是否适合您的需要

如果您的数据量越来越大,则允许您运行实时流式处理或批处理作业,从数据存储中读取数据并对其执行一些计算。云数据流可以从数据存储和发布/订阅队列中读取

如果您想在App Engine的上下文之外与发布/订阅或数据存储等API交互,传统的客户端库如下所示:

尽管有一个更新的项目提供更友好、更易于使用的客户端库。它们仍处于早期状态,但您可以在此处查看它们:

总的来说,如果您当前的应用程序引擎和任务队列解决方案有效,我会坚持使用它。根据您告诉我的,我要做的最大更改不是每十分钟轮询一次批处理作业,而是让将实体存储在数据存储中的代码立即启动任务队列作业或启动后台处理作业的发布/订阅消息

如果您对平台的发展方向感兴趣,可以查看此处的一些链接。虽然您可以在GCE上推出自己的解决方案,但对我来说,平台中更有趣的部分是我们的产品,如托管虚拟机和云数据流,因为它们允许您在更高的级别上解决许多此类问题,并为您节省了设置基础设施的大量麻烦。然而,其中大多数仍处于测试阶段,因此它们可能会有一些粗糙的边缘


如果这不能回答您的问题,请评论更多问题,我将尝试编辑答案。请继续关注整个Java平台的更好指南。

您看过了吗?是的,我看过了,但我希望作业能够不断运行,并检查是否有任何更改。如果我使用cron作业,它将与现在几乎相同,我运行一个循环10分钟,检查更改并处理数据,然后关闭,然后通过队列中的任务立即开始。非常感谢您的详细回答。我刚刚浏览了云发布/订阅和云数据流,这听起来很有希望,因为我宁愿坚持使用内置的自动缩放。我忘了提到我现在使用的任务队列是“持续”运行的,因为我有一个10分钟的循环,其中处理正在进行,然后它停止并重新安排作业,以便立即再次运行,因为我希望它接近实时。我猜这是个坏习惯?这就是为什么我会远离它。对于不总是由用户事件触发的任务,我是否可以使用云发布/订阅?例如,对于不是由用户操作触发的任务,我是否可以使用上述服务之一,而是创建一个持续运行的“作业/解决方案”,并从数据存储中提取/读取实时数据,以检查是否有需要处理的内容。如果有,它将处理任务,并在需要时向用户发送推送通知。推送通知已在GAE中就位。然后我是否应该通过http从googlepub/Sub和/或数据流触发该通知队列?谢谢..我的观点是,运行10分钟,然后重新安排时间,您就是Poliling数据存储。我的建议是,无论何时向数据存储写入内容,都要发布一条带有更改键的发布/订阅消息。然后,您可以使用单独的应用程序引擎模块或数据流作业来进行后台处理。不要轮询更改,而是在进行更改时推送更改。每当创建新书时,Getting Started Python链接就会发布到Pub/Sub,后台模块会以Books API为例查找图书信息。谢谢。我肯定会在用户操作上使用推送技术,但游戏是基于时间的,因此系统必须在特定时间检查游戏状态,以检查是否处于非活动状态等。因此,我需要一个连续的后台工作来检查所有正在运行的游戏状态。我想我将创建一个单独的模块,为这些bac轮询数据