Janus:Myntra 的数据处理框架


作为印度领先的时尚电子商务门户网站,数据驱动的决策在 Myntra 中发挥着重要作用:了解客户及其不断变化的需求是提高参与度、提供正确的搜索结果、个性化推荐、相关和有针对性的通知、奖励忠诚度等的驱动因素。
这是通过从多个来源摄取的数据实现的,这些来源包括交易系统中的数千个表、来自点击流数据的数百个事件,以及无数种连接、切片和切块的方法。
最终结果是 100 条数据管道在任何给定时间点处理 TB 的数据。

数据处理不是一种固定的工具,而是多种技术的结合。问题是他们太多了!Spark、Presto、Ray、Hive、Flink 等一些跨消息队列读写的计算,如 Kafka 和 RabbitMQ;parquet 和 orc 等文件格式;表格式,如 hive acid、iceberg 和 delta;聚合友好的数据库,如 Druid 和 Cassandra;缓存和功能存储,如 Redis 和 Aerospike;数据仓库,如 Snowflake、Google bigquery、Azure synapse;可选择 Scala、Python、Java 等语言。
Myntra 的处理框架旨在创建一个环境,开发人员可以在其中编写基于不同技术选择的工作流,并简化处理作业的生命周期管理。我们以掌管过渡和时间的罗马神命名它 Janus。

数据是什么
查看 1000 个表,每个表都有 100 个列是令人生畏的。因此,对于数据消费者而言,重要的是找到正确的数据集,促进重用以避免重复处理并消除知识孤岛。

查询数据
数据定位之后,就是查询数据和实验的能力。数据存储、计算框架、存储服务的连接器在新版本中变得更好。在这里,重要的是提供接口/sdk 来访问数据,同时平台团队维护基础架构、版本升级、表格格式等。

确定计算基础设施
spark、presto、flink、ray、hive 等框架可以将大型数据集的处理分布到多个分区/任务上。这些工具中的每一个都是专门构建的,因此确定适合的地方至关重要。此支持必须有足够的计算能力(内存和 CPU)来支持作业。如果资源不足,则作业将受到限制或失败。对于计划作业,每次执行的最佳资源可用性对于满足 SLA 很重要。

数据管道开发
低代码和代码优先
低代码需要一个应用程序,消费者可以使用该应用程序以最少的开销编写管道。如果使用 SQL 驱动方法,低是有利的。代码优先可以由标准 IDE 或笔记本电脑提供支持。代码优先适用于高级用户,例如正在试验统计库的数据科学家或通过 API 或消息队列使用数据的服务开发人员。

测试驱动开发
在没有测试驱动开发方法的情况下编写多步骤数据管道将限制生产力。Python 实际上已被数据科学界采用,主要是因为它的解释能力有助于测试驱动开发。在构建数据管道的同时进行测试驱动开发对于用户有效使用该平台至关重要。

作业依赖
作业依赖性对于操作相互依赖的管道来说绝对是至关重要的。随着数据管道数量和复杂性的增加,数据集依赖性的深度和广度被放大。没有依赖关系,未捕获的延迟会导致部分执行需要昂贵的回填,并且对上游故障的影响半径视而不见。

部署和验证
构建和部署
打包代码和部署可执行文件可能是一个耗时的过程。如果要重复多次迭代以获得正确的结果,则更是如此。我们都同意盯着构建和部署屏幕并希望它很快!这是数据工程中一个严重且经常被忽视的问题。因此,通过有效的 CI-CD 缩短开发时间是一个重要的考虑因素。
数据验证和准确性
验证处理数据的完整性需要预期输出的功能知识。业务团队是执行验证的最佳判断。因此,提供正确的工具来促进在线和离线模式下的这些验证会增加对数据的信任。在自信地交付数据驱动的决策之前,对数据的信任是最重要的一个指标。

操作
监控和警报
管道健康状况的可见性应透明地传达给所有租户。在组织内设置正确的流程以传达数据质量可构建值得信赖的数据驱动文化。维护处理生态系统所花费的时间比开发多很多倍。部署的任何管道都必须遵循标准指导原则,至少可以集中监控数据可用性、计算和存储资源消耗。警报的结果应遵循手动或自动恢复。

基础设施的扩展
电子商务中的处理基础设施必须处理遵循季节性趋势、销售活动期间激增、有机和无机增长的数据。识别系统负载并调整规模以满足 SLA,从而避免过度配置和优化云计算成本是一个重要的驱动参数。

