1、为什么要用 Dubbo?
随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架
2、Dubbo 的整体架构设计有哪些分层?
接口服务层(Service):
该层与业务逻辑相关,根据 provider 和 consumer 的业务设计对应的接口和实现
配置层(Config):
对外配置接口,以 ServiceConfig 和 ReferenceConfig 为中心
服务代理层(Proxy):
服务接口透明代理,生成服务的客户端 Stub 和 服务端的 Skeleton,以 ServiceProxy 为中心,扩展接口为 ProxyFactory
服务注册层(Registry):
封装服务地址的注册和发现,以服务 URL 为中心,扩展接口为RegistryFactory、Registry、RegistryService
路由层(Cluster):
封装多个提供者的路由和负载均衡,并桥接注册中心,以Invoker 为中心,扩展接口为 Cluster、Directory、Router 和 LoadBlancce监控层(Monitor):RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory、Monitor 和 MonitorService
远程调用层(Protocal):
封装 RPC 调用,以 Invocation 和 Result 为中心,扩展接口为 Protocal、Invoker 和 Exporter
信息交换层(Exchange):
封装请求响应模式,同步转异步。以 Request 和Response 为中心,扩展接口为 Exchanger、ExchangeChannel、ExchangeClient 和 ExchangeServer
网络传输层(Transport):
抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel、Transporter、Client、Server 和 Codec
数据序列化层(Serialize):
可复用的一些工具,扩展接口为 Serialization、ObjectInput、ObjectOutput 和 ThreadPool
3、默认使用的是什么通信框架,还有别的选择吗?
默认也推荐使用 netty 框架,还有 mina
4、服务调用是阻塞的吗?
默认是阻塞的,可以异步调用,没有返回值的可以这么做;
Dubbo 是基于 NIO 的非阻塞实现并行调用,
客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,
异步调用会返回一个 Future 对象
5、一般使用什么注册中心?还有别的选择吗?
推荐使用 Zookeeper 作为注册中心,还有 Redis、Multicast、Simple 注册中心,但不推荐
6、默认使用什么序列化框架,你知道的还有哪些?
推荐使用 Hessian 序列化,还有 Duddo、FastJson、Java 自带序列化。
7、服务提供者能实现失效踢出是什么原理?
服务失效踢出基于 zookeeper 的临时节点原理。
8、服务上线怎么不影响旧版本?
采用多版本开发,不影响旧版本。
9、如何解决服务调用链过长的问题?
可以结合 zipkin 实现分布式服务追踪。
10、说说核心的配置有哪些?
dubbo:service 服务配置
dubbo:reference 引用配置
dubbo:protocol 协议配置
dubbo:application 应用配置第
dubbo:module 模块配置
dubbo:registry 注册中心配置
dubbo:monitor 监控中心配置
dubbo:provider 提供方配置
dubbo:consumer 消费方配置
dubbo:method 方法配置
dubbo:argument 参数配置
|
|