专栏首页架构师修炼分布式计算技术之流计算Stream,打通实时数据处理

分布式计算技术之流计算Stream,打通实时数据处理

点击上方蓝色字关注我们~

在上篇,我们一起学习了分布式计算中的 MapReduce 模式(分布式计算技术MapReduce 详细解读),MapReduce 核心思想是,分治法,即将大任务拆分成多个小任务,然后每个小任务各自计算,最后合并各个小任务结果得到开始的那个大任务的结果。

MapReduce 模式下任务完成之后,整个任务进程也就结束了,是属于短任务模式。但是,其任务进程的启停是很耗时的,所以 MapReduce 就不太适合去处理那些实时性的任务。

实时性任务主要是针对流数据的处理,对处理时延要求较高,一般需要常驻服务进程,等待数据的随时到来然后随时处理,确保低延时。这样处理流数据的计算模型,在分布式领域中称作 Stream。今天我们就来学习对流数据的处理 Stream 计算模式。

01

什么是Stream?

最近,随着直播平台的兴起,其中直播中会产生大量的音视频数据流,这种像流水般的持续涌现,且需要实时处理的数据,就称之为流数据

流数据具有以下 4 种特征:

  1. 数据像流水般持续、快速的到达
  2. 海量数据规模,TB 甚至 PB
  3. 实时性高,随着时间的流逝,数据价值会大幅降低
  4. 数据顺序无法保证,即系统无法控制将要处理的数据元素的顺序

流计算,就是实时的获取来自不同数据源数据,然后实时分析处理,最终获得有价值的信息。它是一个对实时性要求极高的计算模式。如果数据处理不及时,就会很容易导致过时、没用的结果。

类比于水流的持续不断且变幻莫测,流数据也是以大量、快速、时变的流形式持续在应用中产生,因此流计算一般用于处理数据密集型应用。

比如,淘宝或者百度这样的大型网站中,每天都会产生大量的流数据,这些数据包括用户的搜索内容以及用户浏览数据等。实时采集用户数据,并通过流计算进行实时数据分析,可以了解每个时刻数据流的变化情况,甚至可以分析用户的实时浏览轨迹,从而进行个性化内容实时推荐,提高用户体验。

此外,我们常用的爱奇艺、腾讯等音视频平台,对电影、电视剧等数据的处理,也是采用了流计算模式。那么,这种实时的流计算到底是如何运行的呢?接下来,我们就一起看看流计算的工作原理吧。

02

Stream 工作原理

昨天讲到的 MapReduce ,它是一种批量计算的形式。这种模式下,会先收集数据并将其缓存起来,等到缓存写满时才开始处理数据。因此,批量计算的一个缺点就是,从数据采集到得到计算结果之间经历的时间很长。

流计算强调的是实时性,数据一旦产生就会被立即处理,当一条数据被处理完成后,会序列化存储到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理,而不是像 MapReduce 那样,等到缓存写满才开始处理、传输。为了保证数据的实时性,在流计算中,不会存储任何数据,就像水流一样滚滚向前。

所以说,流计算属于持续性、低时延、事件驱动型的计算作业。

从这些分析中可以看出,使用流计算进行数据处理,一般包括 3 个步骤,如下图所示:

一,提交流式计算作业

流式计算作业是一种常驻计算服务,比如实时交通监测服务、实时天气预报服务等。对于流式计算作业,首先必须预先定义计算逻辑,并提交到流计算系统中,使得流计算系统知道自己该如何处理数据。

系统在整个运行期间,由于收集的是同一类型的数据、执行的是同一种服务,因此流式计算作业的处理逻辑不可更改。如果用户停止当前作业运行后再次提交作业,由于流计算不提供数据存储服务,因此之前已经计算完成的数据无法重新再次计算。

二,加载流式数据进行流计算

流式计算作业一旦启动将一直处于等待事件触发的状态,一旦有小批量数据进入流式数据存储,系统会立刻执行计算逻辑并迅速得到结果。

从上图中我们可以看出,在流计算系统中,有多个流处理节点,流处理节点会对数据进行预定义的处理操作,并在处理完后按照某种规则转发给后续节点继续处理。此外,流计算系统中还存在管理节点,主要负责管理处理节点以及数据的流动规则。其中,处理节点的个数以及数据转发的规则,都在第一步作业提交时定义。

三,持续输出计算结果

流式计算作业在得到小批量数据的计算结果后,可以立刻将结果数据写入在线 / 批量系统,无需等待整体数据的计算结果,以进一步做到实时计算结果的实时展现。

到这里,我们小结一下吧。流计算不提供流式数据的存储服务,数据是持续流动的,在计算完成后就会立刻丢弃。流计算适用于需要处理持续到达的流数据、对数据处理有较高实时性要求的场景。为了及时处理流数据,流计算框架必须是低延迟、可扩展、高可靠的。

