image.png

dubbo.io

点击进入中文官网
https://github.com/apache/dubbo

Dubbo**是一个RPC远程调用框架, 分布式服务治理框架**。

什么是Dubbo服务治理?

服务与服务之间会有很多个Url、依赖关系、负载均衡、容错、自动注册服务。

Dubbo有哪些协议?

默认用的dubbo协议、Http、RMI、Hessian
其核心部分包含:
1.远程通讯,提供对多种基于长连接的NiO框架抽象封装,包括多种线程模型,序列化,以及“请求一响应”模式的信息交换方式。
2.集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持。以及负载均衡,失败容错,地址路由,动态配置等集群支持。
3.自动发现:基于注册中心目录服务,使用服务消费能动态查找服务提供方,使地址透明,使用服务提供方可以平滑增加或减少服务器

架构

image.png

simple示例

1. 注册中心zk 与 dubbo直连

注册中心宕机后,消费者仍能够通过本地缓存通讯服务生产者
@Reference(url="127.0.0.1:8080")
redis、zk

2. dubbo-admin

管理控制台 需要下载npm,可本地启动前端和后端
https://github.com/apache/dubbo-admin

3. dubbo-Monitor

监控中心

4. 生产者/消费者(springboot)

参考代码地址: github官方代码
注册中心使用zookeeper需要增加依赖
服务之间调用的实体需要 implements Serializable
配置文件
application.properties需要参考github
也可以加dubbo.properties (消费者配置优先于生产者)
启动时检查生产者

SpringBoot整合Dubbo三种方式

  1. 配置文件中 dubbo.scan.base-packages= 或者 @EnableDubbo
  2. 保留dubbo.xml配置文件,放入resource,

image.png

  1. 使用注解API 官方文档- 配置-注解配置

生产者:
暴露服务 @Service 需要使用Dubbo提供的注解,加上spring的 @Component
设置超时

消费者:
需要远程引用服务 @Reference
设置超时
[集群容错]幂等方法设置重试次数
多版本 实现灰度发布
负载均衡@Reference (loadbalance = “roundrobin”)

负载均衡

权重可以在admin控制台动态调整

  1. 基于权重的随机(默认) random
  2. 基于权重的轮询 roundrobin
  3. 最少活跃数(先请求响应速度快的)
  4. 一致性hash

    服务降级/容错

    屏蔽,返回为空
    出错后返回空

    微服务架构解决如下问题

    image.png

    比较

    SpringCloud与Dubbo区别?

    品牌机与组装机的区别
    很明显,Spring Cloud的功能比DUBBO更加强大,涵盖面更广

    通讯协议
    基于通讯协议层面对 2 种框架支持的协议类型以及运行效率方面进行比较。
    支持协议
    Dubbo
    Dubbo 使用 RPC 通讯协议,提供序列化方式如下:
  • Dubbo:Dubbo 缺省协议采用单一长连接和 NIO 异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
  • RMI:RMI 协议采用 JDK 标准的 java.rmi.* 实现,采用阻塞式短连接和 JDK 标准序列化方式。
  • Hessian:Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 HTTP 通讯,采用 Servlet 暴露服务,Dubbo 缺省内嵌 Jetty 作为服务器实现。
  • HTTP:采用 Spring 的 Http Invoker 实现。
  • Webservice:基于 CXF 的 frontend-simple 和 transports-http 实现。

Spring Cloud
Spring Cloud 使用 HTTP 协议的 REST API。

区别:

dubbo有比较强的背景,在国内有一定影响力。
dubbo使用zk或redis作为作为注册中心/ springcloud使用eureka作为注册中心
dubbo支持多种协议,默认使用dubbo协议。/Springcloud只能支持http协议。
Springcloud是一套完整的微服务解决方案。

Dubbox与Dubbo区别?

Dubox使用http协议+rest风格传入json或者xml格式进行远程调用。
Dubbo使用Dubbo协议。