
掃描右側(cè)圖片或微信搜索 “ Java技術(shù)分享屋 ” ,回復(fù) “ 驗(yàn)證碼 ” ,獲取驗(yàn)證密碼。
本資料僅供讀者預(yù)覽及學(xué)習(xí)交流使用,不能用于商業(yè)用途,請(qǐng)?jiān)谙螺d后24小時(shí)內(nèi)刪除。如果喜歡,請(qǐng)購(gòu)買正版!
一.資料圖片
二.資料簡(jiǎn)介
這里主要說明為什么需要 dubbo?
隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)站應(yīng)用的規(guī)模不斷擴(kuò)大,常規(guī)的垂直應(yīng)用架構(gòu)已無法應(yīng)對(duì),分布式服務(wù)架構(gòu)以及流動(dòng)計(jì)算架構(gòu)勢(shì)在必行,亟需一個(gè)治理系統(tǒng)確保架構(gòu)有條不紊的演進(jìn)。
? 單一應(yīng)用架構(gòu)當(dāng)網(wǎng)站流量很小時(shí),只需一個(gè)應(yīng)用,將所有功能都部署在一起,以減少部署節(jié)點(diǎn)和成本。
此時(shí),用于簡(jiǎn)化增刪改查工作量的 數(shù)據(jù)訪問框架(ORM) 是關(guān)鍵。
? 垂直應(yīng)用架構(gòu)
當(dāng)訪問量逐漸增大,單一應(yīng)用增加機(jī)器帶來的加速度越來越小,將應(yīng)用拆成互不相干的幾個(gè)應(yīng)用,以提升效率。
此時(shí),用于加速前端頁(yè)面開發(fā)的 Web 框架(MVC) 是關(guān)鍵。
? 分布式服務(wù)架構(gòu)
當(dāng)垂直應(yīng)用越來越多,應(yīng)用之間交互不可避免,將核心業(yè)務(wù)抽取出來,作為獨(dú)立的服務(wù),逐漸形成穩(wěn)定的服務(wù)中心,使前端應(yīng)用能更快速的響應(yīng)多變的市場(chǎng)需求。
此時(shí),用于提高業(yè)務(wù)復(fù)用及整合的 分布式服務(wù)框架(RPC) 是關(guān)鍵。
? 流動(dòng)計(jì)算架構(gòu)
當(dāng)服務(wù)越來越多,容量的評(píng)估,小服務(wù)資源的浪費(fèi)等問題逐漸顯現(xiàn),此時(shí)需增加一個(gè)調(diào)度中心基于訪問壓力實(shí)時(shí)管理集群容量,提高集群利用率。
此時(shí),用于提高機(jī)器利用率的 資源調(diào)度和治理中心(SOA) 是關(guān)鍵。
實(shí)際上這樣是一種云架構(gòu),實(shí)現(xiàn)了服務(wù)的動(dòng)態(tài)擴(kuò)展;在高并發(fā)情況下,服務(wù)端可以快速部署機(jī)器,而對(duì)于應(yīng)用端沒有任何其他影響(除了服務(wù)并發(fā)處理能力提升);當(dāng)然,在當(dāng)前 PC\web\wap\app 多端的情況下,使用 SOA 結(jié)構(gòu),可以最大程度復(fù)用已有代碼,避免重復(fù)開發(fā)。
業(yè)界存在一種比較有意思的說法:小米在秒殺的時(shí)候,訪問量暴漲,此時(shí)小米就會(huì)去申請(qǐng)很多阿里云服務(wù)器(1 小時(shí)內(nèi)免費(fèi)),快速部署服務(wù),等秒殺完成后,快速歸還;在如此高并發(fā)下硬件新增成本幾乎為 0。
三.資料目錄
目錄.................................................................................... 2
1 源碼閱讀路徑.................................................................. 4
2 背景.................................................................................. 4
3 Dubbo 架構(gòu)................................................................... 5
4 HelloWorld 例子........................................................... 7
5 源文件概述...................................................................... 8
6 核心機(jī)制分析................................................................ 10
6.1 設(shè)計(jì)模式............................................................. 10
6.2 Bean 加載........................................................ 11
6.2.1 Spring 可擴(kuò)展 Schema......................... 11
6.2.2 Spring 加載 bean 流程....................... 15
6.2.2.1 解析 xml 中的 bean 定義......... 15
6.2.2.2 onApplicationEvent..................... 17
6.2.2.3 Main............................................ 19
6.3 Extension 機(jī)制................................................. 20
6.3.1 Java SPI................................................... 20
6.3.2 擴(kuò)展點(diǎn)...................................................... 20
6.3.2.1 擴(kuò)展點(diǎn)配置................................... 20
6.3.2.2 擴(kuò)展點(diǎn)加載流程........................... 21
6.3.2.3 擴(kuò)展點(diǎn)裝飾................................... 28
6.3.2.4 ExtensionFactory......................... 32
6.4 代理..................................................................... 36
6.4.1 Invoker 調(diào)用.......................................... 36
6.4.2 JDK 代理................................................ 39
6.4.3 Javaassist 代理(動(dòng)態(tài))...................... 39
6.5 遠(yuǎn)程調(diào)用流程..................................................... 42
6.5.1 通信過程.................................................. 42
6.5.2 序列化...................................................... 43
6.5.3 Encode 和 Decode............................... 46
7 過程分析........................................................................ 47
7.1 Refer & export................................................... 47
7.1.1 調(diào)用順序.................................................. 47
7.1.2 生成 Invoker............................................ 50
7.1.3 export..................................................... 58
7.2 Registry.............................................................. 60
7.2.1 RegistryFactory 和 Registry.................. 60
7.2.2 DubboRegistryFactory 創(chuàng)建注冊(cè)中心過程........................................................................ 63
7.2.3 注冊(cè)中心啟動(dòng).......................................... 68
7.2.4 生產(chǎn)者發(fā)布服務(wù)...................................... 69
7.2.4.1 Export 發(fā)布服務(wù)流程................ 69
7.2.4.2 RegistryProtocol.export(Invoker)暴露服務(wù)........................................................ 72
7.2.5 消費(fèi)者引用服務(wù)...................................... 73
7.2.5.1 Refer 取得 invoker 的過程...... 73
7.2.5.2 RegistryProtocol. Refer 過程...... 74
7.3 集群&容錯(cuò).......................................................... 75
7.3.1 Cluster.................................................... 76
7.3.2 目錄服務(wù) Directory................................. 78
7.3.3 router 路由服務(wù).................................... 80
7.3.4 負(fù)載均衡.................................................. 81
7.3.4.1 RandomLoadBalance................... 82
7.3.4.2 RoundRobinLoadBalance............ 82
7.3.4.3 LeastActiveLoadBalance.............. 83
7.3.4.4 ConsistentHashLoadBalance....... 84
7.3.5 配置規(guī)則.................................................. 84
7.4 telnet................................................................. 85
7.5 監(jiān)控..................................................................... 87
7.5.1 監(jiān)控中心.................................................. 87
7.5.2 SimpleMonitorService............................ 89
7.5.2.1 Monitor 基礎(chǔ)類......................... 89
7.5.2.2 SimpleMonitorService................. 91
7.5.2.3 產(chǎn)生監(jiān)控?cái)?shù)據(jù)............................... 93
7.5.2.4 RegistryContainer........................ 94
7.5.2.5 JettyContainer............................. 95