之前項目中使用的是Dubbo,只是做了簡單的瞭解,本次接觸新項目使用Dubbox,一起來學習一下。
Dubbo與Dubbox的關係
SOA架構
SOA是Service-Orientend Architecture,它是一種支持面向服務的架構樣式。百科解釋: 面向服務的體系結構(SOA)是一個組件模型,它將應用程序的不同功能單元(稱爲服務)通過這些服務之間定義良好的接口和契約聯繫起來。接口是採用中立的方式進行定義的,它應該獨立於實現服務的硬件平臺、操作系統和編程語言。這使得構建在各種這樣的系統中的服務可以以一種統一和通用的方式進行交互。
隨着互聯網的發展,網站應用的規模不斷擴大,技術架構不斷升級,垂直應用架構已經無法應對,分佈式架構越來越流行,當服務越來越多,急需增加一個調度中心管理集羣容量,提高集羣利用率,流動計算架構是以資源調度和治理中心(SOA)爲核心的解決方案。
Dubbo
Dubbo源於阿里的淘寶網開源的分佈式的服務架構,致力於提高性能和透明化的RPC遠程服務調用方案,是SOA服務化治理方案的核心框架。
節點角色說明:
- Provider:暴露服務的服務提供方。
- Registry:服務註冊與發現的註冊中心。
- Consumer:調用遠程服務的服務消費方。
- Monitor:統計服務的調用次數和調用時間的監控中心。
- Container:服務運行容器。
調用關係說明:
- 服務器負責調用,加載,運行服務器提供者。
- 服務提供者在啓動的時候,向註冊中心註冊自己提供的服務。
- 服務消費者在啓動的時候,想註冊中心訂閱自己需要的服務。
- 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送表更數據給消費者。
- 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
- 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。
特點
(1)連通性
- 註冊中心負責服務地址的註冊與查找,相當於目錄服務,服務提供者和消費者旨在啓動是與註冊中心交互,註冊中心不轉發請求,壓力較小。
- 監控中心負責統計各服務調用次數,調用時間等,統計現在內容彙總後每分鐘一次發到監控中心服務器,並以報表展示。
- 服務提供者向註冊中心註冊其提供的服務,並彙報調用時間到監控中心,此事件不包括網絡開銷。
- 服務消費者向註冊中心獲取服務提供者地址列表,並根據負載算法直接調用提供者,同時彙報調用時間到監控中心,此時間包含網絡開銷。
- 註冊中心,服務提供者,服務消費者三者之間均爲長連接,監控中心除外。
- 註冊中心通過長連接感知服務提供者的存在,服務提供者宕機,註冊中心將立即推送事件通知消費者。
- 註冊中心和監控中心全部宕機,不影響已運行的提供者和消費者,消費者在本地緩存了提供者列表。
- 註冊中心和監控中心都是可選的,服務消費者可以直連服務提供者。
(2)健壯性
- 監控中心宕掉不影響使用,只是丟失部分採樣數據。
- 數據庫宕掉後,註冊中心仍能通過緩存提供服務列表查詢,但不能註冊新服務。
- 註冊中心對等集羣,任何一臺宕掉後,將自動切換到另一臺。
- 註冊中心全部宕掉後,服務提供者和服務消費者仍能通過本地緩存通信。
- 服務提供者無狀態,任意一臺宕掉後,不影響使用。
- 服務提供者全部宕掉後,服務消費者應用將無法使用,並無限次重連等待服務提供者恢復。
(3)伸縮性
- 註冊中心爲對等集羣,可動態增加機器部署實例,所有客戶端將自動發現新的註冊中心。
- 服務提供者無狀態,可動態增加機器部署實例,註冊中心將推送新的服務提供者信息給消費者。
(4)升級性
- 當服務集羣規模進一步擴大,帶動IT治理結構進一步升級,需要實現動態部署,進行流動計算,現有分佈式服務架構不會帶來阻力。
Dubbox
淘寶網將其開源之後,得到了很多的拓展和支持(比較出名的有:噹噹網的擴展版本dubbox,京東的擴展版本jd-hydra等),後期由於一些原因dubbo團隊解散,不再更新,但其推展的版本dubbox卻得到了不斷的發展, Dubbox(即Dubbo eXtensions)是噹噹網Fork基於dubbo2.x的升級版本,兼容原有的dubbox。其中升級了zookeeper和spring版本,並且支持restfull風格的遠程調用。
dubbox是基於dubbo的升級:
- 支持REST風格遠程調用(HTTP+JSON/XML);
- 支持基於Kryo和FST的Java高效序列化實現;
- 支持基於Jackson的JSON序列化;
- 支持基於嵌入式Tomcat的HTTP remoting體系;
- 升級Spring至3.x;
- 升級Zookeeper客戶端;
- 支持完全基於Java代碼的Dubbo配置。