面试二十三、dubbo

1、dubbo是一款高性能、轻量级的开源RPC(remote producedure call protocol远程过程调用协议)框架

  提供了服务自动注册、自动发现等高效服务治理方案,可以和spring无缝集成。

2、使用场景

  1)可以像调用本地方法一样调用远程方法,没有任何API入侵

  2)通过部署多节点可实现负载均衡、提高并发能力、提高容错能力

  3)服务等自动注册和发现,不在需要写死服务提供方的地址,

    注册中心基于接口名可以找到服务提供方的地址,并且能够平滑的删除信息服务提供者

3、经典dubbo架构图

 

 

  provider:服务提供方

  consumer:服务调用方

  registry:服务注册中心和服务发现中心

  container:服务运行容器

  monitor:监控中心和访问调用统计

 

4、注册和发现的流程

  1)container负载启动、加载、运行提供服务的provider

  2)provider启动,向registry注册自己提供的服务

  3)consumer启动,向registry订阅自己调用的服务 

  4)registry返回订阅的provider地址列表,如有变更通过长链接推送变更数据给consumer

  5)consumer从得到的地址列表中基于负载均衡算法选择一台provider进行调用,失败则换一台

  6)provider和consumer在内存中记录调用次数和每次调用的时间,每分钟向监控中心上报

5、注册中心宕机后,provider和consumer还能正常通信吗

  可以的,consumer会缓存一份provider地址列表

6、负载均衡策略

  random LoadBalance:随机选取提供者(默认)

  RoundRobin LoadBalance:轮询平均分布。存在请求累积问题(刚好慢接口都分配到同一provider)

  LeastActive LoadBalance:最少活跃调用,解决了累计问题

  ConstantHash LoadBalance:一致性哈希,相同参数发到同一provider

7、集群容错方案

  Failover Cluster:失败自动切换,重试其他服务(默认)

  Failfast Cluster:快速失败,只发起一次失败则报错。适合非幂等写操作,如新增记录

  Failsafe Cluster:失败忽略

  Failback Cluster:失败恢复,后台记录失败消息,定时重复

  Forking Cluster:并行调用多个服务,只要一个成功即返回。

  Broadcast Cluster:广播所有服务,一台报错即报错。

8、核心配置

  service:用于暴露一个服务,定义服务的元信息,一个服务可注册到多个注册中心

  reference:用于创建一个远程服务代理,一个引用可指向多个注册中心

  protocol:协议,由提供方指定,消费方被动接受

  application:用于配制当前应用信息

  registry:用于配制注册中心

9、协议

  dubbo:单一长链接和NIO异步通讯,适合大并发数据量小的服务调用。

      传输协议TCP,异步hession序列化。(推荐)

10、过渡旧版本api可通过version,不同version之间不能调用

11、序列化方式

  hession、fastjson、java、dubbo

12、服务调用是阻塞的吗

  默认是阻塞的,可以异步调用(没有返回值的情况可以使用)

  dubbo是基于NIO的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务

  

  

posted on 2021-08-30 21:06  Iversonstear  阅读(41)  评论(0编辑  收藏  举报

导航