【发布时间】:2012-03-09 12:47:52
【问题描述】:
我们从 GAE 推送警报,假设我们需要向 CD2M(Cloud 2 Device Messaging)推送 50 000 个警报。为此,我们:
- 读取所有想要从数据存储中获取警报的人
- 循环并为每个通知创建一个“推送任务”
问题是任务的创建需要一些时间,因此当用户群增长时,它不会扩展。根据我的经验,当有很多任务时,我们只需要 20-30 秒就可以创建任务。一项任务公关的原因。推送消息是为了让我们可以在失败时重试任务,并且只会影响单个订阅者。此外,C2DM 一次只支持发送给一个用户。
如果我们这样做会更快:
- 读取所有想要从数据存储中获取警报的人
- 循环并为每 100 个订阅者创建一个“池任务”
- 每个“池任务”在执行时会生成 100 个“推送任务”
任务执行非常快,所以在我们的场景中,任务的创建似乎是瓶颈,而不是任务的执行。这就是为什么我认为这种方案能够增加应用程序的并行性。我猜这会导致更快的执行,但我可能又错了:-)
【问题讨论】:
标签: google-app-engine android-c2dm task-queue