阿里云
为了无法计算的价值
打开APP
阿里云APP内打开
学习中心> 分布式计算入门> 正文

分布式计算入门

9课时 |
9875人已学 |
免费
课程介绍

针对大数据分步式计算中的相关技术进行讲解,核心讲解流式计算和内存计算技术,阐述阿里云在处理这些功能时所使用的技术,并对阿里在这里的技术优化方式进行了详细的讲解。

流式计算概述

内容介绍:

一、增量计算和流式计算
二、增量计算和流式计算的应用场景

三、增量计算和流式计算的特点

一、增量计算和流式计算

流式计算是一种特殊的增量计算

  1. 流式计算

利用分布式的思想和方法,对海量“流”式数据进行实时处理,源自业务对海量数据,在“时效”价值上的挖掘诉求。

  1. 实时计算

(1)ad-hoc-computing

计算不可枚举,计算在 query 时发生,提交查询的时候发生。(数据的实时计算)

(2)stream computing

计算可枚举,计算在数据发生变化时发生。(实时数据的计算)

(3)continuous computing

支持在大数据集的在线复杂实时计算。(实时数据的实时计算)

  1. 增量计算

f(x + delta) = g(f(x),delta)

x 是存量,之前遇到的已经处理过的数据

delta 是本次的新增数据

x + delta 作为整体计算,f = 增量计算的结果,在存量数据上已经计算出来的结果。

g(f(x),delta) 增量计算的结果,增量计算和批量计算之间应该是完全一样

f(x) oldValue状态,在本次 delta 计算前的状态

增量计算、批量计算=有状态计算

batch ==> delta    处理的数据越少,计算的时效性越强,系统的吞吐下降。

增量计算是在系统的时效性、系统的复杂性和系统的性能之间不断的做 tradeoff 。

优势:

大家可以关注到阿里巴巴双十一鸟巢中的实时大屏,这个结果是随着事件不断更新的实时产出。如果是用批量计算或者离线计算,只会是十一月十一日做完了才会得到结果。

即便是相同的计算也可以用增量方法去运算,这也会带来一些好处,比如说计算每天的GMV,用传统的批量计算会等到每天的0点或1点数据全部 ready 的情况下去运算,负载压力:1点→6点,7点→8点出结果,1点→5点特别高,平时很低。

整个集群的规模:受峰值的运算压力所决定。

双十一的流量可能是平时流量的数倍或者数十倍,那么采购机器的时候是需要根据双十一的峰值去采购的,而这些机器在平时是用不到的。

如果将这些运用变成增量计算, delta 数据来一批计算一批,很明显的好处是将时间的负载平摊在每二十四小时里面,平摊在每一分钟里面。

如果把整个计算量看做一个矩形或者一个梯形,它的阴影是整个学校的计算量。那么传统的批量计算,它是会集中在少数时间内把它寄上来,所以整个高度就非常高,也就是说需要的机器的数量会非常大。

那利用增量计算完全可以把这个宽度拉宽,相同面积下,所需要的这个高度(也就说峰值就比较少),那么可以达到大大节省整个集群规模的这么一个作用。

那么我们经常会在计算中发现一个问题,也就是说大规模计算系统,它的 input 、 output 是两个很重要的因素,但是实际上 input 、output 之间会膨胀出很多的中间结果。

我们会在真正的线上会发现有些任务它的中间结果甚至是 input 、output 的几十倍甚至上百倍,也就说它中间结果的膨胀是非常非常厉害的。那么中间结果大量的膨胀导致非常大量 io 的消耗,所以整个延时也会增加。

而增量计算它的好处很明显,中间计算结果在很多情况下是不需要膨胀的。增量计算是个有状态的计算,那么如果把离线计算或者批量计算机进行增量化还有一个好处,是可以把之前的状态保存保留下来,那么在整个任务要进行恢复的时候,它实际上可以从最近一次的状态开始。

所以它的好处很明显是整个容错的速度非常快,不像批量计算,要将整个数据全部进行 recomputing 。

因为增量计算是分批次计算,所以实际上它在真实业务场景中出现大量的数据倾斜的计算情况下,有较好的克服倾斜能力。假设我们的数据有10万倍的倾斜,而这个10万倍也是很普通的,双十一排名前三的店铺的成交额可能就是其他店铺成交额的十几万倍。

如果进行批量计算,不同节点的运算,有些节点可能是其他节点运算量的几千上万倍,而整个系统的性能是受最慢的那台机器所决定的。如果我们将这些数据进行分批次运算,比如说分成一千批,实际上每批的数据倾斜的程度是呈线性降低。

当然,不同批次的运算是可以并行进行,所以它可以大大降低数据倾斜对整个计算性能的退化的影响。

  • 中间计算结果实时产出
  • 平摊计算
  • 中间计算状态不膨胀
  • 有状态的 failover
  • 批次运算

降低数据的倾斜对整个计算性能的退化的影响。

二、增量计算和流式计算的应用场景

1. 日志采集与在线分析

2. 大数据的预处理

3. 风险监测与告警

对交易业务的虚假交易进行实时监测与分析。

  1. 网站与移动应用统计分析

双11运营、淘宝量子统计等各类统计业务分析中,提供实时的业务统计分析报表。

  1. 网络安全检测

实时监控、实时分析、实时监测、实施对抗

  1. 在线服务计量与计费管理系统

假设一个广告系统,如果一个广告组充了1000块钱,买了这个镜架,单次点击100块钱。(当然搜广告搜索它的算法不仅根据价格,还有经过根据内容来排序。)

假设花了这个钱排序相对比较靠前,那么实际上大量的流量可能把今天给的预算例如说就是5000块钱,一下就点击光了。但是如果这个广告平台的计费是小时,乃至像之前以天为计算单位,那实际上尽管充值的钱被消耗光了,但实际上它没有统计。也就是说广告位可能还是比较靠前,那这样对平台来说其实是损失非常大。

