前言
Dubbo是一個常用的分布式服務架構,它緻力于提供高性能、透明化的RPC遠端服務方案。學習Dubbo有助于提高企業級應用的開發效率,以及可通過簡單的配置就可以實作負載均衡,提高服務的效率。
一、Dubbo基礎知識
什麼是Dubbo?在介紹Dubbo之前,我們首先了解一下企業級應用架構的整個變遷,有利于我們了解Dubbo的産生背景。
我們的企業級應用架構的變化如圖:
單一應用階段(ORM為主):
對于通路流量小的網站或系統,隻需要單一的應用架構即可,也就是隻需要一個應用就能将所有的功能都聚集到一起,來減少部署的成本,這個時候,用于簡化增删改查工作量的資料庫通路架構(ORM對象關系映射架構,如Hibernate、MyBatis),會提高開發的效率。
垂直應用架構(MVC為主):
當通路量稍微增大以後,單一的應用架構就不能滿足系統的日常需求,我們需要将系統之間耦合度較低的子產品拆分出來,來減少代碼的備援,提高效率。此時,用于提升前端頁面通路效率的Web架構應運而生(如Struts、SpringMVC),與之前的ORM架構結合起來,共同形成了MVC架構的Web應用體系。
分布式服務架構(RPC為主):
當應用越來越多,應用和應用之間不斷的互動,此時就需要将核心的業務抽取出來,提供獨立的服務,形成穩定的服務中心,使前端可以适應多變的市場需求。此時,使用分布式服務架構是一個關鍵,而我們的Dubbo就是一個分布式服務架構。
流動計算架構(SOA為主):
當提供的服務越來越多,我們就需要一個中心,來對不同服務的負載進行評估,實時的調配資源,提高叢集的應用率。此時,資源的排程和治理中心就是關鍵。而Duboo支援了完整的RPC調用的支援,以及服務治理中心相關的功能。
我們一般開發者大多數接觸最多的就是基于MVC架構的Web應用,學習Dubbo更有利于我們開發分布式的Web應用。
Dubbo介紹:
Dubbo是一個分布式服務架構,緻力于提高性能和透明化的RPC遠端服務調用方案,以及SOA服務治理方案。
Dubbo名稱來源于澳洲達博市。與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是阿裡巴巴SOA服務化治理方案的核心架構,每天為2000+個服務提供30億次通路量支援,并被廣泛應用于阿裡巴巴集團的各個成員站點。
二、Dubbo涉及的知識
(1)遠端調用:RMI、hassion、webService、thrift
Dubbo都會在底層真正調用的時候,使用這些架構來做遠端調用。
(2)通信互動:HTTP、mina、netty
其中mina與netty都是NIO的架構。
(3)序列化:hessian2、java、json
Dubbo預設使用hessian2
(4)容器:jetty、spring
Dubbo在容器方面支援像jetty這樣的輕量級容器,或者spring這樣的IOC容器。
(5)多線程:異步,線程池
Dubbo涉及了異步的調用和線程池的管理。
(6)負載均衡:zookeeper、redis
Dubbo大部分使用zookeeper來實作負載均衡。
三、使用Dubbo可以做什麼
(1)作為對内提供服務應用的容器
我們可以開發很多業務處理的應用,然後使用Duboo這種容器來提供服務。
(2)拆分複雜Web應用到伺服器容器
把大量的邏輯放置在服務提供的應用之中,使Web應用調用服務容器。
(3)應用負載均衡協調
我們可以使用Duboo來實作軟體的負載均衡和協調,這樣不僅簡化了配置,還大大簡化了伺服器的使用率。
(4)應用服務治理
下圖完整的表示了Dubbo在服務治理提供的相關功能:
除了負載均衡,還可以做服務的降級、調用統計以及依賴關系的計算等等。使用這些功能我們可以很清晰了解一個應用的依賴關系,以及不同應用調用的負載情況,我們根據這些負載,來配置設定和計算,以增加對應的機器。
轉載請注明出處:http://blog.csdn.net/acmman/article/details/73008700