架构之:数据流架构
文章目錄
- 簡(jiǎn)介
- 數(shù)據(jù)流架構(gòu)
- 順序批處理
- 管道和過濾器
- 流程控制
- 總結(jié)
簡(jiǎn)介
有時(shí)候我們的系統(tǒng)主要是對(duì)輸入的數(shù)據(jù)進(jìn)行處理和轉(zhuǎn)換,這些處理和轉(zhuǎn)換是互相獨(dú)立的,在這種情況下,輸入的數(shù)據(jù)經(jīng)過轉(zhuǎn)換之后被放到指定的輸出中去。
在日常的工作中,我們會(huì)經(jīng)常遇到這種數(shù)據(jù)處理的任務(wù),那么對(duì)于這樣的任務(wù)我們就可以采用數(shù)據(jù)流架構(gòu)。
數(shù)據(jù)流架構(gòu)
在實(shí)際工作中的流有很多種,最常見的就是I/O流,I / O緩沖區(qū),管道等。不同的組件或者模塊通過這些流進(jìn)行連接。數(shù)據(jù)的流向可以是帶有循環(huán)的拓?fù)鋱D,沒有循環(huán)的線性結(jié)構(gòu)或者樹形結(jié)構(gòu)等。
數(shù)據(jù)流架構(gòu)的主要目的是實(shí)現(xiàn)重用和方便的修改。 它適用于在順序定義的輸入和輸出上進(jìn)行一系列定義明確的獨(dú)立數(shù)據(jù)轉(zhuǎn)換或計(jì)算,例如編譯器和業(yè)務(wù)數(shù)據(jù)處理應(yīng)用程序。 一般來說有三種基本的數(shù)據(jù)流結(jié)構(gòu)。
順序批處理
順序批處理是最常見也是最基礎(chǔ)的數(shù)據(jù)流架構(gòu)。數(shù)據(jù)作為一個(gè)整體,會(huì)經(jīng)過一個(gè)一個(gè)的處理單元,在上一個(gè)處理單元處理結(jié)束之后,才會(huì)進(jìn)入到下一個(gè)處理單元。
我們看下順序批處理的流程圖:
數(shù)據(jù)被作為一個(gè)整體,從一個(gè)處理器傳到另外一個(gè)處理器。主要通過臨時(shí)文件進(jìn)行交互。每個(gè)處理器的輸出被作為下一個(gè)處理器的輸入,經(jīng)過一次次的數(shù)據(jù)處理,最終得到要得的結(jié)果。
順序批處理的優(yōu)點(diǎn)是每個(gè)處理都是獨(dú)立的,他們進(jìn)行組合得到一個(gè)整體的順序處理架構(gòu)。
當(dāng)然缺點(diǎn)就是不能并行,只能串行執(zhí)行,吞吐量也不夠。各個(gè)處理器之間只通過中間文件進(jìn)行交互,交互程度不高。
管道和過濾器
順序批處理中各個(gè)處理器的功能差異比較大,通常來說他們是不同的系統(tǒng)。如果在同一個(gè)系統(tǒng)中處理數(shù)據(jù)流任務(wù),那么就需要用到管道和過濾器。
java 8引入了stream和管道的概念。一個(gè)集合可以轉(zhuǎn)換成stream,通過對(duì)stream的操作,可以對(duì)整個(gè)數(shù)據(jù)流進(jìn)行變換,最終得到想要的結(jié)果。
這種方法強(qiáng)調(diào)連續(xù)組件對(duì)數(shù)據(jù)的增量轉(zhuǎn)換。 在這種方法中,數(shù)據(jù)流由數(shù)據(jù)驅(qū)動(dòng),整個(gè)系統(tǒng)可以分解為數(shù)據(jù)源、過濾器、管道和數(shù)據(jù)接收器等組件。
模塊之間的連接是數(shù)據(jù)流,它是先進(jìn)/先出的緩沖區(qū),可以是字節(jié)流、字符流或任何其他類型的此類流。 這種架構(gòu)的主要優(yōu)點(diǎn)在于它的并發(fā)和增量執(zhí)行。
這種模式下,最重要的組件就是過濾器,過濾器是獨(dú)立的數(shù)據(jù)流轉(zhuǎn)換器。 它轉(zhuǎn)換輸入數(shù)據(jù)流的數(shù)據(jù),對(duì)其進(jìn)行處理,并將轉(zhuǎn)換后的數(shù)據(jù)流寫入管道以供下一個(gè)過濾器處理。 它以增量模式工作,一旦數(shù)據(jù)通過連接的管道到達(dá),它就會(huì)開始工作。
上圖中的數(shù)據(jù)從管道出發(fā),經(jīng)過一個(gè)個(gè)的過濾器,最終得到處理過后的結(jié)果。
過濾器有兩種類型,分別是主動(dòng)型過濾器和被動(dòng)型過濾器。主動(dòng)型過濾器可以主動(dòng)從管道中拉取數(shù)據(jù),并將處理過后的數(shù)據(jù)推出。這種模式主要用于UNIX 管道。而被動(dòng)型過濾器則是負(fù)責(zé)接收管道推入的數(shù)據(jù)。
這種模式的優(yōu)點(diǎn)是可以提供高并發(fā)和高吞吐量。缺點(diǎn)就是不適合動(dòng)態(tài)交互。
流程控制
還有一種模式,既不是批量處理也不是管道模式,他是根據(jù)輸入內(nèi)容的不同,來控制不同的執(zhí)行流程。類似于我們程序中使用的判斷語句。
總結(jié)
上面我們介紹了幾種數(shù)據(jù)流的架構(gòu)方式,希望大家能夠喜歡。
本文作者:flydean程序那些事
本文鏈接:http://www.flydean.com/07-data-flow-architecture/
本文來源:flydean的博客
歡迎關(guān)注我的公眾號(hào):「程序那些事」最通俗的解讀,最深刻的干貨,最簡(jiǎn)潔的教程,眾多你不知道的小技巧等你來發(fā)現(xiàn)!
總結(jié)
- 上一篇: 密码学系列之:feistel ciphe
- 下一篇: Pandas高级教程之:处理text数据