Dubbo基础介绍
2019獨角獸企業重金招聘Python工程師標準>>>
Dubbo是一個常用的分布式服務框架,
- 它致力于提供高性能、透明化的RPC遠程服務方案。
- 學習Dubbo有助于提高企業級應用的開發效率,以及可通過簡單的配置就可以實現負載均衡,提高服務的效率。
單一應用階段(ORM為主):
- 對于訪問流量小的網站或系統,只需要單一的應用架構即可,也就是只需要一個應用就能將所有的功能都聚集到一起,
- 減少部署的成本,這個時候,用于簡化增刪改查工作量的數據庫訪問框架(ORM對象關系映射框架,如Hibernate、MyBatis),會提高開發的效率。
垂直應用架構(MVC為主):
- 當訪問量稍微增大以后,單一的應用架構就不能滿足系統的日常需求,
- 我們需要將系統之間耦合度較低的模塊拆分出來,來減少代碼的冗余,提高效率。
- 此時,用于提升前端頁面訪問效率的Web框架應運而生(如Struts、SpringMVC),
- 與之前的ORM框架結合起來,共同形成了MVC架構的Web應用體系。
分布式服務架構(RPC為主):
- 當應用越來越多,應用和應用之間不斷的交互,
- 此時就需要將核心的業務抽取出來,提供獨立的服務,形成穩定的服務中心,使前端可以適應多變的市場需求。
- 此時,使用分布式服務框架是一個關鍵,而我們的Dubbo就是一個分布式服務框架。
流動計算架構(SOA為主):
- 當提供的服務越來越多,我們就需要一個中心,來對不同服務的負載進行評估,實時的調配資源,提高集群的應用率。
- 此時,資源的調度和治理中心就是關鍵。而Duboo支持了完整的RPC調用的支持,以及服務治理中心相關的功能。
Dubbo介紹:
- Dubbo是一個分布式服務框架,致力于提高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。
- 與Dubbo同類型的框架還有Apache的Thrift、Hessian,Java原生的RMI,WebService,以及淘寶的HSF,京東的JSF。
- Apache的Thrift對多語言的支持比較好,但是負載均衡和SOA的治理這一塊比較缺乏。
- 而Hessian和WebService都是傳統的HTTP調用框架,由于HTTP調用時使用的多是短連接形式,大部分資源都被浪費在服務器的IO上。
- Java的RMI只支持Java語言,而且性能比較一般。
- 淘寶的HSF和京東的JSF都沒有開源,
- 那么在開源框架中,Dubbo是一個比較優秀的分布式服務框架。
- Dubbo的線上版本比較穩定,社區文檔多,運維方案比較成熟(admin控制臺和monte監控平臺)。
- Duboo支持拓展,目前,國內有許多家大型生產型應用互聯網公司使用了Dubbo框架
Dubbo涉及的知識
- 遠程調用:RMI、hassion、webService、thrift
- Dubbo都會在底層真正調用的時候,使用這些框架來做遠程調用。
- 通信交互:HTTP、mina、netty
- mina與netty都是NIO的框架。
- 序列化:hessian2、java、json
- Dubbo默認使用hessian2
- 容器:jetty、spring
- Dubbo在容器方面支持像jetty這樣的輕量級容器,或者spring這樣的IOC容器。
- 多線程:異步,線程池
- Dubbo涉及了異步的調用和線程池的管理。
- 負載均衡:zookeeper、redis
- Dubbo大部分使用zookeeper來實現負載均衡。
使用Dubbo可以做什么
- 作為對內提供服務應用的容器
- 開發很多業務處理的應用,然后使用Duboo這種容器來提供服務。
- 拆分復雜Web應用到服務器容器
- 把大量的邏輯放置在服務提供的應用之中,使Web應用調用服務容器。
- 應用負載均衡協調
- 使用Duboo來實現軟件的負載均衡和協調,這樣不僅簡化了配置,還大大簡化了服務器的利用率。
- 應用服務治理
- 除了負載均衡,還可以做服務的降級、調用統計以及依賴關系的計算等等。
- 使用這些功能我們可以很清晰了解一個應用的依賴關系,以及不同應用調用的負載情況,
- 我們根據這些負載,來分配和計算,以增加對應的機器。
Dubbo架構
Provider: 暴露服務的服務提供方。?
Consumer: 調用遠程服務的服務消費方。?
Registry: 服務注冊與發現的注冊中心。?
Monitor: 統計服務的調用次數和調用時間的監控中心。
調用流程?
0.服務容器負責啟動,加載,運行服務提供者。?
1.服務提供者在啟動時,向注冊中心注冊自己提供的服務。?
2.服務消費者在啟動時,向注冊中心訂閱自己所需的服務。?
3.注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者。?
4.服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。?
5.服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心
Dubbo注冊中心
- 對于服務提供方,它需要發布服務,而且由于應用系統的復雜性,服務的數量、類型也不斷膨脹;?
- 對于服務消費方,它最關心如何獲取到它所需要的服務,而面對復雜的應用系統,需要管理大量的服務調用。?
- 而且,對于服務提供方和服務消費方來說,他們還有可能兼具這兩種角色,即既需要提供服務,有需要消費服務。
- 通過將服務統一管理起來,可以有效地優化內部應用對服務發布/使用的流程和管理。
- 服務注冊中心可以通過特定協議來完成服務對外的統一。
Dubbo提供的注冊中心有如下幾種類型可供選擇:
- Multicast注冊中心
- Zookeeper注冊中心
- Redis注冊中心
- Simple注冊中心
Dubbo優缺點
優點:
- 像調用本地方法一樣調用遠程方法;
- 只需簡單配置,沒有任何API侵入。
- 可在內網替代nginx lvs等硬件負載均衡器。
- 不需要寫死服務提供者地址,注冊中心基于接口名自動查詢提供者ip。?
- 使用類似zookeeper等分布式協調服務作為服務注冊中心,可以將絕大部分項目配置移入zookeeper集群。
- Dubbo-admin與Dubbo-monitor提供了完善的服務接口管理與監控功能,
- 針對不同應用的不同接口,可以進行 多版本,多協議,多注冊中心管理。
缺點:
- 只支持JAVA語言
?
?
轉載于:https://my.oschina.net/u/3847203/blog/2876498
總結
- 上一篇: [每日短篇] E - Base64 编码
- 下一篇: HanLPTokenizer HanLP