流计算基本认识

87 阅读5分钟

在传统的数据处理流程中,总是先收集数据,然后将数据放到DB中。当人们需要的时候通过DB对数据做query,得到答案或进行相关的处理。这样看起来虽然非常合理,但是结果却非常的紧凑和,尤其是在一些实时搜索应用环境中的某些具体问题,类似于MapReduce方式的离线处理并不能很好地解决问题。这就引出了一种新的数据计算结构---流计算方式。它可以很好地对大规模流动数据在不断变化的运动过程中实时地进行分析,捕捉到可能有用的信息,并把结果发送到下一计算节点。

内容

比较早期代表系统有IBM的System S,它是一个完整的计算架构,通过“stream computing”技术,可以对stream形式的数据进行real-time的分析。“最初的系统拥有大约800个微处理器,但IBM称,根据需求,这个数字也有可能上万。研究者讲到,其中最关键的部分是System S软件,它可以将任务分开,比如分为图像识别和文本识别,然后将处理后的结果碎片组成完整的答案。IBM实验室高性能流运算项目的负责人Nagui Halim谈到:System S是一个全新的运算模式,它的灵活性和速度颇具优势。而与传统系统相比,它的方式更加智能化,可以适当转变,以适用其需要解决的问题。

商用搜索引擎,像Google、Bing和Yahoo!等,通常在用户查询响应中提供结构化的Web结果,同时也插入基于流量的点击付费模式的文本广告。为了在页面上最佳位置展现最相关的广告,通过一些算法来动态估算给定上下文中一个广告被点击的可能性。上下文可能包括用户偏好、地理位置、历史查询、历史点击等信息。一个主搜索引擎可能每秒钟处理成千上万次查询,每个页面都可能会包含多个广告。为了及时处理用户反馈,需要一个低延迟、可扩展、高可靠的处理引擎。然而,对于这些实时性要求很高的应用,尽管MapReduce作了实时性改进,但仍很难稳定地满足应用需求。因为Hadoop为批处理作了高度优化,MapReduce系统典型地通过调度批量任务来操作静态数据;而流式计算的典型范式之一是不确定数据速率的事件流流入系统,系统处理能力必须与事件流量匹配,或者通过近似算法等方法优雅降级,通常称为负载分流(load-shedding)。当然,除了负载分流,流式计算的容错处理等机制也和批处理计算不尽相同。

有人会说,MR也有自己的实时计算方案,比如说HOP。

但是,这类基于MapReduce进行流式处理的方案有三个主要缺点。

将输入数据分隔成固定大小的片段,再由MapReduce平台处理,缺点在于处理延迟与数据片段的长度、初始化处理任务的开销成正比。小的分段会降低延迟,增加附加开销,并且分段之间的依赖管理更加复杂(例如一个分段可能会需要前一个分段的信息);反之,大的分段会增加延迟。最优的分段大小取决于具体应用。
为了支持流式处理,MapReduce需要被改造成Pipeline的模式,而不是Reduce直接输出;考虑到效率,中间结果最好只保存在内存中等。这些改动使得原有的MapReduce框架的复杂度大大增加,不利于系统的维护和扩展。
用户被迫使用MapReduce的接口来定义流式作业,这使得用户程序的可伸缩性降低。
综上所述,流式处理的模式决定了要和批处理使用非常不同的架构,试图搭建一个既适合流式计算又适合批处理计算的通用平台,结果可能会是一个高度复杂的系统,并且最终系统可能对两种计算都不理想。

目前流式计算是业界研究的一个热点,最近Twitter、LinkedIn等公司相继开源了流式计算系统Storm、Kafka等,加上Yahoo!之前开源的S4,流式计算研究在互联网领域持续升温。不过流式计算并非最近几年才开始研究,传统行业像金融领域等很早就已经在使用流式计算系统,比较知名的有StreamBase、Borealis等。

应用

流运算在内容方面,主要面向以下几种应用:对金融与科学计算当中的数据进行更快运算和分析的需求;对存在于社交网站、博客、电子邮件、视频、新闻、电话记录、传输数据、电子感应器之中的数字格式的信息流进行快速处理并反馈的需求。

关于流计算的概念:

阿里云流计算使用教程

阿里云大学官网(阿里云大学 - 官方网站,云生态下的创新人才工场)