大规模ETL作业在AWS上如何由Amazon GTTS使用Amazon MWAA运行
关键要点
Amazon GTTS团队利用Amazon MWAA成功转型,创建了一个现代化的ETL平台。通过与AWS专业服务的合作,他们实现了更高的可维护性、成本效益、安全性、可扩展性和可观察性,显著提升了ETL作业的运行效率。
Amazon全球运输技术服务GTTS团队拥有一套名为INSITE全方位运输洞察的产品。这些产品是用户界面应用,旨在解决不同运输领域如网络拓扑管理、容量管理和网络监控中的具体业务问题。截至本文撰写时,GTTS每月为大约10000名全球客户管理出站运输网络。
INSITE应用通常数据密集,能从亚马逊内部和外部的多个来源摄取和转换大量不同格式和处理模式如批处理和近实时处理的数据集。这些数据集通常在域内及跨域的复杂数据管道中共享,并在严格的服务水平协议SLA下消费。为了满足这些需求,GTTS构建了自己的数据平台。
数据平台的关键组件是数据管道调度器。GTTS在2018年构建了自己的调度器Langley,并利用它来调度和监控在多种计算平台上运行的提取、转换和加载ETL作业,例如 Amazon EMR、Amazon Redshift、Amazon关系数据库服务Amazon RDS。
随着Langley用户数量的增长,GTTS工程师在可维护性、可扩展性、多租户功能、可观察性和互操作性等关键维度上面临了一些挑战。
为了现代化其调度平台,Amazon GTTS与 AWS专业服务 合作,尽可能依赖具备自动扩展能力的托管服务。分析候选解决方案后,团队最终决定构建一个依赖于 Amazon托管Apache Airflow工作流Amazon MWAA的目标解决方案。本文详细阐述了迁移的动因和获得的好处。
现有平台
Amazon GTTS处理多种分散的数据存储,存储着PB级的数据。数据工程师需要一款工具来定义在各种计算环境中运行的ETL作业,如下图所示。
GTTS在2018年构建了Langley作为其自定义调度器,并一直在使用它。从一个整体来看,Langley的架构核心是基于一组 Amazon简单队列服务Amazon SQS队列和 AWS Lambda 函数,以及用于存储ETL作业数据和元数据的专用RDS数据库。它还使用了 AWS数据管道 来运行基于SQL的工作负载,使用 Amazon简单存储服务Amazon S3存储配置文件,并使用 Amazon CloudWatch 进行故障警报。Langley每天在欧洲处理超过17000个ETL作业,在北美处理5000个ETL作业。
以下图展示了Langley的架构。
业务挑战
Langley最初是针对团队内部问题的简单解决方案,但随着多年来的增长,呈现出一些关键问题:
维护这个自定义解决方案所需的时间显著增加,随着新功能的发布,这种需求持续增长且增加了整体复杂性。Langley的用户基础持续扩展,最终成为多个亚马逊团队和产品的关键调度平台。然而,该解决方案并未考虑多租户功能,因此未能提供足够的稳健性和适当的隔离性,以防止每个租户相互影响。2023年,AWS宣布即将停用 数据管道,这是Langley使用的核心服务之一。GTTS与AWS合作设计并实施解决方案,以克服这些挑战。AWS使用以下评估矩阵来构建一个耐用的解决方案:
可维护性维护调度系统所需的工作量,包括更新、补丁、错误修复以及例行检查以确保最佳性能。成本与调度器相关的整体支出,包括基础设施成本、许可费、人员开支及其他相关费用。此标准尤其评估系统控制和降低成本的能力。调度与运行和调度作业相关的能力,包括从失败步骤恢复ETL作业的能力。用户体验从最终用户的角度来看,系统的总体满意度和可用性,包括响应性、可达性、互操作性和易用性等因素。安全性随时保护数据和应用程序免受未授权访问的机制。监控和警报持续观察和分析系统组件与性能指标,以检测和解决问题、优化资源使用并确保整体健康与可靠性。可扩展性调度器有效适应资源以处理工作负载或需求增加的能力,确保持续的性能。在探讨的解决方案中,最终认定Amazon MWAA在这个矩阵中表现最佳。
接下来的部分将深入探讨使GTTS和AWS专业服务选择Amazon MWAA的原因。
迁移到Amazon MWAA的好处
Amazon GTTS与AWS专业服务合作发布了前述解决方案的最小可行产品MVP,展现了在商定决策标准下的好处。
可维护性
在其传统系统中,Amazon GTTS需要管理调度器数据库、网络服务器、活动队列、调度函数和工作节点。
Amazon MWAA消除了对基础设施管理的需求。它负责Apache Airflow网络服务器、调度器、工作节点和关系数据库的配置和维护,使GTTS团队可以专注于构建ETL作业。
Amazon MWAA提供 一键式更新 以进行小版本的基础设施升级,例如将Airflow版本从 x4z 升级到 x5z。在升级过程中,Amazon MWAA会捕获环境元数据的快照;升级工作节点、调度器和网络服务器到新Airflow版本;最后使用快照恢复元数据库,支持自动回滚机制。
成本
Amazon MWAA通过根据工作负载自动扩展工作节点,促进了更具成本效益的解决方案。这种动态的上下扩展避免了过度配置,并让组织仅为实际使用的计算资源付费,而不会在活动高峰期间面临停机风险。由于这是一个AWS管理的解决方案,它还通过释放管理传统系统的工程师时间,降低了GTTS的总拥有成本TCO。
调度
Amazon MWAA支持所有Amazon调度器所需的触发机制:
手动触发 用户可以通过Airflow API或更简单的通过用户界面UI调用一个 有向无环图DAG。调度器 可以将调度器定义为代码,结合DAG定义,以确保其按特定频率从每小时到每年或按特定cron计划运行。事件驱动触发 Airflow提供原生操作符,支持从一个DAG 触发下游DAG 或 数据集更新推式。它还包括传感器 监听任务完成 (拉式)。DAG故障的部分运行 GTTS特别关注的另一个关键特性是能够从部分DAG故障中恢复,而不必重新运行整个DAG。Airflow提供任务级控制,便于这个操作直观地实现。用户体验
在这一部分,我们讨论用户体验的三个方面:网络用户界面、互操作性和编程接口。
网络用户界面
Amazon MWAA配备了托管网络服务器,托管Airflow UI。因此,您无需任何维护,便可以快速运行DAG、检查运行历史、可视化DAG之间的依赖关系、直接访问任务日志进行故障排除、管理变量和数据库连接,并定义细粒度权限。以下截图展示了UI的一个示例。
互操作性
评估的一个重要特性是新调度器能否与GTTS的多个数据存储服务、计算组件和监控服务无缝集成。
Amazon MWAA预安装了多种供应商,例如 apacheairflowprovidersamazon、apacheairflowproviderspostgres 和 apacheairflowproviderscommonsql。这使GTTS能够通过多种连接方法连接到这些服务,包括 AWS身份中心 或 AWS Secrets Manager 的基于密码的身份验证,而无需编写单个自定义Airflow操作符。
Amazon MWAA还简化了 升级供应商版本和安装新 的过程。通过提供一个 requirementstxt 文件,GTTS能够更换 apacheairflowprovidersamazon 的主要版本,并安装 apacheairflowprovidersmysql 供应商。
编程接口
Airflow是一个低入门门槛的调度器,特别适合熟悉Python编程语言的人。它的工作流管理通过Python脚本定义,基于一套 文档齐全 的原生操作符和外部供应商,使Python开发人员快速上手Airflow并创建复杂数据管道变得简单。
以下是两个关键的Airflow功能:
TaskFlow API TaskFlow API 通过使用Python装饰器消除了传统操作符所需的大量样板代码,同时简化了DAG编辑过程,使DAG文件更清晰、更简洁。动态DAG生成 动态DAG生成 的能力使我们能够从源自传统调度器的配置文件生成DAG。这使得平台团队能构建一个集中框架,由多个团队使用,以保持代码的DRY不要重复自己,为从传统调度器的迁移提供了顺畅的路径。以下截图展示了这些功能的一个示例。
奈云npv加速器官网安全性
新的基于Amazon MWAA的架构通过引入细粒度访问控制,改善了GTTS的安全性。Amazon MWAA集成了AWS服务,例如 AWS密钥管理服务AWS KMS、Secrets Manager和IAM身份中心,以确保数据在任何时候都保持加密状态,不论是静态还是在传输过程中,使用基于TLS的通信。Airflow还包含基于角色的访问控制模型RBAC,以确定用户在平台上可以执行的操作,并执行最小权限原则。Amazon MWAA还与 AWS CloudTrail 的审计目的进行了原生集成。
Airflow的RBAC模型使管理员能够定义拥有特定权限的角色,以访问Airflow系统设置和DAG本身。此细粒度访问控制通过限制对关键DAG和敏感Airflow环境变量的访问,降低了数据泄露和恶意活动的风险。Airflow提供了 五种默认角色,每种角色具有不同的权限集如下图所示,但也可以根据您的安全需求创建新角色。

