0

我们目前在一些虚拟机上使用 Rabbit MQ 和 Celery:

  • 我们有一批要并行处理的任务(例如同时处理一些文件或对图像运行一些机器学习推理)
  • 批处理完成后,我们回调我们的应用程序,获取结果并启动其他批处理任务,这些任务可能取决于先前执行任务的结果

所以我们有要求:

  • 我们的应用需要知道批次何时完成
  • 我们的应用需要跨批次收集的任务结果
  • 当我们在每个成功的任务中对应用程序进行回调时,它可能会杀死应用程序

现在我们尝试使用谷歌云来实现这一点,我们希望从虚拟机转移到谷歌云任务或发布/订阅与谷歌云功能相结合的东西。是否有针对我们在 Google Cloud 中的问题的最佳实践设置?

4

2 回答 2

1

我认为您需要一位架构师来重新设计您的解决方案以在云中提升。现在是检查您是要迁移到托管产品还是更喜欢云中的托管产品的好时机。

谈产品:

  • Rabbit QM 应该用 Pub/Sub 代替,非常合适。如果你想在这里继续使用 RabbitMQ 。如果您想将大部分解决方案迁移到 Google Cloud,PubSub 应该是最佳选择,并且从长远来看可以为 Google Cloud 生态系统带来更多好处。
  • Dataflow 是一个很好的批处理器。以下是 PubSub - Dataflow 的示例:快速入门:使用 Dataflow 进行流处理。有Google 提供的批处理模板,或者您可以创建一个:传统Flex

不要急于选择解决方案。检查您的所有业务和技术要求并探索 Google Cloud 的每个产品(托管或非托管)的优势是非常值得的。您的要求越详细,您就可以设计出最好的解决方案。

于 2020-06-23T13:50:32.433 回答
1

Google Cloud 目前只提供一个名为Cloud Composer的工作流管理器(基于Apache Airflow 项目)(我不考虑 AI Platform 工作流管理器(AI Pipeline)。这个托管解决方案允许您执行与现在使用 Celery 相同的操作

  • 发生事件
  • 调用 Cloud Function 来处理事件
  • Cloud Function 触发 DAG(Diagram Acyclic Graph - Airflow 中的工作流)
  • DAG中的一个步骤运行了很多子进程(Cloud Function/Cloud Run/任何其他)等待结束,然后继续下一步......

2个警告:

  • Composer 很贵(每月大约 400 美元,对于最小配置)
  • DAG 是无环的。没有循环被授权

注意:新的工作流程产品应该会出现在 GCP 上。目前没有 ETA,并且一开始就需要管理并行性。IMO,这个解决方案适合你,但不是短期的,可能在 12 个月内

关于 MQTT 队列,可以使用PubSub,非常高效且实惠。

选择

您可以按照此过程构建自己的系统

  • 发生事件
  • 调用 Cloud Function 来处理事件
  • 云功能需要批量创建尽可能多的 PubSub 消息。
  • 对于生成的每条消息,您在 Firestore 中写入一个带有初始事件的条目,以及 messageId
  • 生成的消息被消费(由 Cloud Function、Cloud Run 或其他任何东西),并且在流程结束时,Firestore 条目会更新,说明子流程已完成
  • 您在 Firestore 事件 On Write 上插入 Cloud Function。该函数检查初始事件的所有子流程是否已完成。如果是这样,请转到下一步...

我们在我的公司实施了类似的工作流程。但是当出现问题时,维护和调试并不容易。否则,它工作得很好。

于 2020-06-24T12:38:26.337 回答