引言: 學知識,有這麼一個過程:
形同陌路-->似曾相識-->一見如故-->刻骨銘心
1.Dubbo框架
目錄
提問:Dubbo是如何去調用的呢?這裏先弄明白以下兩種思想,以便後面對Dubbo進行深入理解。
1.1Dubbo框架介紹
1.1.1官網地址:
http://dubbo.apache.org/zh-cn/
1.1.2Dubbo簡介:
Apache Dubbo |ˈdʌbəʊ| 是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。
1.2.3爲什麼要使用Dubbo框架?
說明:當程序由服務器A向服務器B進行業務調用時, 有如下幾種方式:
1).HttpClient 萬能調用方法,隨時隨地的在Java程序中就可以實現;
2).JSONP 利用js進行跨域方式調用;
這兩種方式其實有時用起來也不是很理想,例如:
利用httpClient,程序調用的層級比較多,但是由於現在只能利用http協議規範進行調用.暫時沒有好的方法進行優化!!!!.
主要目的都是相同的:從前臺---------向後臺服務器獲取數據
利用HttpClient方式調用流程圖
利用JSONP進行遠程方法調用流程圖:
在這我們看一下Dubbo它是如何調用的:
說明:當前考慮問題的維度,按照服務的方式進行考慮,提供服務的服務器稱之爲提供者,調用服務的服務器稱之爲消費者.
通過以上的幾種調用流程圖我們發現,調用的複雜度一直是再簡化的,那麼Dubbo呢,就是簡化了前臺獲取後臺服務器數據的這種調用關係;
提問:Dubbo是如何去調用的呢?這裏先弄明白以下兩種思想,以便後面對Dubbo進行深入理解。
2.1簡單瞭解SOA思想&RPC思想
2.1.1dubbo框架結構設計----SOA思想
面向服務的架構(SOA)是一個組件模型,它將應用程序的不同功能單元(稱爲服務)進行拆分,並通過這些服務之間定義良好的接口和協議聯繫起來。接口是採用中立的方式進行定義的,它應該獨立於實現服務的硬件平臺、操作系統和編程語言。這使得構件在各種各樣的系統中的服務可以以一種統一和通用的方式進行交互。
2.1.2Dubbo框架通信方式---PRC思想
RPC是遠程過程調用(Remote Procedure Call)的縮寫形式。通過代理的方式實現了客戶端(消費者)與服務端(提供者)的通信. 利用RPC調用時,消費者無需關心底層通信協議是什麼.相當於是一個API.客戶端通過RPC直接獲取遠程服務器的數據.
說明:誰用rpc誰去具體的實現.
這裏分享一個RPC的小故事,幫助你理解什麼是RPC:
一個陽光明媚的早晨,老婆又在翻看我訂閱的技術雜誌。
“老公,什麼是RPC呀,爲什麼你們程序員那麼多黑話!”,老婆還是一如既往的好奇。
“RPC,就是Remote Procedure Call的簡稱呀,翻譯成中文就是遠程過程調用嘛”,我一邊看着書,一邊漫不經心的回答着。
“啥?你在說啥?誰不知道翻譯成中文是什麼意思?你個廢柴,快給我滾去洗碗!”
“我去。。。”,我如夢初醒,我對面坐着的可不是一個程序員,爲了不去洗碗,我瞬間調動起全部腦細胞,星辰大海在我腦中匯聚,靈感涌現......
"是這樣,遠程過程調用,自然是相對於本地過程調用來說的嘛。"
“嗯哼,那先給老孃講講,本地過程調用是啥子?”
“本地過程調用,就好比你現在在家裏,你要想洗碗,那你直接把碗放進洗碗機,打開洗碗機開關就可以洗了。這就叫本地過程調用。”
“哎呦,我可不幹,那啥是遠程過程調用?”
“遠程嘛,那就是你現在不在家,跟姐妹們浪去了,突然發現碗還沒洗,打了個電話過來,叫我去洗碗,這就是遠程過程調用啦”,多麼通俗易懂的解釋,我真是天才!
“哦!我明白了”,說着,老婆開始收拾包包。
“你這是幹啥去哦”
“我?我要出門浪去呀,待會記得接收我的遠程調用哦,哦不,咱們要專業點,應該說,待會記得接收我的RPC哦!”
3.1Dubbo框架調用原理
提示: 流程就是標有數字的序號!
1.consumer消費者 調用服務
2.Provider提供者 提供服務
3.registry 註冊中心 管理服務
4.monitor 統計服務和調用次數,調用時間監控中心
3.2註冊中心工作原理
大家不難發現,前面的Dubbo框架調用原理中,最重要的核心就是註冊中心,有了它才能更好的實現服務消費者與服務提供者之間的調用,
那麼使用註冊中心有什麼好處呢? 工作原理又是什麼呢?
1.1.傳統業務框架調用流程:
1).所有的業務請求都會經過nginx,如果nginx服務器宕機.則所有的請求都會失效.
2).如果添加/減少服務器,需要自己手動的修改nginx的配置文件.這樣的程序調用非常繁瑣,不智能!!!!.
3).能否讓程序智能的調用-------註冊中心!!!!
這裏,梳理一下工作的過程:
1).當服務提供者啓動時,會鏈接註冊中心,將服務提供者的信息(服務名稱/IP/PORT)寫入註冊中心.
2).當註冊中心接收提供者數據之後,將數據寫入維護的服務列表中.
3).當消費者啓動時,首先會鏈接註冊中心獲取服務列表.
4).獲取服務列表之後,保存到本地.
5).當消費者需要調用服務時,查詢本地的服務列表數據,之後根據負載均衡策略,挑選其中正常的鏈接地址進行訪問.(RPC)
6).當服務提供者宕機時,註冊中心會有心跳檢測機制.如果斷定服務宕機.則會動態的維護註冊列表之後廣播通知所有的服務消費者動態更新服務列表數據. 這樣就能夠保證消費者訪問提供者都是有效的!!!
3.3Zookeeper註冊中心
更新完畢以後添加鏈接至此!
3.4Dubbo負載均衡
Dubbo中負載均衡-------客戶端負載均衡
說明:消費者在發起請求之前已經知道自己要訪問的服務器是誰(正向代理),客戶端負載均衡是微服務中主要的用法.
負載均衡策略:4種
3.4.1第一種: 隨機算法
說明:該算法是默認策略:
3.4.2第二種: 輪詢算法
說明:依次訪問服務的提供者
3.4.3第三種:Hash一致性算法
說明:根據提供者IP地址之後進行hash運算,實現了消費者與提供者綁定.
3.4.4第四種:最小訪問
說明:挑選當前提供者負載壓力最小的服務器進行訪問
3.5補充:遠程調用總結歸納
1.httpClient萬能的調用方式,訪問任意的遠程服務器;
2.JSONP利用JSONP能夠實現跨域訪問,要求服務器必須按照跨域的形式返回;
3.Dubbo方法遠程調用,利用RPC技術實現遠程調用. 調用遠程服務器像調用本地服務一樣. 只能完成系統內部的調用. (自己的系統內);
結論:
如果是頁面需要數據,一般首選jsonp/httpClient
如果是業務層需要數據,一般首選httpClient
如果是自己項目的業務調用 dubbo方法/jsonp/httpClient