相比于批量大数据计算,流(式)计算整体上还属于较为新颖的计算概念,下面我们从用户/产品层面来理解下两类计算方式的区别。需要注意的是,这里的说明并非严谨的科学/理论解释,更详细的理论解析请参看Wikipedia的相关章节Stream Processing。
批量计算
目前绝大部分传统数据计算和数据分析服务均是基于批量数据处理模型: 使用ETL系统或者OLTP系统进行构造数据存储,在线的数据服务(包括Ad-Hoc查询、DashBoard等服务)通过构造SQL语言访问上述数据存储并取得分析结果。这套数据处理的方法论伴随着关系型数据库在工业界的演进而被广泛采用。但在大数据时代下,伴随着越来越多的人类活动被信息化、进而数据化,越来越多的数据处理要求实时化、流式化,当前这类处理模型开始面临实时化的巨大挑战。传统的批量数据处理模型传统的批量数据处理通常基于如下处理模型:
使用ETL系统或者OLTP系统构造原始的数据存储,以提供给后续的数据服务进行数据分析和数据计算。即下图,用户装载数据,系统将根据自己的存储和计算情况,对于装载的数据进行索引构建等一系列查询优化工作。因此,对于批量计算,数据一定需要预先加载到计算系统,后续计算系统才在数据加载完成后方能进行计算。
系统主动发起一个计算作业(例如MaxCompute的SQL作业,或者Hive的SQL作业)并向上述数据系统进行请求。此时计算系统开始调度(启动)计算节点进行大量数据计算,该过程的计算量可能巨大,耗时长达数分钟乃至于数小时。同时,由于数据累计的不可及时性,上述计算过程的数据一定是历史数据,无法保证数据的”新鲜”。您可以根据自己需要随时调整计算SQL,甚至于使用AdHoc查询,可以做到即时修改即时查询。
计算结果返回,计算作业完成后将数据以结果集形式返回给您,或者可能由于计算结果数据量巨大保存着数据计算系统中,您进行再次数据集成到其他系统。一旦数据结果巨大,整体的数据集成过程漫长,耗时可能长达数分钟乃至于数小时。
批量示意图
批量计算是一种批量、高时延、主动发起的计算。 您使用的批量计算的顺序是:
预先加载数据。
提交计算作业,并且可以根据业务需要修改计算作业,再次提交作业。
计算结果返回。
实时计算
不同于批量计算模型,实时计算更加强调计算数据流和低时延,实时计算数据处理模型如下:
使用实时数据集成工具,将数据实时变化传输到流式数据存储(即消息队列,如DataHub);此时数据的传输变成实时化,将长时间累积大量的数据平摊到每个时间点不停地小批量实时传输,因此数据集成的时延得以保证。
此时数据将源源不断写入流数据存储,不需要预先加载的过程。同时流计算对于流式数据不提供存储服务,数据是持续流动,在计算完成后就立刻丢弃。
数据计算环节在流式和批量处理模型差距更大,由于数据集成从累积变为实时,不同于批量计算等待数据集成全部就绪后才启动计算作业,流式计算作业是一种常驻计算服务,一旦启动将一直处于等待事件触发的状态,一旦有小批量数据进入流式数据存储,流计算立刻计算并迅速得到结果。同时,阿里云流计算还使用了增量计算模型,将大批量数据分批进行增量计算,进一步减少单次运算规模并有效降低整体运算时延。
从用户角度,对于流式作业,必须预先定义计算逻辑,并提交到流式计算系统中。在整个运行期间,流计算作业逻辑不可更改!用户通过停止当前作业运行后再次提交作业,此时之前已经计算完成的数据是无法重新再次计算。
不同于批量计算结果数据需等待数据计算结果完成后,批量将数据传输到在线系统;流式计算作业在每次小批量数据计算后可以立刻将数据写入在线/批量系统,无需等待整体数据的计算结果,可以立刻将数据结果投递到在线系统,进一步做到实时计算结果的实时化展现。
实时示意图
实时计算是一种持续、低时延、事件触发的计算作业。您使用实时计算的顺序是:
提交实时计算作业。
等待流式数据触发实时计算作业。
计算结果持续不断对外写出。
模型对比
下表给出了实时计算与批量计算两类计算模型的差别:
对比指标 批量计算 实时计算
数据集成方式 预先加载数据 实时加载数据实时计算
使用方式 业务逻辑可以修改,数据可重新计算 业务逻辑一旦修改,之前的数据不可重新计算(流数据易逝性)。
数据范围 对数据集中的所有或大部分数据进行查询或处理。 对滚动时间窗口内的数据或仅对最近的数据记录进行查询或处理。
数据大小 大批量数据。 单条记录或包含几条记录的微批量数据。
性能 几分钟至几小时的延迟。 只需大约几秒或几毫秒的延迟。
分析 复杂分析。 简单的响应函数、聚合和滚动指标。
在大部分大数据处理场景下,受限于当前实时计算的整个计算模型较为简单,实时计算是批量计算的有效增强,特别在于对于事件流处理时效性上,实时计算对于大数据计算是一个不可或缺的增值服务。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。