《大型網(wǎng)站技術(shù)架構(gòu):核心原理與案例分析》作者李智慧的翻譯力作!
讀透一本好書,少走十年彎路。
對(duì)于創(chuàng)業(yè)人來(lái)說(shuō),在瞬息萬(wàn)變的移動(dòng)互聯(lián)網(wǎng)世界求生存,寸秒就是寸金!如何在創(chuàng)業(yè)之初,就構(gòu)建好適合業(yè)務(wù)長(zhǎng)遠(yuǎn)發(fā)展的技術(shù)架構(gòu):以不變應(yīng)萬(wàn)變、以可伸縮性對(duì)抗變化莫測(cè)的業(yè)務(wù)需求,為自己的發(fā)展贏得時(shí)間、為產(chǎn)品創(chuàng)造優(yōu)秀的用戶體驗(yàn)?本書針對(duì)此痛點(diǎn),給出了適切中肯的建議。
作者深入闡述了設(shè)計(jì)原則、前端層、Web服務(wù)、數(shù)據(jù)存儲(chǔ)層、緩存、異步處理等核心概念與技術(shù),針對(duì)可能發(fā)生的問(wèn)題一一剖析,為讀者勾勒出了簡(jiǎn)明清晰的技術(shù)框架圖。相信《互聯(lián)網(wǎng)創(chuàng)業(yè)核心技術(shù):構(gòu)建可伸縮的Web應(yīng)用》 可以成為開啟讀者可伸縮架構(gòu)設(shè)計(jì)之旅的一個(gè)里程碑。
閱讀本書并不需要擁有任何特定的編程技能,諸如Java、PHP、JavaScript、C#或者Ruby,因?yàn)樯炜s性是Web應(yīng)用開發(fā)中一個(gè)通用的挑戰(zhàn),與具體語(yǔ)言無(wú)關(guān)。
互聯(lián)網(wǎng)創(chuàng)業(yè)熱,技術(shù)人才不足的問(wèn)題凸顯出來(lái),其中*稀缺的,是能夠構(gòu)建可伸縮系統(tǒng)的工程師,在機(jī)會(huì)來(lái)臨時(shí)不掉鏈子。但是,大部分程序員在職業(yè)生涯中并沒(méi)有太多機(jī)會(huì)有這樣的實(shí)戰(zhàn)經(jīng)驗(yàn),這方面的技術(shù)文檔也比較稀缺、零散。本書彌補(bǔ)了這一空白,面向創(chuàng)業(yè)公司技術(shù)人員,系統(tǒng)、全面且有針對(duì)性地總結(jié)可伸縮方面的原則和實(shí)踐,兼顧開發(fā)、運(yùn)維和團(tuán)隊(duì)等主題,有很多接地氣的建議,語(yǔ)言風(fēng)格明快,因此原著獲得了很好的口碑。更為難得的是,譯者本身也是這一領(lǐng)域的專家,在業(yè)界有"教授"的美譽(yù),有力保證了本書成為一部經(jīng)得起考驗(yàn)的佳作。
--美團(tuán)點(diǎn)評(píng)技術(shù)學(xué)院院長(zhǎng) 劉江
互聯(lián)網(wǎng)創(chuàng)業(yè)從0開始,之后邁出的每一步都是困難的。從0到1的過(guò)程不是瞬間完成,而是從0.01到0.02,直到1的蛻變。公司在不斷發(fā)展與迭代的過(guò)程中,各種各樣的技術(shù)問(wèn)題也隨之"野蠻"生長(zhǎng)。如何解決系統(tǒng)的穩(wěn)定性、可伸縮性等技術(shù)難題?本書或許能給你想要的答案。李智慧老師作為極客邦科技/InfoQ中國(guó)的專家講師,長(zhǎng)期致力于技術(shù)社區(qū)的發(fā)展。我愿推薦此書,和技術(shù)人共同成長(zhǎng)。
--極客邦科技/InfoQ中國(guó)創(chuàng)始人兼CEO 霍泰穩(wěn)
構(gòu)建一個(gè)"能用的"應(yīng)用系統(tǒng)與構(gòu)建一個(gè)能夠隨著業(yè)務(wù)發(fā)展而擴(kuò)展的系統(tǒng)完全是兩回事。要想在用戶量和業(yè)務(wù)量快速增長(zhǎng)的環(huán)境下保持系統(tǒng)的擴(kuò)展性,需要工程師熟悉互聯(lián)網(wǎng)業(yè)務(wù)中"擴(kuò)展"與"伸縮"的常用招數(shù),并能夠根據(jù)情況選擇*合適的方案。本書系統(tǒng)地描述了互聯(lián)網(wǎng)應(yīng)用中的擴(kuò)展性,在系統(tǒng)設(shè)計(jì)原則、前后端設(shè)計(jì)、存儲(chǔ)設(shè)計(jì)方面進(jìn)行了全面的描述,并詳盡討論了"異步"與"緩存"這兩個(gè)擴(kuò)展性法寶的各種使用場(chǎng)景。希望在本書的幫助下,工程師能夠快速掌握解決伸縮性問(wèn)題的鑰匙,早日成為可信賴的技術(shù)達(dá)人。
--宜信宜人貸首席技術(shù)官 段念
2008年認(rèn)識(shí)李智慧,從那時(shí)起,智慧參與阿里巴巴互聯(lián)網(wǎng)基礎(chǔ)技術(shù)平臺(tái)的建設(shè),并成為關(guān)鍵產(chǎn)品的代碼貢獻(xiàn)者。2014年智慧送了我一本他寫的《大型網(wǎng)站技術(shù)架構(gòu):核心原理與案例分析》。翻看后,感覺(jué)智慧經(jīng)歷了這幾年在大型網(wǎng)站的實(shí)踐后,多了一份堅(jiān)持總結(jié)和分享的能力。這是很多當(dāng)時(shí)參與基礎(chǔ)技術(shù)平臺(tái)建設(shè)的同事所不具備的特質(zhì)。近期,智慧告訴我他和另一位優(yōu)秀的架構(gòu)師何坤,一起翻譯了本書。我翻看之下,很佩服他倆在工作之余還能堅(jiān)持翻譯此書。書中內(nèi)容涉及前端、服務(wù)、數(shù)據(jù)庫(kù)、緩存、異步消息和搜索,非常全面。全世界的大型網(wǎng)站并不多,能參與其中建設(shè)的只是小部分工程師,希望他們解決問(wèn)題的思路能給各位讀者一些啟發(fā)。
--平安好醫(yī)生 CTO 王齊
和智慧在阿里共事多年,一起經(jīng)歷了阿里巴巴技術(shù)平臺(tái)化戰(zhàn)略的關(guān)鍵時(shí)期。互聯(lián)網(wǎng)技術(shù)與傳統(tǒng)軟件技術(shù)相比,*大的不同可能就是如何處理大并發(fā)大數(shù)據(jù)的挑戰(zhàn),而主要應(yīng)對(duì)措施就是可伸縮的架構(gòu)技術(shù),期待本書成為互聯(lián)網(wǎng)創(chuàng)業(yè)公司工程師的手邊書,通過(guò)本書深入理解可伸縮系統(tǒng)架構(gòu)的原理與設(shè)計(jì)。
--同盾創(chuàng)始人 蔣韜
Artur Ejsmont 是一位充滿激情的軟件工程師及敏捷領(lǐng)導(dǎo)者,目前就職于雅虎悉尼。Artur 從事 Web 應(yīng)用方面的開發(fā)工作已經(jīng)超過(guò)十年,同時(shí)也大量關(guān)注敏捷及創(chuàng)業(yè)公司管理,熱愛(ài)精益創(chuàng)業(yè)模型。Artur 開發(fā)的網(wǎng)站每小時(shí) PV 數(shù)超過(guò)一百萬(wàn),為歐洲及澳洲兩個(gè)大洲的用戶提供服務(wù)。他還在大學(xué)開設(shè)課程,分享他的技術(shù)與知識(shí)。作為一名科技作家、博客寫手、技術(shù)演講者,Artur 對(duì)技術(shù)社區(qū)有許多積極的貢獻(xiàn)。
譯者
李智慧,曾供職阿里巴巴及英特爾亞太研發(fā)中心,從事分布式系統(tǒng)與大數(shù)據(jù)方面的開發(fā)?!洞笮途W(wǎng)站技術(shù)架構(gòu):核心原理與案例分析》作者。目前正在互聯(lián)網(wǎng)方面創(chuàng)業(yè)。
何坤,宅米首席架構(gòu)師,前阿里巴巴平臺(tái)架構(gòu)師。曾參與阿里中文站架構(gòu)建設(shè),以及WebX 框架、云計(jì)算存儲(chǔ)平臺(tái) Doris 等核心系統(tǒng)研發(fā)。曾就職豐聯(lián)金融證券期貨部任首席架構(gòu)師。對(duì)大型互聯(lián)網(wǎng)站架構(gòu)有深刻理解,對(duì)中間件、分布式系統(tǒng)及新技術(shù)研發(fā)始終保持熱情。目前關(guān)注自然語(yǔ)言處理、機(jī)器理解等新課題。
目 錄
1 核心概念 1
什么是伸縮性 ................................................................................................ 2
從單一服務(wù)器到全球用戶的Web 架構(gòu)演化 ............................................... 4
單一服務(wù)器 ............................................................................................ 5
使用更強(qiáng)的服務(wù)器:垂直伸縮 ............................................................ 6
服務(wù)分離 .............................................................................................. 10
內(nèi)容分發(fā)網(wǎng)絡(luò):靜態(tài)內(nèi)容的伸縮性 .................................................. 12
分散訪問(wèn)流量:水平伸縮 .................................................................. 13
服務(wù)全球用戶的伸縮性架構(gòu) .............................................................. 16
數(shù)據(jù)中心基礎(chǔ)設(shè)施架構(gòu)概覽 ...................................................................... 18
前端 ...................................................................................................... 19
Web 應(yīng)用層 .......................................................................................... 20
Web 服務(wù)層 .......................................................................................... 20
附加組件 .............................................................................................. 21
數(shù)據(jù)持久層 .......................................................................................... 21
數(shù)據(jù)中心基礎(chǔ)架構(gòu) .............................................................................. 22
應(yīng)用架構(gòu)概覽 .............................................................................................. 23
前端 ...................................................................................................... 24
Web 服務(wù) .............................................................................................. 25
支撐技術(shù) .............................................................................................. 29
小結(jié) .............................................................................................................. 30
2 軟件設(shè)計(jì)原則 31
簡(jiǎn)單 .............................................................................................................. 31
隱藏復(fù)雜與構(gòu)建抽象 .......................................................................... 32
避免過(guò)度設(shè)計(jì) ...................................................................................... 33
嘗試測(cè)試驅(qū)動(dòng)開發(fā) .............................................................................. 34
從軟件設(shè)計(jì)的簡(jiǎn)化范例中學(xué)習(xí) .......................................................... 35
低耦合 .......................................................................................................... 36
促進(jìn)低耦合 .......................................................................................... 37
避免不必要的耦合 .............................................................................. 39
低耦合范式 .......................................................................................... 40
不要重復(fù)自己(DRY) .............................................................................. 41
復(fù)制粘貼代碼 ...................................................................................... 42
基于約定編程 .............................................................................................. 43
畫架構(gòu)圖 ...................................................................................................... 46
用例圖 .................................................................................................. 49
類圖 ...................................................................................................... 50
模塊圖 .................................................................................................. 51
單一職責(zé) ...................................................................................................... 52
改善單一職責(zé) ...................................................................................... 52
單一職責(zé)的例子 .................................................................................. 53
開閉原則 ...................................................................................................... 53
依賴注入 ...................................................................................................... 55
控制反轉(zhuǎn)(IOC) .............