架構之:數據流架構 簡介 數據流架構 總結

簡介

有時候我們的系統主要是對輸入的數據進行處理和轉換,這些處理和轉換是互相獨立的,在這種情況下,輸入的數據經過轉換之後被放到指定的輸出中去。

在日常的工作中,我們會經常遇到這種數據處理的任務,那麼對於這樣的任務我們就可以採用數據流架構。

數據流架構

在實際工作中的流有很多種,最常見的就是I/O流,I / O緩衝區,管道等。不同的組件或者模塊通過這些流進行連接。數據的流向可以是帶有循環的拓撲圖,沒有循環的線性結構或者樹形結構等。

數據流架構的主要目的是實現重用和方便的修改。 它適用於在順序定義的輸入和輸出上進行一系列定義明確的獨立數據轉換或計算,例如編譯器和業務數據處理應用程序。 一般來說有三種基本的數據流結構。

順序批處理

順序批處理是最常見也是最基礎的數據流架構。數據作爲一個整體,會經過一個一個的處理單元,在上一個處理單元處理結束之後,纔會進入到下一個處理單元。

我們看下順序批處理的流程圖:

數據被作爲一個整體,從一個處理器傳到另外一個處理器。主要通過臨時文件進行交互。每個處理器的輸出被作爲下一個處理器的輸入,經過一次次的數據處理,最終得到要得的結果。

順序批處理的優點是每個處理都是獨立的,他們進行組合得到一個整體的順序處理架構。

當然缺點就是不能並行,只能串行執行,吞吐量也不夠。各個處理器之間只通過中間文件進行交互,交互程度不高。

管道和過濾器

順序批處理中各個處理器的功能差異比較大,通常來說他們是不同的系統。如果在同一個系統中處理數據流任務,那麼就需要用到管道和過濾器。

java 8引入了stream和管道的概念。一個集合可以轉換成stream,通過對stream的操作,可以對整個數據流進行變換,最終得到想要的結果。

這種方法強調連續組件對數據的增量轉換。 在這種方法中,數據流由數據驅動,整個系統可以分解爲數據源、過濾器、管道和數據接收器等組件。

模塊之間的連接是數據流,它是先進/先出的緩衝區,可以是字節流、字符流或任何其他類型的此類流。 這種架構的主要優點在於它的併發和增量執行。

這種模式下,最重要的組件就是過濾器,過濾器是獨立的數據流轉換器。 它轉換輸入數據流的數據,對其進行處理,並將轉換後的數據流寫入管道以供下一個過濾器處理。 它以增量模式工作,一旦數據通過連接的管道到達,它就會開始工作。

上圖中的數據從管道出發,經過一個個的過濾器,最終得到處理過後的結果。

過濾器有兩種類型,分別是主動型過濾器和被動型過濾器。主動型過濾器可以主動從管道中拉取數據,並將處理過後的數據推出。這種模式主要用於UNIX 管道。而被動型過濾器則是負責接收管道推入的數據。

這種模式的優點是可以提供高併發和高吞吐量。缺點就是不適合動態交互。

流程控制

還有一種模式,既不是批量處理也不是管道模式,他是根據輸入內容的不同,來控制不同的執行流程。類似於我們程序中使用的判斷語句。

總結

上面我們介紹了幾種數據流的架構方式,希望大家能夠喜歡。

本文作者:flydean程序那些事

本文鏈接:http://www.flydean.com/07-data-flow-architecture/

本文來源:flydean的博客

歡迎關注我的公衆號:「程序那些事」最通俗的解讀,最深刻的乾貨,最簡潔的教程,衆多你不知道的小技巧等你來發現!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章