大數(shù)據(jù)生態(tài)的系統(tǒng)和技術(shù)層出不窮,我想簡單羅列幾個都有一種不知從何列起的感覺。最開始我們可能會先去看看hadoop,了解一套成熟的分布式數(shù)據(jù)存儲和計算框架,了解數(shù)據(jù)怎么分割、怎么分布、怎么容錯,任務(wù)失敗了怎么恢復(fù)。我們會知道hadoop的不足之處,為了支持CRUD,我們會去看看cassandra、habase、kudu如何存取、更新數(shù)據(jù);為了提高計算效率,我們會去了解tez、spark如何基于DAG做內(nèi)存計算;為了數(shù)據(jù)實時性,我們會看看kafka如何傳遞消息、flink如何計算實時數(shù)據(jù);為了支持SQL查詢,我們會看看hive、spark sql如何生成執(zhí)行計劃;為了提高查詢效率,我們會試試presto、impala,了解它們?yōu)榱瞬樵冃首隽四男﹥?yōu)化,又犧牲了什么;為了支持OLAP,我們會比較一下kylin和druid,知道它們?nèi)绾晤A(yù)處理數(shù)據(jù),如何支持實時數(shù)據(jù)······
上面的話只是為了引入,一不小心就寫的有點(diǎn)長了,然而事實是相關(guān)的技術(shù)和應(yīng)用遠(yuǎn)遠(yuǎn)更多。如果我們見一個去學(xué)習(xí)一個,恐怕學(xué)不完,效果也不好。只有理清它們背后的原理和聯(lián)系,知其然更知其所以然,才能舉一反三,心中有數(shù)?!禗esiging Data-Intensive Applications》就是這樣一本書,或者說至少抱著這樣的目的。不關(guān)注某個技術(shù)或應(yīng)用,而是要把這些應(yīng)用解構(gòu),探究它們背后的原理和動機(jī),帶我們建立一幅完整的數(shù)據(jù)密集型應(yīng)用設(shè)計地圖。
我是沖著這本書的好評而去看的,斷斷續(xù)續(xù)看了幾個月才看完。由于一些網(wǎng)友給的評價極好,看之前我是懷著比較大的期待的。看的過程中有過小失望也有驚喜,總體符合期望,是經(jīng)的起回味的好書。其實初看這本書的時候,并不覺得那么吸引人,尤其是第一部分,也就是前四章??聪聛?,對于我本來就了解的技術(shù),沒有講出新花樣,而對于我原來沒接觸過的技術(shù),講得又不夠深入,總體感覺就是收獲不大。看到第二部分倒是有些驚喜的地方,第5章講Replication面臨的各種難點(diǎn)和相應(yīng)技術(shù),可以說非常全面和透徹了,而且講述方式又是以各種case舉例,通俗易懂。還有就是第7章講Transaction的Isolation levels道出了其中的各種因素的權(quán)衡,哪種機(jī)制能提供什么保證,要關(guān)注哪些corner case。不足的是第9章Consensus講得不像Transaction那么深入,有點(diǎn)意猶未盡的感覺。之后就是最后一部分了,第10章和第11章介紹了批處理和流式計算,其中有一些觀點(diǎn)還是挺有意思的,比如把批處理統(tǒng)一到Unix哲學(xué);流式處理和event sourcing的比較等。但是看下來還是覺得其中有些技術(shù)可以分析的再深入一點(diǎn)。
看完這本書的前11章,還剩最后一章的時候,有個比較資深的同事問我關(guān)于這本書的評價,我的回答是這本書一般,是一本綜述型的書,關(guān)于數(shù)據(jù)應(yīng)用設(shè)計的各方面都有涉及,但是深度不足,需要順著引用到的資料自己再去探索。我給出這樣的評價是因為他已經(jīng)深耕數(shù)據(jù)領(lǐng)域多年,對各種技術(shù)都很熟悉,對他來說這本書只能是一般了。但那是因為那時我還沒看最后一章,不得不承認(rèn),直到看到最后一章,我才慢慢體會到這本書真正想表達(dá)什么。最后一章探討了前11章提到的這方方面面,是如何共同作用,決定著我們在設(shè)計數(shù)據(jù)應(yīng)用時需要作出的各種取舍和選擇。同時作者終于開始以第一人稱訴述,向我們表達(dá)了一些有意思的觀點(diǎn),是非常值得我們思考的。最后一章是本書的升華點(diǎn),使本書形成了閉環(huán),再完整回味這本書,其實它是在幫助我們構(gòu)建完整的知識體系。
所以即使是我那比較資深的同事,我仍然會推薦這本書,前11章如果是自己比較熟的地方可以略讀或跳過,不太熟的地方可以適當(dāng)了解,最后聽聽作者的一些觀點(diǎn),結(jié)合自己的知識體系去思考,一定還是能有收獲的。而對于技術(shù)還不成熟的同學(xué),那就更是五星推薦了。這本書有個很好的點(diǎn)是引用文獻(xiàn)列的很全,不懂的地方順著深入就可以了。
既然說這本書是幫助我們建立知識體系的,那我也來試著分析一下各種數(shù)據(jù)應(yīng)用和技術(shù)之間的邏輯好了。
應(yīng)用是為了滿足某一類需求,適用于某一種場景,同時可靠、可擴(kuò)展、易維護(hù)是所有應(yīng)用程序的非功能性追求。所以要理解應(yīng)用背后的原理和動機(jī),最重要的就是理解其場景和面臨的挑戰(zhàn)?;氐奖疚牡谝欢?,我提到的各種應(yīng)用就是隨著場景的不斷變化,而不斷發(fā)展出來的。其中既有各異的功能性需求,又有相同的非功能性需求。既然都是數(shù)據(jù)應(yīng)用,功能性需求自然都與數(shù)據(jù)的處理、存取相關(guān),但是又會根據(jù)各自的場景,有不同的側(cè)重,因此衍生出了不同的技術(shù)。同時,不同的場景下對非功能性需求的嚴(yán)格程度又是不同的,因此又衍生出了不同的處理技術(shù)。這個話題太大了,這里我不繼續(xù)展開了。我打算把這個分析寫成一個系列。第一篇我會把各種場景和面臨挑戰(zhàn)總結(jié)一下。之后會根據(jù)不同的場景和挑戰(zhàn),分析各種應(yīng)用和其中的技術(shù)。
淺談大數(shù)據(jù)原理(一)場景與挑戰(zhàn)
淺談大數(shù)據(jù)原理 (Designing Data-Intensive Applications 書評)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- //我所經(jīng)歷的大數(shù)據(jù)平臺發(fā)展史(三):互聯(lián)網(wǎng)時代 ? 上篇http://www.infoq.com/cn/arti...