GTTS使用Airflow的RBAC模型限制某些团队和应用程序消费的权限。他们还使用优先级权重和 Airflow池 来优先安排任务和控制运行并发性。然而,如果想要运行多租户的调度平台,建议为每个团队使用单独的环境。您可以假设所有可被Amazon MWAA角色访问的内容也可以被能在环境中编写DAG的用户访问。
为了简化Amazon MWAA的身份验证,GTTS通过 Amazon Cognito 和SAML联合其身份提供商IdP。通过此集成,用户可以使用与其他内部系统相同的身份登录Amazon MWAA UI,省去新凭证的需求。用户的组成员资格通过Amazon Cognito从IdP检索,同时Lambda函数将用户重定向到Amazon MWAA并分配适当的Airflow角色。以下架构示例说明了这一过程,并从用户那里抽象化,与一个公共应用负载均衡器相连,最终将重定向到一个Amazon MWAA私有集群,使身份验证工作流程无缝而安全。有关实现您自己的IdP的更多信息,请参见 使用联合身份访问私有Amazon MWAA环境。
监控和警报
Amazon MWAA与CloudWatch集成,自动管理所有基础设施日志。在创建Amazon MWAA环境时,您可以配置应保存日志的级别。GTTS为所有五种组件启用了CloudWatch日志:Airflow任务日志、Airflow网络服务器日志、Airflow调度器日志、Airflow工作节点日志和Airflow DAG处理日志。
这些日志都可以在CloudWatch中自动监控获得,但Amazon MWAA用户也可以直接通过Airflow UI访问任务日志,查看DAG运行历史。以下截图展示了Airflow 251中任务级日志的一个示例。
您还可以构建 CloudWatch监控仪表板,实时监控环境状态,并在需要时 alert 管理员。Amazon MWAA原生提供 Airflow环境指标 和 与Amazon MWAA相关的基础设施指标。
可扩展性
每个Amazon MWAA环境包括调度器、网络服务器和工作节点。调度节点负责整体调度和DAG文件解析。任务在工作节点中执行,Amazon MWAA根据系统