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

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

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

基本介紹

內容簡介

到底是本什麼書,擁有這樣一份作序推薦人列表:阿里集團章文嵩博士|新浪TimYang|去哪網吳永強|丁香園馮大輝|蘑菇街岳旭強|途牛湯崢嶸|豆瓣洪強寧|某電商陳皓/林昊……
這本書出自某電商技術部總監之手,他也是某電商近10年來歷次技術飛躍的參與者、貢獻者和帶領者,其中的經驗直接來自某電商服務框架、訊息中間件及數據訪問層。
《某電商技術這十年》勾勒出某電商Java技術變遷波瀾壯闊的輪廓,本書則給出最詳盡、深入、系統的解讀與演示,實用到足以讓任一層級的學習者如獲至寶。
看過的人無不暗中叫它“那些年我們一起走過的坑”,領略超大型網站陳年積澱的寶貴經驗、領先思路和具體手法,後來者就有機會彎道超車!

作者簡介

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

專業推薦

媒體推薦

通過這本書可以學習到大量構建大型網站系統的核心技 術,以及支撐大型網站的Java中間件的必備知識。作者在超大型電子商務網站的多年實戰經驗使得本書的內容極具價值。 如果你所在的技術團隊正在因面對大型網站而一籌莫展,或 許你可以從這本書中得到啟發。另外,如果想成為Java技術架 構師,那么你也不應錯過此書。 ——馮大輝 (@Fenng) 丁香園CTO
華黎是我的前同事兼好友,聽說他要出版一本書,我就猜到是關於大型網站和中間件的,因為這是他的老本行。在網際網路技術領域,理論永遠過剩,而真正從零構建整個體系的機會少之又少,華黎是某寶網規模高速增長、中間件體系快速發展的親歷者、核心工程師,實踐後的理論才更精確、更務實,這是我推薦這本書的理由。 ——岳旭強(@岳旭強) 蘑菇街CTO
與憲傑認識多年,也一起在某寶共事過不短的時間,我深知他在大型網際網路系統和Java中間件領域不僅有很強的理論基礎,而且有豐富的實戰經驗。終於看到他把多年的積澱匯集成書,由衷地為他感到高興。拿到書稿後,我迫不及待地從頭至尾拜讀了一遍。這應該是國內第一本從基礎知識到構建套用,從理論到實踐,把Java中間件非常系統和完整地闡述清楚的書。此外,書中列舉的大量實踐經驗與很多通用設計思路不同,甚至是相反的。這是因為當面對高並發、高訪問和海量數據時,在學校中學到的知識或普通書本中看到的方法行不通。這些看似古怪或醜陋的方法,是大型網際網路企業用無數血淚換來的寶貴經驗。特此推薦給對構建大型網際網路 系統感興趣的讀者。 ——湯崢嶸(@湯崢嶸-還在路上) 途牛CTO
要用Java構建一個大流量且有著複雜處理流程的網站,中間件技術是必須要用的技術,沒有中間件就無法做到水平擴展,無法做到計算或數據集群的構建,也就無法構建一個大型網站。本書通過解決實際問題一步一步地帶著你細數了用 Java 構建一個大型網站的各種技術細節和注意事項,講解深入淺出。從系統架構到實際代碼,從基礎理論到實際操作,看得出來作者在中間件技術方面的豐富經驗。這是一本系統得可以讓你少走很多彎路的實戰型技術書。 ——陳皓( @左耳朵耗子) 阿里巴巴集團資深技術專家
拿到書稿,一讀之下不禁擊節讚嘆!這本書對大型網站發展過程中會遇到的各種架構問題和解決方案的討論和總結,正是我在過去多年的工作中經常碰到和思考的。真是心有戚戚焉!本書詳細闡述了解決大型網站架構問題時通常都會採用的方案:服務框架、數據訪問層、訊息中間件、配置管理等,對為什麼要做、如何做、如何權衡得失等進行了非常細緻的介紹,是一本不可多得的好書。雖然本書的內容是基於Java的實現,但在架構層面,對使用任何語言的架構師和開發者都具有重要的參考價值。 ——洪強寧(@hongqn) 豆瓣網首席架構師
本書作者是某寶Java套用架構從集中式到分散式的實際參與者,並帶領構建某寶中間件兩年多的時間。本書詳細說明了大型Java網站必備的三利器——服務框架、訊息中間件和數據訪問層——的具體設計和實現方法,其中很多是某寶在架構演進過程中摸爬滾打的實戰經驗和血淚教訓。書中的內容一方面有助於開闊視野,另一方面大量寶貴的實戰經驗可以給需要做類似產品的讀者帶來不小的幫助。 —— 林昊 阿里巴巴集團資深技術專家

