【问题标题】:Batch processing of incoming notifications with GAE使用 GAE 对传入通知进行批处理
【发布时间】:2017-05-18 22:09:29
【问题描述】:
我的应用引擎应用接收来自 SendGrid 的通知,用于处理电子邮件递送、打开等。Sendgrid 不会对这些通知进行太多批处理,因此我每秒可以收到多个通知。
我想对传入的通知进行批处理,例如处理最后一分钟收到的所有通知(我的处理包括事务,因此我需要将它们组合起来以避免争用)。似乎有几种方法可以做到这一点......
为了存储传入的通知,我可以:
- 将实体添加到数据存储区或
- 创建拉取队列任务。
对于触发处理,我可以:
- 每分钟运行一次 CRON 作业(这是个好主意吗?)或
- 让处理传入 Sendgrid 请求的处理程序触发通知处理,但前提是最后一次触发是在一分钟之前(可以将最后一次触发日期存储在内存缓存中)。
我很想听听上述或其他方法的优缺点。
【问题讨论】:
标签:
python
google-app-engine
notifications
sendgrid
【解决方案1】:
几天后,我想出了一个运行良好的实现。
为了存储传入的通知,我将数据存储在拉取队列任务中。在我提出问题时,我不知道您实际上可以在任务中存储您想要的任何原始数据,并且任务本身不必是函数的执行。您可能可以将传入的数据存储在数据存储中,但随后您将创建自己的拉取任务,因此您不妨使用 GAE 提供的拉取任务。
为了触发工作人员处理拉取队列中的任务,我看到了一篇由前 GAE 开发人员撰写的关于 On-demand Cron Jobs 的优秀博文。我不想在这里重复整个帖子,但基本思想是每次将任务添加到拉取队列时,都会创建一个工作任务(常规推送队列)来处理拉取队列中的任务。对于工作任务,您添加一个与时间间隔相对应的任务名称,以确保您在该时间间隔内只有一个工作任务。它可以让您获得 1 分钟 CRON 作业的好处,但额外的性能奖励是它只在需要时运行,因此您不需要在不需要时运行 CRON 作业。