Dubbo相关知识

Dubbo的相关基础知识

Posted by ZBX on July 14, 2020

什么是Dubbo

Dubbo是 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。目前 Dubbo 已经成为 Spring Cloud Alibaba 中的官方组件。

RPC原理

  1. 服务消费方(client)调用以本地调用方式调用服务;
  2. client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
  3. client stub找到服务地址,并将消息发送到服务端;
  4. server stub收到消息后进行解码;
  5. server stub根据解码结果调用本地的服务;
  6. 本地服务执行并将结果返回给server stub;
  7. server stub将返回结果打包成消息并发送至消费方;
  8. client stub接收到消息,并进行解码;
  9. 服务消费方得到最终结果。

简化流程

  1. provider向注册中心去注册
  2. consumer从注册中心订阅服务,注册中心会通知consumer注册好的服务
  3. consumer调用provider
  4. consumer和provider都异步通知监控中心

Dubbo分层结构

  • 第一层:service层,接口层,给服务提供者和消费者来实现的
  • 第二层:config层,配置层,主要是对dubbo进行各种配置的
  • 第三层:proxy层,服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton
  • 第四层:registry层,服务注册层,负责服务的注册与发现
  • 第五层:cluster层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务
  • 第六层:monitor层,监控层,对rpc接口的调用次数和调用时间进行监控
  • 第七层:protocol层,远程调用层,封装rpc调用
  • 第八层:exchange层,信息交换层,封装请求响应模式,同步转异步
  • 第九层:transport层,网络传输层,抽象mina和netty为统一接口
  • 第十层:serialize层,数据序列化层,网络传输需要

集群容错

  • Failover :失败自动切换,自动重试其他服务器
  • Failfast :快速失败,立即报错,只发起一次调用
  • Failsafe :失败安全。出现异常时,直接忽略
  • Failback :失败自动恢复,记录失败请求,定时重发
  • Forking : 并行调用多个服务器,只要一个成功即返回
  • Broadcast : 广播逐个调用所有提供者,任意一个报错则报错

负载均衡

  • Random LoadBalance
  • RoundRobin LoadBalance
  • LeastActive LoadBalance : 最少活跃调用数
  • ConsistentHash LoadBalance : 相同参数的请求总是发到同一提供者

SPI

SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。

服务发布

服务的发布总共做了以下几件事,这个也可以从日志log上看出来:

  • 暴露本地服务
  • 暴露远程服务
  • 启动netty
  • 连接zookeeper
  • 到zookeeper注册
  • 监听zookeeper

服务暴露的过程