Dubbo架构原理

什么是Dubbo?

Dubbo是一个RPC远程调用  分布式服务治理 框架. 是Alibaba开源分布式服务框架

Dubbo能做什么?

   负载均衡、容错、降级、路由规则、自动注册服务

       Dubbo架构原理

节点角色说明:

Provider: 暴露服务的服务提供方。 

Consumer: 调用远程服务的服务消费方。 

Registry: 服务注册与发现的注册中心

Container:服务器容器

Monitor: 统计服务的调用次调和调用时间的监控中心

调用关系说明【重点】:

 1、服务容器负责启动,加载,运行服务提供者。 
   2、服务提供者在启动时,向注册中心注册己提供的服务。 
   3、服务消费者在启动时,向注册中心订阅自己所需的服务。 
   4、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 
   5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。 
   6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

Dubbo的总体架

如图所示:

    Dubbo架构原理

Dubbo框架设计一共划分了10个层,最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层。图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口。
  下面,结合Dubbo官方文档,我们分别理解一下框架分层架构中,各个层次的设计要点:

  1. 服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现
  2. 配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。
  3. 服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。
  4. 服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。
  5. 集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。
  6. 监控层(Monitor):RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。
  7. 远程调用层(Protocol):封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
  8. 信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。
  9. 网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。
  10. 数据序列化层(Serialize):可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool。

协议支持

  Dubbo支持多种协议,如下所示:

    • Dubbo协议
    • Hessian协议
    • HTTP协议
    • RMI协议
    • WebService协议
    • Thrift协议
    • Memcached协议
    • Redis协议

SpringCloud与Dubbo区别?


相同点:
  dubbo与springcloud都可以实现RPC远程调用。

dubbo与springcloud都可以使用分布式、微服务场景下。

区别:
  dubbo有比较强的背景,在国内有一定影响力。

dubbo使用zookeeper或redis作为作为注册中心

springcloud使用eureka作为注册中心

dubbo支持多种协议,默认使用dubbo协议。

Springcloud只能支持http协议。

Springcloud支持zuul网关,支持分布式配置中心,而dubbo都不支持

Springcloud是一套完整的微服务解决方案。

来源于:https://www.cnblogs.com/steven520213/p/7606598.html

  https://blog.csdn.net/itcats_cn/article/details/82633818