名人推薦

通過這本書可以學習到大量構建大型網站系統的核心技術,以及支撐大型網站的Java中間件的必備知識,作者在超大型電子商務網站的多年實戰經驗使得本書的內容極具價值。如果你所在的技術團隊正在因面對大型網站而一籌莫展,或許你可以從這本書中得到啟發:另外,如果想成為Java技術架構師,那么你也不應錯過此書。
——馮大輝(@Fenng) 丁香園CTO
華黎是我的前同事兼好友,聽說他要出版一本書,我就猜到是關於大型網站和中間件的,因為這是他的老本行。在網際網路技術領域,理論永遠過剩,而真正從零構建整個體系的機會少之又少,華黎是規模高速增長、中間件體系快速發展的親歷者、核心工程師,實踐後的理論才更精確、更務實,這是我推薦這本書的理由。
——岳旭強(@岳旭強) 蘑菇街CTO
與憲傑認識多年,也一起共事過不短的時間,我深知他在大型網際網路系統和Java中間件領域不僅有很強的理論基礎,而且有豐富的實戰經驗。終於看到他把多年的積澱匯集成書,由衷地為他感到高興。拿到書稿後,我迫不及待地從頭至尾拜讀了一遍。這應該是國內第一本從基礎知識到構建套用,從理論到實踐,把Java中間件非常系統和完整地闡述清楚的書 此外,書中列舉的大量實踐經驗與很多通用設計思路不同,甚至是相反的。這是因為當面對高並發、高訪問和海量數據時,在學校中學到的知識或普通書本中看到的方法行不通。這些看似古怪或醜陋的方法,是大型網際網路企業用無數血淚換來的寶貴經驗特此推薦給對構建大型網際網路系統感興趣的讀者。
——湯崢嶸(@湯崢嶸一還在路上) 途牛CTO
要用Java構建一個大流量且有著複雜處理流程的網站,中間件技術是必須要用的技術,沒有中問件就無法做到水平擴展,無法做到計算或數據集群的構建,也就無法構建一個大型網站。本書通過解決實際問題一步一步地帶著你細數了用Java構建一個大型網站的各種技術細節和注意事項,講解深入淺出,從系統架構到實際代碼,從基礎理論到實際操作,看得出來作者在中間件技術方面的豐富經驗。這是一本系統的可以讓你少走很多彎路的實戰型技術書。
——陳皓(@左耳朵耗子)阿里巴巴集團資深技術專家
拿到書稿,一讀之下不禁擊節讚嘆!這本書對大型網站發展過程中會遇到的各種架構問題和解決方案的討論和總結,正是我在過去多年的工作中經常碰到和思考的。真是心有戚威焉!本書詳細闡述了解決大型網站架構問題時通常都會採用的方案:服務框架、數據訪問層、訊息中間件、配置管理等,對為什麼要做、如何做、如何權衡得失等進行了非常細緻的介紹,是一本不可多得的好書。雖然本書的內容是基於Java的實現,但在架構層面,對使用任何語言的架構師和開發者都具有重要的參考價值。
——洪強寧(@hongqn) 豆瓣網首席架構師
本書作者是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.1Java中間件的定義67
3.2構建Java中間件的基礎知識68
3.2.1跨平台的Java運行環境——JVM69
3.2.2垃圾回收與記憶體堆布局70
3.2.3Java並發編程的類、接口和方法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.9Push和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加速靜態內容訪問速度的CDN287
8.2大型網站的存儲支持291
8.2.1分散式檔案系統292
8.2.2NoSQL294
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

序言

由於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月於杭州

相關詞條

熱門詞條

聯絡我們