写点什么

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

  • 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:282943

评论

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

冰河教你一次性成功安装K8S集群(基于一主两从模式)

冰河

Docker 云原生 k8s

《华为数据之道》读书笔记:第 10 章 未来已来:数据成为企业核心竞争力

方志

数字化转型 数据治理

华为工程师又爆一份“架构师宝典”,价值百万薪“史诗级”操作系统,送你备战金三银四要不要?

编程 程序员 计算机网络 操作系统

深入浅出 Go - sync.Pool 源码分析

helbing

Go 语言

EXCEL、图片处理常用技巧

jiangling500

Excel 图片处理

360OS张焰:AI视觉在教育中的应用

ZEGO即构

GO训练营第2周总结

Glowry

线程池 ForkJoinPool 简介

Java老k

Java 线程池 forkjoinpool 工作窃取

《穿越数据的迷宫》笔记:第1章 数据管理的重要性

方志

数据治理

高速公路二维码定位报警系统搭建解决方案

t13823115967

高速公路二维码定位报警 智慧公安

《穿越数据的迷宫》笔记:中文版序二

方志

数据治理

智能新时代 安全新未来 首届国网北京电力人工智能数据竞赛正式启动

极客播报

Forsage智能合约系统APP开发|Forsage智能合约软件开发(现成)

系统开发 现成系统

漫画:什么是 “智能供应链” ?

京东科技开发者

云计算 供应链 智能供应链

Gradle doesn't run because it can't find tools.jar in JRE

mengxn

kotlin Gradle

甲方日常 61

句子

工作 随笔杂谈 日常

Appium之测试微信小程序

清菡软件测试

App

有奖讨论|作为程序员,女朋友是怎么吐槽你的?

Simon郎

女朋友 话题讨论

整天都在讨论使用SpringBoot,可你居然连缓存都不清楚

小Q

Java 缓存 学习 面试 springboot

为什么边缘计算将终止云计算?

VoltDB

数据库 云计算 数据分析 边缘计算

Spring 源码学习 04:初始化容器与 DefaultListableBeanFactory

程序员小航

spring 源码 源码阅读

数据结构与算法系列之跳表(GO)

书旅

数据结构 算法 Go 语言

架构第十一周作业

Nick~毓

创业项目快速分析框架

boshi

创业 商业

算力 | 手写红黑树

九叔(高翔龙)

数据结构 算法 二叉树 红黑树

修炼码德系列:简化条件表达式

Silently9527

Java 经验分享 代码重构 代码规范

AnyRTC --- Flutter 实现视频通话

anyRTC开发者

flutter 音视频 WebRTC 跨平台 sdk

Linux常用命令速查

jiangling500

linux命令

深度剖析github star数15.1k的开源项目redux-thunk

徐小夕

Java GitHub 大前端 React

区块链落地开发,区块链版权应用搭建

t13823115967

区块链+ 区块链落地开发 区块链版权应用搭建

关于Mysql常用数据类型的小抄

xzy

MySQL

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