当前课程知识点:大数据平台核心技术 > 第七讲 流式计算的系统设计与实现 > 增量计算和流式计算 > 流式计算的系统设计与实现(主讲人:强琦)
大家好
我是来自阿里云
数据事业部的强琦
很高兴今天能和大家在一起
分享我们在流式计算
方面的一些经验
我将会从以下四个方面
跟大家探讨流式计算
和增量计算的一些关键知识点
流式计算
是一个编程内数据相对比较少
所以它对时效性的要求
是比较严格的
实时计算
其实指的就是说
这个计算的时效性要求比较强
那么流计算
我们认为是利用分布式的思想
和方法
对海量的streaming的数据
进行实时处理的系统
它的根本源自于对海量数据
在时效性上的挖掘
那么我们通常在说的实时系统
或者实时计算
其实严格意义上来说
其实是分成三大类
一类叫做ad-hoc commputing
它的计算是不可枚举的
也就是说整个计算
是在query时才发生的
那么用比较通俗的话来说
其实是数据的实时计算
那么第二类
就是我们今天的一个主题
流式计算
stream computing
那么这一类计算的一些特征是说
它的计算一定是可枚举的
它的计算是在数据发生变化时
或者数据进入系统时发生
那这一类我们用通俗的语言来说
它是实时数据的计算
那么大家都觉得
如果你这个实时计算
对数据的新鲜程度
对数据的时效性
如果也要有要求的话
那么实际上我们认为是第三类
它属于实时数据的实时计算
那么这一类
实际上对整个系统的挑战
是非常非常大的
那么我们后续课程也会介绍到
我们要说到的增量计算
它的定义
其实我在上一个PPT
已经介绍到了
它是分批
也就是batch
那么每个batch
会计算出一个
founction的一个delta值
所以正如PPT里头所演示的
那么大家可以看到
对于数据的一个delta
最终会变成一个对
function的一个delta值
最终通过一个增量的计算
达到的效果
实际上是在数据的delta值上
计算的一个结果
这个f(x)
我们称之为oldValue
也就是说
整个这个function的
一个oldValue
从这个公式就可以看到
整个增量计算与全量计算
和批量计算
也就是说我们传统意义上的
离线计算有很大的不一样的地方
就在于这个地方
就是它是个有状态的计算
而批量计算系统
和全量计算系统
它是个无状态的一个计算
所以这个就会导致
我们整个的系统的设计思路
理念和整个的容错的机制
会有很大的不同
相对于这个oldValue
本批次的数据
它就是这个delta
作为一个输入
整体上是一个有状态的计算
它会在系统的时效性
系统的复杂性
和系统性能之间去做tradeoff
如果我的batch里头的数据量
是非常少的
甚至比如说一条
那我这个系统表现出来的时效性
是最实时的
当然整个系统的容错吞吐
就会受到影响
就是说一批次的数据量
是比较少的情况下
那整个的系统吞吐会比较低
整个的系统的容错的复杂度
也会比较高
那么在增量计算情况下
它有哪些优势呢
相比以前的全量计算
中间的计算结果是实时产出的
那么也就是说
它的时效性是很强的
那么第二个重要的原因是说
我们把一个计算
平摊在每一个时间段
所以它可以做到平摊计算
大家都知道我们整个集群的规模
是受峰值的影响
就是峰值是多少
它就决定你的
整个集群的一个规模
那么大家都知道
双十一的峰值的流量
是非常非常大的
如果我们的计算
是按照最峰值的流量去计算的话
那我们的整个服务器资源
是相对比较高的
如果我们能够把传统的计算
平摊在每一分钟每一秒
实际可以起到降低成本的作用
还有一个很重要的特点就是说
我们的计算系统
我们整个一个系统的一个TPS
或者QPS
全部的数据
在进行一个function的
计算的时候
它会大量膨胀中间结果
也就是说像Group By Count
会到达200G
那么大家就可以想象
我整个系统的单机的吞吐
最高能达到多少
你一个就是200G
我100个query就会达到2个G
所以它对整个系统的吞吐
吞吐进而又影响到我们的成本
而增量计算
我们可以看到的是说
它其实是可以做到
中间结果的不膨胀
刚才其实最早说过
那么从我们这个增量计算的定义
可以看出
它其实是一个有状态的计算
在分布式领域
有状态的failover的策略
会跟无状态的计算系统截然不同
但是它有的一个优势是什么呢
就是它的恢复快
我的任务可以切成很多碎片
去运行
一旦我的任务
因为任何几台服务器的抖动
而宕机
我整个的恢复是从前一次
有效的batch开始计算
而不是像全量计算
和离线计算一样
全部要重新进行计算
当在离线计算
和在线计算混合部署的情况下
显得尤为重要
大家可以看到
增量计算其实是把一大块数据
分批去计算
所以我们在经常会遇到
一些现实的情况就是
数据倾斜问题
在真实场景下
数据倾斜会对整个计算系统
产生非常致命的影响
所以假设我不同的delta
之间的数据倾向都是1000
这个实际是很平常的
大家都知道双十一的时候
光小米一家店铺
就做到了很高的一个销售额
小米这个店铺和其他店铺的成交
这个都不是1000倍
而不是上万倍
甚至几十万倍的一个scale
传统的分布式计算
它的整个计算的延时
是受最慢的那个结点
那么很简单
我如果把全部的数据分批次
比如说分了1000批
那实际上对于每一批来说
我的数据的倾斜度就会缓解
分100次
那就缓解100倍
而且每个批次
其实是可以并行去运行的
所以这个可以大大地去降低
整个我们计算任务
在数据倾斜情况下的
一个运行效率的问题
介绍了一些流式计算的定义
那我们再看到
现在流式计算的一些
经典的应用场景
日志采集和在线分析
比较有名的像Google的统计
百度的统计
一些网站根据访问日志
它会分析出各种的UV PV IPV
一些各种的运营指标
有了流式计算
有了实时计算
它就可以对这些访问的时效性
就可以做到秒级
分钟级的监控
比如说双十一当天
不同的店铺会通过
他们店铺的实时的访问情况
来决定他们紧接着
后面的运营策略
因为双十一的时效性要求
是比较高的
所以机会是瞬息万变的
他们会根据前一分钟
甚至前一秒的
他们的售卖情况
会去决定后面的运营策略
上不上活动等等
另外去做大规模的数据的预处理
大家都知道
传统的ETL的工作
是用MapReduce的
或者Hive
或者ODPS这样去做
但是实际上
如果我们后面的计算要求
更高的时效性的时候
那么我们对于ETL的过程
要求也是实时性也是越来越高
那么对实时性天然要求比较高的
还有分控和告警
比如说你去刷一笔信用卡
它这个信用卡应该是带
越实时地去判断出来
你这个交易的风险
来终止这个交易
否则你十几分钟
半个小时 一个小时以后算出来
已经没用了
用户的财产帐户已经被盗用
已经造成损失
所以这一块的业务
天然的要求
对实时性要求非常高
那么网站的
移动的统计分析
另外类似于分控的
网络的安全检测
如果我们对网络的
无论是CDN
还是对于网站的恶意分析
能够越早实时
实际上我们就可以越早去保护
不至于造成整个的网站宕机
这样的严重后果
在阿里巴巴还有一个领域
会大量使用到实时的技术
比如说在线的服务计量
与计费的管理系统
搜索或者你的广告
你的点击计费
比如说你的预算是1000元
那么实际上
前面的点击已经把这个
前期已经都消耗光了
如果不能实时地检测到
那这个广告位其实是被浪费了
广告预算已经花完了
但是你这个广告预算
还是被它占用
那么之前讲到的流式计算
和增量计算
那我们现在回过头来去看看
到底流式计算
从数据方面
它有怎样的一个特点
那很显然
流数据它的定义是说
它是由业务产生的一个有界物
有向无界的一个数据流
它的一个特点是具有不可控性
就是你不知道
它这个数据的到达时机
以及相关数据的顺序
你对于数据质量
和规模的不可控性
大家都知道
如果我是离线的话
双十一当天的数据规模
其实我在晚上
进行离线计算的时候
我已经大概知道了
我可以及时提升我的计算的规模
和我的并发度
比如说
上游在更改它的数据的scanmark
元数据
以及其他数据定义的时候
我有充分的时间
在离线计算下去准备
进行数据订正
在流计算的场景
它这个数据是实时记录的
没有时间去响应
业务数据质量的变化
业务数据的规模
就像双十一
10号的晚上12点
到11号凌晨的0点
后面的一些数据到达的规模
完全是被业务活动和用户活动
所控制
我们基本上没法预测
另外后台的计算需求
它对时效性的要求
所以我们在容错方案
体系架构和结构输出方面
都与传统的计算
是截然不同的
后面的重点章节
我也会重点地描述
其中的一些技术难点和细节
那另外
大家都知道
传统收藏领域已经对批量计算
和离线计算的体系
研究的已经非常成熟
而在实施领域
就是数据仓库中间层这些领域
其实都是缺失的
包括数据员管理
数据质量管理等等
另外我们因为对数据的处理力度
非常小
可以小到几条数据
它将会架构产生决定性影响
另外我们处理的功能
也就是处理的Function
或者叫算子
对全局状态影响是不同的
有些算子它是有状态的
有一些算子它是无状态的
比如说我进行文章的分词
进行文章的或者词语的词性标注
实时的系统
其实它对这个是无状态
另外有一些算子
对数据到来的数据
是有严格要求的
而有些数据算子
它可能是midden的
它就对到来的顺序是没有要求的
有些处理它需要对输出
是有要求的
有些要求是对一致性输出
就是我不同的结点
我输出的这个应该是对齐的
比如说
都是11点的数据输出的
那就应该是11点的数据
而有些业务它不讲究
但是它就对整个输出的连贯性
是有要求的
也就是说你有些结点的宕机
不应该影响到另外结点的输出
它对数据的连贯性更高
所以看到整个流计算
它会对系统有非常多的
不一样的要求
这就会导致我们整个系统
有非常大的复杂性
跟离线有非常的不同
我们的计算仍然是要求时效性
要求快
那对质量来说
我要求它的计算一定是精准的
然后对容错的要求
我不论你的机器、集群、网络
任何的硬件有任何的宕机
我要求你的计算应该是持续稳定
而大家其实前面也可以看到
那对整个计算的要求
是非常多样性的
所以这是我们整个的特点
那么其中多样性
我还想再补充几点的就是
不同的业务场景
它对计算的结果要求
也是不一样的
有些要求是精确
一点数据都不能丢、精度损失
还有的业务场景
要求的是你可以多
但是你不能少
还有的业务场景
它是希望你丢数据的
是有一个sla在保证
比如说你丢的数据
不应该超过99%
那换取的是它整个计算的连贯性
是比较强的
当然刚才也提到过
有些业务要求你输出的时效性
是具有一致性
有些是对输出
是要有连贯性的要求
所以种种特点是导致我们
做流式计算和增量计算系统
会面临与传统的离线计算
和增量计算完全不同的要求
-主讲人:武永卫
-主讲人:程永
-QUIZ--作业
-大纲
-初步认识大数据对分布式存储系统的需求
-理解大数据对分布式存储系统的需求
-具体说明大数据对分布式存储系统的需求
-大规模分布式存储的挑战
-小概率事件-Raid卡故障
-分布式存储系统举例
-分布式存储系统重要功能设计要点剖析
-链式写正常流程
-写流程的另一种常见方式:主从模式
-链式写异常流程
-写异常处理的另一种方法-Seal and New
--写异常处理的另一种方法-Seal and New(主讲人:姚文辉)
-读正常流程
-读流程优化-BackupRead
-IO QoS
-数据正确性:checksum
-数据可靠性-Replication
-数据均衡-Rebalance
-垃圾回收-Garbage collection
--垃圾回收-Garbage collection(主讲人:姚文辉)
-Erasure coding
-Erasure coding(3,2)写入和读取过程
--Erasure coding(3,2)写入和读取过程(主讲人:姚文辉)
-元数据管理的高可用性和可扩展性
-元数据管理的高可用性
-Paxos概要
-Raft
-元数据管理的可扩展性
-不同存储介质的特性
-盘古混合存储
-QUIZ--作业
-阿里云飞天分布式调度
-任务调度
-资源调度
-容错机制
-规模挑战
-安全域性能隔离
-分布式调度的发展方向
-QUIZ--作业
-数据格式和抽象
-分布式编程模型
-MapReuduce编程模型
-关系型数据编程模型
-分布式图计算模型
-分布式编程未来展望
-QUIZ--作业
-分布式事务
-分布式一致性算法
-两阶段提交与三阶段提交
-实践--介绍
-关系型计算基本原理_1
-关系型计算基本原理_2
-分布式环境中的连接计算和聚合计算
-其他计算和物理优化
-QUIZ--作业
-提纲
-课程背景介绍
-前序知识
-分布式节点距离计算法则
-数据分布策略
-分布式计算调度
-数据就近原则计算如何容错
-ODPS跨集群数据依赖
-QUIZ--作业
-主讲人:谢德军
--实践2:编写MR完成Group By+Join操作(主讲人:谢德军)
-增量计算和流式计算
-与批量计算的区别
-业界典型系统技术概要分析
-核心技术
-消息机制
-有状态计算、并行DAG、抢占式调度和资源隔离、Failover机制
--有状态计算、并行DAG、抢占式调度和资源隔离、Failover机制(主讲人:强琦)
-StreamSQL
-QUIZ--作业
-软硬件趋势、分布式计算简史与内存计算
-分布式计算
-内存计算
-统一的计算框架
-业界经典系统技术分析-spark&flink
--业界经典系统技术分析-spark&flink(主讲人:强琦)
-QUIZ--作业
-主讲人:褚葳
-QUIZ--作业
-分布式环境下的新问题
-工程实现范例
-课程设计相关问题