写点什么

高通量低延迟的云环境大数据流水线架构

  • 2020-04-10
  • 本文字数:4353 字

    阅读完需:约 14 分钟

高通量低延迟的云环境大数据流水线架构

在现实环境中部署大数据分析、数据科学和机器学习应用,分析优化和模型训练仅占全部工作量的 25%,约 50%的工作用于准备适用于分析和开展机器学习的数据,其余 25%的工作是实现易于使用的模型推理和洞察分析。数据流水线将各个过程组织在一起,为机器学习这列重载而神奇的列车提供轨道。只有基于正确配置的流水线,方能确保项目的长期正常运行。


本文将从以下四个维度展开,阐释数据流水线及实现各步骤的可选组件:


  • 需求愿景:切实了解用户的愿景,即可对症下药。此节将分析各种需求,阐释数据流水线需提供的相应工程特性。

  • 流水线:此节从数据湖和数据仓库中数据流转的角度,从概念上阐释数据流水线的各个过程。

  • 组件选取:此节阐释实现处理规模和速度权衡的 Lambda 架构,以及 Lambda 架构中关键组件在技术上的选取。此外,此节将概要给出 AWS、Azure 和 Google Cloud 提供的无服务器流水线。

  • 生产环境:此节给出成功实现生产环境数据流水线的一些小提示。

需求愿景


图 1 需求愿景就是从最有利的角度给出观察


构建数据分析平台和机器学习应用的切实用户可归为三类,即数据科学家、工程人员和业务管理人员。


数据科学家的目标是针对给定的问题和可用的数据,给出鲁棒性最好且计算复杂度适中的模型。


工程人员的目标是为用户构建可信赖的产品。工作创新之处在于构建新产品,或是以新的运行方式运行现有的产品,实现无需人工干预的 7X24 不间断运行。


业务管理人员的目标是向用户交付有价值产品。这正是科学和工程所要达成的目标。


本文聚焦于工程人员,并兼顾其它两方面,特别是从处理机器学习应用所需海量数据的角度。由此,数据流水线所需的工程特征为:


  • 可访问性:数据科学家易于访问数据,最好是能通过查询语言访问数据,以便开展假设评估和模型实验。

  • 可伸缩性:随获数据量增加而弹性扩展的能力,同时维持较低的成本。

  • 效率:在设定时间开销内给出数据和机器学习结果,满足业务目标的需求。

  • 可观测性:对数据和流水线健康状态自动报警,满足主动反馈潜在业务风险的需求。

流水线


图 2 成功的机器学习必需具备运作润滑的数据流水线


数据只有在被转化为具备可操作性的洞察,进而洞察得到及时得交付使用,其价值方能体现出来。


数据流水线实现端到端的操作组,其中包括数据收集、洞察转换、模型训练,洞察交付和应用模型。无论何时何处,只要业务目标有需求,流水线就会立刻运转起来。


和新油田一样,数据虽然价值不斐,但未经加工则不能真正得以应用。必须深加工为天然气、塑料、化学制品等方式,才能创造出有利可图的有价实物。因此数据必须拆解分析后,才能体现出自身的价值。

——Clive Humby,英国数学家,乐购会员卡架构师


数据流水线主要包括五个过程,可分组为三个阶段:


  • 数据工程:采集、获取和准备;(占总工作量的 50%)

  • 分析/机器学习:计算;(占总工作量的 25%)

  • 交付:结果展示。(占总工作量的 25%)


采集:移动应用、Web 网站、Web 应用、微服务和 IoT 设备等数据源设施,按指令采集相关数据。


获取:受控数据源将数据推送到各种设定的数据入口点,例如 HTTP、MQTT 和消息队列等。也有一些任务从 Google Analytics 等服务导入数据。数据具有两种形态,即 BLOB 和流数据。所有数据将汇总到同一数据湖中。