所以实际上现在业界的一些广告系统都已经引入了实时的计量计费的监测。

  1. 工业4.0
  2. 物联网

像从去年比较火的工业4.0、IoT互联网这些场景下数据本身的实时性和计算的时间要求就非常高,那么我相信在今年乃至明年,在工业4.0和物联网实时计算、流式计算将会大行其道。

三、增量计算和流式计算的特点

  1. 数据特点→流/delta

流:由业务产生的有向无界的数据流

  • 不可控性(到达时机、相关数据顺序、数据质量、数据规模)

不同的数据通路,到达的时机完全不可控。

比如说我们要计算五分钟的一个滑窗,12:00~12:05的固定窗口,但是由于某些不可控原因,最近这个数据通路他上报的数据12点的数据,有可能在12:30才上报。那么这个数据怎么进行有效的、实时的和保证正确性的计算?因为这个12点的数据12:30才来。

如果要把这个固定窗口五分钟的计算是willdefine,所以你就必须得等到12:30乃至更久。所以它的整个的实时性完全不可控,要处理这样子的问题,将会引入流式计算或者增量计算一个非常重要的特性,当然现在也在业界不同流派有争议,就是引入 updated 语句。

大家都知道计算是具备确定性,也就是说这个结果,比如说输出这个一个计算结果五分钟的固定窗口,那输出的这个数一定是确定是,也就是说它不可再被更改。

那么在这种场景下,不被更改就意味着延时。因为不知道不同的通路,它的数据到底到达时机在什么时候?所以必须得等一个时间,那么这就会大大造成整个的计算实效性是不可控。

引入update语句,等于也就是说我之前可以将12:00~12:05的固定窗口的计算值输出。当12点~12.5的是真实的数据在12:30来的时候,可以将这个值补偿进去,将原来的那个值进行 update 。

  • update 语句:对系统后续的设计、容错及语义方面产生极大的影响。

大家可以想一下传统的离线计算或者批量计算,那么我在11月12号的凌晨,技术人员是可以预估出前面的流量,做出一些系统扩容和任务配置扩容的一些决定。但是实时或者流失的计算,这个系统的洪峰,从用户端在两秒内就到达了计算系统。是完全没有机会去做对规模进行反应,所以这对我们计算的整个弹性对规模,对现行扩展性提出了比离线计算和批量计算更高的要求。

  • 体系缺失(数据源的治理、数据质量的治理)

传统的离线计算和批量计算,它的相关的数据仓库的质量体系已经构筑的比较完善和完备。那么在生命这个新的应用场景下,无论是数据源的治理还是数据质量的治理,其实这个体系都是相对非常缺失,包括阿里巴巴内部,也在构建整个的数据治理体系,它不仅仅是计算的问题。那么基于对计算的时效性和数据的时效性的要求,整个增量或者流式计算系统,它的容错方案、它的体系结构和它的结果输出的方式都与传统的离线计算和增量提成方式完全不同。这给我们提供了非常大的发展空间和挑战。

  • 时效性要求(容错方案、体系结构、结果输出)

对整个计算的处理的数据力度,有更高的要求。

  1. 处理粒度最小

流式计算系统或者增量计算系统,它的处理粒度相对比较小。比如说可能每次只处理几条数据,甚至可以一条数据。当然也可以上亿条数据。

对整个系统架构具有决定性影响。

  1. 处理算子对状态的影响不同

像有些计算它是无状态的计算,有些是有状态的计算。有些处理算子甚至对数据进入的顺序有要求。

  1. 输出要求

那么他对输出不同的业务场景也有不同要求,有些业务场景要求数据输出具有一致性,也就是说假设有两个区,一个计算任务bucount。那么不同的key可能会被分配到不同的计算机类。假设我们在计算双十一期间,不同店铺的实时成交情况。假设一个数据通路或者处理节点有问题,那么不同的店铺,比如说有些店铺的处理节点是ready的,仍然是ok的,他会一直往前计算,比如说到凌晨1点。而有些店铺因为他那个数据通路有问题,或者计算节点有问题可能到12:50。然后后面我们又有一个计算就是排序,很明显存在的一个问题就是店铺a和店铺b排了序,但是其实他们是在不同维度上、不同时间粒度上进行排序。

可能店铺a是到1点截止的数据,店铺b只是到12:50。那么很明显这个计算就是可比性就是ready是OK的。所以在这样的业务场景下,他要求你的输出具有一致性。而对有些业务场景下,它对输出的连贯性有要求,对一致性没有要求。

比如分控场景,那么有些数据通路宕机了。那没有宕机的将仍然可以计算,不能因为一个点的宕机影响到整体输出,就不能继续。所以大家可以看到,即便在流式计算和增量计算系统内部不同业务场景对它也有不一样的要求。

  1. 计算特点

时效性    高

质量        准

容错        稳

多样性    多

具有对实时性要求比较高,对质量的把控要求也是非常精准,对容错的要求要求快速恢复、比较稳定的恢复。对流式计算的场景细分,业务场景仍然要求有非常大的多样性,比如说连贯性,一致性。

  1. 多样性

精确、只多不少、丢的 sla

有些业务是要求数据一条都不能错,有些是业务要求可以多一点但是不能少,比如业务具备的一些幂等性,例如搜索,他本身具有一个逻辑的字段,所以多输出,实际上后面的业务逻辑是可以的。

有些业务场景要求你丢的数据的数量,还是要有sla的保证。所以这其实在要求进行设计增量计算和流式计算系统提出了很高的灵活性的要求。

我的学习进度
请登录后查看您的学习进度!
立即登录
本课程相关云产品