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

Dan*_*man 7 google-app-engine

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

我需要做的不同步骤是:

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

2)对于符合"拉"计划标准的步骤#1中的每个站点,我需要通过HTTP GET从中获取数据(同样,它可能是所有站点或少至2或3个站点).一旦我从站点获得响应,解析结果并将此数据保存到数据存储区[Table1].

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

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

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

Nic*_*son 5

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


小智 3

GAE 是一个适合您的用例的强大平台。但是,出于极端的受虐狂,我正在尝试类似的事情。根据我迄今为止的经验,这是我的两分钱:

  1. 后端——将它们用于您可能拥有的任何长时间运行的 I/O 密集型任务(网络爬行是一个很好的例子,假设您可以推迟计算密集型处理以供以后使用)。
  2. Mapreduce API——非常适合计算密集型/并行作业,例如统计数据收集、索引等。直到最近,这个库只有一个映射器实现,但最近谷歌还发布了一个内存中的 Shuffler,它适用于大约100MB。
  3. 任务队列——当其他一切都失败时:-)。
  4. Cron——主要是启动周期性任务——在哪个上下文中执行它们,取决于你。

如果您有空闲的前端 CPU 周期,那么设计后端任务可能是一个好主意,以便可以使用任务队列在“前端”上下文中调度(手动,或者可能通过查询当前配额使用情况)它们。