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。