1 Dubbo是什么
一个RPC框架,提供了服务管制功能,一般用来实现分布式程序的架构。
2 Dubbo框架
架构说明
- 虚线:虚线表示异步,实线表示同步。异步不阻塞线程性能高,同步阻塞线程必须等待响应结果才能继续执行,相对性能低。
- Provider:提供者。编写持久层、业务层和事务代码。
- Container:容器(Spring容器),Dubbo完全基于Spring实现的。
- Registry:注册中心。放置所有Provider对外提供的信息。包含Provider的IP,访问端口,访问遵守的协议,对外提供的接口,接口中有哪些方法等相关信息。
- Consumer:消费者(RPC调用者,SOA调用服务的项目)开发中也是一个项目,编写service和controller(还可以包括页面等)。调用远程服务实现(XXXXServiceImpl)中的方法。
- Monitor:监控中心。监控Provider的压力情况等。每隔2分钟Consumer和 Provider会把调用次数发送给Monitor,由Monitor进行统计。
执行流程
- 0.start:启动Spring容器时会把Provider启动。
- 1.register:把Provider相关信息注册到Registry里
- 2.subscribe:Consumer从Registry中订阅Provider的信息
- 3.notify:通知给Consumer
3 Dubbo支持的协议
Dubbo协议
- 优点:采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用)。
- 缺点:大文件上传时,可能出现问题(不使用Dubbo实现文件传输)。
RMI(Remote Method Invocation)协议
- 优点:JDK自带的能力。
- 缺点:偶尔连接失败。
Hessian协议
- 优点:可与原生的Hessian相互操作,基于HTTP协议。
- 缺点:需hessian.jar支持,http短连接开销大。
4 Dubbo和Spring Cloud有什么区别
两者没关联,如果硬要说区别,有以下几点。
通信方式不同
Dubbo使用的是RPC通信,而Spring Cloud使用的是HTTP RESTFul方式。
组成部分不同
5 Dubbo需要web容器嘛
不需要,如果硬要用web容器,只会增加复杂性,也浪费资源。
6 Dubbo内置了哪几种服务器
Spring Container、Jetty Container、Log4j Container。Dubbo的服务容器只是一个简单的main方法,并加载一个简单的Spring容器,用于暴露服务。
7 Dubbo的注册中心
- Nacos(阿里巴巴开发的注册中心)
- Zookeeper:支持分布式,很多周边产品。受限于Zookeeper的稳定性,Zookeeper专门分布式辅助软件,稳定性优化。
- Multicast:去中心化,不需要单独安装软件。但是Provider、Consumer和Redistry不能跨机房(路由)。
- Redis:支持集群,性能高。但是要求服务器时间同步,否则可能出现集群失败问题。
8 Dubbo的核心配置有哪些
9 Dubbo推荐使用什么序列化框架
推荐使用Hessian序列化,还有Duddo、FastJson、Java自带序列化。
10 Dubbo使用什么通信框架,还有别的选择么
Dubbo 默认使用 Netty 框架,也是推荐的选择,另外内容还集成有Mina、Grizzly。
11 Dubbo负载均衡策略
- 集群:一个内容(同一套项目),部署多次,形成的整体称为集群。集群中每个个体应该部署到不同的服务器上
- 负载均衡是在集群前提下,当访问整个集群时,集群中每个节点被访问次数或频率的规则。
- Dubbo内置了是个负载均衡策略。默认识Random。
12 注册多个同一样的服务,如何测试指定的某一个服务
可以配置环境点对点直连,绕过注册中心,将以服务接口为单位,忽略注册中心的提供者列表。
13 Dubbo支持服务多协议么
Dubbo 允许配置多协议,在不同服务上支持不同协议或者同一服务上同时支持多种协议。
14 当一个服务接口有多种实现时怎么做
当一个接口有多种实现时,可以用 group 属性来分组,服务提供方和消费方都指定同一个 group 即可。
15 服务上线怎么兼容旧版本
可以用版本号(version)过渡,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念有一点类似。
16 Dubbo如何优雅的关机
Dubbo 是通过 JDK 的 ShutdownHook 来完成优雅停机的,所以如果使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才会执行。
17 Dubbo的管理控制台能做什么
管理控制台主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。
18 说说Dubbo服务暴露的过程
Dubbo会在 Spring 实例化完 bean 之后,在刷新容器最后一步发布 ContextRefreshEvent 事件的时候,通知实现了ApplicationListener 的 ServiceBean 类进行回调 onApplicationEvent 事件方法,Dubbo会在这个方法中调用 ServiceBean 父类 ServiceConfig 的 export方法,而该方法真正实现了服务的(异步或者非异步)发布。
19 Dubbo和Dubbox有什么区别
Dubbox 是继 Dubbo 停止维护后,当当网基于 Dubbo 做的一个扩展项目,如加了服务可 Restful 调用,更新了开源组件等。
20 你觉得Dubbo好还是SpringCloud好
扩展性的问题,没有好坏,只有适合不适合。 Spring Cloud 版本升级太快,组件更新替换太频繁,配置太繁琐。