Dubbo-面试

2020-04-04  本文已影响0人  天凉好个秋灬

工作原理

  1. service 层:provider 和 consumer,留给自己实现的接口
  2. config 层:配置文件
  3. proxy 层:代理层,provider 和 comsumer dubbo 都会给生成代理,通过代理进行网络通信
  4. registry 层:负责服务注册与发现
  5. cluster 层:集群层,多个provider实例的路由、负载均衡等封装成一个服务
  6. monitor 层:监控层
  7. protocol 层: 远程调用层,封装RPC调用,负责具体的 provider 和 consumer 之间的网络通信
  8. exchange 层:信息交换层
  9. transport 层:网络传输层,抽象 mina 和 netty 为统一接口
  10. serialize 层:序列化

工作流程

通信协议

  1. dubbo 协议:

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

    • java 二进制序列化,多个短链接
    • 适用场景:消费者和提供者数量差不多,文件传输,较少用
  2. hessian 协议

    • hessian 序列化协议,多个短链接
    • 适用场景:提供者比消费者数量还多,文件传输,较少用
  3. http 协议

    • json 序列化
  4. webservice

    • SOAP 文本序列化

序列化协议

hessian、JAVA二进制序列化、json、SOAP文本序列化多种序列化协议,默认hessian

负载均衡策略

  1. random loadbalance:默认,随机,按权重随机分配,权重越大,流量越大
  2. roundrobin loadbalance:轮询,默认情况下会均匀的将流量打到各个机器上去,可以调整权重
  3. leastactive loadbalance:自动感知,性能越差、越不活跃的接收的请求越少
  4. consistanthash loadbalance:一致性HASH算法,相同参数的请求一定分发到一个 provider 上去,provider 挂掉时,均匀分配剩余的流量,如果是一个类请求都到一个节点,就走一致性HASH策略

容错策略

  1. failover cluster:默认,失败自动切换重试其他节点
  2. failfast cluster:立即失败
  3. failsafe cluster:出现异常时忽略掉,常用于不重要的接口,比如记录日志
  4. failbackc cluster:失败了后台自动记录请求,然后定时重发,比较适合于写消息队列
  5. forking cluster:并行调用多个 provider,有一个成功就立即返回
  6. broadcacst cluster:逐个调用所有 provider

动态代理策略

默认使用 javassist 动态字节码生成,创建代理类

但是可以通过 spi 扩展机制配置自己的动态搭理策略

SPI 机制

service provider interface,指定接口的实现类,这是 JAVA 提供的一个功能

dubbo 自己实现了一套 spi 机制,微内核,可插拔,大量的组件

Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();

可以实现自己的组件,然后配置对应的KEY

服务管理

  1. 调用链路自动生成
  2. 服务访问压力以及时长统计
  3. 其他的
    • 服务分层(避免循环依赖)
    • 调用链路失败监控和报警
    • 服务鉴权
    • 每个服务可用性监控(接口调用成功率)

服务降级

失败重试和超时重试

上一篇 下一篇

猜你喜欢

热点阅读