1. 程式人生 > >《大規模分散式系統架構與設計實戰》

《大規模分散式系統架構與設計實戰》

這本書,我看了兩遍。為什麼看兩遍呢,因為說實話,第一遍沒有完全看懂。 第一遍讀過來,感覺作者講了很多東西,但似乎又什麼都沒講,總之看完之後有一種很奇怪的感覺。於是,便看了第二遍。第二遍讀下來,才算是對這本書有了一個清楚的認識。

按照書中作者的說法,這本書不是講"如何使用Hadoop的書,而是一本講實現Hadoop功能的書,是一本講如何簡化實現分散式技術核心功能的書”。 作者希望讀者能夠通過這本書快速的掌握分散式系統理論並能夠設計自己的分散式系統。

第一遍讀下來,這本書的確講到了分散式系統設計的方方面面,從平行計算到分散式協調,從分散式快取到訊息佇列,包括分散式檔案系統以及分散式作業排程,都有涉及。

然而,仔細的在讀一遍,卻發現,雖然作者將這些方面都寫到了,然而卻不能不給人以淺嘗輒止的感覺。這也就是為什麼我第一遍讀完,感覺作者講了很多,又似乎沒有將什麼的感覺的由來。 書中的很多概念,並沒有講透講明。雖然給出了實現和例子,卻沒有深入的原理性的介紹;雖然列出了大段大段的原始碼;但卻沒有仔細的講解;雖然涉及了一些原理,卻沒有詳細的講明。所以看完之後,卻多了不少的疑問。

比如,作者在3.5節,提到了他自己涉及的叢集,採用的是與Paxos不同的領導者選舉演算法。然而,對這種不同的演算法,卻只是簡單的說了一句話,那就是,一旦叢集中的領導者故障,其他節點,會先詢問別的機器是否願意擔當領導者,如果沒人願意那麼自己便成為領導者。 聽起來似乎很有道理,然而仔細一想,卻發現這裡面有好幾個問題。當領導者故障後,如果多個節點同時發起詢問其他機器的請求,系統該如何處理?每臺伺服器收到別人的詢問後,該以什麼樣的原則來決定是自己擔當?還是謙讓出去? 都沒有進一步說明。而只是給出了配置和演示的例子。讓看書的人一頭霧水。

又比如,當叢集中的領導者故障了,客戶端該如何知道誰是新的領導者?也沒有相應的說明,讀了書中給出的原始碼後,才發現,原來是需要在客戶端配置所有叢集伺服器的地址,一旦連不上領導者,就需要輪詢所有的伺服器。

除此之外,在降到分散式快取的時候,作者提到了一致性雜湊演算法存在的一些問題,比如擴容的時候需要成倍擴容等。然後給出了自己的日期取模演算法。但是作者給出的演算法似乎只適用於不會過期的資料的快取,如果資料是臨時性的快取,用作者的這種方法氣死並沒有什麼意義,而且還多出了一個步驟。

而後面的分散式檔案系統,與其說是一個分散式檔案系統,倒不如說是一個FTP伺服器叢集。一個不考慮大檔案分割儲存的分散式檔案系統,又能符合幾分分散式檔案系統的要求呢?

書中的最後幾章,給人的感覺,完全像是作者對自己實現的這個分散式系統的廣告和推銷,大量的介紹了自己系統提供的API和介面,舉出了例子該怎麼去用。卻完全沒有涉及底層的原理,以及自己該如何去實現。

如果說,看這本書的目的真的是像作者說的“實現Hadoop”的話,恐怕讀者真的是要失望了。在短短的200多頁的一本書中,就想要將有關分散式系統的方方面面講透,這幾乎是一個不可能完成的任務。

當然,這本書也不是一無是處。我覺得,與其說這本書能用來實現一個“Hadoop”,還不如說這是一本適合用來初步瞭解分散式系統的書。通過這本書,倒是可以大概的瞭解所謂分散式系統的一些概念,瞭解分散式系統能夠做什麼,它的優勢。並且能夠了解分散式系統都有哪些部分組成。一個完整的分散式系統需要提供哪些功能。

總之,這本書並不是一個很深入的技術和原理性的書籍,更適合作為入門或者需要初步瞭解分散式系統的人來讀。