簡介
有時候我們的系統主要是對輸入的資料進行處理和轉換,這些處理和轉換是互相獨立的,在這種情況下,輸入的資料經過轉換之後被放到指定的輸出中去。
在日常的工作中,我們會經常遇到這種資料處理的任務,那麼對於這樣的任務我們就可以採用資料流架構。
資料流架構
在實際工作中的流有很多種,最常見的就是I/O流,I / O緩衝區,管道等。不同的元件或者模組通過這些流進行連線。資料的流向可以是帶有迴圈的拓撲圖,沒有迴圈的線性結構或者樹形結構等。
資料流架構的主要目的是實現重用和方便的修改。 它適用於在順序定義的輸入和輸出上進行一系列定義明確的獨立資料轉換或計算,例如編譯器和業務資料處理應用程式。 一般來說有三種基本的資料流結構。
順序批處理
順序批處理是最常見也是最基礎的資料流架構。資料作為一個整體,會經過一個一個的處理單元,在上一個處理單元處理結束之後,才會進入到下一個處理單元。
我們看下順序批處理的流程圖:
資料被作為一個整體,從一個處理器傳到另外一個處理器。主要通過臨時檔案進行互動。每個處理器的輸出被作為下一個處理器的輸入,經過一次次的資料處理,最終得到要得的結果。
順序批處理的優點是每個處理都是獨立的,他們進行組合得到一個整體的順序處理架構。
當然缺點就是不能並行,只能序列執行,吞吐量也不夠。各個處理器之間只通過中間檔案進行互動,互動程度不高。
管道和過濾器
順序批處理中各個處理器的功能差異比較大,通常來說他們是不同的系統。如果在同一個系統中處理資料流任務,那麼就需要用到管道和過濾器。
java 8引入了stream和管道的概念。一個集合可以轉換成stream,通過對stream的操作,可以對整個資料流進行變換,最終得到想要的結果。
這種方法強調連續元件對資料的增量轉換。 在這種方法中,資料流由資料驅動,整個系統可以分解為資料來源、過濾器、管道和資料接收器等元件。
模組之間的連線是資料流,它是先進/先出的緩衝區,可以是位元組流、字元流或任何其他型別的此類流。 這種架構的主要優點在於它的併發和增量執行。
這種模式下,最重要的元件就是過濾器,過濾器是獨立的資料流轉換器。 它轉換輸入資料流的資料,對其進行處理,並將轉換後的資料流寫入管道以供下一個過濾器處理。 它以增量模式工作,一旦資料通過連線的管道到達,它就會開始工作。
上圖中的資料從管道出發,經過一個個的過濾器,最終得到處理過後的結果。
過濾器有兩種型別,分別是主動型過濾器和被動型過濾器。主動型過濾器可以主動從管道中拉取資料,並將處理過後的資料推出。這種模式主要用於UNIX 管道。而被動型過濾器則是負責接收管道推入的資料。
這種模式的優點是可以提供高併發和高吞吐量。缺點就是不適合動態互動。
流程控制
還有一種模式,既不是批量處理也不是管道模式,他是根據輸入內容的不同,來控制不同的執行流程。類似於我們程式中使用的判斷語句。
總結
上面我們介紹了幾種資料流的架構方式,希望大家能夠喜歡。
本文作者:flydean程式那些事
本文連結:http://www.flydean.com/07-data-flow-architecture/
本文來源:flydean的部落格
歡迎關注我的公眾號:「程式那些事」最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!