当前课程知识点:大数据平台核心技术 > 第七讲 流式计算的系统设计与实现 > 核心技术 > 核心技术(主讲人:强琦)
结合以上几个系统的实现
再加上我们在实践中
积累的一些经验
我后面将会介绍流式计算
和增量计算中
最核心的一些技术和难点
那么大家可以从这张图
可以看到
整个流计算
是由一个复杂的Topology
所构成
那么从输入到输出
其中比较重要的两个角色
一个是Jobmaster
一个是Coordinator
那么Jobmaster
是每个Job负责运行时的
一个master
而Coordinator
是刚才所说的消息跟踪的
一个角色
当然流计算会产生大量的消息
所以Coordinator
最好是完全可以做到线性扩展
无状态的线性扩展
Batch数据从源头进入后
进入Source结点
Source结点会从消息源
会去读取数据
然后蓝色的部分
代表着Worker结点
蓝色结点再向橙色结点
进行数据传输的时候
遵循着shuffer的方法
当然这个shuffer
可以是哈希的方法
可以是广播的方法
也可以是任何用户自定义的方法
那么output结点
会将输出结果向在线系统输出
或者像下一级MQ结点输出
那么输出的结果
也是按照Batch去对齐
从刚才那张图可以看到
整个的系统边界
从最开始分成数据的收集
和结果的输出
我们支持消息队列
例如Kafka Hbese
HDFS方式的streaming方式
读取数据
并且借助这些源头
已经持久的数据
来进行数据的系统的容错
这就有一个问题
就是这个队列系统
和这个存储系统
可能涉及到
第三方的服务系统授权
另外实现一种数据收集
支持用户去写入数据
这个和前面一个
我们从用户的消息队列
去拉数据不同的地方在于
我们支持insert数据
那么当然需要实现一个接入
Inpoint的处理模块
这里要解决系统故障的
情况下的数据容错的问题
对于输出来说
跟上面相类似
我们可以选择将结果数据
输入到用户的消息队列
让业务方进行订阅
进入到自己的一个存储系统
也可以直接提供在线数据服务
当然这里就要涉及到
第三方的服务授权
和结果数据的始终对齐
数据的输入和输出介绍完
那么数据
如何在处理结点之间流转
那么这就涉及到
我们整体的shuffle机制
在流计算的处置机制下
数据采用了push模式
因为Push模式相对pu模式来说
它整个数据不落地
对于数据的传输的时效性
是比较友好的
那么另外消息机制
是需要解决丢数据
和重数据的问题
框架也需要保证消息的有序性
介绍完结算结点
跟计算结点的shuffle机制
那么我们反过来再看计算结点
那么一开始我们就提到了
流计算的计算进程
它是longlive的
传统的离线计算
它的计算任务
这个partion计算完了以后
它这个进程是可以被回收
统一 再去调度的
所以可能达到整个计算的超卖
成本降低等等
而流计算
用Push模式这种情况下
这个进程的longlive
那即便没有数据
它这个进程也在
所以决定了我们的系统
在面向longlive的
这个进程情况下
如何调度
消息机制如何去设置
如果你让他去独占CPU的话
那我们整个的计算的超卖
是很难完成的
那么计算的容错
刚才我们简单地介绍了一下
它整个的数据的跟踪机制
那么最最重要的一点
就是流计算的计算
它是个有状态的计算
这个中间状态的存储 容错
关乎着我们整个计算的时效性
正确性 吞吐
也就是成本
离线计算系统
对整个编程模型进行了约束
所以他在计算规模
以及容错上面
已经有了非常成熟的研究
但是在流计算情况下
那么它在扩展能力上
集群规模的上线突破上
那么作为是否可以线性增加
那么线性增加我的作业的并发数
是不是可以线性提升它的吞吐
刚才我们也介绍到了数据倾斜
用户针对这个数据倾斜
可不可以动态地来调整DAG
来有效地避免数据倾斜
带来的性能损失
那么同时
因为倾斜会带来少数结点的超时
超时会进而导致我们整个系统
更大规模的重发重做
进而产生雪崩的可能性
如何避免这些问题
数据的动态变化
我整个Topology
整个并发的动态调整如何做到
那么数据如何高可靠地存储
中间状态如何高可靠地存储
那么整个系统的可用性
但我进行版本升级 系统扩容
是不是可以支持热升级
单点的故障
任意结点的故障
不会导致我整个服务的不可用性
因为我们是在做一个服务
那么我们不可避免地
面临着多租户管理的问题
也就是说授权鉴权 资源隔离
当然有超卖
那么计量计费安全体系
运维体系怎么保证
等等这都是我们在做流计算系统
面临的一些核心问题
那么正如我们刚才所介绍到的
增量的一个delta的语意
我们提出了新的模型MRM
它分为三个主要阶段
Local阶段
是指Batch的Local操作
这个语意完全等同于MapReduce
大家可以认为离线计算
或者全量计算
是一个只有一个Batch的
增量计算
所以这时候的Map语意
是完全一样的
那么Reduce阶段
是一个Aggregate的阶段
那么相当于说
我在Batch内的数据
做一次重新的组合
做数据的聚合操作
也就是说Batch内的Reduce操作
但是增量的语意告诉我们
我们一定要做跨Batch的
数据的结果的合并
也就是上面这个公式
delta计算出来
要进行跟原来那个f(x)
要进行一个合并操作
这个g
所以我们以一个简单的
wordcount来做举例
那么上面这些是
我举例的一些案例
按照这样的Batch去分
那么可以看到Map阶段
每个Batch的输入 输出
然后Reduce输出
第一个Batch输出7
第二个Batch输入5
依此类推
那么初始化情况下
OldValue为0
那么Merge很简单
就进行0和7的合并操作
那在这个case下面
它是count
进行一个count操作
就是7+0
在Batch2
它就把本次的Reduce结果5
和上一次Merge的全局结果
再进行一次Merge12
依此类推
所以大家可以看到
这个对角线的这个颜色
这个就是
这一轮的Merge的结果
会成为下一轮的OldValue
那么有状态的计算
核心的问题是
如何高效地保证这种状态
并且保证系统的扩展性
和系统的可容错性
也就是可用性
那么可以看到
贯穿始终的
是一个很重要的Batch的概念
那么它是整个系统跟踪数据
和处理时效性的最小单位
其实Batch
是一个可以scale的概念
就是它就可以蜕化成
一个全量计算
就是你可以认为
传统的批量计算 全量计算
它是一个只有一批数据
就是所有数据放在一批的
一个增量计算
它是一个特殊的增量计算
也可以把一条数据
就放在一个Batch里头
它可以做到时效性非常高
当然这两者系统的吞吐
系统的时效性
会有截然不同的表现
那么这里头作为一个约束
就是增量计算必须有三个约束
三个要素
就是第一
确定性
因为只有确定性
才有所谓的容错
另外可加性
就是你这个操作
必须是可以增量的
那么第三个要素
叫做可逆性 inverse
那么后面这个例子
会详细地介绍到
那么这个case的意思是说
假设我在双十一有两行sql
那么首先按照卖家ID去Groupby
也就是说
我要统计卖家的实时成交情况
是按照sellerid为11卖家
假设我刚开始没卖
还没做生意
那么第二行是什么意思呢
就是按照每10块钱分制方图
就是说做成0到9块钱生意的
卖家有多少
实时 实时有多少
然后做成10块钱
到19块钱生意的卖家
实时有多少
依此类推
所以可以看到
就像大家看到
双十一的阿里巴巴的大屏一样
它是个实时滚动的
所以举例是说
sellerid为11的这个卖家
刚开始我没卖东西
这个第0档现在没卖家
那么第一档当前时刻
已经有10个卖家了
第七档有53位卖家
卖家为11
做成了一个5块钱的生意
这个数据来了
那么整个的计算是说
11这个0会变成5
那么很明显我现在属于第一档
那么我就把第一档的这个值
由0变成了1
加到了1
因为我现在属于第一档了
也就是第一档的卖家
现在有1个了
就是卖家为11的
但是紧接着
11号卖家
他又做成了16块钱的生意
很明显
他的这个状态
someMoney它就会变成21
那么这里头
发生一个
非常有意思的事情就是说
你21了
到第二个sql语句的时候
第二个计算的时候
你21应该属于20到29这个区间
这个档
也就是说它会把这个档位
原来有10个卖家
现在变成11个卖家
但是重要的是说
你应该还把你原来第0档
也就是做了成了0笔交易
和9笔交易的那个1要减掉
你现在是21块钱了
20到29这个档
你第一要把这个档位要加上去
另外一个
要把你原来对其他档位的贡献
要撤销掉
这个就是我们说的可逆性
我们就需要把这样子的UDEF
不仅要做它的一个正像操作
同时也要它去实现一个负向操作
也就是额外的操作
意思就是说
把你原来之前的那个值
对系统状态的影响
让用户有机会撤销掉
所以可以看到
用户又
这个卖家又做了一个
65块钱的生意
那么变成86
那它其实会变到80到89档
53会加成54
但是同时
刚才那个20到29那个计数
它就会减回到10
然后对外面输出回去
所以可以看到
我们整个的增量计算
这样子的一个
增量语意的一个rollback
相当于对数据库领域的乌化视图
两个乌化视图实时更新
那么一个乌化视图
嵌套一个乌化视图
那么必须要对之前的计算
有一个回稳操作
那么我们认为
这是增量计算的一个
非常本质的一个要求
-主讲人:武永卫
-主讲人:程永
-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--作业
-分布式环境下的新问题
-工程实现范例
-课程设计相关问题