Dubbo是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。java
Apache:Thrift、Hessian;WebService;java:RMI;淘寶:HSF;京東:JSFweb
線上版本穩定;社區文檔多;成熟的運維redis
支持擴展;大量生產應用spring
RMI;hassion;webservice;thriftjson
HTTP;mina;netty緩存
jetty;spring服務器
異步;線程池網絡
zookeeper多線程
Dubbo是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,是阿里巴巴SOA服務化治理方案的核心框架,天天爲2000+個服務提供3000,000,000+次訪問量支持,並被普遍應用於阿里巴巴集團的各成員站點負載均衡
首先provider將服務註冊到registry註冊中心上,而後consumer獲取到這些服務來調用provider,或者當provider提供的服務有變化時,也會相應的通知consumer,provider和consumer在調用時都會發送相應的統計信息給monitor
由服務消費端發起,在用戶的代碼中調用了某個接口的方法,調用方法以後,就會調用到對應的代理層,而代理層根據提供的服務去調用對應的dubbo Invoker或者是Hessian RPC Invoker等等。Invoker再去調用對應的Exporter,在Exporter中就會調用到類的一個代理,服務端抽象出來的AbstractProxyInvoker,再調用到具體的實現類。這樣就完成了一個簡單的Dubbo RPC調用。
這張圖是Dubbo服務註冊的主要過程。首先Dubbo會將xml配置生成對應的ServiceConfig Bean對象,ServiceConfig類拿到對外實際的引用ref,就是bean對象的名字,經過ProxyFactory的getInvoker方法來爲這個引用的bean對象生成一個AbstractProxyInvoker的代理對象,這步就將服務的代理對象轉化成Invoker的對象,而後相應的配置,將Invoker轉化成Dubbo協議的DubboProtocol,根據相應配置來將Invoker Exporter從Exporter發佈指令時能夠指定Dubbo、Hessian、Rmi、WebService等等協議,當一個服務Exporter以後若是它有註冊中心的話,它就會註冊到對應的註冊中心上。
相應的消費者的xml配置也會轉換成ReferenceConfig Bean對象,而後經過上面的指定轉換成Dubb、Hessian等等協議的Invoker,再經過ProxyFactory來生成對應的ref的代理類,再將ref的代理類放到spring容器之中,在spring任意的地方就能使用這個ref來調用對應其接口的bean對象。
該層是與實際業務邏輯相關的,根據服務提供方和服務消費方的業務設計對應的接口和實現。
dubbo源碼:dubbo-config
對外配置接口,以ServiceConfig和ReferenceConfig爲中心,能夠直接new配置類,也能夠經過spring解析配置生成配置類。
dubbo源碼:dubbo-rpc
服務接口透明代理,生成服務的客戶端Stub和服務器端Skeleton,以ServiceProxy爲中心,擴展接口爲ProxyFactory。
dubbo源碼:dubbo-registry
封裝服務地址的註冊與發現,以服務URL爲中心,擴展接口爲RegistryFactory、Registry和RegistryService。可能沒有服務註冊中心,此時服務提供方直接暴露服務。
dubbo源碼:dubbo-cluster
封裝多個提供者的路由及負載均衡,並橋接註冊中心,以Invoker爲中心,擴展接口爲Cluster、Directory、Router和LoadBalance。將多個服務提供方組合爲一個服務提供方,實現對服務消費方來透明,只須要與一個服務提供方進行交互。
dubbo源碼:dubbo-monitor
dubbo源碼:dubbo-rpc
封將RPC調用,以Invocation和Result爲中心,擴展接口爲Protocol、Invoker和Exporter。Protocol是服務域,它是Invoker暴露和引用的主功能入口,它負責Invoker的生命週期管理。Invoker是實體域,它是Dubbo的核心模型,其它模型都向它靠擾,或轉換成它,它表明一個可執行體,可向它發起invoke調用,它有多是一個本地的實現,也多是一個遠程的實現,也可能一個集羣實現。
dubbo源碼:dubbo-remoting
封裝請求響應模式,同步轉異步,以Request和Response爲中心,擴展接口爲Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。
dubbo源碼:dubbo-remoting
抽象mina和netty爲統一接口,以Message爲中心,擴展接口爲Channel、Transporter、Client、Server和Codec。
dubbo源碼:dubbo-common
可複用的一些工具,擴展接口爲Serialization、 ObjectInput、ObjectOutput和ThreadPool。