编排小型python任务(主要在BigQuery中执行SQL)的最佳实践

2024-10-01 00:29:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在GCP中使用pubsub和cloud功能来协调我们的数据工作流

我们的工作流程类似于:

workflow_gcp

pubsub1和pubsub3可在不同时间触发(例如:凌晨1点和凌晨4点)。它们每天都从外部源(我们的ETL、Talend)触发

我们的云函数基本上在BigQuery中执行SQL

这工作正常,但我们必须手动创建一个编排数据库,以便在函数开始和结束时记录(以回答“函数X执行是否正常?”)的问题。编排逻辑与我们的业务逻辑紧密耦合,因为我们的云功能必须知道之前必须执行哪些功能,之后触发哪些pubsub

因此,我们正在寻找一种分离编排逻辑和业务逻辑的解决方案

我发现composer(气流)可能是一个解决方案,但是:

    >P>它本身不能运行云函数(而且API非常有限,每个项目调用16次,每秒100秒)

  • 我们可以将BigQuery与BigQuery操作符一起使用,但编排和业务逻辑将再次强耦合

那么,在我们的案例中,最好的做法是什么

谢谢你的帮助


Tags: 数据函数功能cloud流程逻辑业务解决方案
2条回答

您可以使用Cloud Composer(气流)并重新利用大部分现有设置

首先,您可以保留所有现有的云函数,并使用HTTP triggers(或您喜欢的其他函数)在气流中触发它们。您需要做的唯一更改是在Airflow中实现一个PubSub Sensor,这样它就触发了您的云功能(因此确保您可以从流程的一端到另一端控制编排)

您的解决方案将是一个AirflowDAG,它根据PubSub消息触发云函数,如果函数成功,则向Airflow报告,如果两者都成功,则使用HTTP触发器或类似触发器触发第三个云函数,相同

最后一个注释,不是直观的。气流不是为了运行作业本身,而是为了协调和管理依赖关系。使用由气流触发的云功能并不是一种反模式,实际上是一种最佳实践

在您的情况下,您可以100%重写一些内容并使用BigQuery操作符,因为您不做任何处理,只触发查询/作业,但这一概念仍然是正确的,最佳做法是利用气流确保事情在需要的时间和顺序发生,而不是自行处理这些内容。(希望有道理)

作为气流的替代方案,我会研究“argo工作流”->https://github.com/argoproj/argo

它没有编写器那样的开销,特别是对于较小的工作负载

我会:

创建了一个从外部工具读取pubsub消息的部署,并将其部署到kubernetes

基于消息执行的工作流。工作流中的每个步骤都可以是一个云函数,打包在docker中

(我会用kubernetes作业取代云功能,然后由工作流触发。)

用docker打包一个云函数并在kuberentes中运行它是非常简单的

存在使用gsutil/bq/gcloud预构建的docker映像,因此您可以创建bash脚本,使用“bq”命令行在bigquery中执行内容

相关问题 更多 >