1、Dubbo是什么?
Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案。
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、Dubbo有哪些协议?
dubbo://
rmi://
hessian://
http://
webservice://
thrift://
memcached://
redis://
rest://
3、Dubbo配置有哪些?
dubbo:service 服务提供者暴露服务配置
dubbo:reference 服务消费者引用服务配置
dubbo:protocol 服务提供者协议配置
dubbo:registry 注册中心配置
dubbo:monitor 监控中心配置
dubbo:application 应用信息配置
dubbo:module 模块信息配置
dubbo:provider 服务提供者缺省值配置
dubbo:consumer 服务消费者缺省值配置
dubbo:method 方法级配置
dubbo:argument 方法参数配置
dubbo:parameter 选项参数配置
dubbo:config-center 配置中心
4、Dubbo 的连接方式有哪些?
Dubbo 的客户端和服务端有三种连接方式,分别是:
广播
直连
使用 zookeeper 注册中心
5、说说Dubbo暴露过程?
1、ServiceConfig 类拿到对外提供服务的实际类 ref(如:HelloWorldImpl)
2、通过 ProxyFactory 类的 getInvoker 方法使用 ref 生成一个 AbstractProxyInvoker 实例,到这一步就完成具体服务到 Invoker 的转化
3、接下来就是 Invoker 转换到 Exporter 的过程:
1)ProxyFactory 是动态代理,用来创建 Invoker 对象,实现代理使用 JavassistProxyFactory和 JdkProxyFactory。
2)Invoker 是一个服务对象实例,Dubbo 框架的实体域。它可以是一个本地的实现,一个远程的实现或一个集群的实现,可以向它发起 Invoker 调用。
3)Protocol 是服务域,负责 Invoker 的生命周期管理,是 Invoker 暴露和引用的主要功能入口,对应该类的 export和 refer方法。
4)Exporter 是根据不同协议暴露 Invoker 进行封装的类,它会根据不同的协议头进行识别(比如:registry://和 dubbo://),调用对应 XXXProtocol的 export()方法。
6、Dubbo有哪些均衡负载的方法?
1、随机模式。按权重设置随机概率。在一个截面上碰撞的概率较高,但调用越大分布越均匀
2、轮询模式。按公约后的权重设置轮询比例。但存在响应慢的服务提供者会累积请求
3、最少活跃调用数。响应快的提供者接受越多请求,响应慢的接受越少请求
4、一致hash。根据服务提供者ip设置hash环,携带相同的参数总是发送的同一个服务提供者,若服务挂了,则会基于虚拟节点平摊到其他提供者上
7、Dubbo有哪些集群容错方案?
1、Failover Cluster:失败重试 当服务消费方调用服务提供者失败后自动切换到其他服务提供者服务器进行重试
2、Failfast Cluster:快速失败 当服务消费方调用服务提供者失败后,立即报错,也就是只调用一次。通常这种模式用于非幂等性的写操作。
3、Failsafe Cluster:失败安全 当服务消费者调用服务出现异常时,直接忽略异常。这种模式通常用于写入审计日志等操作。
4、Failback Cluster:失败自动恢复 当服务消费端用服务出现异常后,在后台记录失败的请求,并按照一定的策略后期再进行重试。这种模式通常用于消息通知操作。
5、Forking Cluster:并行调用 当消费方调用一个接口方法后,Dubbo Client会并行调用多个服务提供者的服务,只要一个成功即返回。这种模式通常用于实时性要求较高的读操作,但需要浪费更多服务资源
6、Broadcast Cluster:广播调用 当消费者调用一个接口方法后,Dubbo Client会逐个调用所有服务提供者,任意一台调用异常则这次调用就标志失败。这种模式通常用于通知所有提供者更新缓存或日志等本地资源信息