Dubbo-面试
2020-04-04 本文已影响0人
天凉好个秋灬
工作原理
- service 层:provider 和 consumer,留给自己实现的接口
- config 层:配置文件
- proxy 层:代理层,provider 和 comsumer dubbo 都会给生成代理,通过代理进行网络通信
- registry 层:负责服务注册与发现
- cluster 层:集群层,多个provider实例的路由、负载均衡等封装成一个服务
- monitor 层:监控层
- protocol 层: 远程调用层,封装RPC调用,负责具体的 provider 和 consumer 之间的网络通信
- exchange 层:信息交换层
- transport 层:网络传输层,抽象 mina 和 netty 为统一接口
- serialize 层:序列化
工作流程

通信协议
-
dubbo 协议:
- 单一长连接,NIO异步通信,基于 Hessian 序列化
- 适用场景:传输数据量小(每次请求100KB以内),但是并发量很高

-
rmi 协议
- java 二进制序列化,多个短链接
- 适用场景:消费者和提供者数量差不多,文件传输,较少用
-
hessian 协议
- hessian 序列化协议,多个短链接
- 适用场景:提供者比消费者数量还多,文件传输,较少用
-
http 协议
- json 序列化
-
webservice
- SOAP 文本序列化
序列化协议
hessian、JAVA二进制序列化、json、SOAP文本序列化多种序列化协议,默认hessian
负载均衡策略
- random loadbalance:默认,随机,按权重随机分配,权重越大,流量越大
- roundrobin loadbalance:轮询,默认情况下会均匀的将流量打到各个机器上去,可以调整权重
- leastactive loadbalance:自动感知,性能越差、越不活跃的接收的请求越少
- consistanthash loadbalance:一致性HASH算法,相同参数的请求一定分发到一个 provider 上去,provider 挂掉时,均匀分配剩余的流量,如果是一个类请求都到一个节点,就走一致性HASH策略
容错策略
- failover cluster:默认,失败自动切换重试其他节点
- failfast cluster:立即失败
- failsafe cluster:出现异常时忽略掉,常用于不重要的接口,比如记录日志
- failbackc cluster:失败了后台自动记录请求,然后定时重发,比较适合于写消息队列
- forking cluster:并行调用多个 provider,有一个成功就立即返回
- broadcacst cluster:逐个调用所有 provider
动态代理策略
默认使用 javassist 动态字节码生成,创建代理类
但是可以通过 spi 扩展机制配置自己的动态搭理策略
SPI 机制
service provider interface,指定接口的实现类,这是 JAVA 提供的一个功能
dubbo 自己实现了一套 spi 机制,微内核,可插拔,大量的组件
Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();
可以实现自己的组件,然后配置对应的KEY
服务管理
- 调用链路自动生成
- 服务访问压力以及时长统计
- 其他的
- 服务分层(避免循环依赖)
- 调用链路失败监控和报警
- 服务鉴权
- 每个服务可用性监控(接口调用成功率)