到底什么是流计算(Stream Computing)

我写这篇文章的当前时间是 2009年1月5日。

在这一天用google或者是Baidu搜索“stream computing”,出现在首页最多的是关于ATi发布“stream computing”技术的新闻网页。
这里的“stream computing”技术是指“通过GPGPU(general purpose GPU)来执行一般的运算指令”,使得计算机的运算速度能够大幅度提高。
可惜,这里的流计算不是我想说的技术。

如果你耐心再好一点,会发现搜索出来的结果中有几条是和IBM有关的,再细一点,是和IBM的一个“System S prototype”相关的新闻。
这是我想要的。
IBM的System S是一个完整的计算架构,通过“stream computing”技术,可以对stream形式的数据进行real-time的分析。

有很多的新闻将这两者混为一谈,但其实这完全是两个东西,一个是硬件技术,在GPU中运行一般的指令以提高运算速度;还一个是针对stream data的分析技术。

那么,IBM所宣称的“stream computing”到底是什么呢?(说到这插段题外话。话说前几日和大学同学聚餐,有人问在IBM的同学“IBM最强的地方在哪里”,答曰“做概念” ^_^)
我们也许能从System S这个系统的描述中找到答案。

在这里[1],可以找到System S的描述;此外,还有关于System S架构的介绍[2]:
这些文章中,提到了System S的项目需求是“require systems and applications that enable efficient extraction of knowledge and information from potentially enormous volumes and varieties of continuous data streams”——使得系统和应用程序能够从庞大且多样的连续数据流当中提取有效的知识和信息。
为了满足这个需求,“System S provides an execution platform and services for user-developed applications that ingest, filter, analyze, and correlate potentially massive volumes of continuous data streams.”——System S提供的是一个平台和服务,在这个平台上,用户开发的程序能够对庞大的连续数据流做提取,过滤,分析等操作。
文中还提及了System S的目标:
1. Parallel and high performance stream processing software platform capable of scaling over a range of hardware capability。
    并行且高性能的流运算软件平台,具有硬件能力的可扩展性。(以下三条我就不翻译了...)
2. Agile and automated reconfiguration in response to changing user objectives, available data, and the intrinsic variability of system resource availability
3. Incremental tasking in the face of rapidly changing data forms and types
4. Secure, privacy-compliant, and auditable execution environment

此时我们能够对于System S有一个基本的认识,它其实可以看做是一个middleware或者platform,一个针对stream data的middleware。这个平台所具备的对于stream data的那些分析的技术就是IBM所宣称的“stream computing”。

在传统的数据处理流程中,总是先收集数据,然后将数据放到Database中,人们需要的时候通过DB对数据做query,得到答案。
这样的一个流程隐含了两个前提:
1. data is old。当人们对DB做查询的时候,里面数据其实过去某一个时刻数据的一个snapshot,数据已经老了,可能已经过期了。
2. 这样的流程中,需要人们主动的发出query。也就是说,human active, DB passive。
但在某些时候,这两个前提都不存在。例如股票市场中,数据总是不断的产生,人们需要根据当前的数据实时的作出判断;并且,由于数据量太大,人们希望设定某种条件,当数据满足这些条件时系统能够主动的通知人并且自动的进行操作。在这种情况下,前提发生了变化:
1. 对data stream能够作出real-time response。
2. human passive, DB active。
正是由于有了这样的需求,发展出了针对stream的处理技术。IBM的“stream computing”只是对于这种技术的又一种命名。其实早在System S出现之前,就已经有了很多关于stream processing技术的研究。
Aurora[3]就是很好的一个例子。它是由MIT等三所大学合作完成的项目,它的目的就是为了实现“ the ability to handle huge volumes of continuous data streams arriving in real-time; to be able to function efficiently under uncertainty in data, and to be able to deliver results in a timely fashion.”
如果对这个项目感兴趣,可以去看看和它相关的论文。有很多且非常详细,通过学习Aurora,你会对stream processing技术有更加深入的了解。

我对于流计算的解释到这里基本上就结束了。我希望这篇文章能够让你对于流计算是什么(What)能够有一个简单的认识。但是这里并没有涉及任何和How有关的知识,首先是因为这些技术比较新,还没有形成一个完整的知识体系,其次是因为牵扯到的东西实在太多,很难简短的解释清楚。



参考文献:
[1] http://domino.research.ibm.com/comm/research_projects.nsf/pages/esps.index.html
[2] http://domino.research.ibm.com/comm/research_projects.nsf/pages/esps.Projects.html
[3] http://www.cs.brown.edu/research/aurora/

你可能感兴趣的:(流计算(Stream,Computing))