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