Dubbo
- 爲什麼出現Dubbo
- 隨着現在互聯網行業的發展,越來越多的框架、中間件、容器等開源技術不斷地湧現,更好地來服務於業務,解決實現業務的問題。
- 隨着業務的發展、用戶量的增長,系統數量增多,調用依賴關係也變得複雜,爲了確保系統高可用、高併發的要求,系統的架構也從單體時代慢慢遷移至服務SOA時代,根據不同服務對系統資源的要求不同,我們可以更合理的配置系統資源,使系統資源利用率最大化。
- 系統服務的演變過程
- 單一應用框架(ORM)
- 將所有功能部署在一起,減少部署節點和成本。
- 垂直應用架構(MVC)
- 應用拆成互不相干的幾個應用,以提升效率
- 分佈式應用架構
- 核心業務抽取出來,作爲獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求
- 流動計算架構
- 用於提高機器利用率的資源調度和治理中心(SOA) 是關鍵
- 單一應用框架(ORM)
- 電商系統的演變可以看出應用系統架構演變的過程:
- Dubbo是什麼
- 一款分佈式服務框架
- 高性能和透明化的RPC遠程服務調用方案
- SOA服務治理方案
- Dubbo的架構
- 上圖的流程:
- 0.服務容器負責啓動,加載,運行服務提供者。
- 1.服務提供者在啓動時,向註冊中心註冊自己提供的服務。
- 2.服務消費者在啓動時,向註冊中心訂閱自己所需的服務。
- 3.註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。
- 4.服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
- 5.服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心
- 上圖的流程:
- Dubbo註冊中心
- 註冊服務:
- 對於服務提供方,它需要發佈服務,而且由於應用系統的複雜性,服務的數量、類型也不斷膨脹;
- 消息訂閱
- 對於服務消費方,它最關心如何獲取到它所需要的服務,而面對複雜的應用系統,需要管理大量的服務調用。
- 兩個身份都有:
- 對於服務提供方和服務消費方來說,他們還有可能兼具這兩種角色,即既需要提供服務,又需要消費服務。
- 註冊服務:
- 註冊中心的目的:
- 通過將服務統一管理起來,可以有效地優化內部應用對服務發佈/使用的流程和管理。服務註冊中心可以通過特定協議來完成服務對外的統一。
- Dubbo提供的註冊中心有幾種類型:
- Multicast註冊中心
- Zookeeper註冊中心
- Redis註冊中心
- Simple註冊中心
- Dubbo優點:
- 透明化的遠程方法調用
- 像調用本地方法一樣調用遠程方法;只需簡單配置,沒有任何API侵入
- 軟負載均衡及容錯機制
- 可在內網替代nginx lvs等硬件負載均衡器
- 服務註冊中心自動註冊 & 配置管理
- 不需要寫死服務提供者地址,註冊中心基於接口名自動查詢提供者ip
- 使用類似zookeeper等分佈式協調服務作爲服務註冊中心,可以將絕大部分項目配置移入zookeeper集羣
- 服務接口監控與治理
- Dubbo-admin與Dubbo-monitor提供了完善的服務接口管理與監控功能,針對不同應用的不同接口,可以進行 多版本,多協議,多註冊中心管理
- 透明化的遠程方法調用
- Dubooq缺點
- 只支持Java語言
- 使用Dubbo步驟
- 安裝Zookeeper啓動;
- 創建Maven項目,構建:Dubbo+Zookeeper+Spring
- 安裝Dubbo-admin,監控
- Dubbo註冊中心爲什麼採用Zookeeper?
- Zookeeper是一個分佈式的服務框架,是樹型的目錄服務的數據存儲,能做到集羣管理數據 ,這裏能很好的作爲Dubbo服務的註冊中心。
- Dubbo能與Zookeeper做到集羣部署,當提供者出現斷電等異常停機時,Zookeeper註冊中心能自動刪除提供者信息,當提供者重啓時,能自動恢復註冊數據,以及訂閱請求。
- 安裝Zookeeper
- 在Zookeeper官網中下載Zookeeper發行包並解壓:
- 複製Zookeeper配置文件
- 將Zookeeper安裝目錄的conf子文件夾中的zoo_sample.cfg複製一份並重命名爲zoo.cfg
- 運行Zookeeper
- 執行Zookeeper安裝(解壓)目錄中bin子文件夾的zkServer.cmd啓動Zookeeper
- 利用Maven創建Dubbo項目,主要分爲以下組成部分:
- 項目Dubbo-consumer : 調用遠程服務;
- 項目Dubbo-provider : 提供遠程服務。
- Provider和Consumer需要提供相同的業務服務接口
- 爲項目編輯pom文檔
- 服務的提供者和消費者需要依賴的庫相同,主要有Netty依賴、Zookeeper依賴、ZookeeperClient依賴、Dubbo依賴、Spring依賴等
-
Provider中需要提供業務接口的實現:
- Provider在Spring容器中聲明Dubbo的服務:
-
Provider啓動遠程服務
-
Consumer在Spring容器中聲明需要調用的服務:
- Consumer調用遠程服務:
- Dubbo管理控制檯功能:
- 路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡。
- Dubbo控制檯的使用
- 下載dubbo-admin,將dubbo-admin的war包發佈到tomcat中,再運行tomcat即可,缺省用戶名和密碼均爲root:
- 總結Dubbo
- Dubbo是一款分佈式服務框架,一個高性能和透明化的RPC遠程服務調用方案,一個SOA服務治理方案。
- Dubbo每天爲2千多個服務提供大於30億次訪問量支持,並被廣泛應用於阿里巴巴集團的各成員站點以及別的公司的業務中。