大型網站系統與Java中間件實踐

大型網站系統與Java中間件實踐(貫通分佈式高併發高數據高訪問量網站架構與實現之權威著做,九大一線互聯網公司CTO聯合推薦web

曾憲傑 著   數據庫

ISBN 978-7-121-22761-5編程

2014年4月出版緩存

訂價:65.00元 性能優化

340服務器

16網絡

編輯推薦多線程

究竟是本什麼書,擁有這樣一份做序推薦人列表:阿里集團章文嵩博士|新浪TimYang|去哪網吳永強|丁香園馮大輝|蘑菇街嶽旭強|途牛湯崢嶸|豆瓣洪強寧|淘寶陳皓/林昊……架構

這本書出自淘寶技術部總監之手,他也是淘寶近10年來歷次技術飛躍的參與者、貢獻者和帶領者,其中的經驗直接來自淘寶服務框架、消息中間件及數據訪問層。併發

《淘寶技術這十年》勾勒出淘寶Java技術變遷波瀾壯闊的輪廓,本書則給出最詳盡、深刻、系統的解讀與演示,實用到足以讓任一層級的學習者如獲至寶。

看過的人無不暗中叫它「那些年咱們一塊兒走過的坑」,領略超大型網站陳年積澱的寶貴經驗、領先思路和具體手法,後來者就有機會彎道超車!

內容提要

《大型網站系統與Java中間件實踐》圍繞大型網站和支撐大型網站架構的 Java 中間件的實踐展開介紹。從分佈式系統的知識切入,讓讀者對分佈式系統有基本的瞭解;而後介紹大型網站隨着數據量、訪問量增加而發生的架構變遷;接着講述構建 Java 中間件的相關知識;以後的幾章都是根據筆者的經驗來介紹支撐大型網站架構的 Java 中間件系統的設計和實踐。但願讀者經過《大型網站系統與Java中間件實踐》能夠了解大型網站架構變遷過程當中的較爲通用的問題和解法,並瞭解構建支撐大型網站的 Java 中間件的實踐經驗。對於有必定網站開發、設計經驗,並想了解大型網站架構和支撐這種架構的系統的開發、測試等的相關工程人員,《大型網站系統與Java中間件實踐》有很大的參考意義;對於沒有網站開發設計經驗的人員,經過《大型網站系統與Java中間件實踐》也能宏觀瞭解大型網站的架構及相關問題的解決思路和方案。

目錄

第1章  分佈式系統介紹  1

1.1  初識分佈式系統 1

1.1.1  分佈式系統的定義 1

1.1.2  分佈式系統的意義 3

1.2  分佈式系統的基礎知識   5

1.2.1  組成計算機的5要素   5

1.2.2  線程與進程的執行模式 6

1.2.3  網絡通訊基礎知識 13

1.2.4  如何把應用從單機擴展到分佈式 18

1.2.5  分佈式系統的難點 31

第2章  大型網站及其架構演進過程    35

2.1  什麼是大型網站 35

2.2  大型網站的架構演進 37

2.2.1  用Java技術和單機來構建的網站    37

2.2.2  從一個單機的交易網站提及 38

2.2.3  單機負載告警,數據庫與應用分離   40

2.2.4  應用服務器負載告警,如何讓應用服務器走向集羣 41

2.2.5  數據讀壓力變大,讀寫分離吧   50

2.2.6  彌補關係型數據庫的不足,引入分佈式存儲系統   56

2.2.7  讀寫分離後,數據庫又遇到瓶頸 58

2.2.8  數據庫問題解決後,應用面對的新挑戰   60

2.2.9  初識消息中間件   63

2.2.10  總結    64

第3章  構建Java中間件 67

3.1  Java中間件的定義   67

3.2  構建Java中間件的基礎知識  68

3.2.1  跨平臺的Java運行環境——JVM 69

3.2.2  垃圾回收與內存堆佈局 70

3.2.3  Java併發編程的類、接口和方法 72

3.2.4  動態代理 89

3.2.5  反射 91

3.2.6  網絡通訊實現選擇 93

3.3  分佈式系統中的Java中間件  94

第4章  服務框架    97

4.1  網站功能持續豐富後的困境與應對 97

4.2  服務框架的設計與實現   100

4.2.1  應用從集中式走向分佈式所遇到的問題   100

4.2.2  透過示例看服務框架原型   101

4.2.3  服務調用端的設計與實現   107

4.2.4  服務提供端的設計與實現   132

4.2.5  服務升級 137

4.3  實戰中的優化   138

4.4  爲服務化護航的服務治理 142

4.5  服務框架與ESB的對比   146

4.6  總結   147

第5章  數據訪問層  149

5.1  數據庫從單機到分佈式的挑戰和應對   149

5.1.1  從應用使用單機數據庫開始 149

5.1.2  數據庫垂直/水平拆分的困難    150

5.1.3  單機變爲多機後,事務如何處理 152

5.1.4  多機的Sequence問題與處理    165

5.1.5  應對多機的數據查詢   168

5.2  數據訪問層的設計與實現 174

5.2.1  如何對外提供數據訪問層的功能 174

5.2.2  按照數據層流程的順序看數據層設計 177

5.2.3  獨立部署的數據訪問層實現方式 192

5.2.4  讀寫分離的挑戰和應對 194

5.3  總結   200

第6章  消息中間件  203

6.1  消息中間件的價值   203

6.1.1  消息中間件的定義 203

6.1.2  透過示例看消息中間件對應用的解耦 204

6.2  互聯網時代的消息中間件 208

6.2.1  如何解決消息發送一致性   209

6.2.2  如何解決消息中間件與使用者的強依賴問題   218

6.2.3  消息模型對消息接收的影響 222

6.2.4  消息訂閱者訂閱消息的方式 229

6.2.5  保證消息可靠性的作法 230

6.2.6  訂閱者視角的消息重複的產生和應對 245

6.2.7  消息投遞的其餘屬性支持   249

6.2.8  保證順序的消息隊列的設計 252

6.2.9  Push和Pull方式的對比    257

第7章  軟負載中心與集中配置管理    259

7.1  初識軟負載中心 259

7.2  軟負載中心的結構   261

7.3  內容聚合功能的設計 263

7.4  解決服務上下線的感知   267

7.5  軟負載中心的數據分發的特色和設計   269

7.5.1  數據分發與消息訂閱的區別 269

7.5.2  提高數據分發性能須要注意的問題   271

7.6  針對服務化的特性支持   272

7.6.1  軟負載數據分組   272

7.6.2  提供自動感知之外的上下線開關 273

7.6.3  維護管理路由規則 273

7.7  從單機到集羣   274

7.7.1  數據統一管理方案 275

7.7.2  數據對等管理方案 276

7.8  集中配置管理中心   280

7.8.1  客戶端實現和容災策略 282

7.8.2  服務端實現和容災策略 284

7.8.3  數據庫策略   285

第8章  構建大型網站的其餘要素  287

8.1  加速靜態內容訪問速度的CDN  287

8.2  大型網站的存儲支持 291

8.2.1  分佈式文件系統   292

8.2.2  NoSQL    294

8.2.3  緩存系統 298

8.3  搜索系統   301

8.3.1  爬蟲問題 302

8.3.2  倒排索引 302

8.3.3  查詢預處理   304

8.3.4  相關度計算   304

8.4  數據計算支撐   304

8.5  發佈系統   307

8.6  應用監控系統   310

8.7  依賴管理系統   312

8.8  多機房問題分析 315

8.9  系統容量規劃   317

8.10  內部私有云    319

後記    321

精彩節摘

推薦序一

從事互聯網系統開發的人員大多但願成爲資深的架構師或領域專家。但大部分人員因爲自身工做環境及條件的限制,缺乏大型系統實踐經驗,或者對核心的案例缺少真實的瞭解,所以很難有機會理解分佈式設計中的關鍵問題及應對方案。如何才能找到有效的方法並早日成爲資深系統架構師呢?

《大型網站系統與Java中間件實踐》一書介紹了大型網站分佈式領域的各類問題,而且以互聯網語言Java語言爲主。這對於但願提高架構能力的技術人員來講,一方面有助於他們瞭解理論層面體系,掌握大型系統的全貌;另外一方面,因爲做者具備淘寶平臺的豐富的架構及中間件開發經驗,於是書中的要點都是大型網站在實際運行中的精華經驗,無論你是使用一個已有的分佈式開源解決方案,仍是自行開發分佈式組件,瞭解這些關鍵點都會幫助你快速深刻地駕馭分佈式領域的核心架構。

書中內容滿是實戰經驗,雖不佈道,但所述內容卻不乏硝煙——由於是做者在分佈式系統的構建、拆分、服務化、部署、實戰過程當中所經歷的教訓、積累的經驗。書中還有不少性能優化分析、多種方案選擇時的tradeoff及實戰中的方案。方案選擇無所謂最佳,只有最適合,這本書不只給出了方案選擇的方法,更給出了方案選擇的緣由。本書除了適合但願提高架構能力的技術人員閱讀,對於正在從事大數據、高併發、中間件使用或研發的一線開發人員也頗有價值。

——楊衛華(@TimYang)

新浪網技術總監

 

推薦序二

看了華黎寄給個人樣章有很深的感觸,時間彷彿又回到兩年多前,當時「去哪兒」網的業務飛速發展,系統遇到了各類各樣的問題。

首先是系統無節制地變得臃腫龐大,大量的web service的調用將咱們的系統變成了一個蜘蛛網,新進入的工程師須要很長時間的熟悉才能對原有系統作出修改。

其次系統隨着業務量的不斷增大變得不堪重負,開始還能經過增長硬件來擴容,後來增長硬件可以帶來的效果已無濟於事。

還有,質量愈來愈難以保證,測試的時間變得愈來愈長,沒法跟上和知足業務發展和變化的須要,團隊的壓力也愈來愈大,各個團隊都須要增長人員,可是生產力的提高並不明顯。

回顧那段時間,故障頻發,效率低下,團隊人困馬乏,成就感變得愈來愈低。因而咱們參考了國內外經歷過這個階段的公司的作法,引入了服務化框架,將系統拆小,重視了系統層次,控制了系統之間的調用關係,也採用了可靠消息系統來應對業務系統之間的強耦合問題。通過兩年的努力,如今終於看到了勝利的曙光。

總結下來系統發展的困難也是演進推進力,主要來自於三個方面:一是系統的負載規模,二是系統的複雜度,三是由前兩個方面帶來的開發團隊的規模擴張。而中間件技術是解決上述三個問題的重要方法。

若是在兩年甚至三年前華黎的這本書就已經出版,那麼去哪兒網的系統發展就能少走不少彎路。過去兩年中,咱們爲了概念和作法進行了無數次的討論、爭執、嘗試、修正。由於咱們當時得到經驗的途徑主要是經過閱讀國內外各大網站的同行在各類技術會議上的演講、PPT,或者與他們交流過程當中獲得各類啓示,這對於一個快速成長中的系統來說太不成體系了,沒法對平常的工做進行指導。而華黎寫的這本書融合了他過去在淘寶的經驗,書中的作法、理念通過了淘寶系統的爆炸性增加的檢驗,詳實地闡述了Java中間件技術在大型網站,尤爲是大型交易類網站的建設和應用經驗。

書若其人,這本書很實在,用如今流行的話語來說,就是乾貨多。我認識華黎有三年了,三年內見過幾面,每次見面我都有不少收穫。此次他把他的經驗和領悟集結成書,相信對不少正在投身於互聯網系統開發,特別是高負載、高複雜度的系統開發的工程師們會有很大幫助。也衷心祝福華黎在將來的日子裏,兒子健康成長,家庭幸福,工做順利。

——吳永強(@吳永強去哪)

去哪網 CTO 

做者簡介

曾憲傑,淘寶花名華黎,現任淘寶技術部總監。2002年畢業於浙江大學計算機系。2007年加入淘寶網平臺架構團隊,負責構建淘寶自主的消息中間件系統,同期主導了淘寶數據層的建立,這兩個產品也是淘寶中間件中較爲重要的兩個。2010年下半年起開始負責整個淘寶中間件團隊,幫助團隊成爲業內知名的Java技術團隊。2012年開始從中間件走向應用系統的研發工做,2013年初負責新組建的淘寶技術部。熟悉C++和Java,在多線程、併發、網絡通訊及支撐大型網站的中間件領域有較多經驗,對新技術有濃厚的興趣。致力於帶領團隊在無線、數據、業務 平臺和組件化開發方面取得突破。與林昊合著有《OSGi原理與最佳實踐》一書。

媒體評論

經過這本書能夠學習到大量構建大型網站系統的核心技 術,以及支撐大型網站的Java中間件的必備知識。做者在超大型電子商務網站的多年實戰經驗使得本書的內容極具價值。 若是你所在的技術團隊正在因面對大型網站而束手無策,或 許你能夠從這本書中獲得啓發。另外,若是想成爲Java技術架 構師,那麼你也不該錯過此書。 ——馮大輝 (@Fenng) 丁香園CTO

華黎是個人前同事兼好友,據說他要出版一本書,我就猜到是關於大型網站和中間件的,由於這是他的老本行。在互聯網技術領域,理論永遠過剩,而真正從零構建整個體系的機會少之又少,華黎是淘寶網規模高速增加、中間件體系快速發展的親歷者、核心工程師,實踐後的理論才更精確、更務實,這是我推薦這本書的理由。 ——嶽旭強(@嶽旭強)  蘑菇街CTO

與憲傑認識多年,也一塊兒在淘寶共事過不短的時間,我深知他在大型互聯網系統和Java中間件領域不只有很強的理論基礎,並且有豐富的實戰經驗。終於看到他把多年的積澱聚集成書,由衷地爲他感到高興。拿到書稿後,我火燒眉毛地從頭到尾拜讀了一遍。這應該是國內第一本從基礎知識到構建應用,從理論到實踐,把Java中間件很是系統和完整地闡述清楚的書。此外,書中列舉的大量實踐經驗與不少通用設計思路不一樣,甚至是相反的。這是由於當面對高併發、高訪問和海量數據時,在學校中學到的知識或普通書本中看到的方法行不通。這些看似古怪或醜陋的方法,是大型互聯網企業用無數血淚換來的寶貴經驗。特此推薦給對構建大型互聯網 系統感興趣的讀者。 ——湯崢嶸(@湯崢嶸-還在路上) 途牛CTO

要用Java構建一個大流量且有着複雜處理流程的網站,中間件技術是必需要用的技術,沒有中間件就沒法作到水平擴展,沒法作到計算或數據集羣的構建,也就沒法構建一個大型網站。本書經過解決實際問題一步一步地帶着你細數了用 Java 構建一個大型網站的各類技術細節和注意事項,講解深刻淺出。從系統架構到實際代碼,從基礎理論到實際操做,看得出來做者在中間件技術方面的豐富經驗。這是一本系統得可讓你少走不少彎路的實戰型技術書。 ——陳皓( @左耳朵耗子) 阿里巴巴集團資深技術專家

拿到書稿,一讀之下不由擊節讚歎!這本書對大型網站發展過程當中會遇到的各類架構問題和解決方案的討論和總結,正是我在過去多年的工做中常常碰到和思考的。真是心有慼慼焉!本書詳細闡述瞭解決大型網站架構問題時一般都會採用的方案:服務框架、數據訪問層、消息中間件、配置管理等,對爲何要作、如何作、如何權衡得失等進行了很是細緻的介紹,是一本不可多得的好書。雖然本書的內容是基於Java的實現,但在架構層面,對使用任何語言的架構師和開發者都具備重要的參考價值。 ——洪強寧(@hongqn) 豆瓣網首席架構師

本書做者是淘寶Java應用架構從集中式到分佈式的實際參與者,並帶領構建淘寶中間件兩年多的時間。本書詳細說明了大型Java網站必備的三利器——服務框架、消息中間件和數據訪問層——的具體設計和實現方法,其中不少是淘寶在架構演進過程當中摸爬滾打的實戰經驗和血淚教訓。書中的內容一方面有助於開闊視野,另外一方面大量寶貴的實戰經驗能夠給須要作相似產品的讀者帶來不小的幫助。 —— 林昊 阿里巴巴集團資深技術專家

前言

因爲2007年一個很偶然的機會,我加入了淘寶平臺架構組,職位是C++工程師。而後我就在只完成了C語言的一個小功能後,開始了Java中間件的研究生涯。從2007年下半年到2013年年初,近6年時間我都在和支撐整個網站應用的Java中間件打交道——從設計實現消息中間件到參與數據訪問層設計,再到負責整個Java中間件團隊,我也從一個不太懂Java的C++工程師成長爲對Java中間件有必定了解和積累的工程負責人。在這個過程當中,我也有幸參與了淘寶從集中式的Java應用到分佈式Java應用的架構變遷。

本書從分佈式系統提及,而後介紹大型網站的變遷中遇到的挑戰和應對策略,接着講解Java中間件的內容,重點介紹了筆者在實踐中自主開發的支撐大型網站應用的幾個Java中間件產品,包括對它們的思考及其設計和實現原理。最後介紹了支撐大型網站的其餘基礎要素,包括CDN、搜索、存儲、計算平臺,以及運維相關的系統等內容。

經過閱讀本書,筆者但願讀者可以儘可能完整地瞭解大型網站的挑戰和應對辦法,而且可以瞭解淘寶在大型網站變遷過程當中產生的這幾個中間件的具體產品及其背後的思考和設計,並可以對除中間件以外的支撐大型網站的其餘系統有必定的瞭解。但願初學者可以更多地關注全貌,也但願有相關經驗的人士能夠從本書中獲得一些啓發,汲取一些經驗。

2013年5月,個人崗位有了調整,在接下來的時間中我將帶領淘寶技術部承擔淘寶業務應用的開發工做。這本書也是對本身淘寶中間件6年工做生涯的一份記念。

最後要說的是,可以完成本書有不少的人要感謝,首先要感謝淘寶給我這麼好的平臺和機會,沒有這個機會就不會有本書。而後也很是感謝太太王海鳳對個人支持,4年前和林昊合著《OSGi原理與最佳實踐》一書的時候,咱們剛談戀愛,我把不少本應陪你的時間用在了寫做上;4年後,我又把本應陪你和兒子的時間用在了寫做上,沒有你的支持和理解,我不可能完成此次寫做。最後也要感謝個人父母、岳父母、姑姑和小表妹,有大家照顧宸宸,我才能專心地寫做本書。

 

曾憲傑 

2013年11月於杭州 

相關文章
相關標籤/搜索