讀書 | Making Sense of Stream Processing

來自專欄 Cuoco 的小馬甲叔叔43 人贊了文章

豆瓣:Making Sense of Stream Processing

前段時間讀了 I heart Logs 這本小冊子,感覺意猶未盡,於是跟隨 @阿萊克西斯 的腳步,又看了下這本書。本書作者還有一本更廣為人知的書 Designing Data-Intensive Applications,關於 DDIA 的評價可以參考 ,作者的技術水平、寫作態度還是很值得信賴的。

其實這三本書有千絲萬縷的聯繫,尤其是前兩本,都是介紹以日誌為中心的系統架構,但側重點不同:

* I heart logs 是對日誌架構模式的基本介紹,類似入門手冊;* Making Sense of Stream Processing 偏重將日誌架構應用於實際(流式)系統構建,實踐性更強,內容更豐富;

而 DDIA 主題更為宏大,不局限於流式系統,而是對現代數據系統構建的方面面都有涉及,尤其是對分散式系統的講解很贊。

本書一共五章,個人認為每章內容都很贊。第一章將各領域關於事件流的術語統一介紹了一下,比如:* Event Sourcing* Reactive

* Complex Event Processing

* Actors* Change Capture* Stream Processing相信有很多人跟我一樣,聽說過其中的部分名詞,而且也對它們之間的關係很疑惑,第一章將解開該疑惑。

第二章介紹「純粹的」基於日誌的系統架構,以及該架構相對傳統的以關係型資料庫為中的架構的優勢。

當然作者並非慫恿大家把已有的系統都推翻重來,對於既存應用,第三章介紹如何藉助 Kafak 和 CDC(change data capture)將日誌架構融入老系統中。第四章很有意思,作者提出利用 Kafka 將 Unix 哲學應用於系統構建中,Unix 哲學內容很多,作者指的是這兩條:* Make each program do one thing well.

* Expect the output of every program to become the input to another, as yet unknowm program.

簡單說就是各司其職,做小而精的工具,通過組合實現大而全的應用,熟悉 Unix/Linux 的同學對此應該很熟悉,平時用到的 awk、sed、grep 等都是這樣設計的。Unix 工具之間的組合性通過統一介面實現,它們的輸入都是 stdin,輸出都是 stdout/stderr,自然非常容易組合。這種設計哲學經過了時間和實踐的考驗,是一種有效的系統構建方式,但條條大道通羅馬,傳統的關係型資料庫選擇了相反的設計方式(資料庫集成了大量的特性,是大而全的典型),在過去的幾十年里也取得了巨大成功。遺憾的是在現代應用中,單一資料庫越來越難以滿足需求了,因此出現了很多各具特色的數據存儲系統:* Redis/Memcached:高速緩存* Elastic Search:全文檢索* MongoDB:文檔型資料庫* Neo4J:圖資料庫* Hadoop:批量處理* Spark Streaming/Flink:流式處理大家的應用中很大概率會存在其中部分組件,應用現在是跑起來了,但是不同存儲組件之間的數據集成、流動卻不是那麼容易的,作者在提出用 Kafka 也可以作為不同數據系統之間的「統一介面」,這樣各種數據存儲系統也可以靈活組合了,實際上很多應用都也是這麼做的。最後一章是作者對未來資料庫和數據應用發展的一個展望,作者認為不同特性將從資料庫中剖離出來,形成獨立組件,組件之間可靈活組合,數據應用可以靈活選用需要的組件,這正是目前實際正在發生的。通過本書,能跳出傳統系統構建的條條框框,站在一個更新的角度看待我們的應用,多了一種系統構建的思路,非常不錯。
推薦閱讀:
查看原文 >>
相关文章