流式计算的系统设计和实现 搜索引擎百度算法
程序员文章站
2024-03-06 14:55:32
...
阿里云数据事业部强琦为大家带来题为“流式计算的系统设计与实现”的演讲,本文主要从增量计算和流式计算开始谈起,然后讲解了与批量计算的区别,重点对典型系统技术概要进行了分析,包括Storm、Kinesis、MillWheel,接着介绍了核心技术、消息机制以及StreamSQL等,一起来了解下吧。
增量计算和流式计算
流式计算
流计算对于时效性要求比较严格,实时计算就是对计算的时效性要求比较强。流计算是利用分布式的思想和方法,对海量“流”式数据进行实时处理的系统,它源自对海量数据“时效”价值上的挖掘诉求。
那么,通常说的实时系统或者实时计算,严格意义上来说分成三大类:
ad-hoc computing(数据的实时计算):计算不可枚举,计算在query时发生。
stream computing(实时数据的计算):计算可枚举,计算在数据发生变化时发生。
continuous computing(实时数据的实时计算):大数据集的在线复杂实时计算。
增量计算
增量计算是分批,也就是batch,每个batch会计算出一个function的delta值,数据的一个delta最终会变成对function的一个delta值,最终通过增量计算达到效果。
batch => delta: f(x + delta) = g( f(x), delta )
实际上是在数据的delta值上计算的一个结果,这个f(x)我们称之为oldValue,整个function的一个oldValue从公式就可以看到,整个增量计算与全量计算和批量计算有很大的不一样的地方,就在于它是有状态的计算,而批量计算系统和全量计算系统是无状态的计算,所以这就会导致整个系统的设计思路理念和整个的容错机制会有很大的不同,相对于oldValue本批次的数据,delta作为一个输入,整体上是一个有状态的计算,它会在系统的时效性、系统的复杂性和系统性能之间去做tradeoff,如果batch里的数据量是非常少的,那这个系统表现出来的时效性是最实时的,当然,整个系统的容错吞吐就会受到影响,就是说一批次的数据量是比较少的情况下,整个的系统吞吐会比较低,整个系统的容错复杂度也会比较高,那么在增量计算情况下,它有哪些优势呢?
1. 相比以前的全量计算,中间的计算结果是实时产出的,也就是说它的时效性是很强的;
2. 我们把一个计算平摊在每一个时间段,可以做到平摊计算。整个集群的规模是受峰值的影响,双十一的峰值流量是非常大的,如果按照最峰值的流量去计算,整个服务器资源是相对较高的,如果能够把传统的计算平摊在每一分钟每一秒,实际可以起到降低成本的作用;
3. 整个数据处理链路如果放在一次Query中进行处理,也即是全部的数据在进行一个function的计算时,会大量膨胀中间结果,也就是说像Group By Count会到达200G,而增量计算可以做到中间结果不膨胀;
4. 增量计算是一个有状态的计算,在分布式领域,有状态的failover策略会跟无状态的计算系统截然不同,但是它的优势是恢复快,任务可以切成很多碎片去运行,一旦任务因为任何几台服务器的抖动而宕机,整个的恢复是从前一次有效的batch开始计算,而不是像全量计算和离线计算一样,全部要重新进行计算,当在离线计算和在线计算混合部署的情况下,这显得尤为重要;
5. 增量计算把一大块数据分批去计算,因此在批量计算里面经常遇到会一些数据倾斜问题在增量计算并不会遇到。在真实场景下,数据倾斜会对整个计算系统产生非常致命的影响,所以假设不同的节点之间数据倾斜比是1000,这个实际是很平常的,双十一的时候,光小米一家店铺就做到了很高的销售额,小米店铺和其他店铺的成交是上万倍甚至几十万倍的scale,传统的分布式计算的整个计算延时是受最慢的那个节点影响,如果把全部的数据分批次,实际上对于每一批来说,数据的倾斜度就会缓解,而且每个批次是可以并行去运行的,所以这可以大大地去降低整个计算任务在数据倾斜情况下的运行效率问题。
增量计算和流式计算应用场景
日志采集和在线分析:如基于访问日志、交易数据的BI算法分析。比较有名的像Google的统计、百度的统计,一些网站根据访问日志,会分析出各种的UV、 PV、 IPV等运营指标,有了流式计算,就可以对这些访问的时效性做到秒级、分钟级的监控,比如双十一当天,不同的店铺会通过店铺的实时访问情况来决定后面的运营策略;
大数据的预处理:数据清洗、字段补全等;
风险监测与告警:如交易业务的虚假交易实时监测与分析;
网站与移动应用分析统计:如双11运营、淘宝量子统计、CNZZ、友盟等各类统计业务;
网络安全监测:如CDN的恶意攻击分析与检测;
在线服务计量与计费管理系统 搜索引擎的关键词点击计费;
此外,流式计算和增量计算也应用在工业4.0和物联网上。
流式计算的数据特点
全文链接http://click.aliyun.com/m/22541/
增量计算和流式计算
流式计算
流计算对于时效性要求比较严格,实时计算就是对计算的时效性要求比较强。流计算是利用分布式的思想和方法,对海量“流”式数据进行实时处理的系统,它源自对海量数据“时效”价值上的挖掘诉求。
那么,通常说的实时系统或者实时计算,严格意义上来说分成三大类:
ad-hoc computing(数据的实时计算):计算不可枚举,计算在query时发生。
stream computing(实时数据的计算):计算可枚举,计算在数据发生变化时发生。
continuous computing(实时数据的实时计算):大数据集的在线复杂实时计算。
增量计算
增量计算是分批,也就是batch,每个batch会计算出一个function的delta值,数据的一个delta最终会变成对function的一个delta值,最终通过增量计算达到效果。
batch => delta: f(x + delta) = g( f(x), delta )
实际上是在数据的delta值上计算的一个结果,这个f(x)我们称之为oldValue,整个function的一个oldValue从公式就可以看到,整个增量计算与全量计算和批量计算有很大的不一样的地方,就在于它是有状态的计算,而批量计算系统和全量计算系统是无状态的计算,所以这就会导致整个系统的设计思路理念和整个的容错机制会有很大的不同,相对于oldValue本批次的数据,delta作为一个输入,整体上是一个有状态的计算,它会在系统的时效性、系统的复杂性和系统性能之间去做tradeoff,如果batch里的数据量是非常少的,那这个系统表现出来的时效性是最实时的,当然,整个系统的容错吞吐就会受到影响,就是说一批次的数据量是比较少的情况下,整个的系统吞吐会比较低,整个系统的容错复杂度也会比较高,那么在增量计算情况下,它有哪些优势呢?
1. 相比以前的全量计算,中间的计算结果是实时产出的,也就是说它的时效性是很强的;
2. 我们把一个计算平摊在每一个时间段,可以做到平摊计算。整个集群的规模是受峰值的影响,双十一的峰值流量是非常大的,如果按照最峰值的流量去计算,整个服务器资源是相对较高的,如果能够把传统的计算平摊在每一分钟每一秒,实际可以起到降低成本的作用;
3. 整个数据处理链路如果放在一次Query中进行处理,也即是全部的数据在进行一个function的计算时,会大量膨胀中间结果,也就是说像Group By Count会到达200G,而增量计算可以做到中间结果不膨胀;
4. 增量计算是一个有状态的计算,在分布式领域,有状态的failover策略会跟无状态的计算系统截然不同,但是它的优势是恢复快,任务可以切成很多碎片去运行,一旦任务因为任何几台服务器的抖动而宕机,整个的恢复是从前一次有效的batch开始计算,而不是像全量计算和离线计算一样,全部要重新进行计算,当在离线计算和在线计算混合部署的情况下,这显得尤为重要;
5. 增量计算把一大块数据分批去计算,因此在批量计算里面经常遇到会一些数据倾斜问题在增量计算并不会遇到。在真实场景下,数据倾斜会对整个计算系统产生非常致命的影响,所以假设不同的节点之间数据倾斜比是1000,这个实际是很平常的,双十一的时候,光小米一家店铺就做到了很高的销售额,小米店铺和其他店铺的成交是上万倍甚至几十万倍的scale,传统的分布式计算的整个计算延时是受最慢的那个节点影响,如果把全部的数据分批次,实际上对于每一批来说,数据的倾斜度就会缓解,而且每个批次是可以并行去运行的,所以这可以大大地去降低整个计算任务在数据倾斜情况下的运行效率问题。
增量计算和流式计算应用场景
日志采集和在线分析:如基于访问日志、交易数据的BI算法分析。比较有名的像Google的统计、百度的统计,一些网站根据访问日志,会分析出各种的UV、 PV、 IPV等运营指标,有了流式计算,就可以对这些访问的时效性做到秒级、分钟级的监控,比如双十一当天,不同的店铺会通过店铺的实时访问情况来决定后面的运营策略;
大数据的预处理:数据清洗、字段补全等;
风险监测与告警:如交易业务的虚假交易实时监测与分析;
网站与移动应用分析统计:如双11运营、淘宝量子统计、CNZZ、友盟等各类统计业务;
网络安全监测:如CDN的恶意攻击分析与检测;
在线服务计量与计费管理系统 搜索引擎的关键词点击计费;
此外,流式计算和增量计算也应用在工业4.0和物联网上。
流式计算的数据特点
全文链接http://click.aliyun.com/m/22541/
上一篇: hibernate的分页模糊查询功能