瓜子云的任务调度系统结合了Kubernetes的Job和Airflow。
Airflow是Airbnb出品的任务调度系统,支持DAG调度,这一点完美的弥补了Kubernetes Job的不足。借助Kubernetes的自动扩展,集群资源统一管理,Airflow将更具灵活性,更稳定。但是,把Airflow部署在Kubernetes上是一个很大的挑战。
接下来我讲详细介绍一下瓜子云的任务调度系统搭建所遇到的问题和解决方案。
瓜子最早的时候,任务调度用的是Crontab,后来由于数据仓库的复杂调度需求,我们引入了Airflow。Airflow支持DAG依赖,失败重试,历史状态记录,log收集等多种非常使用的功能。
Airflow有很多问题:
-
Airflow的Worker需要手动搭建,可扩展性不好。
-
Job代码更新之后,需要手动部署到Worker上,非常繁琐。
-
Airflow Worker的环境太多,由各个团队自行维护,维护成本太高。
-
瓜子云平台搭建之后,所有机器都会被回收,各业务线拥有的机器将会很少,Worker将会没有地方部署。
此外,我们还希望调度系统有如下的功能:
-
DAG之间的依赖
因为数据仓库的ETL非常复杂,没有任何人能够完全掌控整个流程,我们需要把整个ETL切成很多小的DAG,这些DAG之间是有互相依赖的。
-
自动扩容缩容
瓜子这样的特点,晚上有大量批量任务需要跑,白天每个小时,每一分钟都会有增量任务需要跑。
-
环境隔离
瓜子的语言多种多样,每个团队都有很多不同的Job在不同的环境上跑着,管理很混乱,还有可能互相影响。
介于这样的问题,我们准备把调度系统部署到Kubernetes上,利用Kubernetes的环境隔离,自动扩容缩容的特性。