前幾天看到阿里重啓維護Dubbo了,實屬一大幸事。研究開源代碼的第一個目標是Dubbo,中間因爲工做比較忙,斷斷續續的看了一段時間,回過頭來發現只是零散的去看,並無完整的、系統的去進行。故將平時看過的東西再進行記錄、整理、概括,逐漸造成一個完整的體系,同時也但願可以以此勉勵本身堅持下去,造成良好的習慣。git
剛開始研究學習開源框架,先在前人的基礎上進行,逐漸找到學習研究的方法。算法
參考文檔:設計模式
(1)Dubbo官方參考網站:http://dubbo.io/ 今天點進去看,發現已經由原來的中文版變成了英文版,內容也有所跟新,順便找了一下中文版的參考文檔:安全
Dubbo官方參考文檔:架構
https://www.gitbook.com/@dubbo 負載均衡
(2)http://wenku.baidu.com/link?url=w6W0hBn4B5jz0TpbOFlIiKZgTwPGyc0BrbDiLZxC4MfH2y1aXSww7EswFLxDfY4ilQ1K1Ohr-26ylS7-h7t4r2lGd5XT68ezqzYPK8Y5qii dubbo源碼解析2.0框架
基本概念:ide
一、RPC post
二、SOA(資源調度和治理中心)學習
三、failover 又稱故障切換,指系統中其中一項設備或服務失效而沒法運做時,另外一項設備或服務便可自動接手原失效系統所執行的工做。
Dubbo經典架構圖:
四、Dubbo 節點角色說明:
Provider:暴露服務的服務提供方
Consumer:調用遠程服務的服務消費方
Registry:服務註冊與發現的註冊中心
Monitor:統計服務的調用次數和調用時間的監控中心
Container:服務運行容器
各個節點角色說明:
Provider:暴露服務的服務提供方
Consumer:調用遠程服務的服務消費方
Registry:服務註冊與發現的註冊中心
Monitor:統計服務的調用次數和調用時間的監控中心
Container:服務運行容器
調用關係說明:
0:服務容器負責啓動,加載,運行服務提供者
1:服務提供者在啓動時,向註冊中心註冊本身的服務
2:服務消費者在啓動時,向註冊中心訂閱本身所需的服務
3:註冊中心返回服務提供者地址列表給消費者,若是有變動,註冊中心將基於長鏈接推送變動數據給消費者。
長鏈接:
鏈接->傳輸數據->保持鏈接 -> 傳輸數據-> 。。。 ->關閉鏈接。
長鏈接指創建SOCKET鏈接後無論是否使用都保持鏈接,但安全性較差。
四、註冊到zookeeper的過程:
AnnotationBean.postProcessBeforeInitialization() -> AnnotationBean.refer() -> ReferenceConfig.get() -> Reference.init() -> Reference.createProxy() -> RegistryProtocol.refer() -> RegistryProtocol.doRefer() -> FailbackRegistry.register() -> ZookeeperRegistry.doRegister()
五、服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,若是調用失敗,再選另外一臺調用。
六、服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。
七、Dubbo 的核心機制:
(1)設計模式
(2)bean加載
(3)擴展點機制
(4)動態代理
(5)遠程調用流程
(1)a、工廠模式:
b、裝飾器模式:
c、觀察者模式:
d、動態代理模式:
八、Dubbo使用的擴展點獲取:com.alibaba.dubbo.common.extension.ExtensionLoader類 Java的SPI機制
可參考:https://my.oschina.net/u/3729778/blog/1575581