我的Google App Engine应用程序正在向deferred tasks添加大量task queue。任务计划每x秒运行一次。如果我正确理解了桶大小属性 b ,则较高的值会阻止延迟任务在添加 b 任务之前运行。但是,有一个接近实时的要求,即任务按计划运行。在达到 bucket-size 之前,我不希望任务被阻止。相反,他们应该尽可能接近他们的预定时间。
要支持此用例,我应该使用桶大小为1且率为500(which is the current maximum rate)吗?还有哪些方法可以支持这个?谢谢!
答案 0 :(得分:6)
存储桶大小不会阻止任务单独运行。它扮演着不同的角色。
假设您有一个空队列,其速率为每秒500个任务,并且几个小时内没有添加或启动任务。然后突然间立即添加了大量任务。您想立即开始执行多少这些任务?将此数字设置为您的铲斗尺寸。例如,当桶大小为1000时,将立即启动1000个任务(然后每秒500个任务)。
这是如何工作的?该桶每秒加满500个令牌(队列的速率),最大为桶大小。当有任务可以启动时,它们只会在存储桶不为空时启动,并且每个任务启动时都会从存储桶中删除一个令牌。
答案 1 :(得分:0)
您不应使用任务队列(TQ)作为延迟任务,这些任务对于运行接近实时非常重要,假设存储桶/速率设置将确保高吞吐量。 Google小组中有几个讨论主题,其中涉及不经常延迟,任务开始时间为几分钟或更长。存储桶大小和速率不会对此产生影响 - 当您的高吞吐量TQ空闲时,您的TQ任务将只是坐在那里。到目前为止,我还没有看到谷歌为何会出现这种情况的任何解释。同样,如果你将TQ用于接近实时的任务,那么你必须处理你的任务在开始之前延迟几分钟的不频繁时间。 (我实际上是这样做的,并且还没有受到负面影响,但你必须有代码来处理结果=延迟任务)。我非常希望通过新的服务器/应用程序测试,谷歌将找到一种简单的方法来解决这个令人难以置信的大问题(手指交叉)。