本書以高可用服務(wù)架構(gòu)為主題,側(cè)重于講解高可用架構(gòu)設(shè)計的核心要點:可伸縮和可擴展,從應(yīng)用層、數(shù)據(jù)庫、緩存、消息隊列、大數(shù)據(jù)查詢系統(tǒng)、分布式定時任務(wù)調(diào)度系統(tǒng)、微服務(wù)等層面詳細講解如何設(shè)計可伸縮、可擴展的框架,并給出在各個領(lǐng)域解決特定問題的方法論和實踐總結(jié)。隨著本書的出版,我們還開源了4個行之有效的互聯(lián)網(wǎng)可伸縮框架,包括數(shù)據(jù)庫分庫分表dbsplit、緩存分片redic、專業(yè)的發(fā)號器vesta和消息隊列處理機框架kclient,每個框架都開箱即用,也可以作為學(xué)習(xí)互聯(lián)網(wǎng)平臺化框架搭建的素材,更可以作為開發(fā)開源項目的示例。本書的上冊《分布式服務(wù)架構(gòu):原理、設(shè)計與實戰(zhàn)》詳細介紹了如何解決線上高并發(fā)服務(wù)的一致性、高性能、高可用、敏捷等痛點,本書與上冊結(jié)合后可覆蓋保證線上高并發(fā)服務(wù)的各個主題:一致性、高性能、高可用、可伸縮、可擴展、敏捷性等,每個主題都是一個方法論。充分理解這些主題,可保障線上服務(wù)健壯運行,對實現(xiàn)服務(wù)穩(wěn)定性的n個9有著不可估量的作用。無論是對于互聯(lián)網(wǎng)的或者傳統(tǒng)的軟件工程師、測試工程師、架構(gòu)師,還是對于深耕于IT的其他管理人員,本書都有很強的借鑒性和參考價值,是值得每個技術(shù)人員閱讀的架構(gòu)級技術(shù)書。
云時代架構(gòu)系列經(jīng)典!重磅級架構(gòu)書2018年重磅上市!
詳解高可用架構(gòu)設(shè)計的核心要點:可伸縮與可擴展
詳解分布式發(fā)號器、消息隊列框架、數(shù)據(jù)庫分庫分表、緩存、Elasticsearch、分布式調(diào)度任務(wù)、RPC服務(wù)、Dubbo、高性能網(wǎng)絡(luò)代理中間件等
全面破解可伸縮服務(wù)架構(gòu)的奧秘
分布式服務(wù)架構(gòu):原理、設(shè)計與實戰(zhàn)讀者的配套技能升級架構(gòu)書。
前 言
本書的上冊《分布式服務(wù)架構(gòu):原理、設(shè)計與實戰(zhàn)》詳細介紹了如何解決線上高并發(fā)服務(wù)的一致性、高性能、高可用、敏捷等痛點。本書延續(xù)了高可用服務(wù)架構(gòu)的主題,側(cè)重于講解高可用架構(gòu)設(shè)計的核心要點:可伸縮和可擴展,從應(yīng)用層、數(shù)據(jù)庫、緩存、消息隊列、大數(shù)據(jù)查詢系統(tǒng)、分布式定時任務(wù)調(diào)度系統(tǒng)、微服務(wù)等層面詳細講解如何設(shè)計可伸縮、可擴展的框架,并給出在各個領(lǐng)域解決特定問題的方法論和實踐總結(jié)。隨著本書的出版,我們還開源了4個行之有效的互聯(lián)網(wǎng)可伸縮框架,包括數(shù)據(jù)庫分庫分表dbsplit、緩存分片redic、專業(yè)的發(fā)號器vesta和消息隊列處理機框架kclient,每個框架都開箱即用,且都是獨立的互聯(lián)網(wǎng)高并發(fā)框架,是構(gòu)建互聯(lián)網(wǎng)級項目的重要組件,也可以作為學(xué)習(xí)互聯(lián)網(wǎng)平臺化框架搭建的素材,更可以作為開發(fā)開源項目的示例。
在寫作本書的過程中,我們的多位作者根據(jù)自身在互聯(lián)網(wǎng)大規(guī)模、高并發(fā)項目中遇到的實際問題,總結(jié)了切實有效的方法論和解決方案,最后沉淀出一套適合高并發(fā)服務(wù)的優(yōu)秀開源技術(shù)框架,其中的方法論可以幫助讀者解決實際問題,開源框架可以幫助讀者快速搭建可伸縮的互聯(lián)網(wǎng)高并發(fā)項目。無論是對于互聯(lián)網(wǎng)的或者傳統(tǒng)的軟件工程師、測試工程師、架構(gòu)師,還是對于深耕于IT的其他管理人員,本書都有很強的借鑒性和參考價值,是值得每個技術(shù)人員閱讀的架構(gòu)級技術(shù)書。
感謝我的作者團隊,楊彪、海亮、劉淏、博巖等無數(shù)次地與我一起通宵達旦地趕稿子;感謝汪勤平、史先斌、潘運鵬、張誠、高亮、李繼、周偉、曲源等同學(xué)在編輯階段為我閱稿,并提出專業(yè)意見;感謝IT行業(yè)內(nèi)的重量級大咖焦英俊、楊延峰、右軍(于君澤)在百忙之中抽出時間為本書作序;也感謝大作者開濤和安曉輝等同學(xué)為本書寫評語;感謝各個行業(yè)的重量級朋友們對本書的大力支持,包括:馮沁原、賀偉、張義明、馬星光、高春東、黃福偉、李雪冰、付紅雷等;更感謝加入云時代架構(gòu)技術(shù)社區(qū)的小伙伴們的持續(xù)關(guān)注和支持!
在寫書的過程中,我們每個人都兢兢業(yè)業(yè)、勤勤懇懇,每增加一部分內(nèi)容,都互相審核,盡量保證書中案例的準(zhǔn)確性和時效性,確保能為讀者帶來很有價值的設(shè)計經(jīng)驗,并且我們想做到授人以漁,而不是授人以魚。在寫作的過程中有辛苦、有快樂、有價值、有成果,我們希望能持續(xù)地為讀者帶來經(jīng)驗、解決方案、架構(gòu)思路和快樂。
感謝電子工業(yè)出版社博文視點張國霞編輯的認(rèn)真態(tài)度和辛勤工作,本書在經(jīng)過作者們及國霞編輯大半年的努力后最終順利出版。
最后,感謝我的妻子和父母在我寫書期間對我的全力支持和幫助。
李艷鵬
2018年3月
推薦序一
從傳統(tǒng)互聯(lián)網(wǎng)到移動互聯(lián)網(wǎng)再到物聯(lián)網(wǎng),中國乃至全球的互聯(lián)網(wǎng)技術(shù)在近十年得到了高速發(fā)展。作為架構(gòu)師,我們非常樂意把這些技術(shù)傳播出去,讓更多的人享受互聯(lián)網(wǎng)技術(shù)的紅利,讓技術(shù)拓展商業(yè)的邊界。阿里巴巴的雙11技術(shù)已經(jīng)越來越成熟,因為阿里巴巴已經(jīng)逐步具備了基于云的計算能力,可以輕松應(yīng)對各種業(yè)務(wù)壓力。
本書的內(nèi)容包括緩存分片、消息隊列框架、數(shù)據(jù)庫分庫分表、分布式發(fā)號器、大數(shù)據(jù)查詢系統(tǒng)、分布式定時調(diào)度任務(wù)系統(tǒng)、微服務(wù)和RPC等;并配備了4個開箱即用的開源項目,包括分庫分表框架dbsplit、專業(yè)的發(fā)號器vesta、消息隊列框架kclient和緩存分片的redic,每個項目都是獨立的互聯(lián)網(wǎng)高并發(fā)框架,是構(gòu)建互聯(lián)網(wǎng)級項目的重要組件。本書對行業(yè)內(nèi)許多流行的開源項目也有很多介紹,讀者可以在其中學(xué)到平臺架構(gòu)設(shè)計的方方面面,也可以了解開源項目在構(gòu)思和實現(xiàn)方面的優(yōu)秀實踐。
互聯(lián)網(wǎng)的技術(shù)核心其實源于分布式,這是互聯(lián)網(wǎng)具備高性能、高并發(fā)特性的基礎(chǔ),掌握這些核心內(nèi)容后,你會發(fā)現(xiàn)駕馭技術(shù)變得如此輕松!希望艷鵬的這本書可以帶領(lǐng)大家掌握分布式的精髓,這本書非常棒!也感謝艷鵬邀請我為本書作序!
技術(shù)的世界是如此美妙,作為一名深耕架構(gòu)的技術(shù)人,我由衷地希望有更多的人加入,一起為中國的技術(shù)添磚加瓦!
焦英俊
未達科技CEO、原阿里巴巴中文站首席架構(gòu)師
推薦序二
近十年來,互聯(lián)網(wǎng)服務(wù)在社交網(wǎng)絡(luò)、搜索、電商、O2O、視頻、移動和云計算等領(lǐng)域呈現(xiàn)了井噴式發(fā)展,伴隨而來的是數(shù)千萬的日訂單量、數(shù)億的日活躍用戶、數(shù)百億的日消息發(fā)送量等海量的業(yè)務(wù)規(guī)模。支撐這些海量的業(yè)務(wù)規(guī)模的則是基于廉價服務(wù)器集群的高可用、可伸縮的分布式互聯(lián)網(wǎng)技術(shù)。
本書以可伸縮服務(wù)架構(gòu)為重點,從理論基礎(chǔ)、架構(gòu)設(shè)計、一線行業(yè)的實踐經(jīng)驗和代碼實現(xiàn)細節(jié)等方面,系統(tǒng)化地介紹了分布式互聯(lián)網(wǎng)的高可用、可伸縮技術(shù)的核心要點,是一本兼具深度和廣度的技術(shù)參考書。
雖然本書的主題是架構(gòu),但是這并不影響本書的易讀性,它比大多數(shù)同類書都要講得透徹、明白,也適合有想法、有目標(biāo)的初中級開發(fā)人員閱讀。分庫分表、Dubbo 源碼解析等方面的內(nèi)容,更可以幫助高級技術(shù)人員提升自己的技術(shù)實力,以及發(fā)揮更大的價值。
架構(gòu)是在長期的生產(chǎn)活動中經(jīng)過深度思考所積累下來的優(yōu)秀實踐和可復(fù)用的合理抽象,希望你不要錯過本書的精彩內(nèi)容。
楊延峰
開心網(wǎng)副總裁
推薦序三
楊彪兄弟找我為本書寫序,我欣然從命。我閱讀了這本佳作的若干個章節(jié),發(fā)現(xiàn)它有幾個特點:緊扣常見的問題域;結(jié)合了開源產(chǎn)品;代碼很講究。這里,我想談一談開源與寫作的關(guān)系,因為我覺得這就是一場修行。
什么是開源?我的粗淺理解就是,開源就是開源產(chǎn)品,是開放了源代碼的產(chǎn)品。我從業(yè)16年,用過不少開源產(chǎn)品,但發(fā)現(xiàn)被廣泛使用的項目并不都擁有好的代碼和充分的測試用例,可見知易行難。可喜的是,國人的開源產(chǎn)品在逐漸增多,也有不少好作品出現(xiàn),艷鵬的vesta-id-generator解決的就是分布式系統(tǒng)中常見的ID生成問題。
古人談學(xué)習(xí)有眼到、手到、心到之說。
眼到指的是閱讀,但閱讀面廣并不見得知識就是自己的,例如一個早晚聽張靚穎歌曲的粉絲不見得就能發(fā)出海豚音。
手到指的是要不斷練習(xí),當(dāng)然,這并不是指簡單、重復(fù)地練習(xí)。佛羅里達州立大學(xué)心理學(xué)家K. Anders Ericsson首次提出了刻意練習(xí)的概念,該練習(xí)方法的核心假設(shè)是:專家級水平是逐漸練出來的,而有效進步的關(guān)鍵在于找到一系列小任務(wù)讓受訓(xùn)者按順序完成,這些小任務(wù)必須是受訓(xùn)者正好不會做但又可以學(xué)習(xí)和掌握的。
我認(rèn)為,心到的一個環(huán)節(jié)是寫作。寫作能幫我們把脈絡(luò)梳理得更通暢。從自己懂,到給別人講明白,再到寫出來且別人還能明白,是進階的關(guān)系。
所以,從項目產(chǎn)品實踐,到開源,再到寫作,就是一場修行。修行是外在的表現(xiàn)、是與同行交流、是與世界對話;修行也是內(nèi)觀,是收獲若干思想的結(jié)晶、汲取若干靈感的泉水、沉淀若干系統(tǒng)的對白,在其中收獲更多的就是作者自己。
開卷有益,愿讀者也能在閱讀和實踐上收獲知與行的快樂!
于君澤
螞蟻金服高級技術(shù)專家
?李艷鵬云時代架構(gòu)技術(shù)社區(qū)創(chuàng)始人,著有《分布式服務(wù)架構(gòu):原理、設(shè)計與實戰(zhàn)》,現(xiàn)任某知名支付平臺架構(gòu)組負責(zé)人,曾在花旗銀行、甲骨文、路透社、新浪微博等大型IT互聯(lián)網(wǎng)公司擔(dān)任技術(shù)負責(zé)人和架構(gòu)師,現(xiàn)專注于大規(guī)模高并發(fā)的線上和線下支付平臺的應(yīng)用架構(gòu)和技術(shù)架構(gòu)的規(guī)劃與落地,負責(zé)交易、支付、渠道、出款、風(fēng)控、對賬等核心支付系統(tǒng)的設(shè)計與實現(xiàn),在移動支付、聚合支付、合規(guī)賬戶、掃碼支付、標(biāo)記化支付等業(yè)務(wù)場景上有產(chǎn)品應(yīng)用架構(gòu)規(guī)劃與落地的實踐經(jīng)驗。?楊彪現(xiàn)任游戲創(chuàng)業(yè)公司技術(shù)總監(jiān)及合伙人,云時代架構(gòu)技術(shù)社區(qū)合伙創(chuàng)始人,CSDN達人課講師,著有《分布式服務(wù)架構(gòu):原理、設(shè)計與實戰(zhàn)》。在互聯(lián)網(wǎng)和游戲行業(yè)有近十年工作經(jīng)驗,曾在酷我音樂盒、人人游戲和掌趣科技等上市公司擔(dān)任核心研發(fā)職位,在互聯(lián)網(wǎng)公司做過日活躍用戶量達千萬的項目,也在游戲公司做過多款月流水千萬以上的游戲。?李海亮現(xiàn)任某互聯(lián)網(wǎng)公司搜索研發(fā)經(jīng)理,有近十年互聯(lián)網(wǎng)公司的搜索及搜索相關(guān)的研發(fā)經(jīng)驗?賈博巖現(xiàn)任某支付公司高級開發(fā)工程師,專注于支付系統(tǒng)領(lǐng)域的開發(fā),例如商戶入網(wǎng)、商戶對外出款等業(yè)務(wù)。標(biāo)準(zhǔn)90后,喜歡鉆研技術(shù),維護個人簡書博客賈博巖。?劉?B現(xiàn)任某互聯(lián)網(wǎng)公司技術(shù)專家,長期在外企從事技術(shù)經(jīng)理和架構(gòu)工作,對數(shù)據(jù)庫應(yīng)用及搜索引擎應(yīng)用有很深入的理解和實踐;有大型數(shù)據(jù)服務(wù)集群的架構(gòu)調(diào)優(yōu)及運維經(jīng)驗;精通性能問題的解決與調(diào)優(yōu),以及高性能中間件的編寫。目前主要研究業(yè)務(wù)數(shù)據(jù)自動化框架及其實現(xiàn)。
第1章 如何設(shè)計一款永不重復(fù)的高性能分布式發(fā)號器1
1.1 可選方案及技術(shù)選型2
1.1.1 為什么不用UUID2
1.1.2 基于數(shù)據(jù)庫的實現(xiàn)方案2
1.1.3 Snowflake開源項目3
1.1.4 小結(jié)4
1.2 分布式系統(tǒng)對發(fā)號器的基本需求4
1.3 架構(gòu)設(shè)計與核心要點6
1.3.1 發(fā)布模式6
1.3.2 ID類型7
1.3.3 數(shù)據(jù)結(jié)構(gòu)7
1.3.4 并發(fā)9
1.3.5 機器ID的分配9
1.3.6 時間同步10
1.3.7 設(shè)計驗證11
1.4 如何根據(jù)設(shè)計實現(xiàn)多場景的發(fā)號器11
1.4.1 項目結(jié)構(gòu)12
1.4.2 服務(wù)接口的定義14
1.4.3 服務(wù)接口的實現(xiàn)15
1.4.4 ID元數(shù)據(jù)與長整型ID的互相轉(zhuǎn)換22
1.4.5 時間操作25
1.4.6 機器ID的生成27
1.4.7 小結(jié)32
1.5 如何保證性能需求32
1.5.1 嵌入發(fā)布模式的壓測結(jié)果33
1.5.2 中心服務(wù)器發(fā)布模式的壓測結(jié)果33
1.5.3 REST發(fā)布模式(Netty實現(xiàn))的壓測結(jié)果33
1.5.4 REST發(fā)布模式(Spring Boot Tomcat實現(xiàn))的壓測結(jié)果34
1.5.5 性能測試總結(jié)34
1.6 如何讓用戶快速使用35
1.6.1 REST發(fā)布模式的使用指南35
1.6.2 服務(wù)化模式的使用指南38
1.6.3 嵌入發(fā)布模式的使用指南41
1.7 為用戶提供API文檔43
1.7.1 RESTful API文檔44
1.7.2 Java API文檔45
第2章 可靈活擴展的消息隊列框架的設(shè)計與實現(xiàn)49
2.1 背景介紹50
2.2 項目目標(biāo)50
2.2.1 簡單易用50
2.2.2 高性能51
2.2.3 高穩(wěn)定性51
2.3 架構(gòu)難點51
2.3.1 線程模型51
2.3.2 異常處理53
2.3.3 優(yōu)雅關(guān)機53
2.4 設(shè)計與實現(xiàn)54
2.4.1 項目結(jié)構(gòu)54
2.4.2 項目包的規(guī)劃55
2.4.3 生產(chǎn)者的設(shè)計與實現(xiàn)57
2.4.4 消費者的設(shè)計與實現(xiàn)58
2.4.5 啟動模塊的設(shè)計與實現(xiàn)67
2.4.6 消息處理器的體系結(jié)構(gòu)76
2.4.7 反射機制79
2.4.8 模板項目的設(shè)計80
2.5 使用指南82
2.5.1 安裝步驟82
2.5.2 Java API83
2.5.3 與Spring環(huán)境集成84
2.5.4 對服務(wù)源碼進行注解85
2.6 API簡介87
2.6.1 Producer API87
2.6.2 Consumer API88
2.6.3 消息處理器88
2.6.4 消息處理器定義的注解90
2.7 消息處理機模板項目91
2.7.1 快速開發(fā)向?qū)?1
2.7.2 后臺監(jiān)控和管理92
第3章 輕量級的數(shù)據(jù)庫分庫分表架構(gòu)與框架93
3.1 什么是分庫分表94
3.1.1 使用數(shù)據(jù)庫的三個階段94
3.1.2 在什么情況下需要分庫分表95
3.1.3 分庫分表的典型實例96
3.2 三種分而治之的解決方案97
3.2.1 客戶端分片97
3.2.2 代理分片100
3.2.3 支持事務(wù)的分布式數(shù)據(jù)庫101
3.3 分庫分表的架構(gòu)設(shè)計102
3.3.1 整體的切分方式102
3.3.2 水平切分方式的路由過程和分片維度106
3.3.3 分片后的事務(wù)處理機制107
3.3.4 讀寫分離119
3.3.5 分庫分表引起的問題119
3.4 流行代理分片框架Mycat的初體驗123
3.4.1 安裝Mycat123
3.4.2 配置Mycat124
3.4.3 配置數(shù)據(jù)庫節(jié)點128
3.4.4 數(shù)據(jù)遷移129
3.4.5 Mycat支持的分片規(guī)則129
3.5 流行的客戶端分片框架Sharding JDBC的初體驗138
3.5.1 Sharding JDBC簡介138
3.5.2 Sharding JDBC的功能139
3.5.3 Sharding JDBC的使用141
3.5.4 Sharding JDBC的使用限制152
3.6 自研客戶端分片框架dbsplit的設(shè)計、實現(xiàn)與使用153
3.6.1 項目結(jié)構(gòu)154
3.6.2 包結(jié)構(gòu)和執(zhí)行流程155
3.6.3 切片下標(biāo)命名策略159
3.6.4 SQL解析和組裝167
3.6.5 SQL實用程序168
3.6.6 反射實用程序173
3.6.7 分片規(guī)則的配置177
3.6.8 支持分片的SplitJdbcTemplate和SimpleSplitJdbcTemplate接口API179
3.6.9 JdbcTemplate的擴展SimpleJdbcTemplate接口API184
3.6.10 用于創(chuàng)建分庫分表數(shù)據(jù)庫的腳本工具187
3.6.11 使用dbsplit的一個簡單示例192
3.6.12 使用dbsplit的線上真實示例展示199
第4章 緩存的本質(zhì)和緩存使用的優(yōu)秀實踐201
4.1 使用緩存的目的和問題202
4.2 自相似,CPU的緩存和系統(tǒng)架構(gòu)的緩存203
4.2.1 CPU緩存的架構(gòu)及性能205
4.2.2 CPU緩存的運行過程分析206
4.2.3 緩存行與偽共享208
4.2.4 從CPU的體系架構(gòu)到分布式的緩存架構(gòu)218
4.3 常用的分布式緩存解決方案221
4.3.1 常用的分布式緩存的對比221
4.3.2 Redis初體驗225
4.4 分布式緩存的通用方法229
4.4.1 緩存編程的具體方法229
4.4.2 應(yīng)用層訪問緩存的模式233
4.4.3 分布式緩存分片的三種模式235
4.4.4 分布式緩存的遷移方案238
4.4.5 緩存穿透、緩存并發(fā)和緩存雪崩244
4.4.6 緩存對事務(wù)的支持246
4.5 分布式緩存的設(shè)計與案例248
4.5.1 緩存設(shè)計的核心要素248
4.5.2 緩存設(shè)計的優(yōu)秀實踐250
4.5.3 關(guān)于常見的緩存線上問題的案例253
4.6 客戶端緩存分片框架redic的設(shè)計與實現(xiàn)257
4.6.1 什么時候需要redic258
4.6.2 如何使用redic258
4.6.3 更多的配置258
4.6.4 項目結(jié)構(gòu)260
4.6.5 包結(jié)構(gòu)261
4.6.6 設(shè)計與實現(xiàn)的過程261
第5章 大數(shù)據(jù)利器之Elasticsearch268
5.1 Lucene簡介269
5.1.1 核心模塊269
5.1.2 核心術(shù)語270
5.1.3 檢索方式271
5.1.4 分段存儲273
5.1.5 段合并策略275
5.1.6 Lucene相似度打分278
5.2 Elasticsearch簡介286
5.2.1 核心概念286
5.2.2 3C和腦裂289
5.2.3 事務(wù)日志291
5.2.4 在集群中寫索引294
5.2.5 集群中的查詢流程295
5.3 Elasticsearch實戰(zhàn)298
5.3.1 Elasticsearch的配置說明298
5.3.2 常用的接口300
5.4 性能調(diào)優(yōu)305
5.4.1 寫優(yōu)化305
5.4.2 讀優(yōu)化308
5.4.3 堆大小的設(shè)置313
5.4.4 服務(wù)器配置的選擇315
5.4.5 硬盤的選擇和設(shè)置316
5.4.6 接入方式318
5.4.7 角色隔離和腦裂319
第6章 全面揭秘分布式定時任務(wù)321
6.1 什么是定時任務(wù)322
6.2 分布式定時任務(wù)341
6.2.1 定時任務(wù)的使用場景342
6.2.2 傳統(tǒng)定時任務(wù)存在的問題342
6.2.3 分布式定時任務(wù)及其原理344
6.3 開源分布式定時任務(wù)的用法347
6.3.1 Quartz的分布式模式347
6.3.2 TBSchedule356
6.3.3 Elastic-Job365
第7章 RPC服務(wù)的發(fā)展歷程和對比分析377
7.1 什么是RPC服務(wù)378
7.2 RPC服務(wù)的原理379
7.2.1 Sokcet套接字379
7.2.2 RPC的調(diào)用過程380
7.3 在程序中使用RPC服務(wù)382
7.4 RPC服務(wù)的發(fā)展歷程383
7.4.1 第一代RPC:以O(shè)NC RPC和DCE RPC為代表的函數(shù)式RPC384
7.4.2 第二代RPC:支持面對象的編程388
7.4.3 第三代RPC:SOA和微服務(wù)398
7.4.4 架構(gòu)的演進402
7.5 主流的RPC框架403
7.5.1 Thrift403
7.5.2 ZeroC Ice410
7.5.3 gRPC418
7.5.4 Dubbo430
第8章 Dubbo實戰(zhàn)及源碼分析436
8.1 Dubbo的四種配置方式437
8.1.1 XML配置437
8.1.2 屬性配置440
8.1.3 API配置441
8.1.4 注解配置443
8.2 服務(wù)的注冊與發(fā)現(xiàn)446
8.2.1 注冊中心446
8.2.2 服務(wù)暴露449
8.2.3 引用服務(wù)451
8.3 Dubbo通信協(xié)議及序列化探討455
8.3.1 Dubbo支持的協(xié)議455
8.3.2 協(xié)議的配置方法456
8.3.3 多協(xié)議暴露服務(wù)457
8.3.4 Dubbo協(xié)議的使用注意事項458
8.3.5 Dubbo協(xié)議的約束459
8.4 Dubbo中高效的I/O線程模型459
8.4.1 對Dubbo中I/O模型的分析459
8.4.2 Dubbo中線程配置的相關(guān)參數(shù)460
8.4.3 在Dubbo線程方面踩過的坑461
8.4.4 對Dubbo中線程使用的建議462
8.5 集群的容錯機制與負載均衡462
8.5.1 集群容錯機制的原理462
8.5.2 集群容錯模式的配置方法464
8.5.3 六種集群容錯模式464
8.5.4 集群的負載均衡465
8.6 監(jiān)控和運維實踐467
8.6.1 日志適配467
8.6.2 監(jiān)控管理后臺467
8.6.3 服務(wù)降級473
8.6.4 優(yōu)雅停機475
8.6.5 灰度發(fā)布475
8.7 Dubbo項目線上案例解析477
8.7.1 線上問題的通用解決方案477
8.7.2 耗時服務(wù)耗盡了線程池的案例480
8.7.3 容錯重試機制引發(fā)服務(wù)雪崩的案例481
8.8 深入剖析Dubbo源碼及其實現(xiàn)483
8.8.1 Dubbo的總體架構(gòu)設(shè)計483
8.8.2 配置文件486
8.8.3 Dubbo的核心RPC488
8.8.4 Dubbo巧妙的URL總線設(shè)計491
8.8.5 Dubbo的擴展點加載SPI492
8.8.6 Dubbo服務(wù)暴露的過程493
8.8.7 服務(wù)引用502
8.8.8 集群容錯和負載均衡503
8.8.9 集群容錯504
8.8.10 負載均衡509
第9章 高性能網(wǎng)絡(luò)中間件512
9.1 TCP/UDP的核心原理及本質(zhì)探索513
9.1.1 網(wǎng)絡(luò)模型513
9.1.2 UDP、IP及其未解決的問題515
9.1.3 TCP詳解519
9.1.4 是否可以用UDP代替TCP527
9.1.5 網(wǎng)絡(luò)通信的不可靠性討論529
9.2 網(wǎng)絡(luò)測試優(yōu)秀實踐530
9.2.1 網(wǎng)絡(luò)測試的關(guān)鍵點530
9.2.2 那些必不可少的網(wǎng)絡(luò)測試工具532
9.2.3 典型的測試報告539
9.3 高性能網(wǎng)絡(luò)框架的設(shè)計與實現(xiàn)544
9.3.1 對代理功能的測試及分析545
9.3.2 網(wǎng)絡(luò)中間件的使用介紹549
9.3.3 內(nèi)存和緩存的優(yōu)化551
9.3.4 快速解析流數(shù)據(jù)554