准备:数据通过 ETL(抽取、转化和加载)操作清洗、确证、塑形和转化,以 BLOB 和流数据在数据湖中分门别类管理。准备好机器学习可用的数据,并存储在数据仓库中。


计算:实现分析、数据科学和机器学习。计算可组合批处理和流处理。所得到的模型和洞察,无论是结构化数据还是流数据,继续存回数据仓库中。


结果展示:通过仪表面板、电子邮件、短信息、推送通知和微服务等方式展示所得到的洞察。机器学习模型推理将通过微服务提供接口。



图 3 数据流水线各处理过程

数据湖和数据仓库

数据湖中,数据以其原始格式或初始形态存在,即按接收到的 BLOB 或文件格式。而数据仓库存储经清洗和转换的数据,以及数据的目录和模式。数据湖和数据仓库中的数据以多种形态存在,包括结构化(即关系模式)、半结构化、二进制和实时事件流。


用户可以选择以不同的物理仓储分别维护数据湖和数据仓库,也可以通过Hive查询等数据湖接口物化数据仓库。具体如何选择,取决于用户在性能上的需求,以及成本约束等因素。


无论采取何种方式,重要的是保持好原始数据,以便于审计、测试和调试。

探索性数据分析(EDA,Exploratory Data Analysis)

EDA 的目的是分析并可视化数据集,进而形成假设。可能已收集的数据对于实现 EDA 尚存差距,因此需要做进一步的收集、实验和验证新数据。


这些操作可被视为一组聚焦于可能模型上的小规模机器学习实验,可用于对比整个数据集并实现调优。


维护具有目录、模式和可访问查询语言接口(无需编写程序)的数据仓库,有助于实现高性能的 EDA。

组件选取


图 4 体系架构需在性能和成本之间取得权衡


图中给出了六种三角型帐篷可选,从左上到右下所需的粘合剂成本依次降低。你会在实践中做出如何选取?请注意,三角形的底边要小于其它的边;浅蓝色部分是矩形,而不是正方形。


数据流水线、数据湖和数据仓库不是什么新概念。过去,数据分析使用批处理程序完成的,例如 SQL 乃至 Excel 工作表。现在不同之处在于,可用的大数据推进了机器学习,进而增加了对实时洞察的需求。


现已有多种体系结构可供选择,提供不同的性能和成本权衡。据我所知,从技术上考虑的最好选择,不一定是最适合生产环境的解决方案。用户必须仔细核对自身的需求:


  • 是否需要实时洞察或模型更新?

  • 对陈旧应用的忍耐程度如何?

  • 成本约束如何?


基于对上述问题的回答,用户必须在Lambda架构中的批处理和流处理上做出权衡,以匹配对处理通量和延迟上的需求。Lambda 架构由如下层级组成:


  • 批处理层:提供高通量、全面、经济的 MapReduce 批处理,但是延迟很高。

  • 加速层:提供低延迟的实时流处理,但是在数据量很大时,实现代价可能会突破用户内存规模。

  • 服务提供层:实现高吞吐量批处理输出(在准备就绪时)与流处理输出的合并,以预先计算的视图或即席查询的形式提供全面的结果。


Lambda 架构基于的假设是源数据模型是仅追加(append-only)的,即已获取的事件会打上时间戳并追加到现有事件中,而且永远不会被覆盖。

架构实例:云上技术栈的选取

下图给出了一种使用开源技术物化实现流水线各阶段的架构。为优化计算代价,通常会合并数据准备和计算阶段。



图 5 使用开源技术构建的数据处理流水线


