使用 Airflow 管理容器化运行的定时任务有没有什么坑? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
lvhuiyang
V2EX    程序员

使用 Airflow 管理容器化运行的定时任务有没有什么坑?

  •  
  •   lvhuiyang
    lyu-huiyang 2024-07-05 16:08:34 +08:00 2539 次点击
    这是一个创建于 466 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景:手里的项目是 Django 项目,定时任务是用的 Celery 库来集成到 Django 中,随着定时任务的增多,变得不太好管理(可视化监控、异常重试、报警等),并且有些定时任务并非使用 Python 编写,无法集成到 Celery 中,因此想用专门的定时任务管理的系统来解决这个问题。

    思路:部署一套 Airflow 系统,然后 Django 项目(或者其他编程语言的项目)打包为 Docker 镜像,每次定时任务运行 docker run --rm ... 来启动一个容器,并在运行完成后删掉。

    请教大家这个方式有没有什么坑?有没有过来人说一下?

    回帖后必回感谢红心,谢谢 !
    14 条回复    2024-07-08 22:29:23 +08:00
    PeiXyJ
        1
    PeiXyJ  
       2024-07-05 16:47:09 +08:00   1
    直接用 XXL-job 做定时任务管理不行么? 为什么还要引入 Docker ?
    David1119
        2
    David1119  
       2024-07-05 16:49:12 +08:00   1
    airflow 挺好的,就是不太轻量,感觉有些占资源。还有个 perfect 可以看看,没具体用过,可以都搭一下对比对比。https://github.com/PrefectHQ/prefect
    G64q9J89mN5KSgmE
        3
    G64q9J89mN5KSgmE  
       2024-07-05 16:52:38 +08:00   1
    airflow 挺好的,但是稍微有点重
    重要一点,airflow 用 postgres 做管理数据库,mysql 会不定时崩溃
    lvhuiyang
        4
    lvhuiyang  
    OP
       2024-07-05 17:04:45 +08:00
    @PeiXyJ 感谢回复,引入 Docker 是为了方便运行不同语言环境的项目,这些项目本身是 Docker 部署的,有对应的 image 管理,所以相对比较方便。
    lvhuiyang
        5
    lvhuiyang  
    OP
       2024-07-05 17:06:10 +08:00
    @David1119 感谢回复,之前用过 airflow 所以会优先考虑 airflow 了,倒是可以对比一下 perfect
    quanqqqq
        6
    quanqqqq  
       2024-07-05 17:06:14 +08:00   1
    @ddkk1112 确实,之前老是碰到一个死锁问题,然后导致 scheduler 挂掉
    lvhuiyang
        7
    lvhuiyang  
    OP
       2024-07-05 17:07:52 +08:00
    @ddkk1112 @quanqqqq 感谢回复,嗯预期是使用 postgres 作为数据库的
    Or13rs
        8
    Or13rs  
       2024-07-05 17:36:43 +08:00   2
    我们生产上用了五年了,目前规模到大概是每天一万多个任务,我觉得 airflow 作为比较早的方案,随着规模的扩大,会越来越难维护,很重。
    现在遇到的困境大概就是日志和告警,
    日志方面,可能因为我们是早期版本,airflow 的日志会占用大量 inode ,
    然后是告警,因为 airflow 的核心设计,导致状态转移会因为一些重启、重试、失败难以监控,直接导致通过获取日志监控失败,通过扫 airflow 的 instance 表状态转移也不容易监控,除非提高扫描频率,但是会增加数据库压力,可能 binlog 才是唯一的出了(摊手)
    最后看你们使用的重不重,
    如果不重,独立一个 celery 服务会是一个很好的方案,
    如果要管理方便 perfect 和 dagster 会很好,
    另外还有些更轻量级的新奇方案 https://github.com/faust-streaming/mode
    lvhuiyang
        9
    lvhuiyang  
    OP
       2024-07-05 17:48:48 +08:00
    @Or13rs 感谢回复,很宝贵的经验。 我目前管理的项目规模还不大,觉得上面提到的 Airflow 的问题也还可以接受,总之很感谢分享这些经验,我再调研一下
    kratosmy
        1
    kratosmy  
       2024-07-06 19:45:45 +08:00 via iPhone   1
    @Or13rs 我们会在 openshift 上用 airflow 的 kubenetesexecutor 跑各个 batch job ,会有什么坑吗
    Philippa
        11
    Philippa  
       2024-07-07 07:38:15 +08:00   1
    Airflow 毛病实在太多了,6 年前一个项目用了,除了重量级,一些 bugs 连 Airbnb 自身都无法解决。
    Python 代码无法序列化,需要提前打包成 image 进行运行。现在很多已经可以直接序列化代码发送到各个机器运行,比如 Ray ,这种实验性有需要高性能的代码就非常贴切。
    状态管理以来本身的 databases ,但这个表设计和 API 又是它们自己定的,无法优化用起来也要迁就。
    反应很慢,而且界面也不友好,它的关系依然需要手动定义,所以没有降低复杂度,只是有一个可视化。

    如果是单纯的 Python ,我优先考虑 Ray 。Ray 和 Airflow 一样,都有 kubernetes 的 operators ,容器方面交给 k8s 就可以了。
    如果是多种语言只是需要一个外层的调度框架,我会优先考虑 Go 生态的。甚至其实自己写也没差,因为可以自己 100% 控制。
    lvhuiyang
        12
    lvhuiyang  
    OP
       2024-07-07 09:53:18 +08:00
    @Philippa 感谢回复,很好的建议,我再调研一下。
    Or13rs
        13
    Or13rs  
       2024-07-07 19:23:56 +08:00   1
    @kratosmy 我们都没有敢上 K8S 的执行器,怕坑填不上,只是用调度向 K8S 提交计算任务,包括 hive ,spark ,flink 这些类型任务,目前遇到的坑是,K8S 执行任务的可观测性很差,经常出现任务提交和任务执行日志翻半天, 任务一旦故障,告警信息定位和告警触发都是问题
    kratosmy
        14
    kratosmy  
       2024-07-08 22:29:23 +08:00 via iPhone
    @Or13rs 好吧,但现在都准备跑在 openshift 上了,只能看后面并行的时候能不能解决这些问题
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5443 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSIO: 3.9.8.5 39ms UTC 08:04 PVG 16:04 LAX 01:04 JFK 04:04
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86