流计算的应用场景有很多,比如它是网络监控、传感监测、AR/VR、音视频流等实时应用的发展的基础。所以,目前流计算相关的框架和平台也有很多了,主流的划分方式是将其分为如下 3 类:

  • 商业级的流计算平台,比如 IBM 的 InfoSphere Streams 和 TIBCO 的 StreamBase。InfoSphere Streams 支持同时分析多种数据类型并实时执行复杂计算。StreamBase 是一个用于实时分析的软件,可以快速构建分析系统,即时做出决策。StreamBase 可以为投资银行、对冲基金、政府机构等提供实时数据分析服务。
  • 开源流计算框架,典型代表是 Apache Storm(由 Twitter 开源)和 S4(由 Yahoo 开源)。Storm 是一个分布式的、容错的实时计算系统,可以持续进行实时数据流处理,也可以用于分布式 RPC。S4 是一个通用的、分区容错的、可扩展的、可插拔的分布式流式系统。这些开源的分布式流计算系统由于具备开源代码,因此比较适合开发人员将其搭建在自身业务系统中
  • 各大公司根据自身业务特点而开发的流计算框架,比如 Facebook 的 Puma、百度的 Dstream(旨在处理有向无环的数据流)、淘宝的银河流数据处理平台(一个通用的、低延迟、高吞吐、可复用的流数据实时计算系统)。

除了这些框架外,我们还会经常听到 Spark、Flink 等。Spark 和 Flink 与 Storm 框架的不同之处在于,Spark 和 Flink 除了支持流计算,还支持批量计算,因此我没有直接将它们列入上述的流计算框架中。如果你的业务中需要用到或者需要参考某种计算框架或者平台的话,可以再参考其官方文档或者相关的技术文章。

接下来,我就以 Storm 这个开源的流计算框架为例,通过介绍 Storm 的工作原理,以加深你对流计算模式的进一步理解,进而帮助你将其运用到实际业务中。

03

Storm 工作原理

说到 Storm 的工作原理,我们先来对比下 Storm 与 MapReduce 的区别吧。Hadoop 上运行的是“MapReduce 作业”,而 Storm 上运行的是“计算拓扑(Topologies)”。“作业”和“拓扑”的一个关键区别是:MapReduce 的一个作业在得到结果之后总会结束;而拓扑描述的是计算逻辑,该计算逻辑会永远在集群中运行(除非你杀死该进程)。

如下图所示,Storm 集群上有两种节点,即主节点(Master Node)和工作节点(Worker Nodes)。

  • 主节点上运行着一个名为“Nimbus”的守护进程。Nimbus 负责为集群分发代码,为工作节点分配任务以及进行故障监控。一个 Storm 集群在工作过程中,只有一个 Nimbus 进程工作。
  • 每个工作节点上都运行着一个名为“Supervisor”的守护进程。Supervisor 负责监听分配给它所在的机器上的工作,负责接收 Nimbus 分配的任务,并根据需要启动和停止工作进程,其中每个工作进程都执行一个子任务。因此,一个正在运行的拓扑任务,是由分布在许多计算机上的许多工作进程组成。

前面我介绍了 Nimbus 是负责分发任务或代码的,Supervisor 是负责接收任务,并启动和停止工作进程以执行任务的。那么 Nimbus 和 Supervisors 之间,具体是怎么协同的呢?下面我们一起看一下。

如果所有数据和信息均存储在 Master Node 上,Master Node 故障后,会导致整个集群信息丢失,因此引入了 ZooKeeper 集群来加强可靠性。为此 Master Node 与 Worker Node 之间的交互通过 ZooKeeper 完成,由于 Nimbus 和 Supervisors 是 Master Node 和 Worker Node 之间负责交互的进程,因此 Nimbus 和 Supervisors 之间的所有协调都是通过 ZooKeeper 集群完成的,比如 Nimbus 会将任务的分配情况或信息发送给 ZooKeeper 集群,然后 Supervisors 向 ZooKeeper 集群获取任务,并启动工作进程以执行任务。

当 Supervisor 接收到分配的任务后,会启动工作节点的工作进程 (Worker) 去执行任务。我们知道,一个计算任务可以分成任务数据的读取以及任务执行两部分。

Worker 提供了两个组件 Spout 和 Bolt,分别进行数据读取和任务执行。

在详细介绍 Worker 组件之前,我首先介绍一下 Storm 的核心抽象:数据流。数据流是一个无界序列,是在分布式环境中并行创建、处理的一组元组(tuple)。数据流可以由一种能够表述数据流中元组的域(fields)的模式来定义。

Storm 为进行数据流转换提供了基本组件 Spout 和 Bolt。Spout 和 Bolt 有用户自定义的接口,用于运行特定应用程序的逻辑。如下图所示,Storm 上运行的计算拓扑其实是由一系列 Spout 和 Bolt 组成的有向无环图,这个有向无环图代表了计算逻辑。