架构中的主要组件和技术选择如下:


  • 使用 HTTP/MQTT 终端节点获取数据,并提供结果。这里存在多种架构和技术可选。

  • 使用发布/订阅消息队列获取海量流数据。Kafka目前是事实上的标准,其经实践考验,可扩展性满足高流量数据获取需求。

  • 使用低成本高容量的数据仓储实现数据湖和数据仓库。可选技术包括Hadoop HDFSAWS S3等 BLOB 存储云服务。

  • 使用查询和目录基础设施,实现将数据湖转换为数据仓库。这里广泛选取的是Apache Hive

  • 使用 MapReduce 批处理引擎实现高通量处理,例如,Hadoop Map-ReduceApache Spark等。

  • 使用流计算实现对低延迟性有要求的处理。例如,Apache StormApache Flink。对于编写数据流计算,Apache Beam不失为一种新选项。它可以部署在 Spark 批处理和 Flink 流处理上。

  • 使用机器学习框架实现数据科学和机器学习。例如,普遍使用的Scikit-LearnTensorFlowPyTorch等实现机器学习。

  • 使用低延迟数据仓储实现结果的存储。数据仓储上存在有很多经实践考验的选项,可根据数据类型、性能需求、数据规模和实现代价等做出选取。

  • 可使用部署编排工具。例如Hadoop YARNKubernetes/Kubeflow等。


规模和效率上的权衡,由以下杠杆调节:


  • 吞吐量取决于数据获取(即 REST / MQTT 终端节点和消息队列)的弹性、数据湖的存储容量,以及 MapReduce 批处理。

  • 延迟取决于消息队列、流计算和存储计算结果数据库的效率。

架构实例:无服务器

无服务器计算可避免在项目中引入 DevOps 代价,实现项目的快速启动。无服务器架构中的各种组件,可由选定的云服务提供商的无服务器组件替换。下图分别给出了 Amazon Web Services(AWS)、Microsoft Azure 和 Google Cloud 上典型的无服务器架构实现数据流水线。其中每个过程都能与上一节中阐释的通用架构紧密对应。用户以此为参考,可选取入围的技术。



图 6 Amazon Web Services(AWS)的无服务器数据流水线架构



图 7 Microsoft Azure 的无服务器数据流水线架构



图 8 Google Cloud 的无服务器数据流水线架构

生产环境


图 9 对于生产环境,简单性往往优于完美


请读者注意,图中选择的三角形帐篷形状,并非需要最少粘合剂的方式。对于降低潜在的错误,至关重要的是如何给出所需的部分,以及整体操作的简单性。


对于不具操作性的分析和机器学习,生产环境将成为它们的埋葬之地。如果用户未对 7x24 全天候监测流水线处理做出投资,使得在某些趋势阈值被突破时就发出警报,那么数据处理流水线可能会在没有引起任何人注意的情况下失效。


请注意,工程和运营支出并非唯一的成本。在决定架构时,还应考虑时间、机会和压力成本。


数据流水线的实操是一件非常棘手的事情。下面给出我历经波折获得的一些小经验:


  • 在扩展数据科学团队之前,先扩展数据工程团队。数据科学这列货运列车必须先铺设铁轨,然后才能运行。

  • 勤于清理的数据仓库。机器学习取决于数据的质量。要定义良好的数据采集模式,并做好目录。如果上述工作缺失,那么用户一定会惊讶地看到,以纯字节永久存储的数据浪费了大量的存储空间。

  • 从简单之处开始。以无服务器架构为起步点地,尽可能降低管理成本。仅在达到合理的投资回报率的情况下,再迁移至功能完善的数据流水线,或用户自身进行部署。在计算阶段,逐步投入尽可能小规模的适量投资。通过调度 SQL 查询和云功能实现计算,甚至是实现为“无计算模式”。这样可以更快地准备好整个流水线,为用户专注于数据策略制定以及数据模式和目录提供充足的时间。

  • 只有在经过仔细评估后,再着手构建。用户的业务目标是什么?必须使用哪些杠杆来调节业务产出?哪些洞察将是可行的?收集数据,并基于数据构建机器学习。

总结

本文的要点总结如下:


  • 分析调优和机器学习模型仅是总工作量的 25%;

  • 尽早投资于数据流水线,机器学习的优劣取决于数据的质量;

  • 对于探索性任务,需确保数据易于访问;

  • 从业务目标入手,寻求给出能落地的洞察。


