2021-03-21

什么是Dubbo

   dubbo是一个分布式服务框架,致力于提供性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不用需要的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,说白了就是个远程服务调用的分布式框架
   其核心部分包含了
   1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列 化,以及“请求-响应”模式的信息交换方式。
   2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
   3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
   总结:dubbo就是面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维

Dubbo能做什么?

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。      
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务 提供者的IP地址,并且能够平滑添加或删除服务提供者。
 4. Dubbo采用全spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载
peoxy:服务代理指的是我们在调用中,我们在调用,感觉是在调用本地接口方法,屏蔽远程客户端的复杂性。通过动态代理来实现的

Dubbo架构图如下?

在这里插入图片描述

流程说明:
 1. Provider(提供者)绑定指定端口并启动服务
 2. 提供者连接注册中心,并将本机IP,端口,应用信息和提供服务信息发送至注册中心存储
 3. Consumer(消费者),连接注册中心,并发送应用信息,所求服务信息至注册中心
 4. 注册中心根据,消费者所求服务信息匹配对应的提供者列表发送至Consumer应用缓存
 5. Consumer在发起远程调用时基于缓存的消费者列表选择其一发起调用
 6.Provider 状态变更会实时通知注册中心、在由注册中心实时推送至Consumer
设计的好处
 1.Consumer 与Provider 解偶,双方都可以横向增减节点数。
 2.注册中心对本身可做对等集群,可动态增减节点,并且任意一台宕掉后,将自动切换到另一台
3.去中心化,双方不直接依懒注册中心,即使注册中心全部宕机短时间内也不会影响服务的调用
4.服务提供者无状态,任意一台宕掉后,不影响使用

Dubbo 整体设计

在这里插入图片描述

配置说明
config配置层: 对外配置接口,以ServiceConfig,ReferenceConfig为中心,可以直接配置初始化配置类,也可以通过spring解析配置生成配置类
proxy服务代理层:服务接口透明代理,生成动态代理,扩展接口为ProxyFactory
registry注册中心层:封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory,Registry,RegistryService
cluster路由层:封装多个提供者的路由以及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster,Directory,Router,LoadBalance
monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService
protocol 远程调用层:封装 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter
exchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer
transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec
serialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool
流程如下

在这里插入图片描述

Dubbo核心SPI机制

 Dubbo 中的SPI机制
  在了解Dubbo的spi之前 先来了解一下 JAVA自带的SPI
 java spi的具体约定为:当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。 基于这样一个约定就能很好的找到服务接口的实现类,而不需要再代码里制定。jdk提供服务实现查找的一个工具类java.util.ServiceLoader
  1.创建一个接口
      class  JAVASPIInterface{
                 public void sayHello();
        }
   2.创建接口的实现类
   class JAVASPIInterfaceImpl implements JAVASPIInterface{
               public void sayHello(){
              System.out.println("JAVA SPI");
               }
     }
 
   3.在Resource目录下创建META-INF/services/这个两个目录,名字固定不能修改,在源码ServiceLoader写死(344行),然后在以接口的全限定名创建一个文件。文件里面放入接口实现的全路径(图如下)
    4.测试如下
    public class JAVASPIDemo {
       public static void main(String[] args) {
       ServiceLoader<JAVASPIInterface> load = ServiceLoader.load(JAVASPIInterface.class);
        Iterator<JAVASPIInterface> iterator = load.iterator();
        while (iterator.hasNext()){
            JAVASPIInterface next = iterator.next();
            next.sayHello();
        }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值