dubbo.io
点击进入中文官网
https://github.com/apache/dubbo
Dubbo**是一个RPC远程调用框架, 分布式服务治理框架**。
什么是Dubbo服务治理?
服务与服务之间会有很多个Url、依赖关系、负载均衡、容错、自动注册服务。
Dubbo有哪些协议?
默认用的dubbo协议、Http、RMI、Hessian
其核心部分包含:
1.远程通讯,提供对多种基于长连接的NiO框架抽象封装,包括多种线程模型,序列化,以及“请求一响应”模式的信息交换方式。
2.集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持。以及负载均衡,失败容错,地址路由,动态配置等集群支持。
3.自动发现:基于注册中心目录服务,使用服务消费能动态查找服务提供方,使地址透明,使用服务提供方可以平滑增加或减少服务器
架构
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三种方式
- 配置文件中 dubbo.scan.base-packages= 或者
@EnableDubbo
- 保留dubbo.xml配置文件,放入resource,
- 使用注解API 官方文档- 配置-注解配置
生产者:
暴露服务 @Service
需要使用Dubbo提供的注解,加上spring的 @Component
设置超时
消费者:
需要远程引用服务 @Reference
设置超时
[集群容错]幂等方法设置重试次数
多版本 实现灰度发布
负载均衡@Reference
(loadbalance = “roundrobin”)
负载均衡
权重可以在admin控制台动态调整
- 基于权重的随机(默认) random
- 基于权重的轮询 roundrobin
- 最少活跃数(先请求响应速度快的)
- 一致性hash
服务降级/容错
屏蔽,返回为空
出错后返回空微服务架构解决如下问题
比较
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协议。