我在GAE上使用应用程序接收在群集上运行的PBS pro生成的电子邮件。该应用程序通过电子邮件解析有关群集作业的统计信息,并生成一个简单的报告。
问题在于,当群集上启动大量作业时,应用程序可能会在几秒钟内收到1000多封电子邮件。为了处理请求,大量的实例都会被启动。我可以通过将允许的延迟设置为几秒的数量来控制这一点,但这可能会在提供包含报告的应用程序的首页时产生可见的延迟。
有没有办法为每个单独的网址设置可接受的延迟,以便
/_ah/mail/user@myapp.appspotmail.com
可以具有高延迟而不会导致更多实例启动,但是如果任何其他URL导致高延迟,则会启动更多实例?
- 安德鲁
答案 0 :(得分:3)
据我所知,没有办法根据路由在管理控制台中设置最大延迟。但是,您可以做的是,一旦收到您的电子邮件,就将电子邮件的文本提供给任务队列任务。这些可以限速到非常精细的细节。如果您正在使用python,则可以使用deferred模块,因此您不必为这些任务队列任务创建单独的处理程序。我没有在GAE上使用java的经验,所以我不知道是否有相当于java的。
答案 1 :(得分:0)
不,您无法为每个网址设置应用延迟设置。
缓解问题的一种方法是让邮件处理程序完成最少的工作。因此,您应该将所有耗时的操作移至task queue,而不是在邮件处理程序中执行所有解析和报告生成。这样邮件处理程序可以快速返回,允许它一次处理更多请求。
任务队列使您可以控制并行任务的执行,因此您可以微调需要多少实例。