如何使用 Google Cloud Functions / Tasks / PubSub 进行批处理?
How to use Google Cloud Functions / Tasks / PubSub for Batch Processing?
为此,我们目前在某些虚拟机上使用 Rabbit MQ 和 Celery:
- 我们有一批要并行处理的任务(例如,同时处理一些文件或运行 图像的一些机器学习推理)
- 批处理完成后,我们回调我们的应用程序,获取结果并启动一些其他批处理任务,这可能取决于先前执行的任务的结果
所以我们有要求:
- 我们的应用程序需要知道批处理何时完成
- 我们的应用程序需要跨批收集的任务结果
- 当我们在每个成功的任务中回调应用程序时,它可能会杀死应用程序
现在我们尝试为此使用 Google Cloud,我们希望从 VM 转移到类似 Google Cloud Tasks 或 Pub / Sub 与 Google Cloud 相结合的东西职能。 Google Cloud 中是否有针对我们问题的最佳实践设置?
我认为您需要一位架构师来重新设计您的解决方案以在云中提升。现在是检查您是想转移到托管产品还是更喜欢在云中使用相同产品的好时机。
谈论产品:
- Rabbit QM应该换成Pub/Sub,挺合适的。如果您想继续使用 RabbitMQ here。如果您想将大部分解决方案迁移到 Google 云,那么 PubSub 应该是最佳选择,从长远来看可以为 Gooogle Cloud 生态系统带来更多好处。
- Dataflow 是一个很好的批处理程序。这是 PubSub 的示例 - 数据流:Quickstart: stream processing with Dataflow. There are Google-Provided batch templates or you can create one: traditional or Flex.
不要着急选择解决方案。非常值得检查您的所有业务和技术要求,并探索 Google 云的每个产品(托管或非托管)的优势。您的要求越详细,您设计的解决方案就越好。
Google Cloud 提供,今天,只有一个名为 Cloud Composer (based on Apache Airflow project) (I don't take into account the AI Platform workflow manager (AI Pipeline)) 的工作流管理器。这个托管解决方案允许您执行与今天使用 Celery
相同的事情
- 事件发生
- 调用云函数来处理事件
- Cloud Function触发一个DAG(Diagram Acyclic Graph - Airflow中的一个workflow)
- DAG中的一个步骤运行了很多子流程(Cloud Function/Cloud Run/anything else)等待结束,继续下一步...
2 条警告:
- Composer 很贵(最低配置每月大约 400 美元)
- DAG 是非循环的。没有循环被授权
注意:新的工作流程产品应该会出现在 GCP 上。目前没有预计到达时间,一开始要管理并行性。 IMO,这个解决方案适合你,但不是短期的,也许在 12 个月内
关于MQTT队列,可以使用PubSub,非常高效且实惠。
备选
您可以按照此过程构建自己的系统
- 事件发生
- 调用云函数来处理事件
- 云函数创建与批处理一样多的 PubSub 消息。
- 对于生成的每条消息,您都将一个条目写入 Firestore,其中包含初始事件和 messageId
- 生成的消息被消耗(由 Cloud Function、Cloud 运行 或其他任何东西)并且在过程结束时,Firestore 条目被更新,表明子过程已经完成
- 您在写入时在 Firestore 事件上插入 Cloud Function。该函数检查初始事件的所有子流程是否已完成。如果是,请进行下一步...
我们在我的公司实施了类似的工作流程。但是当出现问题时,维护和调试并不容易。否则,效果很好。
为此,我们目前在某些虚拟机上使用 Rabbit MQ 和 Celery:
- 我们有一批要并行处理的任务(例如,同时处理一些文件或运行 图像的一些机器学习推理)
- 批处理完成后,我们回调我们的应用程序,获取结果并启动一些其他批处理任务,这可能取决于先前执行的任务的结果
所以我们有要求:
- 我们的应用程序需要知道批处理何时完成
- 我们的应用程序需要跨批收集的任务结果
- 当我们在每个成功的任务中回调应用程序时,它可能会杀死应用程序
现在我们尝试为此使用 Google Cloud,我们希望从 VM 转移到类似 Google Cloud Tasks 或 Pub / Sub 与 Google Cloud 相结合的东西职能。 Google Cloud 中是否有针对我们问题的最佳实践设置?
我认为您需要一位架构师来重新设计您的解决方案以在云中提升。现在是检查您是想转移到托管产品还是更喜欢在云中使用相同产品的好时机。
谈论产品:
- Rabbit QM应该换成Pub/Sub,挺合适的。如果您想继续使用 RabbitMQ here。如果您想将大部分解决方案迁移到 Google 云,那么 PubSub 应该是最佳选择,从长远来看可以为 Gooogle Cloud 生态系统带来更多好处。
- Dataflow 是一个很好的批处理程序。这是 PubSub 的示例 - 数据流:Quickstart: stream processing with Dataflow. There are Google-Provided batch templates or you can create one: traditional or Flex.
不要着急选择解决方案。非常值得检查您的所有业务和技术要求,并探索 Google 云的每个产品(托管或非托管)的优势。您的要求越详细,您设计的解决方案就越好。
Google Cloud 提供,今天,只有一个名为 Cloud Composer (based on Apache Airflow project) (I don't take into account the AI Platform workflow manager (AI Pipeline)) 的工作流管理器。这个托管解决方案允许您执行与今天使用 Celery
相同的事情- 事件发生
- 调用云函数来处理事件
- Cloud Function触发一个DAG(Diagram Acyclic Graph - Airflow中的一个workflow)
- DAG中的一个步骤运行了很多子流程(Cloud Function/Cloud Run/anything else)等待结束,继续下一步...
2 条警告:
- Composer 很贵(最低配置每月大约 400 美元)
- DAG 是非循环的。没有循环被授权
注意:新的工作流程产品应该会出现在 GCP 上。目前没有预计到达时间,一开始要管理并行性。 IMO,这个解决方案适合你,但不是短期的,也许在 12 个月内
关于MQTT队列,可以使用PubSub,非常高效且实惠。
备选
您可以按照此过程构建自己的系统
- 事件发生
- 调用云函数来处理事件
- 云函数创建与批处理一样多的 PubSub 消息。
- 对于生成的每条消息,您都将一个条目写入 Firestore,其中包含初始事件和 messageId
- 生成的消息被消耗(由 Cloud Function、Cloud 运行 或其他任何东西)并且在过程结束时,Firestore 条目被更新,表明子过程已经完成
- 您在写入时在 Firestore 事件上插入 Cloud Function。该函数检查初始事件的所有子流程是否已完成。如果是,请进行下一步...
我们在我的公司实施了类似的工作流程。但是当出现问题时,维护和调试并不容易。否则,效果很好。