gpt4 book ai didi

java - 如何向我的所有应用引擎实例发送请求

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:15 25 4
gpt4 key购买 nike

我跨实例和 Servlet 线程收到大量但可变的 HTTP 遥测请求。我想在 500 条记录的 block 中将 insertAll 到 BigQuery 以最小化请求,所以我将请求中的数据缓存在并发队列中,并在队列达到 500 时发送数据。我还使用 PushQueues 来写入 BigQuery,以便客户端请求不承担这个时间。

我已成功使用 ArrayBlockingQueue,但有一个异常(exception):我找不到刷新队列的方法。场景是请求流量停止。我设置了一个 cron.xml 以每 10 分钟左右发送一次刷新消息以获取最后的消息,但当然 cron 请求仅由一个实例处理,所以如果我有 10 个实例,我可能有 9 x 499记录卡住了。我真的需要一种方法来将此消息发送到所有实例。

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

我也尝试过 Datastore,但这有点愚蠢。非常慢,成本非常高。

我选择了 Appengine,因此它会在不同的负载期间自动缩放以节省成本和管理,但我真的看不出解决这个问题的方法。

最佳答案

我只是将您的数据推送到拉取队列,然后使用 cron 作业将其导出到 BigQuery。作为一个细微的变化,您可以使用 cron 将 4 个 Push Queue 任务加入队列,间隔 15 秒,以便更好地控制。你可能会发现 this article/video相关。

拉入队列在聚合大量更新方面对我们来说效果很好,但如果您以“非常”高的速度向队列中添加任务,您可能需要对队列进行分片。 This article解释为什么。我们目前这样做,效果很好。

关于java - 如何向我的所有应用引擎实例发送请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28817579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com