【问题标题】:Google App Engine - Push task processing rateGoogle App Engine - 推送任务处理率
【发布时间】:2018-01-14 17:07:57
【问题描述】:

我想使用典型的推送队列在后台处理慢速操作。对于某些 HTTP 请求,应用会根据发送的参数创建一个新任务。

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

我的问题如下:

如何将处理速率、bucket-size 和 max-concurrent-requests 值固定到 queue.xml 中?

我需要确保所有请求都会得到处理,所有任务都会得到处理。但我不想为未使用的实例支付太多费用。

提前感谢您的回复。

【问题讨论】:

  • 您的意图是计算这些参数的值还是知道如何将它们放入queue.xml 文件中?
  • 感谢您的评论。我想知道如何计算这些参数。

标签: google-app-engine task-queue


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。我按照您的建议查看了 Pub/Sub。推送队列似乎更复杂,但有了它们我不在乎缩放,对吧?
【解决方案2】:

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

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

&lt;queue-entries&gt;&lt;/queue-entries&gt; 是插入队列的根元素,在 &lt;queue&gt;&lt;/queue&gt; 内可以定义:

  1. &lt;rate&gt;:

    该值是一个数字,后跟一个斜线和一个时间单位, 其中单位是 s 代表秒,m 代表分钟,h 代表小时,或 d 代表 天。例如,值 5/m 表示任务将以 每分钟5次的速度....

  2. &lt;bucket-size&gt;

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

  3. &lt;max-concurrent-requests&gt;

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

在您的特定情况下,假设您完全确定每天只有 600 个任务。这大约是每 144 秒 1 个任务。那是你的费率。在文档中看起来像

<rate>600/d</rate>

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多