Airflow 帮助我们提高了批处理过程的可见性,解耦了批处理作业,并改进了我们的开发周期,同时增强了我们扩展和增长的能力。
问题是什么?
在 Seniorlink,我们提供服务、支持和技术,以吸引家庭护理人员。我们的重点之一是利用数据来增强我们的知识并改善用户体验。与许多寻求构建有效数据堆栈的人一样,我们采用了 Python、Spark、Redshift 和 Tableau 的核心工具集。
我们构建了一个强大的批处理流程堆栈,以便为业务交付价值,使用 EMR、ECS、Lambda 和 EC2 的混合方式在 AWS 中部署这些数据服务。与许多新事业一样,我们快速发展,最终形成了一个包含许多较小卫星作业的单体批处理流程。鉴于作业的规模和数量,我们开始失去对正在发生的事情的透明度。此外,许多作业在单个 EMR 集群中启动,并且紧密耦合,以至于一个作业的失败需要重新计算在该集群上运行的所有作业。这些行为效率低下,难以调试,并且鉴于这些批处理作业的持续时间,会导致较长的迭代周期。
我们开始浪费宝贵的时间,通过 AWS Datapiplines、AWS Lambdas 和 ECS Tasks 手动管理计划。我们的许多开发工作都花费在等待单体完成运行以检查其中的较小作业。保持系统透明度的最佳机会是在我们内部 wiki 中进行积极的文档记录。
Apache Airflow 如何帮助解决这个问题?
Airflow 为我们提供了一种将分散的工具协调到一个地方的方法。我们不再需要处理多个计划,而是拥有一个简单的 UI 来考虑。我们获得了很大的透明度,能够监控任务的状态、从工作流中的任何给定点重新运行或重新启动任务,并使用 DAG 管理作业之间的依赖关系。我们能够解耦我们的单体,并自信地调度生成的较小任务。
结果是什么?
通过使用 DAG 和 UI,Airflow 提高了我们批处理过程的可见性。鉴于我们能够将单体批处理作业解耦为几个较小的作业,我们的端到端运行时间减少了 20%。通过我们管理和隔离所有任务的能力,我们的开发和调试时间缩短了。我们能够将多样化的工具集合并到一个更中心的位置。最后,由于其广泛的应用,我们能够快速将这个新框架推向我们的生产环境。