首页 > 解决方案 > 如何在 gcloud 中进行“实时请求批处理”

问题描述

这是我的情况:

那么我的问题是:是否有批处理实时客户端请求的标准方法/最佳实践:

我有一个几乎可以使用 app-engine + firebase 的解决方案(用于托管共享的“队列”),但是实现延迟给我带来了麻烦(应用引擎似乎不喜欢 python 的 threading.Timer

我很感激可以与应用程序引擎一起使用的东西,但在这一点上,我愿意接受任何建议(只要它适用于谷歌云)。

谢谢!

标签: google-cloud-platformroutes

解决方案


完美的(但不是最便宜的)是使用 Dataflow。

  • 当预测请求进来时,在 PubSub 中发布
  • 以流模式部署数据流,固定窗口为 X 分钟,并在窗口中的 Y 事件之后触发另一个未累积的触发器。
  • 当执行窗口触发时(在消息数或计时器上)执行批处理

您可以想象其他设计,更简单/更便宜。

  • 仍然在 PubSub 中发布预测请求
  1. 您可以每 X 分钟安排一次 Cloud Functions 或 Cloud Run 来拉取 pubsub 订阅,然后触发批处理作业。但是,这是一个固定的时间。
  2. 当您在 PubSub 中发布消息时,您还可以存储,例如在 firestore 中,并增加一个计数器和在 PubSub 中发布的第一条消息的日期。
    • 如果消息数量超过您的阈值,请向您的其他进程执行请求,以提取 PubSub 订阅并运行批处理(如 #1 之前)。重置计数器值和消息日期值
    • 设置一个云调度程序,每分钟检查一次 Firestore 中第一条消息日期的值。如果超过您的时间限制,请向您的其他进程执行请求,以提取 PubSub 订阅并运行批处理(如 #1 之前)。重置计数器值和消息日期值

#2 会产生大量的 Firestore 读/写,但会比数据流便宜。


推荐阅读