应用程序的任务,Cron作业或后端

时间:2011-08-30 02:01:57

标签: google-app-engine

我正在尝试构建一个非平凡的GAE应用程序,我不确定是否需要根据GAE的请求超时限制使用cron作业,任务,后端或所有内容的组合有HTTP请求。

我需要做的不同步骤是:

1)我需要超过15,000个站点,我需要定期从中提取数据,而无需任何用户交互。站点总数不会变为静态,但它们都会保存在数据存储区[Table0]中,并沿着它们读取的时间间隔保存。间隔可以每天每隔30天变化一次。

2)对于符合“拉”计划标准的步骤#1中的每个站点,我需要通过HTTP GET从中获取数据(同样,它可能是全部或只有2或3个站点)。从网站获得响应后,解析结果并将此数据保存到数据存储区中[表1]。

3)对于最近在[Table1]中放入数据存储区的所有数据(它们都有一个特殊标志),我需要向第三方站点发出额外的HTTP请求以进行一些额外的处理。一旦我从该站点收到数据,我就会将所有相关信息存储到数据存储区中的另一个表[Table2]中。

4)一旦数据可用并从步骤#3准备就绪,我需要完成所有这些并执行一些额外的转换并更新数据存储区中的原始表[Table1]。

我不确定我需要使用哪些不同的组件来确保我可以完成每项工作,而不会超过GAE网络请求的响应截止日期。对于由cron作业和任务发起的请求,我相信您可以在10分钟内完成它,而典型的用户驱动请求则允许30秒。

3 个答案:

答案 0 :(得分:5)

任务队列通常是执行此操作的最佳方式,但您可能需要查看App Engine Pipeline API,它专为您正在讨论的工作流程而设计。

答案 1 :(得分:3)

GAE对于您的用例来说是一个艰难的平台。但是,出于极端的受虐狂,我正在尝试类似的东西。根据我迄今为止的经验,这是我的两分钱:

  1. 后端 - 将它们用于您可能拥有的任何长期运行的I / O密集型任务(Web抓取是一个很好的示例,假设您可以推迟计算密集型处理)。
  2. Mapreduce API - 非常适合计算密集型/并行作业,如统计数据收集,索引等。直到最近,这个库只有一个映射器实现,但最近谷歌还发布了一个内存的Shuffler,它对于适合大约100MB。
  3. 任务队列 - 当其他一切都失败时: - )。
  4. Cron--主要是为了启动周期性任务 - 你执行它们的上下文取决于你。
  5. 设计后端任务可能是个好主意,这样如果你有备用的前端CPU周期,可以使用任务队列在“前端”上下文中调度(手动或可能通过查询当前的配额使用情况)。

答案 2 :(得分:0)

在Backends出来之前我放弃了GAE,因此无法对此发表评论。但是,我做了几次是:

  • Cron计划启动流程
  • Cron处理程序调用任务URL
  • 任务从数据存储区抓取第一项(URL),执行HTTP请求,对数据进行操作,将URL记录更新为已处理,并再次调用任务URL。

所以cron基本上是定期唤醒taskqueue,taskqueue以递归方式运行,直到达到某个停止点。

您可以在我的公共GAE应用中看到它 - https://github.com/mavenn/watchbots-gae-python