Dubbo架構
Provider: 暴露服務的服務提供方。
Consumer: 調用遠程服務的服務消費方。
Registry: 服務註冊與發現的註冊中心。
Monitor: 統計服務的調用次調和調用時間的監控中心。
Container: 服務運行容器。
爲什麼使用Dubbox而不是Dubbo下載
Dubbo是阿里開源的RPC服務調用框架,已經3年沒有維護了,而噹噹網開源的Dubbox在保證Dubbo原有功能的基礎上做了一系列優化。
使用Dubbox的好處下載
支持REST風格遠程調用(HTTP + JSON/XML):基於非常成熟的JBoss框架,在dubbo中實現了REST風格(HTTP + JSON/XML)的遠程調用,以顯著簡化企業內部的跨語言交互,同時顯著簡化企業對外的Open API、無線API甚至AJAX服務端等等的開發。事實上,這個REST調用也使得Dubbo可以對當今特別流行的“微服務”架構提供基礎性支持。 另外,REST調用也達到了比較高的性能,在基準測試下,HTTP + JSON與Dubbo 2.x默認的RPC協議(即TCP + Hessian2二進制序列化)之間只有1.5倍左右的差距。
支持基於Kryo和FST的Java高效序列化實現:基於當今比較知名的高性能序列化庫,爲Dubbo默認的RPC協議添加新的序列化實現,並優化調整了其序列化體系,比較顯著的提高了Dubbo RPC的性能。
支持基於Jackson的JSON序列化:基於業界應用最廣泛序列化庫,爲Dubbo默認的RPC協議添加新的JSON序列化實現。下載
支持基於嵌入式Tomcat的HTTP remoting體系:基於嵌入式tomcat實現dubbo的HTTP remoting體系(即dubbo-remoting-http),用以逐步取代Dubbo中舊版本的嵌入式Jetty,可以顯著的提高REST等的遠程調用性能,並將Servlet API的支持從2.5升級到3.1。(注:除了REST,dubbo中的WebServices、Hessian、HTTP Invoker等協議都基於這個HTTP remoting體系)。
升級Spring:將dubbo中Spring由2.x升級到目前最常用的3.x版本,減少版本衝突帶來的麻煩。
升級ZooKeeper客戶端:將dubbo中的zookeeper客戶端升級到最新的版本,以修正老版本中包含的bug。
支持完全基於Java代碼的Dubbo配置:基於Spring的Java Config,實現完全無XML的純Java代碼方式來配置dubbo
調整Demo應用:暫時將dubbo的demo應用調整並改寫以主要演示REST功能、Dubbo協議的新序列化方式、基於Java代碼的Spring配置等等。
注:Dubbox和Dubbo 2.X是兼容的,沒有改變Dubbo的任何已有的功能和配置方式下載
DubboxDemo項目的安裝下載
Git Clone https://github.com/dangdangdotcom/dubbox
Checkout出來的Dubbox通過Maven編譯並安裝到本地倉庫。下載
Zookeeper安裝,作爲dubbox的註冊中心 下載
修改配置文件地址<dubbo:registry protocol="zookeeper" address="zookeeper://xxxxxxxxx">。
直接運行ProviderTest類啓動服務發佈者。
直接運行ConsumerTest類啓動服務消費者。
補充:
如果dubbo protocol配置爲rest的,可以直接通過瀏覽器訪問下載
服務提供者最終打成jar時建議將啓動類設置爲com.alibaba.dubbo.container.Main,具體可見Provider的pom.xml下載
Dubbox支持的遠程調用協議下載
dubbo:採用單一長連接和NIO異步通訊,基於TCP協議,默認基於netty框架進行傳輸,Hessian二進制序列化。
RMI:短連接同步傳輸,基於TCP協議,Java標準二進制序列化。
Hessian:短連接同步傳輸,基於HTTP協議,缺省內嵌Jetty作爲服務器實現,Hessian二進制序列化。
http:短連接同步傳輸,基於HTTP協議,採用Spring的HttpInvoker實現,表單序列化。
webservice:短連接同步傳輸,基於HTTP協議,基於CXF實現,SOAP文本序列化。
thrift:thrift rpc框架。
memcached:採用KV存儲的方式傳輸數據。
redis:採用KV存儲的方式傳輸數據。
rest:dubbox提供,HTTP + JSON/XML,可內嵌tomcat實現http remoting體系。
Dubbox支持的序列化方式比較下載
推薦協議配置下載
<dubbo:protocol name="dubbo" serialization="kryo" port="20990" /> <dubbo:protocol name="rest" port="8080" server="tomcat" />