有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Google App Engine中,对于一个包含许多延迟任务的任务队列,最佳的存储桶大小是多少?

我的Google App Engine应用程序正在向task queue添加大量deferred tasks。任务计划每x秒运行一次。如果我正确理解bucket size属性b,则高值将阻止延迟任务运行,直到添加了b任务。但是,有一个接近实时的要求,即任务按计划运行。我不希望在达到存储桶大小之前阻止任务。相反,他们应该尽可能地接近预定时间

为了支持这个用例,我应该使用bucket size1和rate500(which is the current maximum rate)?还有哪些其他方法支持这一点?谢谢


共 (2) 个答案

  1. # 1 楼答案

    您不应该使用taskqueues(TQ)来处理延迟的任务,这些任务对于接近实时运行非常重要,因为假定bucket/rate设置将确保高吞吐量。在谷歌的小组里有好几个讨论线程,讨论任务开始时间不经常延迟几分钟或更长。Bucket大小和速率不会对这一点产生影响,当您的高吞吐量TQ处于空闲状态时,您的TQ任务将只是坐在那里。到目前为止,我还没有看到谷歌对这种情况的解释。同样,如果您将TQs用于接近实时的任务,那么您必须将任务在开始之前延迟几分钟的罕见时间作为例外情况处理。(事实上,我这样做了,还没有受到负面影响,但您必须有代码来处理结果=延迟的任务)。我最大的希望是,随着新的服务器/应用程序测试的进行,谷歌将找到一种简单的方法,用TQs解决这个难以置信的大问题

  2. # 2 楼答案

    存储桶大小不会阻止任务单独运行。它扮演着不同的角色

    假设您有一个每秒500个任务的空队列,并且有几个小时没有添加或启动任务。然后突然,大量的任务同时被添加。您希望立即启动其中多少项任务?将此数字设置为您的桶大小。例如,当bucket大小为1000时,将立即启动1000个任务(然后每秒启动500个任务)

    这是怎么回事?bucket每秒会被500个令牌(队列速率)填满,最大值为bucket大小。当有任务可启动时,它们只会在bucket不为空时启动,并且在每个任务启动时,将从bucket中删除一个令牌