Google App Engine - 推送任务处理率

时间:2018-01-14 17:07:57

标签: google-app-engine task-queue

我想使用典型的推送队列来处理后台运行缓慢的操作。对于某些HTTP请求,应用程序会根据发送的参数创建新任务。

我的应用程序提供来自客户安装的家庭自动化系统的http请求。已安装系统的数量将每月增加4000个。每个系统每6秒与服务器通信一次。但是,只有在事件发生时才会创建任务,并将其嵌入到查询传递的参数中。这种情况每天发生约600次。在发送另一个任务之前处理系统发送的任务非常重要,因此在6秒之前。任务通过使用Objectify在Datastore中读取和存储数据,发送电子邮件以防万一,提醒和/或推送到手机。

我的问题如下:

如何将处理率,bucket-size和max-concurrent-requests值修复为queue.xml

我需要确保将提供所有请求并处理所有任务。但我不想为未使用的实例付出太多代价。

提前感谢您的回复。

2 个答案:

答案 0 :(得分:0)

对于您提及的用例,查看Pub / Sub + CloudFunctions可能是值得的。

如果您的队列处理器是在AppEngine标准中实现并使用自动缩放,那么它们将自动扩展以处理新的负载。对于一些繁重的吞吐量情况,我会对我的推送队列进行分片(例如,有36个队列AZ,0-9)然后根据对象id进行哈希(如果需要,可以转换为基数36),这样可以减少给定队列的压力。 / p>

答案 1 :(得分:0)

所有答案都在queue.xml reference中。在这个例子中:

<queue-entries>
  <queue>
    <name>fooqueue</name>
    <rate>1/s</rate>
    <retry-parameters>
      .....
    </retry-parameters>
  </queue>
  <queue>
    .....
  </queue>    
</queue-entries>

<queue-entries></queue-entries>是您插入队列的根元素,位于您可以定义的<queue></queue>内:

  1. <rate>

      

    该值是一个数字,后跟斜杠和一个时间单位,   其中单位为秒数,m为分钟,h为小时,d为   天。例如,值5 / m表示任务将在a处理   每分钟5次....

  2. <bucket-size>

      

    可选 ..... [] ......   如果没有为队列指定bucket_size,则默认值为5。   我们建议您将其设置为较大的值,因为默认值   对于许多用例,大小可能太小:建议的大小   处理率除以5(比率/ 5)

  3. <max-concurrent-requests>

      

    <强>可选即可。设置可以执行的最大任务数   同时从指定的队列。 该值为整数。通过   默认情况下,每个队列的限制为1000个任务。

  4. 在您的特定情况下,假设您完全确定每天只能完成600项任务。这是每144秒大约1个任务。这是你的比率。在文档中它看起来像

    <rate>600/d</rate>
    

    看到其他两个值是可选的 -