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