接下来,我们看看 Spout 和 Bolt 的含义吧。

  • Spout 用于接收源数据。通常情况下,Spout 会从一个外部的数据源读取数据元组,然后将它们发送到拓扑中。例如,Spout 从 Twitter API 读取推文并将其发布到拓扑中。
  • Bolt 负责处理输入的数据流,比如数据过滤(filtering)、函数处理(functions)、聚合(aggregations)、联结(joins)、数据库交互等。数据处理后可能输出新的流作为下一个 Bolt 的输入。每个 Bolt 往往只具备单一的计算逻辑。当我们执行简单的数据流转换时,比如仅进行数据过滤,则通常一个 Bolt 可以实现;而复杂的数据流转换通常需要使用多个 Bolt 并通过多个步骤完成,比如在神经网络中,对原始数据进行特征转换,需要经过数据过滤、清洗、聚类、正则化等操作。

04

流计算和批量计算的区别是什么?

MapReduce 可以说是一种批量计算,与我们今天介绍的用于实时数据处理的流计算,是什么关系呢?

虽然流计算和批量计算属于两种不同的计算模式,但并不是非此即彼的关系,只是适用于不同的计算场景。

在流计算中,数据具有时效性,因此在 5G 以及人工智能应用的驱动下,专注于实时处理的流计算越来越得到广泛的关注。流计算的低延时、易扩展等性能非常适用于对时延要求高的终端应用(比如直播中音视频的处理等),从而极大提高用户的服务体验。而批量计算适用于对时延要求低的任务。

在实际运用中,可以根据计算要求,选择不同的计算模式。我将这两种计算模式的特点,总结为了一张表格,以帮助你理解、记忆,以及选择适合自己业务场景的计算模式。

总结

今天,我与你介绍了分布式计算模式中的流计算。流数据的价值会随时间的流逝而降低,“时间就是金钱”在流计算中体现得淋漓尽致。这就要求流计算框架必须是低延迟、可扩展、高可靠的。

在介绍流计算的工作原理时,我首先通过一个流程图,与你介绍了它的 3 个步骤,即提交流式计算作业、加载流式数据进行流计算和持续输出计算结果。

然后,我以流计算开源框架中的 Storm 为例,与你讲述了 Storm 的核心组件以及通过 Spout 和 Bolt 构建有向无环图代表流计算逻辑,以实现流计算,以加深你对流计算原理的理解。

下一篇预告:分布式计算技术Actor

关于架构师修炼

本号旨在分享一线互联网各种技术架构解决方案,分布式以及高并发等相关专题,同时会将作者的学习总结进行整理并分享。

更多技术专题,敬请期待

本文分享自微信公众号 - 架构师修炼(jiagouxiulian),作者:架构师修炼

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof 使用详解

    这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进...

    架构师修炼
  • 用 float 存储金额,老板说损失从工资里扣!

    公司最近在做交易系统,交易系统肯定是要和钱打交道的,和钱有关,自然而然很容易想到用float存储,但是使用float存储金额做的计算是近似计算。

    架构师修炼
  • 终于有人把Docker讲清楚了!

    富 Web 时代,应用变得越来越强大,与此同时也越来越复杂。集群部署、隔离环境、灰度发布以及动态扩容缺一不可,而容器化则成为中间的必要桥梁。

    架构师修炼
  • 云计算 全球瞩目的战略焦点

    近几年云计算实现了应用领域的转变,引发不少科技公司对这一市场进行争夺。云计算起源于美国,2007年,谷歌和IBM开始在美国大学校园推广基于云计算的大数据服务,此...

    静一
  • 【学习】云计算名人语录

    云计算这几年编程了烫手山芋,人人都说与计算,估计菜市场的大妈要快指导云计算了。不管什么东西都要报上云计算的华丽外衣,下面是前几年的大人物们对云计算的一句话描述,...

    小莹莹
  • 2015是云计算3.0及云端融合的时代

    最近几年,云计算的应用及落地被谈论了很多,也在很多方面被实践着。黄罡,北大软件所副所长,一直专注于云计算技术领域的研究,在他看来:云计算是新一代IT引擎,从技术...

    静一
  • 云计算、雾计算、边缘计算 把这些“计算”混着用会怎样

    物联网在飞速发展的同时也产生了大量数据,面对数据处理压力,各种“计算”层出不穷,云计算、雾计算、边缘计算等名词纷纷涌出,那这些计算方式有何区别?应用于哪些场景?...

    边缘计算
  • 云计算的拓展点

    务院最新常务会议在给企业特别是小微企业送去每年减税400亿大餐的同时,更明确提出要积极支持云计算与物联网、移动互联网等融合发展,催生基于云计算的在线研发设计、教...

    静一
  • 什么是“云计算+”的时代

    最近不难发现,小到微观生活,大到宏观国家战略,有各种各样的“XX+”言论,什么“金砖+”,“互联网+”等等,还总能得到不少专家学者的赞扬之声。其实,这样的说法想...

    静一
  • 一文看懂云计算、雾计算、霾计算、边缘计算以及认知计算

    物联网对于数据的处理能力要求很高,怎么能够从庞大的数据海中挖掘一些有价值的信息对于物联网的发展至关重要,因此云计算,雾计算,边缘计算等等都将发挥其左右。

    魏晓蕾

扫码关注云+社区

领取腾讯云代金券