天天看点

实时处理与流处理

前言:作为一个程序猿,总是能不时地听到各种新技术名词,大数据、云计算、实时处理、流式处理、内存计算… 但当我们听到这些时髦的名词时他们究竟是在说什么?偶然搜到一个不错的帖子,就总结一下实时处理和流式处理的差别吧。

正文:要说实时处理就得先提一下实时系统(Real-timeSystem)。所谓实时系统就是能在严格的时间限制内响应请求的系统。比如假设某系统能严格保证在10毫秒内处理来自网络的NASDAQ股票报价。那么这个系统就行算作实时系统,至于系统是通过软件还是硬件或者通过如何的设计达到的都不限。

尽管看似简单,实际上现实世界中这样的系统是非常难实现的。尤其是软件实现的实时系统。由于你的进程可能随时被其它进程抢占。CPU调度器无法保证能给你的进程所需的时间和资源来在严格时间限制内完毕响应。因此就有了各种实时操作系统内核。现实中实时系统的样例能想到的如军方的导弹控制系统和航天飞机等高精尖的软件系统了。

那实时处理(Real-time Processingor Computing)又是什么?与实时系统相似,但软件工业中似乎对实时二字没有什么明白的定义。比如很多人说实时交易,实际上是由于市场数据瞬息万变,决策常常在毫秒间。一个软实时(Soft Real-time)的样例是Amazon要求全部软件子系统在处理99%的请求时。都能在100-200毫秒内要么给出结果要么立马失败。

说完实时处理再看流式处理(Stream Processing)。望文生义。流式处理就是指源源不断的数据流过系统时。系统可以不停地连续计算。

所以流式处理没有什么严格的时间限制。数据从进入系统到出来结果可能是须要一段时间。然而流式处理唯一的限制是系统长期来看的输出速率应当快于或至少等于输入速率。否则的话,数据岂不是会在系统中越积越多(不然数据哪去了)?如此,无论处理时是在内存、闪存还是硬盘,早晚都会空间耗尽的。就像雪崩效应,系统越来越慢,数据越积越多。

所以我们可以说Storm框架是一种流式处理系统的框架。

假设我们的代码可以保证Storm的Topology中每一个Bolt结点处理数据的时长一定,那么我们就相当于用Storm开发了一个(软)实时的系统。顺便提一句,又比方Spark这个主要是内存计算框架,在增加了Streaming Spark子项目后。能将数据流切分并转化成RDD进行兴许计算,从而也支持了流式处理(否则之前Spark都是以固定的一坨数据为输入的)。