希望本文对读者能有所帮助。读者在生产环境中建立可靠的数据流水线有哪些技巧?欢迎在评论中分享。


作者简介:


Satish Chandra Gupta 是Slang Labs的合伙创始人之一。Slang Labs 正在构建一个使程序开发者可以轻松快速地将多语言、多模式语音增强体验(VAX)添加到移动和 Web 应用中的平台。设想 Alexa 或 Siri 这样的助手,可以运行在用户的应用内部,并针对用户应用量身定制,听上去多么令人兴奋。


原文链接:


Architecture for High-Throughput Low-Latency Big Data Pipeline on Cloud


2020-04-10 11:282910

评论

发布
暂无评论
发现更多内容

全网都刷爆了,不会只有你不知道吧—,android智能手机编程答案

android 程序员 移动开发

全面理解 Flutter(万字长文,深度解析,整理了3家面试问题:美团+字节+腾讯

android 程序员 移动开发

全面!2020华为Android岗面试真题(已解析含答案,android蓝牙开发框架

android 程序员 移动开发

关于拼多多被曝删除用户本机照片的一点想法(1),android程序设计基础

android 程序员 移动开发

架构实战营模块毕业总结

河马先生

架构实战营

关于程序员35岁的坎:年龄不是挡板,当你匹配了这个年纪该有的能力还有什么畏惧

android 程序员 移动开发

毕业设计—电商秒杀系统

俊杰

架构实战营

内存泄漏以优化大全,2021非科班生的Android面试之路

android 程序员 移动开发

元宇宙,如何看待它就是下一代互联网(附下载)

CECBC

写给即将正在找工作的Android攻城狮,移动客户端开发面经

android 程序员 移动开发

关于Android的渲染机制,大厂面试官最喜欢问的7个问题【建议收藏

android 程序员 移动开发

再见!onActivityResult!你好(1),太现实了

android 程序员 移动开发

再见!杭州!再见,kotlin数组fold方法

android 程序员 移动开发

写代码还是做管理?安卓开发者的困扰,一文全懂

android 程序员 移动开发

关于MVC_MVP_MVVM的一些错误认识,android面试流程

android 程序员 移动开发

全面复盘Android开发者容易忽视的Backup功能 _ 创作者训练营第二期

android 程序员 移动开发

架构实战营-模块九-毕业设计

Cingk

关于 Flutter 是不是“大有可为”这件事,androidjetpack教程

android 移动开发

关于使用 Android MVVM + LiveData 模式的一些建议,ffmpeg音视频同步

android 程序员 移动开发

区块链上的房地产:区块链会颠覆房地产吗?

CECBC

做了六年Android,终于熬出头了,15K到31K全靠这份高级面试题

android 程序员 移动开发

关于拼多多被曝删除用户本机照片的一点想法,移动服务框架app下载安装

android 程序员 移动开发

再见!onActivityResult!你好,android开发电子书阅读器

android 程序员 移动开发

写给Android开发者的混淆使用手册,程序员工作2年月薪12K

android 程序员 移动开发

关于大厂Android面试必问的事件分发机制,应该没有比这篇讲的更好的了

android 程序员 移动开发

兄弟们,这年头,咱移动客户端工程师还有前途吗,flutter图片压缩上传

android 程序员 移动开发

入职两年的安卓“程序员“跳槽,2021年阿里Android面试题精选

android 程序员 移动开发

六年Android从迷茫到大牛的成长之路,不忘初心,方得始终

android 程序员 移动开发

这本“算法宝典”讲得透彻,完全掌握后,我竟拿到字节跳动offer

程序员 算法 字节

05 K8S之kubeadm介绍

穿过生命散发芬芳

k8s 11月日更

做了5年Android,靠着这份面试题跟答案,我从12K变成了30K

android 程序员 移动开发

高通量低延迟的云环境大数据流水线架构_大数据_Satish Chandra Gupta_InfoQ精选文章