修改和回填
修改管道和执行数据回填是常见的操作问题,应该可以在没有开销的情况下完成。

作业优化
“总有改进的余地”
采用更新的高性能技术可以极大地优化工作性能,从而节省计算和存储基础设施的费用。

Janus 处理平台架构
Janus 处理框架集成了使用一个应用程序编写处理作业的生命周期中的所有步骤。它是可扩展的,可以使用支持的语言添加更多连接器、处理引擎和多云支持,以满足分析师和数据科学等方面的需求。在瞬息万变的数据工程世界中,保持系统敏捷性以便为组织采用新的更好的技术非常重要。下面是平台的高级架构,其中包含每个组件的细分。

数据目录
数据目录使用确保质量和策略实施所需的工具来显示表定义和工作流的元数据。这是作为数据生态系统一部分的表定义的真实来源。它是设置访问控制策略、启用质量检查和保留/清除策略的联系点。跨不同工作流程的数据流可以使用沿袭功能在数据目录上可视化。

管道建​​模
如何开发ETL pipeline是下一个要解决的问题。这也是我们所说的“设计时”阶段。在这里,开发人员使用多步方法编写转换代码。这些步骤连接形成有向无环图(DAG) 使用 Myntra 开发的低代码应用程序平台或使用 IDE 和笔记本的标准代码优先方法,编写 DAG 是可行的。设计阶段的重点是开发人员关注逻辑,而不是数据量和频率等运行时方面。但是,不能完全否定运行时方面,因为技术的选择决定了处理需求的效率。例如,spark-streaming 和 flink 是流处理的合适选择,而 spark 和 trino 是批处理的合适选择。接下来还有更多注意事项,以深入研究适用于用例的正确技术。数据平台应该提供正确的接口来访问、转换和写入数据,以便未来的升级、代码修改、易于维护。这必须伴随着测试驱动的环境和代码的迭代开发。

管道部署
为可执行文件打包和部署代码在数据工程方面的讨论并不多。多租户使用、代码版本控制、部署期间的治理取决于转换对数据访问的敏感性以及可执行文件的生成,这些都是部署应该解决的问题。降低部署的周转时间可以减少迭代测试、修改、回填和通常维护数据管道的时间。Janus 为低代码配置生成和脚本部署提供 CI-CD 层。它可以扩展到开发人员使用 Janus 载入他们的可执行文件和编排数据管道。

流水线执行
来自可执行文件的管道的计划或临时执行构成管道执行,也称为“运行时”。
运行时应提供工具,将执行重定向到多个计算引擎,而无需耦合到供应商或云。因此,重要的是提供接口,将工作重定向到开发人员根据用例请求的计算技术。数据平台应通过有助于作业优化、调试和治理的配置启用此重定向。例如,限制集群使用的队列规范、有效查询执行的调整参数、垃圾收集、日志记录级别等。Janus 平台可扩展为具有多云支持的多计算引擎。
从计算引擎访问数据层决定了领域的灵活性。例如,像 kafka 这样的消息队列的生产者和消费者将有助于为近乎实时的工作流开发流媒体管道。接收器到 redis 或特征存储对于 ML 模型起作用的特征生成用例是必要的。将数据推送到 Druid 和 HBase 将实现低延迟聚合用例。
有关 Myntra 近实时处理的更多信息,请阅读QuickSilver
在数据湖上进行批处理和当日使用的处理将需要连接到 Azure blob 或 S3 上的文件和表格格式,其中所有数据集都集中存储。因此,运行时的数据访问层构成了 Janus 处理平台的核心部分。

操作
运营涉及基础设施的监控、警报和扩展的核心工程卓越功能。对于数据工程,它更进一步。其中包括为复杂的数据管道网络维护数据新鲜度和作业依赖性。数据回填以防数据损坏。定期升级开源版本以提高执行效率。了解管道中的优化范围以提高性能,从而降低运营成本。根据目录上的策略设置在热数据、冷数据和归档数据之间进行分层。PB 级数据湖上的数据分层可显着节省存储成本。
由于移动数据的本质,数据工程活动消耗的运营开销比开发大很多倍,确保了紧延迟的正确性。Janus 将运营视为一流的模块,而不是开发和部署后的卓越工程活动。

接下来
我们已经看到了数据处理平台及其组件的高级概述。在后续文章中,我们将详细介绍支持低代码和代码优先数据管道的平台设计。一定要关注这个空间,了解 Myntra 如何开发下一代可持续数据平台,以推动其作为印度顶级时尚电子商务的发展。