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