關于我們
書單推薦
新書推薦
|
聚沙成塔:Go語言構建高性能、分布式爬蟲項目 本書是頗具創(chuàng)新性的 Go 語言實戰(zhàn)指南,巧妙地將理論知識與實踐案例串聯(lián)起來,為讀者搭建了一套完整的知識體系和方法論。本書以爬蟲項目為基礎,全面闡述了 Go 語言在網(wǎng)絡服務開發(fā)中的卓越性能,并深入探討了如何利用 Go 語言打造高并發(fā)的爬蟲系統(tǒng)、高性能的分布式系統(tǒng),以及可擴展的領域驅動的微服務系統(tǒng)。本書有助于 Go 語言開發(fā)者根據(jù)編碼規(guī)范,編寫出簡潔、高效、健壯且易于擴展的代碼。同時,本書可以作為高等院校計算機和軟件工程等相關專業(yè)師生的參考資料。 高效的編碼規(guī)范與研發(fā)工具 深入 Go 語法背后的底層機制 高性能與可擴展的程序設計方法 復雜線上案例的全方位分析 大規(guī)模分布式系統(tǒng)的架構之道 或許你并未察覺,身邊的奇跡往往由簡單的元素組成。金字塔和獅身人面像由沙石堆砌而成,作為生物體遺傳密碼的DNA,也不過是由幾種基礎的核苷酸組合而成的。當圖靈在1936年提出圖靈機的概念時,誰又能夠想到,僅僅讓機器遵循一些簡單的規(guī)則就足以構建出今天豐富多彩的數(shù)字世界。 同樣地,今天軟件工程中許多令人眼花繚亂的框架與概念,都不過是基礎元素的整合。但是簡單元素的靈活組合,逐漸帶來了讓人無法輕易掌控的復雜度。在實踐中,我發(fā)現(xiàn)很多開發(fā)者有下面的困惑。
本書正是嘗試對一個大規(guī)模的后端系統(tǒng)進行拆解,用Go語言構建出可擴展、高并發(fā)、分布式、微服務的爬蟲項目,從0到1為你呈現(xiàn)這個大型積木的設計和建造過程。你收獲的將不只是開箱即用的爬蟲框架,構建復雜項目的頂級技藝和進階路線,更有關于如何學習的深刻洞見。 撥云見霧,走出進階焦慮沒有人能一看到謎題就瞬間想出答案,擺脫思維定勢、找到正確的進階路線是每個求知者都會遇到的挑戰(zhàn)。 回顧我的職業(yè)生涯,也遇到過許多困擾,幾度面臨焦慮,體驗過一次次知識的升華。所以我想在開始正式學習之前,可以先交流一下經(jīng)驗,或許會有事半功倍的效果。我的職業(yè)生涯大體上可以分為四個階段。
初入職場的時候,我會為獨立完成一個小項目感到興奮。那時候我能夠實現(xiàn)基本的功能,喜歡研究Go語言的技巧,但不求甚解。后來,我逐漸意識到只琢磨一門語言的語法和技巧對成長的貢獻較小。在實踐中我仍然難以解釋程序表現(xiàn)出的奇怪現(xiàn)象,難以解決困難的問題,也很難獨當一面,這使我陷入迷茫。
于是,我轉而系統(tǒng)學習知識背后的底層原理,其中就包括Go語言語法背后的底層原理,從基本類型的結構到Go運行時和Go編譯時原理。我閱讀了大量與Go語言相關的書籍、文章和源碼。
如果說前兩個階段還只是我困在單一程序中的自娛自樂,那么設計復雜系統(tǒng)的實戰(zhàn)經(jīng)驗讓我有幸站在更高的位置駕馭大規(guī)模系統(tǒng)。 這一時期,我開始跳出開發(fā)單一程序的狹隘視角,站在巨人的肩膀上,借助業(yè)內的一些知名開源組件完成復雜系統(tǒng)的架構設計。技術選型涉及對不同組件之間的優(yōu)劣判斷,而前一個階段的積累讓我能夠比較容易觸達這些知名開源技術的原理,從而看出不同組件之間微妙的差異,讓優(yōu)秀的組件為我所用。 這個階段,我在一家人工智能公司的中臺部門工作。我們的系統(tǒng)需要應對海量的數(shù)據(jù),也需要面臨分布式系統(tǒng)具有的固有挑戰(zhàn):擴展性、一致性與可用性。對這些復雜問題的體系化思考和豐富的實戰(zhàn)經(jīng)驗讓我擁有了駕馭復雜分布式系統(tǒng)的能力。
如果說前三個階段還只是不食人間煙火似的技術修煉,那么真正讓我將技術轉化為生產(chǎn)力的是技術與業(yè)務的深度融合。 這一時期,我在一家大型互聯(lián)網(wǎng)公司的中臺部門工作,需要對接全公司所有的產(chǎn)品線。一開始我常常疲于應付需求,需要面對難以擴展的代碼,保證系統(tǒng)的極高穩(wěn)定性。這讓我不得不進一步思考復雜業(yè)務需求之下的技術解決之道。也正因如此,我在微服務治理和穩(wěn)定性建設方面積累了豐富的經(jīng)驗。 回顧我的職業(yè)生涯,每次進階都離不開前一個階段的鋪墊、有意識的自我突破,也離不開理論與實踐的相輔相成。在本書中,我希望從最簡單的問題入手,層層深入、理論結合實踐,帶你一起實現(xiàn)一個具備擴展性、高并發(fā)、分布式、微服務的復雜系統(tǒng)。 我也給你繪制了一張本書的思維導圖,方便你根據(jù)自己的實際情況按圖索驥,歡迎你在配套資源中下載查看。我會用一種創(chuàng)造性的方式把知識點串聯(lián)起來,形成Go語言和系統(tǒng)設計的完整知識體系與方法論。本書主要有以下幾個特點。 特色一:在玩中學,以爬蟲為基座爬蟲涵蓋的知識點非常廣泛,例如網(wǎng)頁前端、數(shù)據(jù)解析、數(shù)據(jù)存儲、可視化分析,等等。另外,爬蟲對高并發(fā)的網(wǎng)絡處理有極高的要求,而Go語言在開發(fā)網(wǎng)絡服務方面正好有天然的優(yōu)勢。 此外,爬蟲具有很高的商業(yè)價值,互聯(lián)網(wǎng)就像一座免費的數(shù)字金礦,借助爬蟲可以創(chuàng)造種類繁多的商業(yè)模式。依靠一些創(chuàng)意和想象力,爬蟲甚至能夠成為一家百億市值公司的核心引擎。 當然,針對學習,爬蟲還有一個重要的特點,那就是它生動有趣。比起一些傳統(tǒng)的電商學習項目,爬蟲項目更具有趣味性,你可以收集、過濾、組合并提煉互聯(lián)網(wǎng)中任何你感興趣的信息。 所以,本書以爬蟲項目貫穿始終,從需求拆解和架構設計開始,幫助你獨立完成能夠支撐海量爬蟲任務的高并發(fā)系統(tǒng)、具有故障容錯能力的分布式系統(tǒng)、具備可擴展性和領域驅動的微服務系統(tǒng)。在這個過程中,你會將學到的知識融會貫通。 特色二:謀定而后動,寫出好代碼本書不只講解如何寫代碼,還教你如何寫出好代碼。因此,我在書中不僅會給出一流團隊的編碼規(guī)范與掃描工具,還會講解Go語言中的設計哲學。例如,Go中為什么沒有繼承?如何用面向組合的設計理念使代碼具備擴展性?其他系統(tǒng)的設計對我們的系統(tǒng)有哪些啟發(fā)?Linux的 VFS 層與Go接口的設計有什么異曲同工之處?只有遵循Go語言的編碼規(guī)范與設計哲學,才能讓我們擺脫思維定勢,擺脫疲于應付需求的現(xiàn)狀,寫出簡捷、高效、健壯和可擴展的代碼。 特色三:深入原理,理論結合實踐要系統(tǒng)掌握Go語言,可不是單純的語法堆砌這么簡單。了解語法背后的故事,才能夠讓我們知其然,亦知其所以然。我將在本書的項目開發(fā)中融入底層原理知識,通過理論結合實踐的方式告訴你為什么代碼要這樣寫,它背后的機制是怎樣的。 舉個例子,在Go語言中,一行簡單的代碼就能實現(xiàn)HTTP請求,但我會從TCP/IP網(wǎng)絡模型講起,帶著你看一看一個網(wǎng)絡包是如何層層封裝、路由流轉的,又是如何被硬件接收、被操作系統(tǒng)處理的。 更進一步地,我還會講解Go語言為什么天然適合開發(fā)網(wǎng)絡服務,為什么它借助I/O多路復用 非阻塞I/O 協(xié)程調度 同步編程的模式,能夠簡單高效地處理高并發(fā)網(wǎng)絡服務。 特色四:硬核實戰(zhàn),調試復雜問題代碼是調試出來的,我會在本書中為你總結系統(tǒng)的性能分析方法論,并給出豐富的實戰(zhàn)案例,手把手教你調試代碼,定位線上復雜問題。 特色五:不畏浮云遮望眼,掌控更大規(guī)模系統(tǒng)此外,我還會跳出開發(fā)單一程序的狹隘視角,為你系統(tǒng)介紹大型互聯(lián)網(wǎng)產(chǎn)品的整個生命周期。同時,我還會為你介紹大規(guī)模微服務集群的典型架構,深入探討微服務協(xié)議、架構、治理等問題。最后,我們還將看到在更大規(guī)模數(shù)據(jù)量、更復雜的業(yè)務和更多的服務時下面臨的固有挑戰(zhàn),并深入淺出地講解分布式系統(tǒng)在可用性與一致性之間的權衡。 當我們掌握了構建復雜系統(tǒng)的一整套方法論,就不會拘泥于特定的系統(tǒng)與細節(jié)了。當我們有能力掌控全局、創(chuàng)造真正的價值時,又怎會困在內卷的惡性循環(huán)中患得患失呢?
本書附帶一個配套的爬蟲項目,它可以幫助你更好地理解和實踐書中的內容。 本書在各個章節(jié)使用了特定的標簽,如vx.x.x,這些標簽對應項目的不同階段。要查看特定階段的代碼,你可以在GitHub項目頁單擊Tags選項,然后選擇對應的標簽。 對于熟悉命令行的讀者,你可以先克隆這個項目(通過git clone [URL]命令,其中[URL]是項目的鏈接),然后使用git checkout [tagname]命令在本地查看和使用對應標簽的代碼。 成都慧眸科技創(chuàng)始人 《Go語言底層原理剖析》作者 極客時間專欄作家
第1篇 項目準備
你還可能感興趣
我要評論
|