協定就是多方共同遵守的一種規範、一種限制。Http超文本傳輸協定、RPC遠端調用協定都是我們平時開發中比較常見的,有了這些協定的存在,計算機就可以使用互相了解的格式來讀寫資料,達到交換資料的目的。而這裡要說的RPC協定的作用就是使計算機之間互相的調用更加友善、更加快捷,它将底層的資料傳輸和網絡通路這些複雜内容給屏蔽了,我們就不需要再關注它底層具體的實作而是直接使用就行了。Dubbo就是基于RPC遠端調用協定來實作的。
Dubbo官網(中文):http://dubbo.apache.org/zh-cn/
Dubbo是國内網際網路大廠阿裡巴巴集團開發的一款RPC架構,(目前已經被收入到了Apache基金會的孵化器項目)。Dubbo基于RPC協定來實作,他的主要功能就是在分布式應用開發中的計算機系統之間進行方法調用。
2.1Dubbo幾個重要元件
1. Dubbo架構圖

2. 節點角色說明
3.調用關系說明
2.2 國内外其他類似Dubbo的RPC架構
新浪:Motan
https://github.com/weibocom/motan
當當:Dubbox
https://github.com/dangdangdotcom/dubbox
谷歌:grpc
前兩個是基于java語言和spring進行內建的,谷歌的grpc是跨語言的。大家有興趣可以在網上了解一下。
2.3 Dubbo的功能介紹
遠端調用
實作透明的遠端方法調用,在分布式應用系統中,調用其他伺服器上的服務(功能)就像調用本地方法一樣,不需要關注怎麼實作,隻需要配置一下即可使用
服務注冊和服務發現
通過注冊中心實作服務的動态管理(增減服務方),調用服務的消費方不需要寫死服務調用位址。
軟體的負載均衡和容錯機制,不需要使用硬體,降低成本。
2.4 Duboo服務的實作原理
現在有一個調用端(消費者)和服務端(服務提供者)分别在兩個不同的伺服器上,消費者需要通路使用提供者的一個功能,首先Dubbo架構會在調用端生成一個服務端的代理對象。整個功能調用的過程就是消費者——》代理對象——》提供者。
Dubbo是基于RPC協定實作的,RPC協定是一個大的協定,另外還有很多協定來支援RPC。
dubbo協定:這是Dubbo架構自己定義的協定,用來支援RPC遠端調用。
hessian協定:實作輕量級RPC架構Hessian。
rmi協定:sun公司制定的遠端調用協定。
http協定:超文本傳輸協定。
webservice協定:
thrift協定
memcached協定
redis協定
Dubbo官網推薦使用dubbo協定,制定使用的協定可以在spring的配置檔案中使用以下标簽:
dubbo協定使用的是單一長連結和異步通訊,适合小資料量大并發的服務調用以及服務消費者機器遠多于服務提供者機器的情況(網際網路特征),不适合大資料量的服務,比如傳檔案,視訊等(主要原因是使用的單一長連結限制)。
單一長連結
為什麼dubbo協定要使用單一長連結?
長連結一經打開就不關閉,提高了網絡連結的效率(因為網絡連結比較耗時,TCP協定經過三次握手才能建立連結)。因為長連結不關閉的特征,網絡連接配接在使用者頻繁進行資料互動的時候不需要頻繁的建立連結、關閉連結
另外單一長連結為什麼适合小資料量呢?
這是因為如果資料太大了就會讓連結通道堵塞住,那樣效率自然也就慢下來了,試想現在有根水管,本來輸送水效果挺好,你非要往裡面塞塊磚頭,那不很easy就造成通道堵塞了嘛!通道堵了後面要送的東西就隻能排隊等待了。
這就是dubbo使用單一長連結的原因。
短連接配接
使用者想要通路一個應用,先建立一個短連接配接,用完之後短連接配接就關閉了,服務端維護該連結的資源也就釋放了,對呀服務端來說他維護的資源也就少一些了。如果再有請求過來,又需要再建立一條連結。使用者必須要等到連結建立之後才能發送請求。時間或長或短不一定,對于使用者來說,他發送一個請求可能因為連結沒有建立需要的時間比較長。
總結:
1.長連結是為了提高傳輸的效率,讓我們能夠以更快的速度響應出結果。伺服器與伺服器之間一般使用的是長連結,單一持久的發生服務調用。
2.短連接配接對于伺服器來說占用的資源比較少,一般web項目使用的短連接配接的方式。用完就釋放了。
Dubbo官網配置檔案标簽介紹:http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-service.html
公用标簽
在服務提供者和服務消費者配置檔案中都會使用到的配置标簽
服務提供者專用
配置通路服務提供者的協定資訊
配置暴露的服務
服務消費者
對于服務提供者來說,他需要釋出服務,而且由于應用系統的複雜性,服務的數量和類型也不斷膨脹;對于服務消費者來說,它最關心的是如何擷取到他需要的服務,而面對複雜的應用系統,需要管理大量的服務調用。而使用注冊中心對服務進行統一管理能夠有效的優化服務提供和消費的流程。Dubbo提供的注冊中心有以下幾種:
Multicast注冊中心:多點傳播方式
Redis注冊中心:使用Redis作為注冊中心
Simple注冊中心:就是一個dubbo服務。作為注冊中心。提供查找服務的功能。
Zookeeper注冊中心:使用Zookeeper作為注冊中心。
以上四種注冊中心主要使用的是zookeeper注冊中心。
解釋一下上圖:
1.首先注冊中心啟動運作,然後運作服務提供者,再運作服務消費者
2…服務提供者會将自己的所在IP、端口、服務的名字登記到注冊中心,注冊中心形成一個服務注冊清單,上面記載了所有的服務的資訊。
3.消費者在啟動之後,先想注冊中心發起訂閱,告訴注冊中心需要使用dubbo服務,注冊中心根據消費者的資訊把可用的服務者資訊提供給消費者。消費者利用負載均衡從多個服務中選擇一個性能較優的使用。
Zookeeper還有一個心跳機制,預設是每隔2S向Dubbo服務發起請求,檢驗dubbo服務是否存活可用,如果服務不可用(比如服務提供者當機了),zookeeper就會将該服務從注冊清單中删除,然後再向消費者推送服務變更資訊,這樣一來,消費者拿到的永遠都是存活可用的服務了。
其實以上内容在Dubbo官網中有很多的介紹,關于注冊中心zookeeper的安裝和使用後面陸續更新。