1、概念
Dubbo是一個分布式服務框架,以及阿里巴巴內部的SOA服務化治理方案的核心框架。其功能主要包含:高性能NIO通訊及多協議集成。服務動態尋址與路由。軟負載均衡與容錯,依賴分析與降級等。
說通俗點,就是首先將程序組件化成一個個相對獨立的服務,然后就能夠對服務進行分布式。并且,它有注冊中心通過監聽,實時發現著新服務,并部署。還能夠推送給client;它還集成了負載均衡的解決方式。利用隨機算法來講各個服務科學地分配到多臺server上;當然,它也集成了容錯機制,來提高集群的穩定性。
2、架構
節點角色說明:
?? Provider: 暴露服務的服務提供方。
?? Consumer: 調用遠程服務的服務消費方。
?? Registry: 服務注冊與發現的注冊中心。
?? Monitor: 統計服務的調用次調和調用時間的監控中心。
?? Container: 服務執行容器。
調用關系說明:
0. 服務容器負責啟動。載入,執行服務提供者。
1. 服務提供者在啟動時。向注冊中心注冊自己提供的服務。
2. 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。
3. 注冊中心返回服務提供者地址列表給消費者。假設有變更,注冊中心將基于長連接推送變更數據給消費者。
4. 服務消費者。從提供者地址列表中,基于軟負載均衡算法。選一臺提供者進行調用,假設調用失敗,再選還有一臺調用。
5. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。
注冊中心(Registry)說明:
對于Dubbo架構中的控制中心及Registry,阿里提供了兩種方案:Zookeeper和Redis。生產環境建議大家都使用Zookeeper,推薦理由是:
1.?????Dubbo的官網上寫著,使用Dubbo-2.3.3及以上的版本號,推薦使用Zookeeper注冊中心。
2.?????Zookeeper是Apache Hadoop的子項目。強度相對較好。可以全然勝任生產環境的扮演穩定的角色。
3.?????Dubbo未對Zookeeper服務端做不論什么侵入改動。僅僅需安裝原生的Zookeeperserver就可以,全部注冊中心邏輯適配都在調用Zookeeperclient完畢。
3、實例
???? 以下將不貼出來源代碼,僅僅對項目結構即部分核心代碼進行簡單說明。
源代碼自行下載,下載地址:點擊打開鏈接
為了簡單起見,這個實例中。我們沒有使用Zookeeper注冊中心暴露服務地址,而是使用外網的multicast廣播注冊中心暴露服務地址。這樣我們能夠高速的認識一下Dubbo的作用。
案例中。我們建立了兩個WebProject:dubboprovider和dubboconsumer,前者為服務提供方。后者作為client。我們將dubboprovider服務類的接口引入到dubboconsumer項目中(不能引用服務的實現類)。然后通過multicast廣播注冊中心(真實環境用Registry)來遠程調用dubboprovider服務的實現,假設能成功調到,就算成功。(項目中applicationContext.xml會報錯,是由http://code.alibabatech.com/schema/dubbo/dubbo.xsd引起。說是阿里的相關服務換地方了,只是沒關系,能夠正常執行)
?????? 暴露服務和引用服務的核心配置例如以下。其他代碼比較簡單,這里不多介紹。直接下載源代碼(點擊打開鏈接)看就可以看懂:
?