分布式技术原理与算法解析
聂鹏程
智载云帆CTO,前华为分布式Lab资深技术专家
立即订阅
5969 人已学习
课程目录
已更新 36 讲 / 共 34 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (3讲)
开篇词 | 四纵四横,带你透彻理解分布式技术
免费
01 | 分布式缘何而起:从单兵,到游击队,到集团军
02 | 分布式系统的指标:啥是分布式的三围
第一站:分布式协调与同步 (6讲)
03 | 分布式互斥:有你没我,有我没你
04 | 分布式选举:国不可一日无君
05 | 分布式共识:存异求同
06 | 分布式事务:All or nothing
07 | 分布式锁:关键重地,非请勿入
08 | 分布式技术是如何引爆人工智能的?
第二站:分布式资源管理与负载调度 (6讲)
09 | 分布式体系结构之集中式结构:一人在上,万人在下
10 | 分布式体系结构之非集中式结构:众生平等
11 | 分布式调度架构之单体调度:物质文明、精神文明一手抓
12 | 分布式调度架构之两层调度:物质文明、精神文明两手抓
13 | 分布式调度架构之共享状态调度:物质文明、精神文明多手协商抓
14 | 答疑篇:分布式事务与分布式锁相关问题
第三站:分布式计算技术 (4讲)
15 | 分布式计算模式之MR:一门同流合污的艺术
16 | 分布式计算模式之Stream:一门背锅的艺术
17 | 分布式计算模式之Actor:一门甩锅的艺术
18 | 分布式计算模式之流水线:你方唱罢我登场
第四站:分布式通信技术 (4讲)
19 | 分布式通信之远程调用:我是你的千里眼
20 | 分布式通信之发布订阅:送货上门
21 | 分布式通信之消息队列:货物自取
22 | 答疑篇:分布式体系架构与分布式计算相关问题
第五站:分布式数据存储 (5讲)
23 | CAP理论:这顶帽子我不想要
24 | 分布式数据存储系统之三要素:顾客、导购与货架
25 | 数据分布方式之哈希与一致性哈希:“掐指一算”与“掐指两算”的事
26 | 分布式数据复制技术:分身有术
27 | 分布式数据之缓存技术:“身手钥钱”随身带
特别放送 (3讲)
特别放送 | 分布式下的一致性杂谈
特别放送 | 徐志强:学习这件事儿,不到长城非好汉
特别放送 | 那些你不能错过的分布式系统论文
第六站:分布式高可靠 (5讲)
28 | 分布式高可靠之负载均衡:不患寡,而患不均
29 | 分布式高可靠之流量控制:大禹治水,在疏不在堵
30 | 分布式高可用之故障隔离:当断不断,反受其乱
31 | 分布式高可用之故障恢复:知错能改,善莫大焉
32 | 答疑篇:如何判断并解决网络分区问题?
分布式技术原理与算法解析
登录|注册

16 | 分布式计算模式之Stream:一门背锅的艺术

聂鹏程 2019-10-28
你好,我是聂鹏程。今天,我来继续带你打卡分布式核心技术。
在上一篇文章中,我与你介绍了分布式计算模式中的 MapReduce 模式。这种模式的核心思想是,将大任务拆分成多个小任务,针对这些小任务分别计算后,再合并各小任务的结果以得到大任务的计算结果。
这种模式下任务运行完成之后,整个任务进程就结束了,属于短任务模式。但,任务进程的启动和停止是一件很耗时的事儿,因此 MapReduce 对处理实时性的任务就不太合适了。
实时性任务主要是针对流数据的处理,对处理时延要求很高,通常需要有常驻服务进程,等待数据的随时到来随时处理,以保证低时延。处理流数据任务的计算模式,在分布式领域中叫作 Stream。
今天,我将针对流数据的处理展开分享,和你一起打卡 Stream 这种计算模式。

什么是 Stream?

