我们正在使用GCP中的公共和云功能来协调我们的数据工作流。
我们的工作流程类似于:
pubsub1和pubsub3可以在不同的时间触发(例如:凌晨1点和凌晨4点)。他们每天被触发,从外部来源(我们的ETL,Talend)。
我们的云函数基本上在BigQuery中执行SQL。
这很好,但是我们必须手动创建一个编排数据库来记录函数何时开始和结束(回答“函数X已执行好吗?”的问题)。业务逻辑与业务逻辑有很强的耦合,因为云功能必须知道之前必须执行哪些功能,以及之后要触发哪些pubsub。
因此,我们正在寻找一个分离业务逻辑和业务逻辑的解决方案。
我发现composer (气流)可以是一个解决方案,但是:
那么,在我们的案例中,什么是最好的实践呢?
谢谢你的帮忙
发布于 2020-04-17 10:08:22
您可以使用Composer (气流),并且仍然可以重用大部分现有的设置。
首先,您可以保留所有现有的云功能,并使用HTTP触发器 (或您喜欢的其他函数)在气流中触发它们。您需要做的唯一改变就是在气流中实现一个PubSub传感器,因此它会触发您的云功能(从而确保您可以从流程的末端控制编排)。
您的解决方案将是一个气流达格,它根据PubSub消息触发云函数,如果函数成功,则报告回气流,然后,如果两者都成功,则使用HTTP触发器或类似的方法触发第三个云函数,相同。
最后一个注意事项,这不是立即直观的。气流不是为了运行作业本身,而是为了协调和管理依赖关系。事实上,使用由气流触发的云功能并不是一种反模式,实际上是一个最佳实践。
在您的情况下,您可以100%重写一些东西并使用BigQuery操作符,因为您不做任何处理,只触发查询/作业,但这个概念仍然正确,最佳实践是利用气流来确保事情发生在您需要的时间和顺序,而不是处理这些事情本身。(希望这有任何意义)
发布于 2020-04-17 10:51:35
作为气流的替代方案,我会看一看"argo工作流程“-> https://github.com/argoproj/argo。
它没有作曲家的开销,特别是对于较小的工作量。
我会:
创建一个从外部工具读取pubsub消息的部署,并将其部署到kubernetes。
基于消息执行工作流。工作流中的每个步骤都可以是一个云函数,打包在docker中。
(我会用kubernetes作业替换云函数,然后由工作流触发。)
用docker打包云功能并在kuberentes中运行是非常直接的。
存在带有gsutil/bq/gcloud的预构建坞映像,因此您可以创建bash脚本,使用"bq“命令行执行bigquery中的内容。
https://stackoverflow.com/questions/61247490
复制相似问题