Java面经-Dubbo

1、什么是Dubbo

  • Dubbo是一款高性能、轻量级的Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。简单来说Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案;
    核心部分包含:
  • 远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式;
  • 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持;
  • 自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器;
    Dubbo能做什么:
  • 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入;
  • 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点;
  • 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者;

2、什么是RPC,RPC原理是什么

  • RPC-远程过程调用,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
    Java面经-Dubbo_第1张图片

3、为什么要用Dubbo
为什么要使用Dubbo

  • 负载均衡–同一个服务部署在不同的机器时该调用哪一台机器上的服务;
  • 服务调用链路生成–解决服务之间互相是如何调用的;
  • 服务访问压力以及时长统计、资源调度和治理–基于访问压力实时管理集群容量,提高集群利用率;
  • 服务降级–某个服务挂掉之后调用备用服务

4、什么是分布式

  • 分布式就是把整个系统拆分成不同的服务,然后将这些服务放在不同的服务器上,减轻单体服务的压力,提高并发量和性能;

5、为什么要用分布式

  • 每个团队负责一个服务的开发,提升了开发效率,便于维护和扩展,提高整体系统的性能;

6、Dubbo架构图解
Java面经-Dubbo_第2张图片1. 服务容器负责启动,加载,运行服务提供者。
2. 服务提供者在启动时,向注册中心注册自己提供的服务。
3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一
台调用。
6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

7、zookeeper宕机与Dubbo直连的情况

  • 在实际生产中,假如zookeeper注册中心宕掉后,一段时间内服务消费方还是能够调用提供方的服务的,实际上它使用的本地缓存进行通讯;
    Dubbo健壮性表现:
  1. 监控中心宕掉不影响使用,只是丢失部分采样数据
  2. 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
  3. 注册中心对等集群,任意一台宕掉后,将自动切换到另一台
  4. 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
  5. 服务提供者无状态,任意一台宕掉后,不影响使用
  6. 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

8、什么是负载均衡

  • 比如我们的系统中的某个服务的访问量特别大,我们将这个服务部署在了多台服务器上,当客户端发起请求的时候,多台服务器都可以处理这个请求。那么,如何正确选择处理该请求的服务器就很关键。假如,你就要一台服务器来处理该服务的请求,那该服务部署在多台服务器的意义就不复存在了。负载均衡就是为了避免单个服务器响应同一请求,容易造成服务器宕机、崩溃等问题,我们从负载均衡的这四个字就能明显感受到它的意义

9、什么是ZooKeeper

你可能感兴趣的:(Java面经-Dubbo)