近年来,由于网络监控、传感监测、AR/VR 等实时性应用的兴起,一类需要处理流数据的业务发展了起来。比如各种直播平台中,我们需要处理直播产生的音视频数据流等。这种如流水般持续涌现,且需要实时处理的数据,我们称之为流数据
总结来讲,流数据的特征主要包括以下 4 点:
数据如流水般持续、快速地到达;
海量数据规模,数据量可达到 TB 级甚至 PB 级;
对实时性要求高,随着时间流逝,数据的价值会大幅降低;
数据顺序无法保证,也就是说系统无法控制将要处理的数据元素的顺序。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式技术原理与算法解析》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(17)

  • Jackey
    不太好说是否等价,因为离线和实时是针对时延判断的,批量和流式是针对数据处理方式判断的。只能目前说离线和批量使用的框架、处理方法相同(实时和流式相同)。但如果以后发展出能批量进行实时数据计算的计算机就不能说批量=离线了吧
    2019-10-28
    3
  • 随心而至
    In computer science, an online algorithm[1] is one that can process its input piece-by-piece in a serial fashion, i.e., in the order that the input is fed to the algorithm, without having the entire input available from the start.

    In contrast, an offline algorithm is given the whole problem data from the beginning and is required to output an answer which solves the problem at hand.

    In computer science, streaming algorithms are algorithms for processing data streams in which the input is presented as a sequence of items and can be examined in only a few passes (typically just one). In most models, these algorithms have access to limited memory (generally logarithmic in the size of and/or the maximum value in the stream). They may also have limited processing time per item.

    In computer science, real-time computing (RTC), or reactive computing describes hardware and software systems subject to a "real-time constraint", for example from event to system response.[1] Real-time programs must guarantee response within specified time constraints, often referred to as "deadlines".


    从维基百科的定义可以,他们侧重的点不同,个人总结如下:
    1.online algorithm 只能看到数据的一部分,必须基于此做决定(可能不是最优的)
    2.offline algorithm 可以看到解决问题的所有数据
    3.streaming algorithms 处理序列流(内存有限,流大小有限,单个序列项处理时间有限)
    4.real-time computing 强调响应时间,有时间限制。

    参考自https://en.wikipedia.org/wiki/Online_algorithm 及其See also:


    2019-10-28
    2
  • 随心而至
    聂老师从一般到具体,讲的真好。
    我认为批量计算是离线计算的一种实现方式;流式计算是实习计算的一种实现方式。待会我查下他们的定义看看自己理解的对不对
    2019-10-28
    2
  • 信xin_n
    终于明白了 Nimbus 和 Supervisor 的关系了
    2019-11-16
    1
  • Eternal

    老师课后思考题:“离线计算和批量计算,实时计算和流式计算是等价的吗?”

    其实留言去已经有小伙伴总结得很好(自认为,如果有错望指正):
    离线计算、批量计算、实时计算、流式计算都是要计算的,这是它们的共同特点;

    批量和流式是描述计算的时候计算资源的特点的,是描述计算数据的维度。
        批量计算
         是等到计算数据积累到一定数量才开始计算
        流式计算
         是数据量很小时候就可以开始计算,有了资源就可以开始,源源不断

    离线和实时是描述计算的时效性,是描述计算的维度。
        离线计算
         因为计算数据不能来了就计算,需要累计到一定阈值,所以按照时效性来说,计算是离线的
        实时计算
         因为计算数据来了就开始计算,计算没得延迟,,所以按照时效性来说,计算是实时的

    批量和流式是一个维度,离线和实时是另外一个维度,但是两个维度之间又有联系:
    因为目前现有的技术发展,不能大批量计算做到实时的效果,所以只能少量资源做到实时计算,且通过流式计算来达到实时的效果;
    但是如果一旦当前的硬件指标和技术能力突破后,能大批量计算做到实时的效果,这也是可能的。因此我认为,我们的演进目标是想能
    做到批量实时的。两个维度之间由相关联的因素来驱动它们相互变化。
    2019-11-02
    1
    1
  • 老师请问流计算怎么做增量计算?
    2019-11-21
  • simon
    流计算看上去,这些框架跟普通的分布式微服务框架是不是一样,都是可以并发处理实时数据,并且可以横向扩展?
    2019-11-08
  • 张先生
    实习的时候做过写过mapreduce和storm的代码,一直不是特别清楚两者的区别,看了这篇文章豁然开朗
    2019-11-04
  • Eternal
    继续打卡

    分布式计算了解的很少,这几节引起我的兴趣和思考,很受益。
    老师将流式计算的一个节点定义成一个拓扑节点,这个让我想到了一个点:
    计算机CPU由计算单元,控制单元,内存组成。CPU的计算由很多与门、非门等控制电路组成。
    计算机的发展从单机单核,到单机多核,到分布式多核,这是不断的最求性能提升的发展趋势。
    如果我们想要用分布式集群来模拟单机单核的计算怎么做呢?也就是通过一个进程来模拟一个CPU最底层的门电路计算。
    由上面的推演让我想到了,流式计算将一个CPU的计算能力抽象成了一个进程,也就是老师讲的一个计算拓扑节点,这样我们
    就可以获取更加超大规模的分布式计算能力了。

    老师总结的流式计算特点:持续产生,易逝,实时。CUP的计算也有类似的特点。
    流式计算的节点计算规则可以自定义,CPU的计算逻辑不能很轻易的更新。


    再想到一个点:华为将原来通过软件处理的很多能力通过Soc集成到芯片中,这样来提高芯片的处理能力,但是Soc制作成本(俗称流片)很昂贵。
    而分布式计算将本来硬件处理的能力抽象到软件层面来实现,这样可以更加灵活,也突破了传统计算机计算的边界。
    两者走的是不同的方向,虽然它们的场景可能不经相同,但是都是为了提升计算性能而做的努力。

    以上纯属自己的相互思考和联系,望大牛们看到到错误后能给与指正,谢谢!
    2019-11-02
  • 波波安
    spark streaming就是使用的批处理方式实现的实时计算
    2019-11-01
  • 波波安
    离线和实时是指数据处理的时延。批量和流式是指数据处理的方式。
    2019-11-01
  • 天天向善
    实时天气预报,直播音视频处理,在流式计算中是计算什么,没有概念,能介绍下吗
    2019-10-31
  • leslie
    离线计算和批量计算不是等价的:批量计算不一定离线,需要使用在线资源;离线计算则是使用闲置资源,时间和线上压力还是不同的。离线计算是批量计算的一种形式,但是离线计算不一定是批量计算。
        实时计算和流式计算不是等价的:实时计算是当下-个体,流式计算可能是处理一组实时计算。流式计算是有1个或者多个实时计算通过分布式处理之后处理完再发送出去的结果;实时计算则是拿到就处理,处理完了就把结果发送出去。
        这是我个人对于老师课程的理解:期待老师答案的公布以及后面的继续分享。通过老师对分布式计算的讲解,解释明白了分布式技术的核心。
    2019-10-28
  • 有人@我
    分布式跟流水计算好像没多大的关系
    2019-10-28
  • 旭东
    如果历史数据回放进行就处理也算流量处理吧;个人认为注意区别点还是处理数据的时效性,如果对处理结果不要求那么及时,新鲜。

    流处理就像喝豆浆,批量处理像吃豆腐。
    2019-10-28
    1
  • xingoo
    有一些区别,离线指数据混入是延时获取,存在一定的时间差,比如今天读取昨天的数据;批量处理形容的是处理数据的模式,分差成多个子任务,同时处理;实时形容的是读取数据尽量贴近业务时间;流式计算描述的也是一种计算方式,每个子任务并行或穿行,行成数据的
    2019-10-28
  • 啦啦啦
    打卡
    2019-10-28
收起评论
17
返回
顶部