Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何向所有appengine实例发送请求_Java_Google App Engine_Servlets_Google Bigquery - Fatal编程技术网

Java 如何向所有appengine实例发送请求

Java 如何向所有appengine实例发送请求,java,google-app-engine,servlets,google-bigquery,Java,Google App Engine,Servlets,Google Bigquery,我在实例和Servlet线程之间收到大量但数量可变的HTTP遥测请求。我想在500条记录的块中插入到BigQuery以最小化请求,因此我将请求中的数据缓存在并发队列中,并在队列达到500条时发送数据。我还使用PushQueues来编写BigQuery,这样客户机请求就不会占用这段时间 我成功地使用了ArrayBlockingQueue,但有一个例外:我找不到刷新队列的方法。场景是请求流量停止。我设置了一个cron.xml,每隔10分钟左右发送一条flush消息,以便将最后的消息发送出去,但当然c

我在实例和Servlet线程之间收到大量但数量可变的HTTP遥测请求。我想在500条记录的块中插入到BigQuery以最小化请求,因此我将请求中的数据缓存在并发队列中,并在队列达到500条时发送数据。我还使用PushQueues来编写BigQuery,这样客户机请求就不会占用这段时间

我成功地使用了ArrayBlockingQueue,但有一个例外:我找不到刷新队列的方法。场景是请求流量停止。我设置了一个cron.xml,每隔10分钟左右发送一条flush消息,以便将最后的消息发送出去,但当然cron请求只由一个实例处理,因此如果我有10个实例,可能会有9 x 499条记录被阻塞。我真的需要一种方法将此消息传递到所有实例

我还尝试使用MemCache,但共享队列所需的互斥标记意味着这无法扩展

我也尝试过数据存储,但这有点愚蠢。非常慢,非常昂贵


我选择了appengine,这样它可以在不同的负载期间自动缩放,从而节省成本和管理,但我真的看不到解决这个问题的方法。

我只需将您的数据推送到拉入队列,然后使用cron作业将其导出到BigQuery。作为一个细微的变化,您可以使用cron排队,比如说,每隔15秒就有4个推队列任务,以便进行更精细的控制。你可能会发现相关的


拉式队列在聚合高容量更新方面非常有效,尽管如果您以“非常”高的速率向队列添加任务,您可能希望切分队列。解释了原因。我们目前正在这样做,效果很好。

如果您知道某个实例的ID,如果您是该应用程序的管理员,可以通过与该实例联系。(如果未明确使用模块,
模块
将命名为
默认
)。不幸的是,我不知道列出当前实例的通用API;我相信(不是100%确定)手动缩放时,它们会是1,2。。。但这并没有记录在案,所以可能会发生变化。我建议为API或
gcloud preview app
命令打开一个功能请求,列出当前活动(实例、版本、模块)三元组。在不知道如何使用它的情况下,您发现数据存储速度慢的原因是什么?您是否不能将数据推送到一个拉入队列,然后使用一个或多个cron作业将其导出到BQ?您可能会发现相关的信息。@Alex谢谢。我认为使用MemCache和init来注册每个实例可能是可行的,但不幸的是,使用自动缩放的寻址方案是不可行的,只有@tx802拉队列对我没有吸引力,因为它们不会自动缩放,但它们需要进一步检查。我滥用数据存储作为缓存。谢谢你的精彩视频。@tx802拉队列运行良好。谢谢你的指点。如果你愿意,把它作为答案,我会标记为已回答。你知道你引用的文章的名称吗?看起来这个URL现在已经死了,但是我确信它可以找到。如果我用谷歌搜索这个URL,我会得到一个我认为可能就是其中之一的页面!