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