数据In-Motion @优步
在Uber,每天几次数据横跨各种平台跨越各种数据。我们通过数据流水线的强骨干电源为此数据移动。无论是从数百万优步跳闸摄取数据,还是转换分析和机器学习模型的摄入数据,它全部通过这些管道运行。要将其透视,优步的数据平台向上运行15,000个数据流水线!
但随着时间的推移,现有的基于Python框架的方法开始在管道创作者上显示生产力税。优步中的数据分析师和城市运营用户越来越多的人口依赖于少数数据工程师来创建他们的管道。几个小时的工作经常变成几天或几周。除此之外,对实时数据和洞察力的需求也在优步中迅速增长。但是,通过完全不同的技术堆栈和构建实时管道的复杂性,我们无法尽快采用实时洞察力。并获得代码对甚至棘手。
对构建数据工作流程的更简单,统一和直观的用户体验是UWORC,Unified Workflow Orchestrator后面的主要动力。
赋予数据移动
优步的现有数据流水线管理平台做了很大的缩放,并提供了所需的灵活性来服务其最终用户。使用Apache气流,优步工程师建立了最全面的工作流管理系统之一吹笛者。
Piper拥有全面的功能列表:
- 广泛的任务支持,如Hive,Spark,MySQL,Cassandra
- 用于开发管道的SDK
- ETL的简化版本
- 灵活的任务依赖关系
- 全面回填选项
- 警报系统等
通过这些功能,Piper每天可靠地运行1000多个管道,用于使用数据摄取,数据建模,特征工程和数据分散的情况。
要减少创建非常简单的管道的时间,我们有一个基于UI的界面。这尤其有助于管道不需要任何指示的无循环图(DAG)或依赖关系来表达数据流。
另一方面,为了支持Uber业务的实时性,我们还建立了一个平台来作者提交流水线,用于媒体分析雅典雅典。我们可以使用这些来实时浪涌计算,欺诈检测等。
虽然工具缩放到优步的需求,但由于在全球这些工具上运行的不同用户群,用户体验开始遭受痛苦。
生长与优步
由于优步跨越用户,企业和地区,对新用例,工作流程的不断增长的需求暴露了我们现有的平台中的一些关键痛点。
目前在优步,近40%的工作流量分为两个不同的类别:
- 用户想要创建新表的数据分析或数据科学工作流程,并通过一系列工作查询将其更新
- 用户想要在不同数据服务平台(如Kafka,RealTime数据库,Hive,Google),Google Shers或Amazon S3之间移动数据之间的操作工作流程,用于运营洞察和分析。
对于两种工作流程,我们的大多数用户都有所需的SQL专业知识。但大多数这些用户不熟悉编码语言和框架。使用Python框架,代码存储库或Plink这样的专业技术为这些用户添加了一个重要的学习曲线。例如,通过使用基于Python的SDK,人们必须使用具有命令Python代码的声明性SQL查询。他们必须在自己的存储库中管理该代码。这是许多用户的繁琐过程。
考虑一下城市运营经理希望分析他们在城市推出的新促销优惠的影响的情况。在查询和工作流程方面,他们想要的只是加入一些表并将数据导出到Google纸张。但这需要额外的时间甚至几天,以弄清楚Python代码,测试代码,获取审核和生产中的代码,然后等待下一个部署周期。这减速了他们。
对于像优步一样的快速移动公司,这种延迟伤害了我们的业务。内部研究估计由于此导致数百万美元的生产力损失。
我们的用户要求建立数据工作流程更简单,更快,更直观的用户体验。在真正的优步样式中,我们的用户需要一个神奇经验。
指导原则
作为优步的数据团队,我们决定用三个关键指导原则建立这种经验。
- 简化:工作流创作和监控非常常见。我们决定消除创建数据工作流程所需的学习要求和技术。我们希望建立一个体验,将逻辑转换为几分钟内的工作流程。
- 统一:我们意识到实时数据的可用性对业务极为宝贵,需求将不断增加。只有我们易于消耗,我们才能实现这些见解的力量。当它来到工作流管理时,我们必须实时数据成为一流的公民,并争取跨批处理和实时工作流程的统一用户体验。
- 巩固:我们有多种工具来帮助客户管理数据管道,导致扩散和混乱。我们不得不合并那些人。
遵守这些原则将为产品的成功证明是必不可少的。
介绍uworc.
我们在指导原则上建立了UWORC或Universal Workflow Orchestrator。它包括一个简单的拖放接口,可以管理批处理或流流程管道的整个生命周期,而无需编写单行代码。
正如我们所提到的,我们的用户需要从核心SQL或转换逻辑快速移动到工作流程。我们发现了我们的灵感低码平台弥合那个差距。在UWORC中,我们需要绝对没有代码将工作查询转换为工作流程。用户也不需要代码来移动数据,例如,从Kafka到实时数据库。其他熟悉的云产品AWS数据管道, 或者Azure数据厂还使用类似的基于GUI的工作流进行编排。
我们仍然驾驶执行空气流动和fl幕后的发动机。但现在这些是背景技术,我们的用户不需要担心;这将它们从他们以前感受到的认知负担中拯救出来。
在UWORC中构建数据工作流程
要构建工作流程,UWORC支持各种预构造用户可以将用户连在一起的任务。
在UWORC之前,图2中的工作流程需要数小时完成并部署。它现在在uworc中少于五分钟完成相同的任务!
UWORC支持各种任务,如蜂巢,火花,脓包和Bash,更有兴趣。除了简单的任务之外,UWORC还支持运行jupyter笔记本创建数据科学工作台。数据科学家们现在可以单击单击部署他们的笔记本电脑,以及如图3所示的预处理步骤和后处理步骤。
要管理Workflows的生命周期UWORC支持:
- 版本控制工具内的差异和回滚的工作流程
- 监测要寻找的工作流程
- 旧跑的状态
- 每次运行都有资源用法或CPU和内存消耗
- 支持团队合作与与其他用户共享工作流的能力
- 通过克隆现有的工作流程快速发展
在引擎盖下
简化经验
典型的工作流程涉及从一个或多个源,运行转换,然后将该数据加载到另一个数据宿者中。当前开源平台(如气流或火花)中的一个挑战是它们提供编程API,但它们不提供关于用户配置的元数据。它们缺乏数据源等信息,资源调度员,如纱队列或表权限。
图4:KAFKA任务显示了kafka主题列表,供用户选择和选择。Hive任务显示纱线队列。构建更好的开发工作流的用户体验不仅仅是简化了具有拖放的编程接口。它还带来了所有关于他们访问编辑器的资源的丰富元数据。使用UWORC,所有这些信息都在编辑器中随时可用。
uworc架构
乌沃铁的建筑迎合了指导原则简化,统一,和巩固。
uworc ui
UWORC UI使多个平台和引擎具有不同的功能。
考虑到这一点,我们通过可配置模板设计了所有输入表格。如果用户想要使用其组件添加新组件或完全新的平台或引擎,则可以使用JSON模板来执行此操作。
引擎
启用各种平台的统一,例如批次或流媒体,UWORC提供了一组API接口,可以将集成构建到平台上。这包括Piper,Airflow和Athena或Flink等平台。我们称之为这些平台引擎。
通过此界面,我们可以管理整个工作流的生命周期,从创建,测试到部署。引擎的界面提供了必要的抽象来管理特定于平台的工作流程生命周期管理。
组件
一种成分是用户可以在用户拖放到编辑器中然后配置的引擎中的单个实体。例如,PIPER或Airflow引擎中的蜂窝任务使用户能够定义其SQL并配置纱线队列。类似地,流引擎中的KAFKA源可帮助用户从KAFKA集群中选择一个主题。每个引擎都可以具有一组构建工作流程的组件。
每个组件定义都有两个部分:
- UI定义使UWORC UI可以呈现表单以捕获用户的输入
- 后端接口以验证用户的输入并为其部署的平台生成代码
一旦用户构建工作流DAG并选择部署它,引擎的实现会通过DAG,并从每个组件的接口实现中生成代码。这有助于我们在平台本机运行时环境中通过UWORC部署和运行工作流程。
组件API也可以启用用户定义的组件。将来,UWORC用户将能够开发自定义组件并使其他用户可供其他用户使用这些组件。
监测
我们计划uworc作为与工作流程相关的所有内容的一站式商店,包括监控和调试工作流程。
UWORC每引擎提供可插拔监控接口。通过时间序列API查询您可以通过JSON模板自定义,非常容易在UWORC中构建监控仪表板。
我们还在研究从底层引擎到uWorc的跟踪日志。这使用户能够在UWORC本身内解析其大部分常见问题。
uworc成功
由于我们推出了UWORC,我们看到稳步采用了各种用例。
数据分析师现在通常使用它来创建新表并为其分析提供电量。城市运营用户创建新表以分析当地促销的影响,数据科学家可以在蜂巢表中脱机推理和存储其结果。
在流媒体方面,我们的用户建造了餐厅仪表板和实时营销活动,以防止销售漏斗掉落。
我们目前有超过10,000个工作流程,但更重要的是乌沃克为优步带来了三个明显的福利:
- 简化- 通过消除学习曲线,改善了数据分析师和数据科学家生产力。我们的数据用户现在每周节省时间。
- 统一- 它提供实时和批处理工作流程的统一体验,这使得实时决策更简单。
- 合并- 它创建了一种类似的工作室体验来创建,部署,监视和修改工作流程。这进一步降低了用户的努力。
向前进
展望未来,我们看到了进一步增强用户体验的机会,并减少设计逻辑需要提供强大的工作流程所需的时间。一些即将到来的添加包括:
- 从模板创建工作流程以获取一些典型的工作流程。
- 在部署之前轻松测试工作流程。
- 可视化某人在SDK中创建的工作流程。这是因为共享DAG可视化比阅读代码更容易了十倍!
如果您想了解更多并成为我们团队的一部分,请查看我们的职业问题
致谢
我们要感谢我们的团队乌沃茨和我们的合作伙伴队员吹笛者,Marmary,Eva和Athena。





