0

我目前正在开发 API。我想通过前端上传数据,然后在服务器上处理这些数据。我想独立开发各个步骤,并独立维护它们。这个 dag 的第一步相当复杂。有很多不同的测试机器,每一种都提供一组略有不同的原始数据。根据机器的不同,必须启动不同的任务。在这一步中,文件应该被加载和标准化。之后,数据被传递给几个任务进行分析(最好也是并行的),结果最终存储在数据库中。文件大小从几 MB 到几 GB 不等。

稍后将扩展 API,使用先前存储在数据库中的数据执行计算。计算在 CPU 时间和内存使用方面很密集。

由于我对这种复杂的结构了解不多,因此我目前检查了以下系统。

阿尔戈

它需要自己的 Kubernetes 集群来部署系统。然后,您可以在集群中的容器中部署和运行各个任务。资源分配接管 K8s。但是,设置集群对我来说相当复杂,因为系统最终要设置在云主机上,它本身不支持 Kubernetes。这必须手动设置。另一个缺点是执行速度很慢,因为一次必须推送和启动一个容器。优势极其灵活和可扩展。可能也是面向未来的,因为每个容器都可以单独维护。

芹菜和级长

您可以轻松地在 Python 中编写各个流程并定义依赖关系。在 Celery 中,您还有一个任务队列,因此您可以有效地管理许多单独的任务。使用 Prefect,可以通过容器很好地拦截不在 Python 中运行的任务。但是,没有资源管理,而且系统似乎不能很好地扩展。

与 Prefect/Celery 相比,Argo 还提供哪些其他好处?

谢谢

4

1 回答 1

1

完全免责声明,我为 Prefect 工作,但我认为 Prefect 确实可以很好地插入这里,你有一个 API 可以访问 Prefect 的 API 以 create_flow_runs 来处理通过前端传入的数据。听起来您还需要一个分散的解决方案,其中计算发生在不同的机器上。Prefect 允许您通过在这些不同的机器上拥有多个代理来做到这一点,然后您可以调用由各个代理获取的流运行。

是的,你也是对的,非 Python 任务可以用容器抽象,并使用任务来启动容器。代理提供了某种程度的资源管理,因为您可以在多台机器上拥有它们。如果您也决定使用 Kubernetes 进行更好的资源管理,Prefect 也支持这一点,并且 Kubernetes 代理可以控制每个容器的资源。

这对您来说可能是一个很好的资源

于 2022-02-28T19:12:44.440 回答