Migrate from Airflow to StepFunction for a Supply Chain Company#
Keywords: AWS Step Function, StepFunction, SFN, Case Study
Overview#
帮助一个物流公司解决在人员紧缺的情况下, 大量任务积压, 以及 data visibility 下降的问题. 以及希望能够适应不断增长的数据量和业务需求.
Situation#
有一个 supply chain 企业 (Infor, 有 10k+ 雇员), 它们的各种业务系统都跑在 AWS 上, 由许多大大小小的服务组成.
其中 Data Team 一直在用 AWS Airflow 来管理它们的 ETL 任务以及报表任务. 这些任务的都不复杂, 但是需要做的任务数量很多.
在 COVID 期间, 它们的 Data Team 人员因为搬去了其他地方离开了 从 10 人下降到了 3 人, 但是它们的业务却增长了不少.
由于 Airflow 本身是一个服务器, 需要人来维护, 特别是在不断增长的业务面前, scale out 就成为了问题, 而 scale out 本身也需要人来维护.
另外由于写这些工作流编排程序的人既需要懂数据和业务, 还需要会开发 Airflow 的程序. 这样的复合型人招聘不好找, 它们之前通常都是内部培养的.
由于总任务量很大, 人员流失后他们的新任务就积压了很多, 一些旧的任务 crush 了也没有人手修复, 导致 data visibility 下降的很严重.
Task#
客户找到了 AWS, 希望能找到一个解决方案, 希望在 6 个月内解决积压的任务, 恢复 data visibility.
我是负责这个 Case 的 Solution Architect, 负责跟他们的 Business 和 Data Engineer Team 对接.
- 根据我的观察, 解决积压的任务, 恢复 data visibility 只是结果, 不是 root cause. 而 root cause 则是:
维护基础设施的人手不够
Airflow 不能根据业务量的增长 scale out
不容易招聘到同时具有数据业务能力以及 Airflow 编程能力的人
所以我重点解决这三个 root cause.
Action#
我将这个需求分拆成了 4 步:
了解这个项目的实际需求, 以及 Data Team 的上下游系统和人员关系.
制定详细的解决方案, 给客户做 demo, 并且得到客户的确认.
制定详细的实施计划, 规划时间线, 评估每个阶段需要的人, 以及计划要达到的目标.
对人员进行培训, 以及具体执行.
遇到的难点:
这个项目的需求都不复杂, 但是数量多, 而且对外部的影响较大. 我作为外人很难快速的把业务逻辑都弄清楚.
这个项目来自于客户独特的需求, 我无法说就简单的推荐一个产品就期待能解决所有问题. 我必须为客户的需求量身定做解决方案.
具体的实施也不容易, 因为这个项目的人员流失严重, 人手不够, 但是任务量又很大.
其中我的具体行动是这样的:
- 了解这个项目的实际需求, 以及 Data Team 的上下游系统和人员关系.
了解谁是这个系统的 downstream data consumer, 谁需要这个 dashboard report, 如果没有这些数据和 report, 会造成什么影响, 这些影响有多大, 并且对他们排序.
了解谁是这个系统的 upstream data producer, 他们能提供什么样的帮助.
具体这个 Data Team 的人员关系, 以及各自的技能水平. 谁能拍板做决定, 谁是开发的主力, 我可以 leverage 谁来帮我做事情. 从而让我专注于设计解决方案, 而让 Data Team 上的人帮我理清业务逻辑 (解决难点 1)
- 制定详细的解决方案, 给客户做 demo, 并且得到客户的确认.
根据需求, 初步方案有两种.
一是用 AWS MWAA 让 AWS 完全托管管理 Airflow, 减轻了运维的压力, 并且让扩容变得简单.
- 二是迁徙到 AWS Step Function (SFN), 完全避免了运维, 并且可以几乎无限扩容.
虽然对于团队中已有的 Engineer 来说, 需要学习 Pickup, 但是由于 SFN 天生比较简单, 并且 Low code, 这使得让负责 ETL 和 Generate report 的 Data Engineer 就能帮忙负责工作流编排, 因为他们已经有了业务知识, 对编排的逻辑更了解, 避免了 knowledge transfer, 而无需像以前一样要专人来编排. 总体来说项目进度是加快了的 (解决了难点 3).
而对于企业招聘来说, 新人无论如何都要 pickup 学习, 而 pickup SFN 的难度要比 Airflow 更低 (开发环境友好), 所以也更好招人.
经过比较, 客户最终选择了迁徙到 SFN. (解决难点 2)
- 制定详细的实施计划, 规划时间线, 评估每个阶段需要的人, 以及计划要达到的目标.
第一步是任务调研, 对任务进行排序. 我和客户都认为需要重点解决积压的任务, 而不是迁徙已有的任务. 这个阶段主要是和他们的 business team 以及以前做工作流编排的人对接
第二步是对人员进行培训, 让它们学会 SFN. 我自己制定了培训资料, 以及用了一个积压任务中的实际问题作为例子教他们. 并且把这个教学过程录下来, 以及优化了培训材料, 以便于可以重复利用与培训新人.
第三步是进行测试, 一是看看基于 SFN 的编排连续跑一个礼拜, 是否能满足业务需求. 二是评估开发速度, 计算人力资源的需求和开发进度.
第四步是重复前面的三步, 招聘并 onboard 新人, 并且逐步完成迁徙, 解决积压的任务.
- 对人员进行培训, 以及具体执行.
在执行的过程中. 其中的重点是培训材料以及参考手册. 因为这个资料会被已有的 Data Engineer 学习, 还好会用在对新招聘的人的培训上, 在整个迁徙的过程中也会不断地参考这个资料. 这是我的专业, 这个任务由我来负责, 并且根据客户的反馈不断地优化, 尽量用实际的生产 use case 来做培训材料.
Result#
我希望不仅仅是解决积压的任务, 而是从架构设计上就保证以后这种任务积压不再出现, 以及在人员短缺的情况下有应对方案.
在大约第二个月的时候我估算 6 个月不够. 根客户商量之后, 客户也选择了延长 3 个月, 然后彻底根治这个问题.
- 最终经过 9 个月的开发, 结果如下:
我们在只招聘了 2 个新的 junior engineer 的情况下, 以及在懂业务的 Data Engineer 的情况下, 将 70 个 DAG 中的 60 多个迁徙到了 SFN, 并且解决了全部积压的 20 多个任务.
上线了新的 business metrics 以及新的 dashboard analysis.
并且目前的架构设计能支持 10 倍于现有的数据量和工作流编排的数量.
同时给 AWS 带来了每年 320K 美金的收入.
同一时间, 我还服务了 2 个其他的客户, 这里我们不提了, 给 AWS 带来的收入达到了快 1M.