认识Dubbo

Dubbo简介

简单介绍Dubbo让我们的同学们都有一个简单的认知
Dubbo是什么
Dubbo是阿里巴巴开源的基于 Java 的高性能RPC(一种远程调用) 分布式服务框架(SOA)。

为什么要用Dubbo

使用Dubbo可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展。

Dubbo 和 Spring Cloud 有什么区别

通信方式不同
Dubbo使用的是RPC通信,而Spring Cloud 使用的是HTTP RESTFul 方式。
组成不一样
dubbo的服务注册中心为Zookeerper,服务监控中心为dubbo-monitor,无消息总线,服务跟踪、批量任务等组件;
spring-cloud的服务注册中心为spring-cloud netflix enruka,服务监控中心为spring-boot admin,有消息总线,数据流、服务跟踪、批量任务等组件;

Dubbo需要 Web 容器吗

不需要,如果硬要用Web 容器,只会增加复杂性,也浪费资源。

Dubbo内置了哪几种服务容器

Spring Container
Jetty Container
Log4j Container

Dubbo都支持什么协议,推荐用哪种

dubbo://(推荐)
http://
rest://
redis://
memcached://

Dubbo里面有哪几种节点角色

provider:暴露服务的服务提供方
consumer:调用远程服务的服务消费方
registry:服务注册于发现的注册中心
monitor:统计服务调用次数和调用时间的监控中心
container:服务运行容器

Dubbo有哪几种集群容错方案,默认是哪种

FailOver Cluster 失败自动重试,重试其他服务器(默认)
Failfast Cluster 快速失败,立即报错,只发起一次调用
Failsafe Cluster 失败安全,出现异常直接忽略
Failback Cluster 失败自动恢复,记录失败请求,定时重发
Forking Cluster 并行调用多个服务,有一个成功即返回成功
Broadcast Cluster 广播调用,有一个报错即返回报错

Dubbo集群容错方案

Random LoadBalance 随机 按权重设置随机概率
RoundRobin LoadBalance 轮询 按公约后的权重设置轮询比率
LeastActive LoadBalance 最少活跃调用数 相同活跃数的随机,活跃数指调用前后计数差
ConsistentHash LoadBalance 一致性 Hash 相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动

Dubbo服务之间的调用是阻塞的吗

Dubbo 是基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个 Future 对象。

Dubbo的管理控制台能做什么

管理控制台主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。

Dubbo 服务暴露的过程

Dubbo 会在 Spring 实例化完 bean 之后,在刷新容器最后一步发布 ContextRefreshEvent 事件的时候,通知实现了 ApplicationListener 的 ServiceBean 类进行回调 onApplicationEvent 事件方法,Dubbo 会在这个方法中调用 ServiceBean 父类 ServiceConfig 的 export 方法,而该方法真正实现了服务的(异步或者非异步)发布。

当一个服务接口有多种实现时怎么做?

当一个接口有多种实现时,可以用group属性来分组,服务提供方和消费方都指定同一个 group 即可。

服务上线怎么兼容旧版本

可以用版本号(version)过渡,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念有一点类似

Dubbo 和 Dubbox 有什么区别?

Dubbox 是继 Dubbo停止维护后,当当网基于Dubbo做的一个扩展项目,如加了服务可 Restful 调用,更新了开源组件等。

出现调用超时com.alibaba.dubbo.remoting.TimeoutException异常怎么办

通常是业务处理太慢,可在服务提供方执行:jstack PID > jstack.log 分析线程都卡在哪个方法调用上,这里就是慢的原因。
如果不能调优性能,请将timeout设大。

出现RejectedExecutionException或者Threadpoolexhausted怎么办?

RejectedExecutionException表示线程池已经达到最大值,并且没有空闲连,拒绝执行了一些任务。
Thread pool exhausted通常是min和max不一样大时,表示当前已创建的连接用完,进行了一次扩充,创建了新线程,但不影响运行。
原因可能是连接池不够用,请调整dubbo.properites中的:
// 设成一样大,减少线程池收缩开销
dubbo.service.min.thread.pool.size=200
dubbo.service.max.thread.pool.size=200

如有雷同纯属巧合!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值