天天看點

實時處理與流處理

前言:作為一個程式猿,總是能不時地聽到各種新技術名詞,大資料、雲計算、實時處理、流式處理、記憶體計算… 但當我們聽到這些時髦的名詞時他們究竟是在說什麼?偶然搜到一個不錯的文章,就總結一下實時處理和流式處理的差别吧。

正文:要說實時處理就得先提一下實時系統(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都是以固定的一坨資料為輸入的)。