如何向我的所有应用引擎实例发送请求
How can I send a request to all my appengine instances
我跨实例和 Servlet 线程收到大量但可变的 HTTP 遥测请求。我想在 500 条记录的块中将 insertAll 到 BigQuery 以最小化请求,所以我将请求中的数据缓存在并发队列中,并在队列达到 500 时发送数据。我还使用 PushQueues 来写入 BigQuery,以便客户端请求不承担这个时间。
我成功地使用了 ArrayBlockingQueue,但有一个例外:我找不到刷新队列的方法。场景是请求流量停止。我设置了一个 cron.xml 以每 10 分钟左右发送一次刷新消息以获取最后的消息,但当然 cron 请求仅由一个实例处理,所以如果我有 10 个实例,我可能有 9 个x 499 条记录卡住了。我真的需要一种方法来将此消息发送给所有实例。
我也尝试过使用 MemCache,但共享队列所需的互斥标记意味着这无法扩展。
我也尝试过 Datastore,但这有点愚蠢。非常慢,非常昂贵。
我选择了 Appengine,因此它会在不同的负载期间自动缩放以节省成本和管理,但我真的看不出解决这个问题的方法。
我只想将您的数据推送到拉取队列,然后使用 cron 作业将其导出到 BigQuery。作为一个细微的变化,您可以使用 cron 将 4 个 Push Queue 任务加入队列,间隔 15 秒,以便更好地控制。您可能会发现 this article/video 相关。
拉队列在聚合大量更新方面非常适合我们,但如果您以 'very' 高速率向队列添加任务,您可能需要对队列进行分片。 This article 解释原因。目前我们是这样做的,效果不错。
我跨实例和 Servlet 线程收到大量但可变的 HTTP 遥测请求。我想在 500 条记录的块中将 insertAll 到 BigQuery 以最小化请求,所以我将请求中的数据缓存在并发队列中,并在队列达到 500 时发送数据。我还使用 PushQueues 来写入 BigQuery,以便客户端请求不承担这个时间。
我成功地使用了 ArrayBlockingQueue,但有一个例外:我找不到刷新队列的方法。场景是请求流量停止。我设置了一个 cron.xml 以每 10 分钟左右发送一次刷新消息以获取最后的消息,但当然 cron 请求仅由一个实例处理,所以如果我有 10 个实例,我可能有 9 个x 499 条记录卡住了。我真的需要一种方法来将此消息发送给所有实例。
我也尝试过使用 MemCache,但共享队列所需的互斥标记意味着这无法扩展。
我也尝试过 Datastore,但这有点愚蠢。非常慢,非常昂贵。
我选择了 Appengine,因此它会在不同的负载期间自动缩放以节省成本和管理,但我真的看不出解决这个问题的方法。
我只想将您的数据推送到拉取队列,然后使用 cron 作业将其导出到 BigQuery。作为一个细微的变化,您可以使用 cron 将 4 个 Push Queue 任务加入队列,间隔 15 秒,以便更好地控制。您可能会发现 this article/video 相关。
拉队列在聚合大量更新方面非常适合我们,但如果您以 'very' 高速率向队列添加任务,您可能需要对队列进行分片。 This article 解释原因。目前我们是这样做的,效果不错。