豆瓣 9.7!這本技術書籍直接封神了

這是一本在國內(nèi)外都被稱為技術書籍巔峰之作的神書!
國內(nèi)的豆瓣評分 9.7(滿分 10.00),接近 90% 的人為這本書打了五星好評。

國外的 Goodreads(類似于豆瓣) 評分 4.72(滿分 5.00) ,接近 80% 的人為這本書打了五星好評。

這本書就是 《Designing Data-Intensive Application》 ,也被簡稱為 DDIA,在國內(nèi)通常被翻譯為 《數(shù)據(jù)密集型應用系統(tǒng)設計》。
我一直覺得這是一本有點被書名耽誤的神書,大家千萬不要被書名給“欺騙”了。
單看書名,很多人估計覺得這就是一本專門為數(shù)據(jù)處理相關工作的程序準備的書籍。我當時在第一眼看這本書的書名的時候就是這種感覺。
實際不然,這本書適合每一位做后端開發(fā)的程序員閱讀,尤其適合每一位 CRUD 程序員閱讀!
這本書的主要講了分布式數(shù)據(jù)庫、數(shù)據(jù)分區(qū)、事務、分布式系統(tǒng)等內(nèi)容。從數(shù)據(jù)模型與查詢語言,數(shù)據(jù)編碼到數(shù)據(jù)復制和分區(qū),再到事務,一致性共識,分布式系統(tǒng)面臨的一些挑戰(zhàn)(如故障與部分失效、不可靠網(wǎng)絡和時鐘),作者都結合實例提供了有深度的講解,在工業(yè)與學術之間平衡的很好。
就比如在講快照隔離實現(xiàn)技術多版本并發(fā)控制(MVCC, multi-version concurrentcy control)的時候,作者就圖解了 PostgreSQL 如何實現(xiàn)基于 MVCC 實現(xiàn)的快照級別隔離。

作者認為:
數(shù)據(jù)是后端系統(tǒng)的核心,我們所做的任何事情都是圍繞著數(shù)據(jù)來展開的; 現(xiàn)在的大部分應用程序都是 數(shù)據(jù)密集型(data-intensive) 而非 計算密集型(compute-intensive),也就是說系統(tǒng)的瓶頸通常來自于對數(shù)據(jù)的處理而非 CPU ; 數(shù)據(jù)庫、消息隊列、緩存等中間件/軟件可以被統(tǒng)稱為 數(shù)據(jù)系統(tǒng)(data system) ,它們之間的界限越來越模糊,例如:數(shù)據(jù)存儲可以被當成消息隊列用(Redis),消息隊列則帶有類似數(shù)據(jù)庫的持久保證(Apache Kafka)。
這本書介紹的很多概念你可能之前都聽過,但是在看了書中的內(nèi)容之后,你可能會豁然開朗:“哇塞!原來是這樣的啊!這不是某技術的原理么?”。
下圖是我在第二次看這本書的時候做的筆記:

第一次看這本書的時候還在讀大三,那時候讀這本書只覺得內(nèi)容很干,但是很多地方自己看不懂。等到第二次再讀就好多了,很多不太能理解的概念也能搞清了。
看了這本書你會發(fā)現(xiàn)國內(nèi)外的非常多的系統(tǒng)設計課程以及和數(shù)據(jù)相關的課程里面的很多內(nèi)容在這本書中都有提到。
這本書有很多地方的講解都能讓你對這個知識點有新的認識。
就比如在介紹事務的 ACID 特性的時候,這本書中如是說:
Atomicity, isolation, and durability are properties of the database, whereas consis‐ tency (in the ACID sense) is a property of the application. The application may rely on the database’s atomicity and isolation properties in order to achieve consistency, but it’s not up to the database alone.
翻譯過來的意思是:原子性,隔離性和持久性是數(shù)據(jù)庫的屬性,而一致性(在 ACID 意義上)是應用程序的屬性。應用可能依賴數(shù)據(jù)庫的原子性和隔離屬性來實現(xiàn)一致性,但這并不僅取決于數(shù)據(jù)庫。因此,字母 C 不屬于 ACID 。
看了之后是不是感覺自己被 ACID 這個概念被誤導了很久?
再比如說在介紹數(shù)據(jù)復制這部分內(nèi)容的時候,這本書介紹了三種常見的復制方案及其優(yōu)點和缺點。
主從復制非常流行,主要是因為它很容易理解,也不需要擔心沖突問題。而萬 一出現(xiàn)節(jié)點失效、網(wǎng)絡中斷或者延遲抖動等情況,多主節(jié)點和無主節(jié)點復制方案會更加可靠,不過背后的代價則是系統(tǒng)的復雜性和弱一致性。

看這本書的時候,你可以結合 MIT6.824 分布式系統(tǒng)課程。油管上這門課程的視頻版本,地址:https://www.youtube.com/channel/UC_7WrbZTCODu1o_kfUMq88g/videos 。

這門課程是全英文的,英語能力不夠好的同學很難堅持學習下來。
不過,不用擔心!B 站有這個課程的中文翻譯版合集,地址:https://www.bilibili.com/video/av91748150。國內(nèi)也有小伙伴還提供了這門課程的中文文字版,地址:https://mit-public-courses-cn-translatio.gitbook.io/mit6-824/ 。

看了之后表示:“真羨慕 MIT 的學生,在大學能有這么好的學習方式和實踐!”。我特么可太羨慕了!這門課的 Lab 非常不錯!
另外,這本書的作者 Martin Kleppmann(馬丁·科勒普曼)是劍橋大學計算機科學與技術系的高級研究助理和講師,是一位在工業(yè)界和學術界的大牛,參與了多個知名開源項目包括 Automerge、 Apache Avro和 Apache Samza。Martin Kleppmann 的個人博客地址:https://martin.kleppmann.com/ 。

今天分享就到這啦,我們下次見!
