我想创建一个Google App Engine应用程序,在应用程序中单击按钮后,在固定时间(例如一天)向用户发送Facebook消息。使用cron或task queue进行潜在的数百万小工作是不可扩展的。我也考虑使用background thread来实现我自己的队列,但据我所知,这只能使用Backends API,这是为更大的用途而设计的,并不是免费的。
免费的Google App Engine应用程序是否有可扩展的方式在一段固定的时间后执行大量小任务?
答案 0 :(得分:1)
对于初学者来说,如果你想要做数百万个小工作,那么无论你怎么看,你都会很快超过免费配额。免费配额用于测试。
这取决于您的任务的粒度。如果你每天执行一次很多任务,cron连接到mapreduce操作(基本上在任务队列上发出一堆任务)工作正常。您基本上会发出一个数据存储区查询来查找需要运行的任务,并将它们发送到mapreduce上。
如果您每天(每分钟)执行此任务数千次,则可能会因为发出许多查询而变得昂贵。请注意,如果大多数查询没有返回任何内容,则成本仍然很低。
另一种选择是将您的任务存储在内存中,而不是存储在数据存储区中,这是您要开始使用后端的地方。但后端维护成本很高。考虑使用谷歌计算引擎,它可以提供更便宜的虚拟机。
编辑:
如果您使用cron / datastore路由,则只要用户想要发送延迟消息,您就会存储新实体。最重要的是,它有一个可查询的时间戳,用于何时发送消息,可能四舍五入到最接近的分钟或最近的5分钟,无论您决定什么样的粒度。
然后你会有一个以设定的间隔运行的cron作业,比如每分钟。在每次运行时,它将为给定分钟内需要发送的所有cron作业构建查询。
如果你确实每分钟都有数十万条消息要发送,那么你就不会想要从cron任务中做到这一点。您希望cron任务生成一个mapreduce作业,该作业将扇出查询并生成任务以发送您的消息。